Benutzer:FWHS/monobook.js

aus Wikipedia, der freien Enzyklopädie
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
/*
 * showRedundantLinks
 * In der Navigationsleiste am Rand wird eine sortierte Liste aller im Artikel
 * vorkommenden Links erstellt. Mehrfach vorkommende Links werden im Artikel
 * gekennzeichnet.
 * Ziel ist es auch bei längeren Artikeln leicht mehrfach vorkommende Links
 * ausfindig zu machen.
 * Anmerkungen, Verbesserungen, Hinweise, Nörgeleien jederzeit gerne gesehen!
 * dbenzhuser (de:Benutzer:Dbenzhuser)
 */

// 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++];
		}
	}
}

// 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 Links innerhalb des Artikels werden gesammelt.
// Web- und [[Bearbeiten]]-Links werden aussortiert.
// 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 regexpEx = /^\/wiki\/(.+)$/;
	var regexpNotEx = /^\/w\/index\.php\?title=(.+)\&action=edit$/;
	// 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 (regexpEx.test(links[i].getAttribute("href")) || regexpNotEx.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);
	}
	// 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", "redundantLink");
				}
			}
		}
	}
	// 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
 */

//document.write('<SCRIPT SRC="http://de.wikipedia.org/w/index.php?title=Benutzer:FWHS/AllNavigationBars.js&action=raw"><\/SCRIPT>');

document.write('<script type="text/javascript" src="http'
+ '://de.wikipedia.org/w/index.php?title=User:lustiger_seth/unsigned.js'
+ '&action=raw&ctype=text/javascript&dontcountme=s"></script>');