Kamel:J*/Labor/wikifindbroken.js
aus Kamelopedia, der wüsten Enzyklopädie
Hinweis: Leere nach dem Speichern den Browser-Cache, um die Änderungen sehen zu können.
- Firefox/Safari: Umschalttaste drücken und gleichzeitig Aktualisieren anklicken oder entweder Strg+F5 oder Strg+R (⌘+R auf dem Mac) drücken
- Google Chrome: Umschalttaste+Strg+R (⌘+Umschalttaste+R auf dem Mac) drücken
- Internet Explorer: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
- Opera: Extras → Internetspuren löschen ... → Individuelle Auswahl → Den kompletten Cache löschen
/* * kleines Helferscript gegen "zerschossene" Seiten: * Das Script findet nicht geschlossene oder in der falschen Reihenfolge geschlossene * <tags> oder {{}} {| |} inclusive nowiki und kommentare. * * TODO: Läuft bisher gut im Firebug, mal bei Gelegenheit mit UI versehen... * * tagparse liefert eine Liste zurück: * [ [t1, n1, l1], [t2, n2, l2], ... ] * dabei steht: * t für den Tagnamen ('div', '!--', '{|' ...) * n für die Anzahl der ungeschlossen (negativ: ungeöffneten) Tags * l für eine Liste der Zeilen, in denen die Tags geöffnet (geschlossen) wurden. * * Fehler zwischen nowiki- oder Kommentar-Tags (nowiki,!--) können in der Regel ignoriert werden, * wenn die Summe der n der umschließenden nowiki- bzw. Kommentar-Tags in der Summe 0 ergeben. * * Beispiele: * * tagparse("<div>{{bla}}</div>") * -> [] * # keine Fehler * * tagparse("<span><div></span>") * -> [["span", 1, [1]], ["div", 1, [1]], ["span", -1, [1]]] * # Fehler: ungeschlossener div * * tagparse($("wpTextbox1").value) * -> analysiert die aktuelle Textbox * */ function Taglist() { this.open = function (t,l) { console.log("opening "+t+" ["+l+"]") if (this.length > 0 && this[this.length-1][0] == t) { this[this.length-1][1] ++; if (this[this.length-1][1] > 0) this[this.length-1][2].push(line) else this[this.length-1][2].pop() } else this.push([t,1,[l]]); this.clean(); } this.close = function (t,l) { console.log("closing /"+t+" ["+l+"]") if (this.length > 0 && this[this.length-1][0] == t) { this[this.length-1][1] --; if (this[this.length-1][1] < 0) this[this.length-1][2].push(line) else this[this.length-1][2].pop() } else this.push([t,-1,[l]]); this.clean(); } this.clean = function () { while (this.length > 0 && this[this.length-1][1] == 0) this.pop(); } } Taglist.prototype = new Array(); function tagparse(s) { matchall = /(\{\{|\}\}|\{\||\|\}|<\/?[A-Za-z0-9]+\s*[^>]*>|<!--|-->|\n)/g; m = s.match(matchall); taglist = new Taglist() line = 1 for (var i=0; i<m.length; i++) { x = m[i].replace(/((\s+?[^>]*)?(\/\s*)?>$|^<)/g,""); if (x == "br") continue; else if (x == "\n") line ++; else if (x == "--") taglist.close("!--",line); else if (x == "}}") taglist.close("{{"),line; else if (x == "|}") taglist.close("{|",line); else if (x[0] == "/") taglist.close(x.slice(1),line); else taglist.open(x,line); } return taglist; }