Zum Inhalt springen

„Benutzer:Dbenzhuser/monobook.js“ – Versionsunterschied

aus Wikipedia, der freien Enzyklopädie
Inhalt gelöscht Inhalt hinzugefügt
Dbenzhuser (Diskussion | Beiträge)
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
aOnloadFunctions[aOnloadFunctions.length] = addContributeLinks;
$(addContributeLinks);


/*
/*
* Ende showRedundantLinks
* 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 include(script) {
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);
return false;
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 */