Benutzer:1steenfa/user-status.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
(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);