Benutzer:1steenfa/user-status.js

Aus Fachschaft_Informatik
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
  • Internet Explorer/Edge: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
  • Opera: Strg+F5
(function($){
 
var steef_user_status =
{
    version: 1.0,
 
    groups:
    {
        // Allgemeine Gruppen
        g_autoconfirmed: "Autoconfirmed",
        g_autoreview: "Passiver Sichter",
        g_editor: "Sichter",
        g_bot: "Bot",
        g_sysop: "Administrator",
        g_bureaucrat: "Bürokrat",
        g_checkuser: "Checkuser",
        g_reviewer: "Prüfer",
        g_accountcreator: "Benutzerkonten-Ersteller",
        g_import: "Importeur",
        g_ipblock_exempt: "IP-Sperre-Ausnahme",
        g_oversight: "Oversighter",
        g_confirmed: "Bestätigter Benutzer",
        g_transwiki: "Transwiki-Importeur",
 
        // Globale Gruppen
        g_abusefilter: "Missbrauchsfilter-Bearbeiter",
        g_editinterface: "Benutzeroberflächenbearbeiter",
        g_founder: "Gründer",
        g_Global_bot: "Globaler Bot",
        g_Global_rollback: "Globaler Zurücksetzer",
        g_Global_sysops: "Globaler Administrator",
        g_Ombudsmen: "Ombudsperson",
        g_steward: "Steward",
        g_sysadmin: "Systemadministrator",
        g_Staff: "Staff",
        // Seltene Gruppen
        g_recursive_export: "recursive-export",
        g_API_High_Limit_Requestor: "API_High_Limit_Requestor",
        g_global_ipblock_exempt: "Globale IP-Sperre-Ausnahme",
 
        error_message: "(Fehlende Gruppe)",
 
        ignore_list: ["*", "user"],
 
        getLocalNames: function (/* array */ groups)  /* @return array */
        {
            var res = [];
            for (var i = 0; i < groups.length; ++i)
            {
                if ($.inArray (groups [i], steef_user_status.groups.ignore_list) != -1)
                {
                    continue;
                }
                var group = "g_" + groups[i].replace (/-/g, "_");
                if (steef_user_status.groups[group])
                {
                    res.push (steef_user_status.groups[group]);
                }
                else
                {
                    res.push (group + " " + steef_user_status.groups.error_message);
                }
            }
            return res;
        }
    },
    last_edit_seconds: false,
 
    utf8_escape: function (text)
    {
        text = text.replace(/\r\n/g, "\n");
        var utftext = "";
 
        for (var n = 0; n < text.length; n++)
        {
            var c = text.charCodeAt(n);
 
            if (c < 128)
            {
                utftext += String.fromCharCode(c);
            }
            else if((c > 127) && (c < 2048))
            {
                utftext += String.fromCharCode((c >> 6) | 192);
                utftext += String.fromCharCode((c & 63) | 128);
            }
            else
            {
                utftext += String.fromCharCode((c >> 12) | 224);
                utftext += String.fromCharCode(((c >> 6) & 63) | 128);
                utftext += String.fromCharCode((c & 63) | 128);
            }
        }
 
        return escape (utftext);
    },
 
    ajax_request: function (method, params, on_success, on_error)
    {
        if (method.toLowerCase() != "post" && method.toLowerCase() != "get")
        {
            method = 'get';
        }
 
        $.ajax (
            {
                url: mw.config.get ("wgServer") /* wgServer */ + "/w/api.php",
                data: params,
                dataType: "json",
                type: method.toUpperCase(),
                success: on_success,
                error: on_error
            } );
    },
 
    get_heading: function ()
    {
        var heading = document.getElementById ("firstHeading");
 
        // Section 0 Edit-Button
        if (heading === null)
        {
            heading = document.getElementById ("section-0");
        }
 
        return heading;
    },
 
    init: function ()
    {
        if (mw.config.get ("wgAction") != "view" || !(mw.config.get ("wgNamespaceNumber") == 2 || mw.config.get ("wgNamespaceNumber") == 3) || mw.config.get ("wgPageName").indexOf ("/") != -1)
        {
            return;
        }
 
        var user = mw.config.get ("wgTitle");
 
        if (user.match (/^(?:\d{1,3}\.){3}\d{1,3}$/)) // IP
        {
            return;
        }
 
        var params =
            {
                action:  'query',
                list: 'users',
                ususers: user,
                usprop: 'blockinfo|groups|editcount|registration',
                format: 'json'
            };
 
        var on_error = function (XMLHttpRequest, textStatus, errorThrown)
            {
                var error = document.createElement ("span");
                error.style.fontSize = "0.4em";
                error.style.color = "red";
                error.appendChild (document.createTextNode ("Fehler (Benutzerstatus): " + errorThrown));
 
                steef_user_status.get_heading().appendChild (error);
            };
 
        steef_user_status.user = user;
        steef_user_status.ajax_request("get", params, steef_user_status.schreibe_info, on_error);
    },
 
    params: [],
    aktionen: [],
    user: "",
 
    schreibe_info : function (antwort)
    {
        if (typeof(antwort.query.users[0].missing) != "undefined")
        {
            return;
        }
 
        var edits = antwort.query.users[0].editcount;
        var registration = antwort.query.users[0].registration;
        var groups = antwort.query.users[0].groups;
        var blocked = (typeof (antwort.query.users[0].blockreason) != "undefined");
 
        // Box erstellen
        var status_box = document.createElement ("div");
        status_box.style.borderBottom = "1px solid #AAAAAA";
        status_box.id = "steef_user_status_box";
 
        var allgemein = document.createElement ("p");
        var fett1 = document.createElement ("b");
        fett1.appendChild (document.createTextNode ("Bearbeitungen:"));
        allgemein.appendChild (fett1);
        allgemein.appendChild (document.createTextNode (" " + edits));
        allgemein.appendChild (document.createElement ("br"));
 
        var fett2 = document.createElement ("b");
        fett2.appendChild (document.createTextNode ("Registrierungsdatum:"));
        allgemein.appendChild (fett2);
        if (registration !== null && registration !== "")
        {
            allgemein.appendChild (document.createTextNode (" " + steef_user_status.formatDate (registration)));
        }
        else
        {
            var no_reg = document.createElement ("span");
            no_reg.style.color = "#999999";
            no_reg.style.fontStyle = "italic";
            no_reg.appendChild (document.createTextNode (" <nicht in Datenbank>"));
            allgemein.appendChild (no_reg);
        }
        allgemein.appendChild (document.createElement ("br"));
 
        // lokale Gruppen
        if (groups !== undefined)
        {
            var fett3 = document.createElement ("b");
            fett3.appendChild (document.createTextNode ("Lokale Benutzergruppen:"));
            allgemein.appendChild (fett3);
 
            var group_string = steef_user_status.groups.getLocalNames(groups).join(", ");
            if (group_string !== "")
            {
                allgemein.appendChild (document.createTextNode(" " + group_string.replace (/(.*)\,([^,]*)/, "$1 und$2")));
            }
            else
            {
                var no_group = document.createElement ("span");
                no_group.style.color = "#999999";
                no_group.style.fontStyle = "italic";
                no_group.appendChild (document.createTextNode (" keine Gruppen"));
                allgemein.appendChild (no_group);
            }
            allgemein.appendChild (document.createElement ("br"));
        }
 
        // Platzhalter globale Gruppe
        var platzhalter = document.createElement ("span");
        platzhalter.id = "steef_user_status_global_group";
        allgemein.appendChild (platzhalter);
 
        // Letzter Edit
        if (edits > 0)
        {
            var fett4 = document.createElement ("b");
            fett4.appendChild (document.createTextNode ("Letzter Edit:"));
            allgemein.appendChild (fett4);
            allgemein.appendChild (document.createTextNode (" "));
            var span = document.createElement ("span");
            span.id = "steef_user_status_datum";
            span.appendChild (document.createTextNode ("wird geladen..."));
            span.style.fontStyle = "italic";
            allgemein.appendChild (span);
 
            var pars =
                {
                    action: "query",
                    list: "usercontribs",
                    ucuser: steef_user_status.user,
                    uclimit: 1,
                    format: "json"
                };
            steef_user_status.params.push (pars);
            steef_user_status.aktionen.push(steef_user_status.write_last_edit);
        }
 
        status_box.appendChild (allgemein);
 
        // Sperren
        var sperre = document.createElement ("p");
        var fett5 = document.createElement ("b");
        fett5.appendChild (document.createTextNode ("Sperrstatus:"));
        sperre.appendChild (fett5);
        if (blocked)
        {
            var span2 = document.createElement ("span");
            span2.style.color = "#cc0000";
            span2.appendChild (document.createTextNode (" gesperrt"));
            var sperr_dauer = document.createElement ("span");
            sperr_dauer.id = "steef_user_status_block_duration";
            span2.appendChild (sperr_dauer);
            sperre.appendChild (span2);
            sperre.appendChild (document.createElement ("br"));
 
            var fett6 = document.createElement ("b");
            fett6.appendChild (document.createTextNode ("Sperrende:"));
            sperre.appendChild (fett6);
            var span3 = document.createElement ("span");
            span3.style.fontStyle = "italic";
            span3.id = "steef_user_status_block_time";
            span3.appendChild (document.createTextNode (" wird geladen..."));
            sperre.appendChild (span3);
            sperre.appendChild (document.createElement ("br"));
 
            var fett7 = document.createElement ("b");
            fett7.appendChild (document.createTextNode ("Sperrbegründung:"));
            sperre.appendChild (fett7);
            var span4 = document.createElement ("span");
            span4.style.fontStyle = "italic";
            span4.id = "steef_user_status_block_reason";
            span4.appendChild (document.createTextNode (" wird geladen..."));
            sperre.appendChild (span4);
            sperre.appendChild (document.createElement ("br"));
 
            var fett8 = document.createElement ("b");
            fett8.appendChild (document.createTextNode ("Sperrender: "));
            sperre.appendChild (fett8);
            var span5 = document.createElement ("span");
            span5.style.fontStyle = "italic";
            span5.id = "steef_user_status_blocker";
            span5.appendChild (document.createTextNode ("wird geladen..."));
            sperre.appendChild (span5);
 
            var pars2 =
                {
                    action: "query",
                    list: "logevents",
                    letitle: "User:" + steef_user_status.user,
                    letype: "block",
                    format: "json",
                    lelimit: 1
                };
            steef_user_status.params.push (pars2);
            steef_user_status.aktionen.push(steef_user_status.write_block_detail);
        }
        else
        {
            var span6 = document.createElement ("span");
            span6.style.color = "#008800";
            span6.appendChild (document.createTextNode (" nicht gesperrt"));
            sperre.appendChild (span6);
        }
        status_box.appendChild (sperre);
 
        steef_user_status.get_heading().parentNode.insertBefore (status_box, steef_user_status.get_heading().nextSibling);
 
        var pars3 =
        {
            action: "query",
            meta: "globaluserinfo",
            guiuser: steef_user_status.user,
            guiprop: "groups",
            format: "json"
        };
        steef_user_status.params.push (pars3);
        steef_user_status.aktionen.push(steef_user_status.write_global_group);
 
        window.setTimeout (function (thisObj) { thisObj.do_request (); }, 100, steef_user_status);
    },
 
    do_request: function ()
    {
        if (steef_user_status.params.length == 0)
        {
            return;
        }
 
        var params = steef_user_status.params[0];
        var aktion = steef_user_status.aktionen[0];
        steef_user_status.params.shift ();
        steef_user_status.aktionen.shift ();
 
        steef_user_status.ajax_request ("get",  params, aktion, aktion);
    },
 
    write_last_edit: function (antwort, textStatus, errortext)
    {
        if (textStatus != "success")
        {
            var error = document.createElement ("span");
            error.style.color = "red";
            error.appendChild (document.createTextNode ("Fehler (Benutzerstatus): " + errortext));
 
            document.getElementById ("steef_user_status_datum").parentNode.replaceChild (error, document.getElementById ("steef_user_status_datum"));
            window.setTimeout (function (thisObj) { thisObj.do_request (); }, 100, steef_user_status);
            return;
        }
 
        if (antwort.query.usercontribs.length < 1)
        {
            var message = document.createElement ("span");
            message.style.color = "#999999";
            message.style.fontStyle = "italic";
            message.appendChild (document.createTextNode (" kein Edit gefunden (nur gelöschte Beiträge?)"));
 
            document.getElementById ("steef_user_status_datum").parentNode.replaceChild (message, document.getElementById ("steef_user_status_datum"));
            window.setTimeout (function (thisObj) { thisObj.do_request (); }, 100, steef_user_status);
            return;
        }
 
        var datum_empfangen = antwort.query.usercontribs[0].timestamp;
        var datum = new Date ();
        datum.setUTCFullYear (datum_empfangen.substr (0, 4));
        datum.setUTCMonth (datum_empfangen.substr (5, 2) - 1);
        datum.setUTCDate (datum_empfangen.substr (8, 2));
        datum.setUTCHours (datum_empfangen.substr (11, 2));
        datum.setUTCMinutes (datum_empfangen.substr (14, 2));
        datum.setUTCSeconds (datum_empfangen.substr (17, 2));
 
        var jetzt = new Date ();
 
        if (jetzt < datum)
        {
            datum = jetzt - 1000;
        }
 
        var jahre = 0;
        var monate = 0;
        var tage = 0;
        var stunden = 0;
        var minuten = 0;
        var sekunden = 0;
 
        while (datum < jetzt)
        {
            jahre++;
            datum.setFullYear (datum.getFullYear () + 1);
        }
        datum.setFullYear (datum.getFullYear () - 1);
        jahre--;
 
        // Monate
        while (datum < jetzt)
        {
            monate++;
            datum.setMonth (datum.getMonth () + 1);
        }
        datum.setMonth (datum.getMonth () - 1);
        monate--;
 
        // Tage
        while (datum.getTime () + (24 * 60 * 60 * 1000) < jetzt)
        {
            tage++;
            datum.setTime (datum.getTime () + (24 * 60 * 60 * 1000));
        }
 
        // Stunden
        stunden = Math.floor ((jetzt - datum) / (60 * 60 * 1000));
        datum.setTime (datum.getTime () + stunden * 60 * 60 * 1000);
 
        // Minuten
        minuten = Math.floor ((jetzt - datum) / (60 * 1000));
        datum.setTime (datum.getTime () + minuten * 60 * 1000);
 
        // Sekunden
        sekunden = Math.floor ((jetzt - datum) / 1000);
 
        var diff = [];
 
        if (jahre == 1)
        {
            diff.push ("1 Jahr");
        }
        else if (jahre > 1)
        {
            diff.push (jahre + " Jahren");
        }
        if (monate > 0)
        {
            if (monate == 1)
            {
                diff.push ("1 Monat");
            }
            if (monate > 1)
            {
                diff.push (monate + " Monaten");
            }
        }
        if (tage > 0)
        {
            if (tage == 1)
            {
                diff.push ("1 Tag");
            }
            if (tage > 1)
            {
                diff.push (tage + " Tagen");
            }
        }
        if (stunden > 0)
        {
            if (stunden == 1)
            {
                diff.push ("1 Stunde");
            }
            if (stunden > 1)
            {
                diff.push (stunden + " Stunden");
            }
        }
        if (minuten > 0)
        {
            if (minuten == 1)
            {
                diff.push ("1 Minute");
            }
            if (minuten > 1)
            {
                diff.push (minuten + " Minuten");
            }
        }
        if (sekunden > 0 && steef_user_status.last_edit_seconds)
        {
            if (sekunden == 1)
            {
                diff.push ("1 Sekunde");
            }
            if (sekunden > 1)
            {
                diff.push (sekunden + " Sekunden");
            }
        }
 
        var diff_text = "";
        if (diff.length == 0)
        {
            if (steef_user_status.last_edit_seconds)
            {
                diff_text = "vor weniger als 1 Sekunde";
            }
            else
            {
                diff_text = "vor weniger als 1 Minute";
            }
        }
        else
        {
            diff_text = "vor " + diff.join(", ").replace (/(.*)\,([^,]*)/, "$1 und$2");
        }
 
        diff_text = diff_text + " (" + steef_user_status.formatDate (datum_empfangen) + ")";
 
        document.getElementById ("steef_user_status_datum").parentNode.replaceChild (document.createTextNode (diff_text), document.getElementById ("steef_user_status_datum"));
        window.setTimeout (function (thisObj) { thisObj.do_request (); }, 100, steef_user_status);
    },
 
    write_global_group: function (antwort, textStatus, errortext)
    {
        if (textStatus != "success")
        {
            var error = document.createElement ("span");
            error.style.color = "red";
            error.appendChild (document.createTextNode ("Fehler (Benutzerstatus): " + errortext));
 
            document.getElementById ("steef_user_status_global_group").parentNode.replaceChild (error, document.getElementById ("steef_user_status_global_group"));
            window.setTimeout (function (thisObj) { thisObj.do_request (); }, 100, steef_user_status);
            return;
        }
 
        var groups = antwort.query.globaluserinfo.groups;
 
        var glob = document.getElementById ("steef_user_status_global_group");
 
        if (groups !== undefined && groups.length > 0)
        {
            var fett = document.createElement ("b");
            fett.appendChild (document.createTextNode ("Globale Benutzergruppen:"));
            glob.appendChild (fett);
 
            var group_string = steef_user_status.groups.getLocalNames(groups).join(", ");
            glob.appendChild (document.createTextNode(" " + group_string.replace (/(.*)\,([^,]*)/, "$1 und$2")));
 
            glob.appendChild (document.createElement ("br"));
        }
 
        window.setTimeout (function (thisObj) { thisObj.do_request (); }, 100, steef_user_status);
    },
 
    write_block_detail: function (antwort, textStatus, errortext)
    {
        if (textStatus != "success")
        {
            var error = document.createElement ("span");
            error.style.color = "red";
            error.appendChild (document.createTextNode ("Fehler (Benutzerstatus): " + errortext));
 
            document.getElementById ("steef_user_status_block_time").parentNode.replaceChild (error, document.getElementById ("steef_user_status_block_time"));
            document.getElementById ("steef_user_status_block_reason").parentNode.replaceChild (error, document.getElementById ("steef_user_status_block_reason"));
            document.getElementById ("steef_user_status_blocker").parentNode.replaceChild (error, document.getElementById ("steef_user_status_blocker"));
            window.setTimeout (function (thisObj) { thisObj.do_request (); }, 100, steef_user_status);
            return;
        }
 
        var admin_link = document.createElement ("a");
        admin_link.className = "mw-userlink";
        admin_link.title = "Benutzer:" + antwort.query.logevents[0].user;
        admin_link.href = "/wiki/Benutzer:" + steef_user_status.utf8_escape (antwort.query.logevents[0].user);
        admin_link.appendChild (document.createTextNode (antwort.query.logevents[0].user));
 
        document.getElementById ("steef_user_status_blocker").parentNode.replaceChild (admin_link, document.getElementById ("steef_user_status_blocker"));
        var duration = antwort.query.logevents[0].block.duration;
        var expiry = "";
        if (duration == "infinite" || duration == "indefinite")
        {
            duration = "unbeschränkt";
            expiry = "nie";
        }
        else
        {
            expiry = steef_user_status.formatDate (antwort.query.logevents[0].block.expiry);
        }
        document.getElementById ("steef_user_status_block_duration").parentNode.replaceChild (document.createTextNode (" (" + duration + ")"), document.getElementById ("steef_user_status_block_duration"));
        document.getElementById ("steef_user_status_block_time").parentNode.replaceChild (document.createTextNode (" " + expiry), document.getElementById ("steef_user_status_block_time"));
        document.getElementById ("steef_user_status_block_reason").parentNode.replaceChild (steef_user_status.parseComment (antwort.query.logevents[0].comment), document.getElementById ("steef_user_status_block_reason"));
        window.setTimeout (function (thisObj) { thisObj.do_request (); }, 100, steef_user_status);
    },
 
    parseComment: function (text)
    {
        var comment = document.createElement ("span");
        comment.appendChild (document.createTextNode (" "));
 
        if (text === null || text === "")
        {
            comment.appendChild (document.createTextNode ("kein Sperrkommentar"));
            comment.fontStyle = "italic";
            return comment;
        }
 
        var intLink = /(.*?)\[\[((.*?)\|)?(.*?)\]\](.*)/;
        var suche = text;
        var ergebnis;
 
        while (ergebnis = intLink.exec (suche))
        {
            comment.appendChild (document.createTextNode (ergebnis[1]));
            var link = document.createElement ("a");
            if (ergebnis[2] === undefined)
            {
                link.href = "/wiki/" + steef_user_status.utf8_escape (ergebnis[4]);
                link.title = ergebnis[4];
                link.appendChild (document.createTextNode (ergebnis[4]));
            }
            else
            {
                link.href = "/wiki/" + steef_user_status.utf8_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;
    },
 
    formatDate: function (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();
    }
};
 
$(document).trigger('loadWikiScript', ['Benutzer:Steef389/js/user_status.js', steef_user_status]);
$(steef_user_status.init);
})(jQuery);