„Benutzer:Dbenzhuser/monobook.js“ – Versionsunterschied
Erscheinungsbild
Inhalt gelöscht Inhalt hinzugefügt
KKeine Bearbeitungszusammenfassung |
K Maintenance: Replacing addOnloadHook with native jQuery (mw:ResourceLoader/Migration_guide_(users)#addOnloadHook - phab:T130879) |
||
(91 dazwischenliegende Versionen von einem anderen Benutzer werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
// Mehrfachlinks |
|||
/* |
|||
importScript('Benutzer:Dbenzhuser/showRedundantLinks.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 |
|||
*/ |
|||
/* |
|||
* 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 |
|||
*/ |
|||
/* |
/* |
||
Zeile 268: | Zeile 9: | ||
function addContributeLinks() { |
function addContributeLinks() { |
||
var contribiuteUl = document.getElementById("p-Mitmachen").getElementsByTagName("ul"); |
var contribiuteUl = document.getElementById("p-Mitmachen").getElementsByTagName("ul"); |
||
var linksPrefix = "http://de.wikipedia.org/wiki/"; |
var linksPrefix = "http://de.wikipedia.org/wiki/"; |
||
var links = new Array(); |
var links = new Array(); |
||
// Kategorie: Schnelllöschen |
|||
links[0] = new Array(2); |
links[0] = new Array(2); |
||
links[0][0] = "Kategorie:Wikipedia:Schnelllöschen"; |
links[0][0] = "Kategorie:Wikipedia:Schnelllöschen"; |
||
links[0][1] = "Kat: Schnelllöschen"; |
links[0][1] = "Kat: Schnelllöschen"; |
||
// Kategorie: NowCommons |
|||
links[1] = new Array(2); |
links[1] = new Array(2); |
||
links[1][0] = "Kategorie:NowCommons"; |
links[1][0] = "Kategorie:Datei:NowCommons"; |
||
links[1][1] = "Kat:NowCommons"; |
links[1][1] = "Kat: NowCommons"; |
||
linksLength = links.length; |
|||
linksLength = links.length; |
|||
for (var i=0; i < linksLength; ++i) { |
for (var i=0; i < linksLength; ++i) { |
||
var li = document.createElement("li"); |
var li = document.createElement("li"); |
||
Zeile 292: | Zeile 35: | ||
} |
} |
||
// onload |
// onload |
||
$(addContributeLinks); |
|||
/* |
/* |
||
* Ende |
* Ende addContributeLinks |
||
*/ |
*/ |
||
/* |
/* |
||
* NowCommonsAutoFill |
|||
* include |
|||
* Erstellt einen GET-Parameter, der ins Löschformular eingetragen wird. |
|||
* Einbinden von externen Scripts |
|||
* Links mit vorangestelltem "Image:" werden korrigiert. |
|||
*/ |
*/ |
||
function |
function NowCommonsAutoFill() { |
||
// Benötigt eingebaute NowCommons-Vorlage und Löschknopf |
|||
var head = document.getElementsByTagName('head').item(0); |
|||
if (document.getElementById("Vorlage_NowCommons") && document.getElementById("ca-delete")) { |
|||
var js = document.createElement('script'); |
|||
// Sammeln aller Links innerhalb der Vorlage |
|||
js.setAttribute('type', 'text/javascript'); |
|||
var links = document.getElementById("Vorlage_NowCommons").getElementsByTagName("a"); |
|||
js.setAttribute('src', script); |
|||
var url; |
|||
head.appendChild(js); |
|||
var img; |
|||
for (var i=0; i<links.length; ++i) { |
|||
// Korrigiert den Link für den Fall, dass dem Bildnamen ein "Image:" vorangestellt wurde |
|||
if (links[i].getAttribute("href").search(/Image:Image:/) != -1) { |
|||
links[i].setAttribute("href", links[i].getAttribute("href").replace(/Image:Image:/, "Image:")); |
|||
var span = document.createElement("span"); |
|||
var spanText = document.createTextNode(" (korr.)"); |
|||
links[i].appendChild(span); |
|||
span.appendChild(spanText); |
|||
span.style.color = "red"; |
|||
} |
|||
url = links[i].getAttribute("href").split(":"); |
|||
if (url[0] == "//commons.wikimedia.org/wiki/File") { |
|||
img = url[1]; |
|||
} |
|||
} |
|||
img = decodeURIComponent(img).replace(/_/g, " "); |
|||
var deleteLink = document.getElementById("ca-delete").getElementsByTagName("a")[0]; |
|||
var newHref = deleteLink.getAttribute("href") + "&wpReason=" + encodeURIComponent("Übertragen nach [[Wikimedia Commons]] unter folgendem Namen: [[Commons:File:" + img + "|" + img + "]]"); |
|||
deleteLink.setAttribute("href", newHref); |
|||
} |
|||
} |
} |
||
// onload |
|||
$(NowCommonsAutoFill); |
|||
/* Ende createAutoFillLinks */ |
|||
// 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 |
|||
*/ |
Aktuelle Version vom 7. Februar 2021, 00:13 Uhr
// Mehrfachlinks
importScript('Benutzer:Dbenzhuser/showRedundantLinks.js');
/*
* 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:Datei: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
$(addContributeLinks);
/*
* Ende addContributeLinks
*/
/*
* NowCommonsAutoFill
* Erstellt einen GET-Parameter, der ins Löschformular eingetragen wird.
* Links mit vorangestelltem "Image:" werden korrigiert.
*/
function NowCommonsAutoFill() {
// Benötigt eingebaute NowCommons-Vorlage und Löschknopf
if (document.getElementById("Vorlage_NowCommons") && document.getElementById("ca-delete")) {
// Sammeln aller Links innerhalb der Vorlage
var links = document.getElementById("Vorlage_NowCommons").getElementsByTagName("a");
var url;
var img;
for (var i=0; i<links.length; ++i) {
// Korrigiert den Link für den Fall, dass dem Bildnamen ein "Image:" vorangestellt wurde
if (links[i].getAttribute("href").search(/Image:Image:/) != -1) {
links[i].setAttribute("href", links[i].getAttribute("href").replace(/Image:Image:/, "Image:"));
var span = document.createElement("span");
var spanText = document.createTextNode(" (korr.)");
links[i].appendChild(span);
span.appendChild(spanText);
span.style.color = "red";
}
url = links[i].getAttribute("href").split(":");
if (url[0] == "//commons.wikimedia.org/wiki/File") {
img = url[1];
}
}
img = decodeURIComponent(img).replace(/_/g, " ");
var deleteLink = document.getElementById("ca-delete").getElementsByTagName("a")[0];
var newHref = deleteLink.getAttribute("href") + "&wpReason=" + encodeURIComponent("Übertragen nach [[Wikimedia Commons]] unter folgendem Namen: [[Commons:File:" + img + "|" + img + "]]");
deleteLink.setAttribute("href", newHref);
}
}
// onload
$(NowCommonsAutoFill);
/* Ende createAutoFillLinks */