Benutzer:Mnh/lktools.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
/*<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 + "§ion=0&summary=+War LK&text=" + txt + "&token=" + tok, "edit");
else
api_post("title=" + disk + "§ion=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>"
+ ' '
/* Nichts tun */
+ '<a href="javascript:void(0);" style="font-weight:bold;" '
+ 'onclick="window.close();">[nicht entscheiden]</a>'
+ ' '
/* 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> "
+ '<a href="/w/index.php?title=' + page + '&action=history" style="font-size:small;">'
+ '[hist]</a> '
+ '<a href="javascript:void(0);" style="color:#CD3700; font-size:small;"'
+ " onclick=\"trigger('" + page +"', '" + date + "', '"
+ section + "', 'delete')\">[del]</a> "
+ 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> */