Benutzer:J*/Labor/wikifindbroken.js
< Benutzer:J* | Labor
Zur Navigation springen
Zur Suche springen
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: Gehe zu Menü → Einstellungen (Opera → Einstellungen auf dem Mac) und dann auf Datenschutz & Sicherheit → Browserdaten löschen → Gespeicherte Bilder und Dateien.
/*
* 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;
}