Benutzer:Steef389/js/sperrloganzeige.js
Erscheinungsbild
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
// Dieses Script zeigt auf Benutzerseiten und Benutzerdiskussionen mit Hilfe
// der [[WP:API]] auf Wunsch ein Sperrlog an.
// Entworfen von [[Benutzer:Steef389]], 2010-03-05
// Einstellungsmöglichkeit:
// logEntryLimit: Wie viele Logeinträge werden maximal angezeigt?
function sperrlogAnzeige ()
{
if (logEntryLimit == undefined)
{
logEntryLimit = "max";
}
if (wgPageName.indexOf ("/") != -1 || wgPageName.indexOf (":") == -1 || wgAction != "view" || !window.XMLHttpRequest)
{
return;
}
var teile = wgPageName.split (":");
if (teile[0] != "Benutzer" && teile[0] != "Benutzer_Diskussion")
{
return;
}
var user = teile[1];
var heading = document.getElementById ("firstHeading");
// Section 0 Edit-Button
if (heading == undefined)
{
heading = document.getElementById ("section-0");
}
heading.appendChild (document.createTextNode(" "));
var link = document.createElement ("a");
link.href = "#";
link.setAttribute ("onclick", "zeigeVersteckeSperrlog ('"+ user + "'); return false;");
link.appendChild (document.createTextNode ("(Sperrlog anzeigen)"));
link.id = "user_block_log_link"
link.style.fontSize = "0.4em";
heading.appendChild (link);
}
function zeigeVersteckeSperrlog (user)
{
var logOutput = document.getElementById ("user_block_log_box");
if (logOutput == undefined)
{
document.getElementById ("user_block_log_link").firstChild.data = "(Sperrlog verstecken)";
ladeSperrlog (user, logEntryLimit);
}
else
{
if (logOutput.style.display == "none")
{
logOutput.style.display = "block";
document.getElementById ("user_block_log_link").firstChild.data = "(Sperrlog verstecken)";
}
else
{
logOutput.style.display = "none";
document.getElementById ("user_block_log_link").firstChild.data = "(Sperrlog anzeigen)";
}
}
}
anfrage = null;
function ladeSperrlog (user, limit)
{
anfrage = new XMLHttpRequest ();
link = "http://de.wikipedia.org/w/api.php?action=query&list=logevents&letitle=User:" + escape (user) + "&letype=block&format=json&lelimit=" + limit;
anfrage.open ("GET", link);
anfrage.onreadystatechange = schreibeSperrlog;
anfrage.send (null);
}
function ladeTeil (start)
{
anfrage = new XMLHttpRequest ();
link = "http://de.wikipedia.org/w/api.php?action=query&list=logevents&letitle=User:" + escape (user) + "&letype=block&format=json&lelimit=" + limit + "&lestart=" + start;
anfrage.open ("GET", link);
anfrage.onreadystatechange = ergaenzeSperrlog;
anfrage.send (null);
}
function schreibeSperrlog ()
{
if (anfrage.readyState == 4)
{
if (anfrage.status != 200)
{
var error = document.createElement ("span");
error.style.fontSize = "0.4em";
error.style.color = "red";
error.appendChild (document.createTextNode ("Fehler: " + anfrage.status));
document.getElementById ("user_block_log_link").parentNode.replaceChild (error, document.getElementById ("user_block_log_link"));
return;
}
// Antwort verarbeiten
var antwort = eval('(' + anfrage.responseText + ')');
// Ausgeben
var div = document.createElement ("div");
div.id = "user_block_log_box";
div.className = "mw-warning-with-logexcerpt";
var intro = document.createElement ("p");
intro.appendChild (document.createTextNode ("Sperrlogbuch:"));
div.appendChild (intro);
var ul = document.createElement ("ul");
for (var i = 0; i < antwort["query"]["logevents"].length; i++)
{
ul.appendChild (createLogLine (antwort["query"]["logevents"][i]));
}
if (antwort["query"]["logevents"].length == 0)
{
var li = document.createElement ("li");
li.className = "mw-logline-block";
li.appendChild (document.createTextNode ("keine Einträge"));
ul.appendChild (li);
}
if (antwort["query-continue"] != undefined)
{
var li = document.createElement ("li");
li.className = "mw-logline-block";
li.id = "user_block_log_continue";
var continue_link = document.createElement ("a");
continue_link.href = "#";
continue_link.onclick = function ()
{
ladeTeil (antwort["query-continue"]["logevents"]["lestart"]);
return false;
}
continue_link.appendChild (document.createTextNode ("..."));
li.appendChild (continue_link);
ul.appendChild (li);
}
div.appendChild (ul);
var heading = document.getElementById ("firstHeading");
// Section 0 Edit-Button
if (heading == undefined)
{
heading = document.getElementById ("section-0");
}
heading.parentNode.insertBefore (div, heading.nextSibling);
}
}
function ergaenzeSperrlog ()
{
if (anfrage.readyState == 4)
{
if (anfrage.status != 200)
{
var error = document.createElement ("li");
error.style.fontSize = "0.4em";
error.style.color = "red";
error.appendChild (document.createTextNode ("Fehler: " + anfrage.status));
document.getElementById ("user_block_log_continue").parentNode.replaceChild (error, document.getElementById ("user_block_log_continue"));
return;
}
// Antwort verarbeiten
var antwort = eval('(' + anfrage.responseText + ')');
// Ausgeben
ul = document.getElementById ("user_block_log_continue").parentNode;
ul.removeChild (document.getElementById ("user_block_log_continue"));
for (var i = 0; i < antwort["query"]["logevents"].length; i++)
{
ul.appendChild (createLogLine (antwort["query"]["logevents"][i]));
}
if (antwort["query-continue"] != undefined)
{
var li = document.createElement ("li");
li.className = "mw-logline-block";
li.id = "user_block_log_continue";
var continue_link = document.createElement ("a");
continue_link.href = "#";
continue_link.onclick = function ()
{
ladeTeil (antwort["query-continue"]["logevents"]["lestart"]);
return false;
}
continue_link.appendChild (document.createTextNode ("..."));
li.appendChild (continue_link);
ul.appendChild (li);
}
}
}
function formatDatum (datum)
{
var ret_datum = new Date ();
ret_datum.setUTCFullYear (datum.substr (0, 4));
ret_datum.setUTCMonth (datum.substr (5, 2) - 1);
ret_datum.setUTCDate (datum.substr (8, 2));
ret_datum.setUTCHours (datum.substr (11, 2));
ret_datum.setUTCMinutes (datum.substr (14, 2));
ret_datum.setUTCSeconds (datum.substr (17, 2));
return ret_datum.toLocaleString();
}
function createLogLine (attribs)
{
var li = document.createElement ("li");
li.className = "mw-logline-block";
li.appendChild (document.createTextNode (formatDatum (attribs["timestamp"]) + ": "));
var admin_link = document.createElement ("a");
admin_link.className = "mw-userlink";
admin_link.title = "Benutzer:" + attribs["user"];
admin_link.href = "/wiki/Benutzer:" + escape (attribs["user"]);
admin_link.appendChild (document.createTextNode (attribs["user"]));
li.appendChild (admin_link);
li.appendChild (document.createTextNode (" "));
var tools = document.createElement ("span");
tools.className = "mw-usertoollinks";
tools.appendChild (document.createTextNode ("("));
var admin_disk = document.createElement ("a");
admin_disk.title = "Benutzer Diskussion:" + attribs["user"];
admin_disk.href = "/wiki/Benutzer_Diskussion:" + escape (attribs["user"]);
admin_disk.appendChild (document.createTextNode ("Diskussion"));
tools.appendChild (admin_disk);
tools.appendChild (document.createTextNode (" | "));
var admin_contr = document.createElement ("a");
admin_contr.title = "Spezial:Beiträge/" + attribs["user"];
admin_contr.href = "/wiki/Spezial:Beitr%C3%A4ge/" + escape (attribs["user"]);
admin_contr.appendChild (document.createTextNode ("Beiträge"));
tools.appendChild (admin_contr);
tools.appendChild (document.createTextNode (")"));
li.appendChild (tools);
switch (attribs["action"])
{
case "block":
li.appendChild (document.createTextNode (" sperrte für den Zeitraum: "));
break;
case "unblock":
li.appendChild (document.createTextNode (" hob die Sperre auf "));
break;
case "reblock":
li.appendChild (document.createTextNode (" änderte die Sperre für den Zeitraum: "));
break;
default:
li.appendChild (document.createTextNode (" machte ??? "));
}
if (attribs["action"] == "block" || attribs["action"] == "reblock")
{
var dauer = document.createElement ("span");
dauer.title = attribs["block"]["duration"];
dauer.appendChild (document.createTextNode (attribs["block"]["duration"]));
li.appendChild (dauer);
li.appendChild (document.createTextNode (" "));
}
li.appendChild (parseComment (attribs["comment"]));
if (attribs["action"] == "block" || attribs["action"] == "reblock")
{
li.appendChild (document.createTextNode (" "));
var flags = document.createElement ("span");
flags.style.fontSize = "0.9em";
flags.appendChild (document.createTextNode ("(" + attribs["block"]["flags"] + ")"));
li.appendChild (flags);
}
return li;
}
function parseComment (text)
{
var comment = document.createElement ("span");
comment.className = "comment";
if (text == null)
{
comment.appendChild (document.createTextNode ("(kein Sperrkommentar)"));
return comment;
}
var intLink = /(.*?)\[\[((.*?)\|)?(.*?)\]\](.*)/;
var suche = text;
var ergebnis;
comment.appendChild (document.createTextNode ("("));
while (ergebnis = intLink.exec (suche))
{
comment.appendChild (document.createTextNode (ergebnis[1]));
var link = document.createElement ("a");
if (ergebnis[2] == undefined)
{
link.href = "/wiki/" + escape (ergebnis[4]);
link.title = ergebnis[4];
link.appendChild (document.createTextNode (ergebnis[4]));
}
else
{
link.href = "/wiki/" + escape (ergebnis[3]);
link.title = ergebnis[3];
link.appendChild (document.createTextNode (ergebnis[4]));
}
comment.appendChild (link);
suche = ergebnis[5];
}
comment.appendChild (document.createTextNode (suche + ")"));
return comment;
}
addOnloadHook(sperrlogAnzeige);