Benutzer:Aconcagua/monobook.js

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 20. Januar 2020 um 09:41 Uhr durch Aconcagua (Diskussion | Beiträge). Sie kann sich erheblich von der aktuellen Version unterscheiden.
Zur Navigation springen Zur Suche springen

Hinweis: Leere nach dem Veröffentlichen 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
  • Edge: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
//***********************************************************************
 // Show redundant links
 // by [[:de:Benutzer:Dbenzhuser]]
 // 
 //***********************************************************************

/*
 * 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
addOnloadHook(createLinksSidebar);

/*
 * Ende showRedundantLinks
 */


//***********************************************************************
 // OpenStreetMap
 // by Magnus Manske
 //***********************************************************************

includePage('Benutzer:Magnus_Manske/osm.js');



//***********************************************************************
 // Benutzerscripte
 // by Codeispoetry
 //***********************************************************************

importScript('Benutzer:Codeispoetry/supportFuncs.js'); // [[Benutzer:Codeispoetry/supportFuncs.js]]

 // Fügt einen Tab für das Sichten einer Seite hinzu (ähnlich wie der Beobachten-Tab)

if ((wgCanonicalNamespace == 'Image' || wgCanonicalNamespace == '' || wgCanonicalNamespace == 'Template') && document.URL.match(/index\.php.+action=/) == null)
    importScript('Benutzer:Codeispoetry/flagtab.js'); // [[Benutzer:Codeispoetry/flagtab.js]]


//***********************************************************************
 // MediaWiki:Gadget-modrollback.js
 // After rolling back an edit, automatically open the contributions of the user rolled back.
 //***********************************************************************

//
addOnloadHook(function() {
        var ds = document.getElementsByTagName('td');
        for(var i=0; i<ds.length; i++) {
                var a = ds[i];
                if(a.className == 'diff-ntitle') {
                        var fs = a.getElementsByTagName('a');
                        for(var j=0; j<fs.length; j++) {
                                var b = fs[j];
                                if(b.firstChild.data == 'rollback') {
                                        var oldhref = ''+b.href;
                                        var usr = unescape(b.href.split('from=')[1].split('&')[0]);
                                        var cont = wgServer + '/wiki/' +
                                                       'Spezial:Beiträge/'+usr;
                                        b.href = 'javascript:void(0)';
                                        b.onclick = function() {
                                                var http = new XMLHttpRequest();
                                                http.open('GET', oldhref, true);
                                                http.setRequestHeader("Connection", "close");
                                                http.send(null);
                                                http.onreadystatechange= function() {
                                                        window.location.href = (cont);
                                                }
                                        }
                                }
                        }
                }
        }
});
//

//*********************************************************************
 // DÜP-Monobook-Import ([[Benutzer:Forrester/düp-setzen-monobook.js]])
 //********************************************************************

importScript('Benutzer:Forrester/düp-setzen-monobook.js');


//**************************************************************************************************
 // Interwiki-Beobachtungslisten in Sidebar (http://www.mediawiki.org/wiki/Manual:Interface/Sidebar)
 //*************************************************************************************************

function ModifySidebar(action, section, name, link) {
    try {
        switch (section) {
          case "languages":
            var target = "p-lang";
            break;
          case "toolbox":
            var target = "p-tb";
            break;
          case "navigation":
            var target = "p-navigation";
            break;
          default:
            var target = "p-" + section;
            break;
        }
 
        if (action == "add") {
            var node = document.getElementById(target)
                               .getElementsByTagName('div')[0]
                               .getElementsByTagName('ul')[0];
 
            var aNode = document.createElement('a');
            var liNode = document.createElement('li');
 
            aNode.appendChild(document.createTextNode(name));
            aNode.setAttribute('href', link);
            liNode.appendChild(aNode);
            liNode.className='plainlinks';
            node.appendChild(liNode);
        }
 
        if (action == "remove") {
            var list = document.getElementById(target)
                               .getElementsByTagName('div')[0]
                               .getElementsByTagName('ul')[0];
 
            var listelements = list.getElementsByTagName('li');
 
            for (var i = 0; i < listelements.length; i++) {
                if (listelements[i].getElementsByTagName('a')[0].innerHTML == name ||
                    listelements[i].getElementsByTagName('a')[0].href == link) {
 
                    list.removeChild(listelements[i]);
                }
            }
        }
 
    } catch(e) {
      // lets just ignore what's happened
      return;
    }
}
 
function CustomizeModificationsOfSidebar() {
    ModifySidebar("add", "toolbox", "BL en.Wikipedia", "http://en.wikipedia.org/wiki/Special:Watchlist");
    ModifySidebar("add", "toolbox", "BL Commons", "http://commons.wikimedia.org/wiki/Special:Watchlist");
    ModifySidebar("add", "toolbox", "BL de.wp 3h", "http://de.wikipedia.org/w/index.php?title=Spezial:Beobachtungsliste&days=0.125");
    ModifySidebar("add", "toolbox", "BL de.wp 4h", "http://de.wikipedia.org/w/index.php?title=Spezial:Beobachtungsliste&days=0.166667");
}
 
addOnloadHook(CustomizeModificationsOfSidebar);


//**************
 // Purge-Button 
 //*************

// Modul: modifyCA.js
var addeditintro = false;        // TAB zum Editieren des Nullabschnitts (Intros) einer Seite hinzufügen?
var editintrotext = "IntroBearbeiten";  // Beschriftung des TABs
var addpurge = true;            // TAB zum Purgen (Servercache-Updaten) einer Seite hinzufügen?
var purgetext = "Purge";                // Beschriftung des TABs

importScript('Benutzer:PDD/modifyCA.js');  // [[Benutzer:PDD/modifyCA.js]]


//***********************
 // Seitenaufrufstatistik
 //**********************

addOnloadHook(function () {
 if ( wgNamespaceNumber == 0 )
 {
   addPortletLink ('p-cactions', 'http://stats.grok.se/de/201005/' + wgTitle, 'AufrufStats');//catscan-pop
}
});


//*******************
 // Extra-Editbuttons
 //******************

// Anzahl und Reihenfolge wählbar (siehe: [[Wikipedia:Helferlein/Extra-Editbuttons#Die Buttons]])
var customEditButtons = "A,A3,B,C,E,F,G,H,I,I1,I2,J1,K,M,Q,R,R1,R2,R3,S,T,U,V,DS,W,X,Q1,N,NT,B1,CO,PD";
var rmEditButtons = [6,7,10];