MediaWiki:Gadget-Sammlungsparser.js

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
  • Internet Explorer/Edge: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
  • Opera: Strg+F5
// Adapted from User:Pediapress/collection-parser.js
$(function(){
	function putOutList(list) {
		var articleName, bookName = list[0];
		var out = '== ' + bookName.replace(/_/g, " ") +' ==\n';
		out += ':[[' + bookName.replace(/_/g, " ") + ']]\n';
		for (var i = 1; i < list.length; i++) {
			if (list[i] !== null && list[i].match(/^http:/)) {
				articleName = getArticleId(list[i], bookName);
				out += ":[[" + bookName + "/" + articleName + "|" + articleName.replace(/_/g, " ") + "]]\n";
			} else { //kick out empty headlines and those without links
				if ((i < list.length-1 && list[i+1].match(/^http:/)) && list[i] != " ") {
					out += ";" + list[i] + "\n";
				}
			}
		}
		out += "\n[[Kategorie:Sammlungen]]";
		
		//print the collectionmarkup into a textarea
		var collectionName = prompt("Benenne deine Sammlung:", "");
		if (collectionName) {
			var w = window.open(mw.config.get('wgServer') + "/w/index.php?title=User:" + mw.config.get('wgUserName') + "/_Sammlungen/" + collectionName + "&action=edit");
			if (w.attachEvent) {
				w.attachEvent("onload", function() {refreshTextArea(w, out)});
			} else if (window.addEventListener) {
				w.addEventListener("lade", function() {refreshTextArea(w, out)}, false);
			} else {
				w.document.addEventListener("lade", function() {refreshTextArea(w, out)}, false);
			}
		}
	}
	
	function refreshTextArea(w, out) {
		var txt = w.document.getElementById('wpTextbox1');
		txt.value = out;
	} 
	
	function getArticleId(link, bookName) {
		var linkList = link.split("/");
		var isId = 0;
		var output = "";
		for (var i = 0; i < linkList.length; i++) {
			if (isId === 0 && linkList[i] == bookName) {
				isId++;
			} else {
				if (isId == 1) {
					output += linkList[i];
					isId++;
				} else {
					if (isId > 1) {
					output += "/" + linkList[i];
					}
				}
			}
		}
		return output;
	}
	
	//look for headlines and links
	function parseContent () {
		var bookLinks = initBooklinks();
		var contDiv = document.getElementById('bodyContent');
		var bodyElements = contDiv.getElementsByTagName("*");
		var element;
		
		for (var i = 0; i < bodyElements.length; i++) {
			element = bodyElements[i];
			if (element.nodeName.match(/^H\d/)) {
			bookLinks[bookLinks.length] = getHeadingText(element);
			} else {
				if (element.nodeName == "A") {
					if (isBookInternalLink(element)) {
						bookLinks[bookLinks.length] = element.href;
					}
				}
			}
		}
		return bookLinks;
	}
	
	//extracts the text from a headline
	function getHeadingText(heading) {
		if (heading.id == "siteSub") {
			return " ";
		} else {
			var elements = heading.childNodes;
			for (var i = 0; i < elements.length; i++) {
				if (elements[i].nodeName == "SPAN" && elements[i].getAttribute("class") == "mw-headline") {
					return elements[i].innerHTML;
				}
			}
		}
		return "chapter";
	}
	
	function initBooklinks() {
		var bookName = mw.config.get('wgPageName').split("/");
		if (bookName.length > 1) {
			return [bookName[0], "http://" + mw.config.get('wgPageName')];
		} else {
			return [mw.config.get('wgPageName')];
		}
	}
	
	//checks links for targets inside the wikibook
	function isBookInternalLink(link) {
		var articleBaseURL = mw.config.get('wgServer') + mw.config.get('wgArticlePath');
		var bookName = mw.config.get('wgPageName');
		var articleURL = articleBaseURL.substring(0, articleBaseURL.length-2) + bookName.split("/")[0];
		if (link.href.substring(0,articleURL.length) != articleURL || link.href.match(/#/) || link.href.match(/Print_version/i)) {
			return false;
		} else {
			return true;
		}
	}
	
	//added link has been clicked
	function getCollection() {
		var bookLinks = parseContent(); 
		putOutList(bookLinks);
	}
	
	//add an link at thr right upper corner
	if (mw.config.get('wgNamespaceNumber') === 0 || mw.config.get('wgNamespaceNumber') === 102 || mw.config.get('wgNamespaceNumber') === 110) {
		var portletLink = mw.util.addPortletLink('p-personal', '#', 'Erstelle Sammlung');
		$(portletLink).click(function(){ getCollection(); });
	}
});