Benutzer:Steef389/js/sperrloganzeige.js

Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 20. März 2010 um 17:40 Uhr durch Steef389 (Diskussion | Beiträge) (argh). 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
// 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);