User:Gerhard51/monobook.js

/* * moveEditsection * Dieses Script verschiebt die Editsection-Buttons von oberhalb der * Überschriften in die Überschriften. * Dies vermeidet zum einen die Fehldarstellungen, die bisher durch die * float-Werte hervorgerufen wurden, und ergibt zum anderen eine logischere * Dokumentenstruktur (Editsection gehört nicht zum vorherigen Abschnitt) * Positiv getestet unter: Firefox 1.0, Opera 8.0, Internet Explorer 6.0 * Anmerkungen, Verbesserungen, Hinweise, Nörgeleien jederzeit gerne gesehen! * dbenzhuser (de:Benutzer:Dbenzhuser) */

function moveEditsection { // Sammelt alle div-Elemente der Klasse "editsection". var editsections = new Array; var divs = document.getElementById("bodyContent").getElementsByTagName("div"); for(var i = 0; i < divs.length; i++) { if(divs[i].className == "editsection") { editsections.push(divs[i]); } } // Wenn die Seite Editsection-Buttons enthält. if (editsections.length != 0) { // Sucht zu jedem Editsection-Button die dazugehörige Überschrfift. var i = 0; var element, heading; while (editsections[i] != null) { element = editsections[i]; heading = element.nextSibling; while(!/^H[2-6]$/.test(heading.nodeName)) { heading = heading.nextSibling; } // Erstellt innerhalb der Überschrift ein per CSS formatiertes span-Element. // Dort hinein wird dann der Editsection-Link verschoben. // Anschließend werden die Reste des alten Editsection-Buttons entfernt. var spanElement = document.createElement("span"); var spaceNode = document.createTextNode(" "); heading.appendChild(spaceNode); heading.appendChild(spanElement);

spanElement.style.fontSize = "x-small"; spanElement.style.fontWeight = "normal";

while (element.childNodes.length != 0) { spanElement.appendChild(element.childNodes[0]); } element.parentNode.removeChild(element); i++; } } } // onload aOnloadFunctions[aOnloadFunctions.length] = moveEditsection;

/* * Ende moveEditsection */ table.persondata {display:table;} /* * showRedundantLinks * In der Navigationsleiste am Rand wird eine sortierte Liste aller im Artikel * vorkommenden Links erstellt. Mehrfach vorkommende Links werden im Artikel * gekennzeichnet. * Beim Überfahren von Links mit der Maus werden alle Vorkommen des * entsprechenden Links mit der Klasse "highlight" ausgestattet. Dies kann mit * CSS sichtbar gemacht werden (siehe de:Benutzer:Dbenzhuser/monobook.css für * ein Beispiel). * Ziel ist es auch bei längeren Artikeln leicht mehrfach vorkommende Links * ausfindig zu machen. * Scheint bislang nur mit Gecko-Browsern zu funktionieren. * Anmerkungen, Verbesserungen, Hinweise, Nörgeleien jederzeit gerne gesehen! * dbenzhuser (de:Benutzer:Dbenzhuser) */

// Zutun: Links an der Seite mit Sonderfunktionen belegen. // Z.B. dauerhaft markieren, Sprung zu Link.

// Mergesort für Arrays // Wegen kleiner Modifikationen (siehe Kommentare) nur zur Verwendung bei der // Erstellung der Linkleiste. var b; Array.prototype.mergesort = function(lo, hi) { if (lo<hi) { var mid = ((hi+lo)-(hi+lo)%2) / 2; this.mergesort(lo, mid); this.mergesort(mid+1, hi); var i=0; var j=lo; while (j<=mid) { b[i++]=this[j++]; } var i=0; var k=lo; while (k<j && j<=hi) { // Sortiert wird nach Title-Attribut der Links. // '[0].getAttribute("title")' entfernen für normalen Mergesort. if (b[i][0].getAttribute("title")<=this[j][0].getAttribute("title")) { this[k++]=b[i++]; } else { this[k++]=this[j++]; } } while (k<j) { this[k++]=b[i++]; } } }

// Fügt einem Attribut einen weiteren durch Leerzeichen abgetrennten Wert hinzu. Node.prototype.addAttributeValue = function(key, value) { if (!this.getAttribute(key)) { this.setAttribute(key, value); } else { this.setAttribute(key, this.getAttribute(key)+ " " +value); } }

// Löscht einen Wert aus einem Attribut. Node.prototype.removeAttributeValue = function(key, value) { var newvalue = this.getAttribute(key); var reg = new RegExp("(^|\\s)"+value+"(\\s|$)"); newvalue = newvalue.replace(reg, " "); newvalue = newvalue.replace(/^\s+/g, ""); newvalue = newvalue.replace(/\s+$/g, ""); this.setAttribute(key, newvalue); }

// Markierungen werden bei allen Links der übergebenen Klasse ein bzw ausgeblendet. function highlight(cname, on) { var objects = document.getElementsByTagName("a"); cname = cname.replace("(", "\\("); cname = cname.replace(")", "\\)"); var reg = new RegExp("(^|\\s)"+cname+"(\\s|$)"); var length = objects.length for(var i = 0; i < length; i++) { if(objects[i].className.search(reg) != -1) { if(on) { objects[i].addAttributeValue("class", "highlight"); } else { objects[i].removeAttributeValue("class", "highlight"); } } } }

// Nach dem Vorbild der bereits vorhandenen Listen wird eine neue Box in der // Navigationsleiste installiert, die einen Link zum Aktivieren des // Linksammlers enthält. function createLinksSidebar { // Elemente der Box erstellen. var divPortlet = document.createElement("div"); var h5 = document.createElement("h5"); var h5Text = document.createTextNode("Links im Artikel"); var divPbody = document.createElement("div"); var ul = document.createElement("ul"); // Mit Attributen ausrüsten. divPortlet.setAttribute("id", "p-link"); divPortlet.setAttribute("class", "portlet"); divPbody.setAttribute("class", "pBody"); ul.setAttribute("id", "u-link") // Spalte suchen. var column = document.getElementById("column-one"); // Box einbauen. column.appendChild(divPortlet); divPortlet.appendChild(h5); h5.appendChild(h5Text); divPortlet.appendChild(divPbody); divPbody.appendChild(ul); // Aktivierunglink erstellen. var li = document.createElement("li"); li.style.whiteSpace = "nowrap"; ul.appendChild(li); var a = document.createElement("a"); a.setAttribute("href", "javascript:showRedundantLinks"); a.setAttribute("title", "Aktivieren!"); li.appendChild(a); var aText = document.createTextNode("Aktivieren"); a.appendChild(aText); }

// Alle Wikilinks innerhalb des Artikels werden gesammelt. // Anschließend werden sie in der Liste angezeigt und mehrfache Links im // Artikeltext markiert. function showRedundantLinks { // "Aktivieren"-Link (inkl Listenelement) entfernen. var ul = document.getElementById("u-link"); ul.removeChild(ul.firstChild); // Alle Links im Artikeltext sammeln. var links = document.getElementById("bodyContent").getElementsByTagName("a"); // Regexps zur Bestimmung der relevanten Links. var regexpExist = /^\/wiki\/(.+)$/; var regexpNotExist = /^\/w\/index\.php\?title=(.+)\&action=edit$/; var regexpExclude = /^\/w(iki)?\/(index\.php\?title=)?(Bild|Benutzer|Benutzer_Diskussion)\:(.+)$/; // Nur relevante Links in neues Array speichern. // Dabei werden jeweils eine Referenz auf den Link im Artikel und ein Klon // für die Linkleiste gespeichert. var linkCount1 = links.length; var linkNodes = new Array; for (var i=0; i < linkCount1; ++i) { if (links[i].getAttribute("title") && !regexpExclude.test(links[i].getAttribute("href")) && (regexpExist.test(links[i].getAttribute("href")) || regexpNotExist.test(links[i].getAttribute("href")))) { linkNodes.push(new Array(links[i].cloneNode(true), links[i])); } } // Bei Links für Linkleiste den Linktext mit Title-Attribut überschreiben. var linkCount2 = linkNodes.length; for (var i=0; i < linkCount2; ++i) { var linkTitle = linkNodes[i][0].getAttribute("title"); var linkText = document.createTextNode(linkTitle); linkNodes[i][0].replaceChild(linkText, linkNodes[i][0].firstChild); // Attribute und Funktionsaufrufe für Highlighting. // Leerzeichen werden durch Unterstriche ersetzt. var linkTitleClass = linkTitle; linkTitleClass = linkTitleClass.replace(/\s/g, "_"); linkNodes[i][0].addAttributeValue("class", linkTitleClass); linkNodes[i][0].setAttribute("onmouseover", "highlight(\""+linkTitleClass+"\", true)"); linkNodes[i][0].setAttribute("onmouseout", "highlight(\""+linkTitleClass+"\", false)"); linkNodes[i][1].addAttributeValue("class", linkTitleClass); linkNodes[i][1].setAttribute("onmouseover", "highlight(\""+linkTitleClass+"\", true)"); linkNodes[i][1].setAttribute("onmouseout", "highlight(\""+linkTitleClass+"\", false)"); } // Hilfsarray vorbereiten und Sortierungsfunktion aufrufen. b = new Array(((linkNodes.length)-(linkNodes.length%2))/2); linkNodes.mergesort(0, linkNodes.length-1); // Links im Artikeltext mit Zähler ausstatten. for (var i=1; i < linkCount2; ++i) { var equal = true; var j = 1; while (equal == true) { if(i >= j && (linkNodes[i][0].firstChild.nodeValue == linkNodes[i-j][0].firstChild.nodeValue)) { j++; } else { equal = false; // Nur bei mehrfachvorkommenden Links Zähler einfügen. if (j != 1) { var span = document.createElement("span"); linkNodes[i][1].appendChild(span); var spanText = document.createTextNode(" (" + j + ")"); span.appendChild(spanText); span.setAttribute("class", "redundantLinkMark"); // Klasse für (n). } } } } // Links in Linkleiste schreiben (jeweils mit Listenelement). for (var i=0; i < linkCount2; ++i) { var li = document.createElement("li"); ul.appendChild(li); li.style.whiteSpace = "nowrap"; li.appendChild(linkNodes[i][0]); } } // onload aOnloadFunctions[aOnloadFunctions.length] = createLinksSidebar;

/* * Ende showRedundantLinks */

/* * addContributeLinks * Ergänzt ein paar Links im Mitmachen-Linkbereich. */

function addContributeLinks { var contribiuteUl = document.getElementById("p-Mitmachen").getElementsByTagName("ul"); var linksPrefix = "http://de.wikipedia.org/wiki/"; var links = new Array;

// Kategorie: Schnelllöschen links[0] = new Array(2); links[0][0] = "Kategorie:Wikipedia:Schnelllöschen"; links[0][1] = "Kat: Schnelllöschen"; // Kategorie: NowCommons links[1] = new Array(2); links[1][0] = "Kategorie:NowCommons"; links[1][1] = "Kat: NowCommons";

linksLength = links.length; for (var i=0; i < linksLength; ++i) { var li = document.createElement("li"); li.style.whiteSpace = "nowrap"; contribiuteUl[0].appendChild(li); var a = document.createElement("a"); a.setAttribute("href", linksPrefix+links[i][0]); a.setAttribute("title", links[i][1]); li.appendChild(a); var aText = document.createTextNode(links[i][1]); a.appendChild(aText); } } // onload aOnloadFunctions[aOnloadFunctions.length] = addContributeLinks;

/* * Ende addContributeLinks */

/* * autoFill * Vorbelegung bei Formularfeldern per GET-Parameter. */

function autoFill { if (window.location.search != "") { var pairs; var get = window.location.search.substr(1).split("&"); for (var i=0; i<get.length; ++i) { pairs = get[i].split("="); if (pairs[0] != "title" && pairs[0] != "action" && document.getElementById(pairs[0])) { document.getElementById(pairs[0]).value = decodeURIComponent(pairs[1]); } } } } // onload aOnloadFunctions[aOnloadFunctions.length] = autoFill;

/* * Ende autoFill */ /* * createAutoFillLinks * Erstellt zusätzliche GET-Parameter, die mit autoFill auf Folgeseiten in * Formulare eingetragen werden. */

function createAutoFillLinks { // NowCommons if (document.getElementById("Vorlage_NowCommons")) { var links = document.getElementById("Vorlage_NowCommons").getElementsByTagName("a"); var url; var img; for (var i=0; i<links.length; ++i) { url = links[i].getAttribute("href").split(":"); if (url[1] == "//commons.wikimedia.org/wiki/Image") { img = url[2]; } } img = decodeURIComponent(img).replace(/_/g, " "); var deleteLink = document.getElementById("ca-delete").getElementsByTagName("a")[0]; var newHref = deleteLink.getAttribute("href") + "&wpReason=" + encodeURIComponent("NowCommons: "); deleteLink.setAttribute("href", newHref); } } // onload aOnloadFunctions[aOnloadFunctions.length] = createAutoFillLinks;

/* * Ende createAutoFillLinks */

/* * include * Einbinden von externen Scripts */

function include(script) { var head = document.getElementsByTagName('head').item(0); var js = document.createElement('script'); js.setAttribute('type', 'text/javascript'); js.setAttribute('src', script); head.appendChild(js); return false; }

table.persondata {display:table;}

// Rechtschreibprüfung von Apper. // Siehe de:Benutzer:APPER/RP include("http://de.wikipedia.org/w/index.php?title=Benutzer:APPER/RP/js&action=raw&ctype=text/javascript")

/* * Ende include */ B/* * addSpecialChars * Fügt neue Einträge in die Sonderzeichenliste ein. * Eigene Einträge können über den folgenden Befehl erstellt werden: * createSpecialChar("Name", "Anfang", "Ende"); */

function createSpecialChar(text, open, close) { var specialCharEntry = document.createElement("a"); specialCharEntry.setAttribute("href", "#"); specialCharEntry.setAttribute("onclick", "insertTags('" + open + "', '" + close + "', '');return false"); var specialCharText = document.createTextNode(text); specialCharEntry.appendChild(specialCharText); specialChars.push(specialCharEntry); }

function addSpecialChars { if (document.getElementById("Standard")) { var specialCharDiv = document.getElementById("Standard"); specialCharDiv.appendChild(document.createTextNode(" |")); for (var i=0; i < specialChars.length; i++) { specialCharDiv.appendChild(document.createTextNode(" ")); specialCharDiv.appendChild(specialChars[i]); }       } }

var specialChars = new Array;

// Neue Einträge: createSpecialChar("PND", "\{\{PND|", "}}"); createSpecialChar("DEFAULTSORT", "\{\{DEFAULTSORT:", "\}\}"); createSpecialChar("Personendaten", "\{\{Personendaten|\\n NAME=", "\\n|ALTERNATIVNAMEN=\\n|KURZBESCHREIBUNG=\\n|GEBURTSDATUM=\\n|GEBURTSORT=\\n|STERBEDATUM=\\n|STERBEORT=\\n\}\}");

// onload $(addSpecialChars);

/* * Ende addSpecialChars */