User:Gerhard51/monobook.js
Appearance
Code that you insert on this page could contain malicious content capable of compromising your account. If you import a script from another page with "importScript", "mw.loader.load", "iusc", or "lusc", take note that this causes you to dynamically load a remote script, which could be changed by others. Editors are responsible for all edits and actions they perform, including by scripts. User scripts are not centrally supported and may malfunction or become inoperable due to software changes. A guide to help you find broken scripts is available. If you are unsure whether code you are adding to this page is safe, you can ask at the appropriate village pump. This code will be executed when previewing this page. |
![]() | The accompanying .css page for this skin is at User:Gerhard51/monobook.css. |
/*
* 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: [[Commons:Image:" + img + "|" + img + "]]");
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
*/