Zum Inhalt springen

Benutzer:Mnh/lktools.js

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 24. Januar 2009 um 01:52 Uhr durch Mnh (Diskussion | Beiträge) (ich = doof). Sie kann sich erheblich von der aktuellen Version unterscheiden.

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
/*<nowiki>
 * ACHTUNG: Testversion. Wenn das Script zwischenzeitlich aus dem Monitor krabbelt 
 * und den heimischen Hund frisst – ich war's nicht.
 */

/**
 * Werkzeugkiste 
 **/
function strlen(str) {
    return(str.length);
}

/* 
 * API-toolbox 
 */
function get_deltok(page) {
        var req = new XMLHttpRequest();
        req.open('GET', 'http://de.wikipedia.org/w/api.php?action=query&prop=info&format=xml&intoken=delete&titles='+page, false);
        req.send(null);
        
        var pos = req.responseText.indexOf("deletetoken=\"") + 13; /* = strlen(deletetoken=") */
        var pos2= req.responseText.indexOf("\"", pos);

        return req.responseText.substr(pos, pos2-pos-2) + "%2B\\";
}
function get_edittok(page) {
        var req = new XMLHttpRequest();
        req.open('GET', 'http://de.wikipedia.org/w/api.php?action=query&prop=info&format=xml&intoken=edit&titles='+page, false);
        req.send(null);
        
        /* add information if the page is missing to token */
        var red;
        if(req.responseText.indexOf("missing=\"\"") != -1)
            red = 1;
        else
            red = 0;
        
        var pos = req.responseText.indexOf("edittoken=\"") + strlen("edittoken=\"");
        var pos2= req.responseText.indexOf("\"", pos);

        return red + req.responseText.substr(pos, pos2-pos-2) + "%2B\\";
}
function api_delete(params) {
        var req = new XMLHttpRequest();
        req.open('POST', 'http://de.wikipedia.org/w/api.php?action=delete', false);
        req.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
        req.send(params);

        // if req.status == 200 => success
}
function post_content(params) {
        var req = new XMLHttpRequest();
        req.open('POST', 'http://de.wikipedia.org/w/api.php?action=edit', false);
        req.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
        req.send(params);
}

/* Löschbestätigung bauen und – falls bestätigt – übergebene Seite + Disk killen
 * Ausgeführt bei: action=confirm
 */
function hook_del_confirm() {
    var page;
    var reason;

    /* MediaWiki kennt die Aktion nicht, das muss der Benutzer aber nicht wissen */ 
    document.title = "Löschen bestätigen"; 
    document.getElementById('firstHeading').innerHTML = "Löschen bestätigen";

    var elem = document.getElementById('mw_content');
    
    /* Seite extrahieren */    
    var pos  = location.href.indexOf("title=") + strlen("title="); 
    var pos2 = location.href.indexOf("&", pos);
    page = decodeURI(location.href.substr(pos, pos2-pos));

    /* brauchen eine Begründung */
    if( (pos=location.href.indexOf("wpReason=", pos)) == -1) {
        elem.innerHTML = "Keine Begründung mitgegeben.";
        return;
    }
    pos += strlen("wpReason=");
    if( (pos2=location.href.indexOf("&", pos)) == -1) 
        reason = decodeURI(location.href.substr(pos));
    else
        reason = decodeURI(location.href.substr(pos, pos2-pos));


    elem.innerHTML = "Seite <b>" + page + "</b> und ihre Diskussionsseite mit Begründung <br />„" + reason 
                   + "“<br />löschen?<br />"
                   + '<a href="javascript:void(0);" style="margin-left: 10em; color:#00CD66;'
                   + 'font-weight:bold;" onclick="window.close();">[nicht löschen]</a>'
                   + '&nbsp;&nbsp;&nbsp;'
                   + '<a href="javascript:void(0);" style="color:#CD3700; font-weight:bold;"'
                   + " onclick=\"del_exec('" + page +"','"+ reason +"')\">[löschen]</a>";        
}
function del_exec(page, reason) {
    /* delete-token holen */
    var tok = get_deltok(page);

    /* Parameter bauen */
    var params1 = "reason="+reason+"&token=" + tok + "&title=";
    var params2 = "reason="+reason+"&token=" + tok + "&title="; /* bloß keinen Pointer hier */
    var pos = page.indexOf(":");

    if(pos == -1) {
        params1+= page;
        params2+= "Diskussion:" + page;
    } else {
        params1+= page;
        params2+= page.substr(0,pos) + " Diskussion" + page.substr(pos);
    }
    api_delete(params1);
    api_delete(params2);

    location.href = "http://de.wikipedia.org/wiki/Spezial:Linkliste/" + page;
}

/*
 * Button-Callbacks  
 */
function cb_del(page, reason, section) {
    window.open("http://de.wikipedia.org/w/index.php?title=" + page + "&action=confirm&wpReason=" + encodeURI(reason), "_blank");
    window.location.href = section + "&delete";
}
function cb_keep(page, date, section) {   
    /* Namen der Diskseite basteln */
    var pos, disk;
    
    if( (pos=page.indexOf(":")) != -1) /* nicht ANR */
        disk = page.substr(0, pos) + " Diskussion" + page.substr(pos);
    else /* ANR */
        disk = "Diskussion:" + page;

    /* WarLK-Ziegel auf die Disk werfen */    
    var tok = get_edittok(disk);
    var red = tok.substr(0,1);
    tok = tok.substr(1);
    var txt = "{{War Löschkandidat|" + date + "}}\n\n";

    if(red == 1)
        post_content("title="+disk+"&section=0&summary=+War LK&text="+txt+"&token="+tok);
    else
        post_content("title="+disk+"&section=0&summary=+War LK&prependtext="+txt+"&token="+tok);

    /* Ziegel aus dem Artikel fischen */   
    window.open("http://de.wikipedia.org/w/index.php?title=" + page + "&action=edit", "_blank");

    /* Grund in den LK angeben */
    window.location.href = section + "&keep";
}

/* Fügt Knöppches auf den LK ein
 * Ausgeführt bei: Wikipedia:Löschkandidaten/ in title
 */
function loescheimer() {
    var  date;               /* LK-Datum              */
    var  reason;             /* Löschgrund            */
    var  section;            /* edit-Link für Section */
    var  pos, pos2;

    var len = strlen("Wikipedia:Löschkandidaten/");
    date = document.title.substring(len).replace(/ [–-] .*/, "");

    /* sift through level-2/-3-headings */
    len = document.getElementsByTagName("h2").length;
    var head  = null;

    for (var i = 0; i < len + document.getElementsByTagName("h3").length; i++) {
        /* Isolate the RfDs title */
        if(i < len)
            head = document.getElementsByTagName('h2')[i];
        else
            head = document.getElementsByTagName('h3')[i-len];

        /* Rotlinks und andere Abschnitte überspringen */
        if( ((pos=head.innerHTML.indexOf('editsection')) == -1)
        ||  (head.innerHTML.indexOf('class="new"')       != -1) )
            continue;

        /* Section-Link extrahieren */
        pos  = head.innerHTML.indexOf('href="') + strlen('href="');
        pos2 = head.innerHTML.indexOf('"', pos);
        section = head.innerHTML.substr(pos, pos2-pos);

        /* Überschrift und Linktitle extrahieren  */
        pos  = head.innerHTML.indexOf('class="mw-headline"');
        pos2 = head.innerHTML.indexOf('</span>', pos);
        var span = head.innerHTML.substr(pos, pos2-pos);
        if( (pos = span.indexOf('title="')) == -1)
            continue; /* Kein Link in Überschrift */
        pos+= strlen('title="'); 
        pos2 = span.indexOf('"', pos);

        /* um welche Seite es geht */
        var page = span.substr(pos, pos2-pos).replace(/'/g,'%27');
        
        /* ist schon was damit passiert? */
        pos  = span.indexOf('</a>', pos2) + strlen('</a>');
        var suffix = span.substr(pos).toLowerCase(); 

        /* wenn schon abgearbeitet: nix weiter. */
        if( (suffix.indexOf('bleibt')   != -1) 
        ||  (suffix.indexOf('erl')      != -1)
        ||  (suffix.indexOf('gelöscht') != -1) ) 
            continue;
 
        head.innerHTML = '<a href="javascript:void(0);" style="color:#00CD66; font-size:small;"'
                       + " onclick=\"cb_keep('" + page +"','"+ date +"','"+ section +"')\">[keep]</a>&nbsp;"
                       + head.innerHTML;

        head.innerHTML = '<a href="/w/index.php?title=' + page + '&action=history" style="font-size:small;">'
                       + '[hist]</a>&nbsp;' + head.innerHTML;
        /* Löschknopp */
        reason  = "siehe [[Wikipedia:Löschkandidaten/" + date + "#" + page + " (gelöscht)]]";

        head.innerHTML = '<a href="javascript:void(0);" style="color:#CD3700; font-size:small;"'
                       + " onclick=\"cb_del('" + page +"', '" + reason + "', '"
                       + section + "')\">[del]</a>&nbsp;"
                       + head.innerHTML;
     }
}
/* Löschdiskussion bearbeiten und automagisch Überschrift anpassen 
 * Ausgeführt bei: &delete || &keep in URL
 */
function hook_edit(del) {
    var box = document.editform.wpTextbox1.value;
    var pos = box.indexOf("==", 4); /* Ende der Überschrift finden */

    if(del == true) {
        box = box.substr(0, pos) + "(gelöscht) " + box.substr(pos);
        document.editform.wpSummary.value += " gelöscht";
    } else {
        box = box.substr(0, pos) + "(bleibt) " + box.substr(pos);
        document.editform.wpSummary.value += " bleibt";
    }
    
    /* Ans Ende springen und Kasterl einfügen */
    box = box + "\n{{Kasten| ~~~~}}";
    document.editform.wpTextbox1.value = box;
}

/*
 * URL auswerten
 */
function seitenweiche() {
    var href = location.href;

    /* Vorsicht, Reihenfolge wichtig */ 
    if(href.indexOf("action=confirm") != -1)
        hook_del_confirm();
    else if(href.indexOf("&delete") != -1)
        hook_edit(true);
    else if(href.indexOf("&keep") != -1)
        hook_edit(false);
    else if(document.title.indexOf("Wikipedia:Löschkandidaten/") != -1)
        loescheimer();
}
addOnloadHook(seitenweiche);
/* </nowiki> */