Benutzer:LimboDancer/ReorderNRHPList.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
  • Internet Explorer/Edge: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
  • Opera: Strg+F5
/*
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);