MediaWiki:Gadget-Sammlungsparser.js
Erscheinungsbild
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
// 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(); });
}
});