Benutzer:LimboDancer/ReorderNRHPList.js
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
/*
Auf der Basis von https://en.wikipedia.org/wiki/User:Dudemanfellabra/ReorderNRHPlist.js
Dieses Skript erzeugt einen Button oberhalb jeder NRHP-Liste.
Mit einem Klick wird die Nummerierung der Liste erneuert, was unter anderem erforderlich wird, wenn ein Eintrag hinzugefügt oder entfernt wurde.
Wird keine Abweichung der fortlaufenden Nummerierung erkannt, geschieht nichts.
*/
function RenumberButton() {
if ((mw.config.get('wgPageName').search("Liste_der_Einträge_im_National_Register_of_Historic_Places") == -1 &&
mw.config.get('wgPageName').search("Liste_der_Einträge_in_das_National_Register_of_Historic_Places") == -1 &&
mw.config.get('wgPageName').search("Liste_der_National_Historic_Landmarks_in") == -1) ||
mw.config.get('wgNamespaceNumber') != 0 ) {
return;
}
if (location.href.indexOf('action') != -1 || location.href.indexOf('Diskussion:') != -1)
return;
var content = document.getElementById('mw-content-text');
var button = document.createElement("input");
button.setAttribute("type", "button");
button.setAttribute("value", "Nummerierung erneuern");
button.setAttribute("id", "button");
button.setAttribute("onclick", "RenumberClick()");
content.parentNode.insertBefore(button, content);
}
function RenumberClick() {
var button = document.getElementById('button');
button.value = "Arbeite ...";
button.disabled = true;
getListWikitext(mw.config.get('wgPageName'));
}
function getListWikitext(title) {
$.getJSON(
mw.util.wikiScript('api'),
{
format: 'json',
action: 'query',
prop: 'revisions',
rvprop: 'content',
titles: title,
indexpageids: true
}
)
.done(function (data) {
var page, wikitext;
for (page in data.query.pages) {
wikitext = data.query.pages[page].revisions[0]['*'];
RenumberList(wikitext);
}
})
.fail(function() {
alert('Fehler beim Lesen des Quelltextes.');
});
}
function RenumberList(wikitext) {
var splittext = wikitext.split("|}");
var newwikitext = '';
for (var j = 0; j < splittext.length -1; j++) {
var StartIndex = 0;
var str = "|pos=";
var skip = str.length;
var index, RowLocations = [];
while ((index = splittext[j].indexOf(str, StartIndex)) > -1) {
RowLocations.push(index);
StartIndex = index + skip;
}
var stop = RowLocations.length +1;
var comments = splittext[j].match(/\<\!\-\-(.|[\r\n])*?\-\-\>/g);
if (comments !== null) {
for (var l = 0; l < comments.length; l++) {
if (comments[l].indexOf(str) == -1) {
comments.splice(l, 1); // remove comments that don't include a row
l--;
}
}
}
var k = 0;
for (var i = 1; i < stop; i++) {
StartIndex = RowLocations[i-1] +1;
if (comments !== null && k < comments.length) {
if (StartIndex > splittext[j].indexOf(comments[k]) &&
StartIndex < splittext[j].indexOf(comments[k]) +
comments[k].length) {
k++;
continue;
}
}
str="|";
var NextParam = splittext[j].indexOf(str, StartIndex);
var RowNum = i-k;
splittext[j] = splittext[j].substr(0, StartIndex-1) + "|pos=" +
RowNum +
splittext[j].substr(NextParam -1, splittext[j].length -
NextParam +1);
StartIndex = 0;
str = "|pos=";
skip = str.length;
index, RowLocations = [];
while ((index = splittext[j].indexOf(str, StartIndex)) > -1) {
RowLocations.push(index);
StartIndex = index + skip;
}
}
newwikitext += splittext[j] + "|}";
}
newwikitext += splittext[splittext.length -1];
editNRHPPage({
title: mw.config.get('wgPageName'),
text: newwikitext,
summary: '[[Benutzer:LimboDancer/ReorderNRHPList.js|Skriptbasierte]] Neunummerierung der Listeneinträge nach Hinzufügen/Entfernen'
});
}
function editNRHPPage(info) {
$.ajax({
url: mw.util.wikiScript( 'api' ),
type: 'POST',
dataType: 'json',
async: false,
data: {
format: 'json',
action: 'edit',
title: info.title,
text: info.text,
summary: info.summary,
token: mw.user.tokens.get( 'csrfToken' )
}
})
.done (function( data ) {
if (data && data.edit && data.edit.result && data.edit.result == 'Success') {
alert("Nummerierung erfolgreich aktualisiert! Zum Anzeigen der Änderungen bitte die Seite neu laden.");
} else {
alert("Es ist ein Fehler aufgetreten. Es wurden keine Änderungen durchgeführt.");
}
})
.fail (function() {
alert('Ajax-Fehler!');
});
}
$(RenumberButton);