Benutzer:Mnh/lktools.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
  • 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 futtert – ich bin nicht schuld.
 * 
 * TODO: - mehr Optionen für Beschriftungen, konsistentes Namensschema
 *       - wieder zu eigenständigem Modul umbauen. Eventuell Gadget? 
 *       - Code glätten und das Funktionswirrwarr nachvollziehbar sortieren
 *       - [bug?] api-Kram as is dürfte nicht mit dem IE spielen wollen
 */
/* extern definierbare Optionen */ 
var txt_show;          /* Defaulttext für TOC-Button, falls gefiltert */
var txt_hide;          /* Defaulttext sonst                           */
var filter_by_default; /* Standardansicht gefiltert?                  */

/* externe Optionen gesetzt? Wenn nein, defaults setzen. */
if( (typeof(txt_show) == 'undefined') || (txt_show.length==0) )
    txt_show = "[alle zeigen]";
if( (typeof(txt_hide) == 'undefined') || (txt_hide.length==0) )
    txt_hide = "[filtern]";
if(typeof(filter_by_default) == 'undefined')
    filter_by_default = true;

/* Konstanten */
var NOT_THERE = -1;

/* Globale Variablen */
var nfiltered = 0;               /* wie viele werden auf der Seite gefiltert? */

/** TOC-Filter
 * Entfernt auf LK-Seiten erledigte Diskussionen aus dem Inhaltsverzeichnis
 **/
/* Wechselt zwischen voller und gefilterter TOC */
function togglefilter() {
    var display; 
    var link = document.anchors.toc_toggler.firstChild;

    /* TOC normal oder gefiltert? */
    if (link.nodeValue == txt_show) {
        display = "";
        link.nodeValue = txt_hide;
    } else { 
        display = "none";
        link.nodeValue = txt_show;
    } 

    /* Sichtbarkeit der Elemente ändern */
    for(var i=0; i<nfiltered; i++)
        document.getElementById("invisible_toc"+i).style.display= display;
    
    return false;
}
function filtertoc() {
    /* nur auf LK-Seiten ausführen */
    var pfx  = "Wikipedia:Löschkandidaten/";
    var len  = pfx.length;
    if((document.title.length < len) || (document.title.substring(0, len).indexOf(pfx) != 0))
        return;

   /* Link zum Umschalten normal/gefiltert in die TOC einfügen */
   toc_head = document.getElementsByTagName('h2')[0];
   link = document.createElement("a");
   link.href    = "javascript:void(0);";
   link.onclick = togglefilter;
   link.name    = "toc_toggler";
   link.setAttribute("style", "float:right;");
   if(filter_by_default)
       link.appendChild(document.createTextNode(txt_show));
   else 
       link.appendChild(document.createTextNode(txt_hide));

   toc_head.insertBefore(link, toc_head.firstChild.nextSibling);

   /* TOC-Elemente nach üblichen Zusätzen durchgehen und gefundene Elemente
    * mit ID ausstatten
    */
   for (var i = 0; i < document.getElementsByTagName("li").length; i++) {     
        var lelem = document.getElementsByTagName('li')[i];

        /* nichts außerhalb der TOC */
        var class = lelem.getAttribute("class");
        if(!class || !class.match(/toclevel/))
             continue;
        
        var toctxt = lelem.getElementsByTagName('span')[1].firstChild.nodeValue;        
        /* abgearbeitet? */
        if(toctxt.match(/gelöscht/i)  
        || toctxt.match(/\([^\)]*erl/i) 
        || toctxt.match(/\([^\)]*bleib/i) 
        || toctxt.match(/\(.*redir/i)
        || toctxt.match(/URV/) 
        || toctxt.match(/zurück(gezogen|genommen)/i) 
        || toctxt.match(/:LAE/)
        || toctxt.match(/\([^\)]*QS[^\)]*\)/) 
        || toctxt.match(/\([^\)]*SLA.*\)/i)
        || toctxt.match(/\([^\)]*LAE.*\)/)
        || toctxt.match(/\([^\)]*LA entfernt[^\)]*\)/) ) {
            /* Ja, ID zuweisen und ausblenden, falls standardmäßig gefiltert */
            lelem.id = "invisible_toc" + nfiltered;
            if(filter_by_default)
                lelem.style.display = "none";
            nfiltered += 1;
        }
    }
}
addOnloadHook(filtertoc);

/**
 * Knöppchen zum schnelleren Abarbeiten in den LK
 */
function confirmed_keep(date) {   
    var disk = talk_of(wgPageName);

    /* WarLK-Ziegel auf die Disk werfen */    
    var tok = api_token(disk, "edit");
    var txt = "{{War Löschkandidat|" + date + "|" + wgPageTitle + "}}\n\n";

    /* Prepend bei roter Seite triggert Bug */
    if(api_page_exists(disk) == false)
        api_post("title=" + disk + "&section=0&summary=+War LK&text=" + txt + "&token=" + tok, "edit");
    else
        api_post("title=" + disk + "&section=0&summary=+War LK&prependtext=" + txt + "&token=" + tok, "edit");

    /* Ziegel manuell aus dem Artikel fischen */   
    location.href = "http://de.wikipedia.org/w/index.php?title=" + page + "&action=edit"
                  + "&summary=–LA (bleibt gemäß [[WP:Löschkandidaten/" + date + "#" + page + "]]";
}
function confirmed_delete(date) {
    var reason = "siehe [[Wikipedia:Löschkandidaten/" + date + "#" + wgPageName + " (gelöscht)]]";
    var tok = api_token(wgPageName, "delete");

    api_delete(wgPageName, reason, tok);
    api_delete(talk_of(wgPageName), reason, tok);
}
/* Bestätigungsdialog bauen, Möglichkeiten: [behalten]  [nix machen]  [löschen]
 * Ausgeführt bei: confirm
 */
function hook_confirm() {
    var lkdate;          /* Datum der Löschdiskussion */
    var pos, pos2;
    
    var elem = document.getElementById('mw_content');
    
    /* brauchen eine Begründung */
    if( (pos=location.href.indexOf("lkDate=", pos)) == NOT_THERE) {
        elem.innerHTML = "Kein Datum mitgegeben.";
        return;
    }
    pos += "lkDate=".length;
    if( (pos2=location.href.indexOf("&", pos)) == NOT_THERE) 
        lkdate = decodeURI(location.href.substr(pos));
    else
        lkdate = decodeURI(location.href.substr(pos, pos2-pos));
    
    elem.innerHTML = '<div style="border: 1px solid #DC134C; background-color: #FFFFFF; '
                   + 'border-left: 10px solid #DC134C; margin-bottom: 0.4em; margin-left: auto; '
                   + 'margin-right: auto; width: 80%; padding-left:1em;">Diesen Löschkandidaten<br />'
                   /* Behalten */
                   + '<a href="javascript:void(0);" style="margin-left: 10em; color:#00CD66;font-weight:bold;'
                   + " onclick=\"confirmed_keep('" + lkdate + "')\">[behalten]</a>"
                   + '&nbsp;&nbsp;&nbsp;'
                   /* Nichts tun */
                   + '<a href="javascript:void(0);" style="font-weight:bold;" '
                   + 'onclick="window.close();">[nicht entscheiden]</a>'
                   + '&nbsp;&nbsp;&nbsp;'
                   /* Löschen */
                   + '<a href="javascript:void(0);" style="color:#CD3700; font-weight:bold;"'
                   + " onclick=\"confirmed_delete('"+ lkdate + "');" 
                   + " location.href='http://de.wikipedia.org/wiki/Spezial:Linkliste/' + wgPageName;\">[löschen]</a>"
                   + '</div><br style="clear:both" />'
                   + elem.innerHTML;        
}

/*
 * Callbacks für die Löschdiskussionsknöppchen, state=="keep" xor "delete"
 */
function trigger(page, date, section, state) {
    window.open("http://de.wikipedia.org/w/index.php?title=" + page 
              + "&confirm&lkDate=" + encodeURI(date), "_blank");
    window.location.href = section + "&" + state;
}

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

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

    /* durch level-2/-3-Überschriften gehen */
    len = document.getElementsByTagName("h2").length;
    var head  = null;

    for (var i = 0; i < len + document.getElementsByTagName("h3").length; i++) {
        /* LK-Titel extrahieren */
        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')) == NOT_THERE)
        ||  (head.innerHTML.indexOf('class="new"')       != NOT_THERE) )
            continue;

        /* Section-Link extrahieren */
        pos  = head.innerHTML.indexOf('href="') + 'href="'.length;
        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="')) == NOT_THERE)
            continue; /* Kein Link in Überschrift */
        pos+= 'title="'.length; 
        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) + '</a>'.length;
        var suffix = span.substr(pos).toLowerCase(); 

        /* wenn schon abgearbeitet: nix weiter. */
        if( (suffix.indexOf('bleibt')   != NOT_THERE) 
        ||  (suffix.indexOf('erl')      != NOT_THERE)
        ||  (suffix.indexOf('gelöscht') != NOT_THERE) ) 
            continue;
 
        head.innerHTML = '<a href="javascript:void(0);" style="color:#00CD66; font-size:small;"'
                       + " onclick=\"trigger('" + page +"','"+ date +"','"+ section +"', 'keep')\">[keep]</a>&nbsp;"
                       + '<a href="/w/index.php?title=' + page + '&action=history" style="font-size:small;">'
                       + '[hist]</a>&nbsp;' 
                       + '<a href="javascript:void(0);" style="color:#CD3700; font-size:small;"'
                       + " onclick=\"trigger('" + page +"', '" + date + "', '"
                       + section + "', 'delete')\">[del]</a>&nbsp;"
                       + head.innerHTML;
     }
}
/* Löschdiskussion bearbeiten und automagisch Überschrift anpassen 
 * Ausgeführt bei: &delete || &keep in URL
 */
function hook_edit(del) {
    var pos, pos2;
    var box = document.editform.wpTextbox1.value;

    /* überschrift extrahieren */
    for(pos=0; pos<4; pos++)
        if( (box[pos]!='=') && (box[pos]!=' ') )
            break;
    for(pos2=box.indexOf("==", 4); pos2 > pos; pos2--)
        if( (box[pos2-1]!='=') && (box[pos2-1]!=' ') )
            break;

    /* Text der Editbox geeignet modifizieren. */
    if(del == true) {
        box = "== " + box.substr(pos, pos2-pos) + " (gelöscht)" + box.substr(pos2);
        document.editform.wpSummary.value += " gelöscht";
    } else {
        box = "== " + box.substr(pos, pos2-pos) + " (bleibt)" + box.substr(pos2);
        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() {
    if(location.href.indexOf("&confirm")    != NOT_THERE)
        hook_confirm();
    else if(location.href.indexOf("&delete")!= NOT_THERE)
        hook_edit(true);
    else if(location.href.indexOf("&keep")  != NOT_THERE)
        hook_edit(false);
    else if(wgPageName.indexOf("Wikipedia:Löschkandidaten/") != NOT_THERE)
        loescheimer();
}
addOnloadHook(seitenweiche);
/* </nowiki> */