Benutzer:Steef389/js/user status.js
aus Wikipedia, der freien Enzyklopädie
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
// Dieses Script zeigt auf Benutzerseiten einige Informationen über den Benutzer an
// von [[Benutzer:Steef389]]
(function ($) {
var user_status =
{
version: 1.20,
// Config
lastEditSeconds: false, // Show seconds of last edit
styleMissingData: "color: #999999; font-style: italic", // Styles for missing entries
styleLoading: "font-style: italic",
styleBlocked: "color: #cc0000",
styleNotBlocked: "color: #008800",
viewPatrolNumber: false,
groups:
{
groupnames:
{
// Allgemeine Gruppen
"autoconfirmed": "Autoconfirmed",
"autoreview": "Passiver Sichter",
"editor": "Sichter",
"bot": "Bot",
"sysop": "Administrator",
"bureaucrat": "Bürokrat",
"checkuser": "Checkuser",
"reviewer": "Prüfer",
"accountcreator": "Benutzerkonten-Ersteller",
"import": "Importeur",
"ipblock-exempt": "IP-Sperre-Ausnahme",
"oversight": "Oversighter",
"confirmed": "Bestätigter Benutzer",
"transwiki": "Transwiki-Importeur",
// Globale Gruppen
"abusefilter": "Missbrauchsfilter-Bearbeiter",
"editinterface": "Benutzeroberflächenbearbeiter",
"founder": "Gründer",
"Global_bot": "Globaler Bot",
"Global_rollback": "Globaler Zurücksetzer",
"Global_sysops": "Globaler Administrator",
"Ombudsmen": "Ombudsperson",
"steward": "Steward",
"sysadmin": "Systemadministrator",
"Staff": "Staff",
"global-ipblock-exempt": "Globale IP-Sperre-Ausnahme",
// Seltene Gruppen
"recursive-export": "recursive-export",
"API_High_Limit_Requestor": "API_High_Limit_Requestor",
"New_wikis_importer": "New_wikis_importer"
},
error_message: "(Fehlende Gruppe)",
ignore_list: ["*", "user"],
getLocalNames: function (/* array */ group_arr) /* @return array */
{
var res = [];
for (var i = 0; i < group_arr.length; ++i)
{
if ($.inArray (group_arr [i], user_status.groups.ignore_list) !== -1)
{
continue;
}
var group = group_arr[i];
if (typeof(user_status.groups.groupnames[group]) !== "undefined")
{
res.push (user_status.groups.groupnames[group]);
}
else
{
res.push (group + " " + user_status.groups.error_message);
}
}
return res;
}
},
ajaxRequest: function (method, params, on_success)
{
if (method.toLowerCase() !== "post" && method.toLowerCase() !== "get")
{
method = 'get';
}
var on_error = function (XMLHttpRequest, textStatus, errorThrown)
{
mw.util.jsMessage("<span style=\"color: #ff0000\">Userstatus: Fehler bitte <a href=\"" + mw.util.getUrl("Benutzer Diskussion:Steef389") + "\">Steef389</a> melden.<br />Genauer Fehler: " + errorThrown + "</span>", "userstatus_error_message");
throw "Userstatus: AJAX-Request failed";
};
$.ajax (
{
url: mw.util.wikiScript("api"),
data: params,
dataType: "json",
type: method.toUpperCase(),
success: on_success,
error: on_error
} );
},
getHeading: function ()
{
var heading = $("#firstHeading");
// Section 0 Edit-Button
if (heading.length === 0)
{
heading = $("#section-0");
if (heading.length === 0)
{
mw.util.jsMessage("<span style=\"color: #ff0000\">Sperrloganzeige: Konnte Überschrift nicht finden, bitte <a href=\"" + mw.util.getUrl("Benutzer Diskussion:Steef389") + "\">Steef389</a> melden.</span>", "sperrloganzeige_error_message");
throw "Can't find heading";
}
}
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");
var params =
{
action: 'query',
list: 'users',
ususers: user,
usprop: 'blockinfo|groups|editcount|registration',
format: 'json'
};
user_status.user = user;
user_status.ajaxRequest("get", params, user_status.writeCommonInfo);
},
actions: [],
writeCommonInfo : function (answer)
{
if (typeof(answer.query.users[0].missing) !== "undefined" || typeof(answer.query.users[0].invalid) !== "undefined")
{
return;
}
// Fix size in vector
mw.util.addCSS(".skin-vector div#steef_user_status_box { font-size: 0.8em; }");
var edits = answer.query.users[0].editcount;
var registration = answer.query.users[0].registration;
var groups = answer.query.users[0].groups;
var blocked = (typeof (answer.query.users[0].blockreason) !== "undefined");
// Box erstellen
var status_box = $(mw.html.element ("div", { style: "border-bottom: 1px solid #AAAAAA" , id: "steef_user_status_box" }));
var ul = $(mw.html.element ("ul", { style: "list-style: none" }));
status_box.append (ul);
ul.append ($(mw.html.element ("li", { id: "steef_user_status_editcount" }))
.append (mw.html.element ("b", {}, "Bearbeitungen:"))
.append (" " + edits)
);
// Sichtungen
if (user_status.viewPatrolNumber)
{
ul.append ($(mw.html.element ("li", { id: "steef_user_status_patrolcount" }))
.append (mw.html.element ("b", {}, "Sichtungen:"))
.append (" ")
.append ($(mw.html.element ("span", { style: user_status.styleLoading, id: "steef_user_status_patrolcount_loading" }, "wird geladen...")))
);
user_status.actions.push (
{
apiparams:
{
action: "query",
prop: "revisions",
rvlimit: 1,
rvprop: "content",
titles: "User:" + user_status.user + "/Sichterbeiträge",
format: "json"
},
func : user_status.writePatrolCount
});
}
var regdate;
if (registration !== null && registration !== "")
{
regdate = user_status.formatDate (registration);
}
else
{
regdate = $(mw.html.element ("span", { style: user_status.styleMissingData }, "<nicht in Datenbank>"));
}
ul.append ($(mw.html.element ("li", { id: "steef_user_status_reg_date" }))
.append (mw.html.element ("b", {}, "Registrierungsdatum:"))
.append (" ")
.append (regdate)
);
// lokale Gruppen
if (typeof (groups) !== "undefined")
{
var groupstr = user_status.groups.getLocalNames(groups).join(", ");
var group;
if (groupstr !== "")
{
group = groupstr.replace (/(.*)\,([^,]*)/, "$1 und$2");
}
else
{
group = $(mw.html.element ("span", { style: user_status.styleMissingData }, "keine Gruppen"));
}
ul.append ($(mw.html.element ("li", { id: "steef_user_status_local_group" }))
.append (mw.html.element ("b", {}, "Lokale Benutzergruppen:"))
.append (" ")
.append (group)
);
}
ul.append ($(mw.html.element ("li", { id: "steef_user_status_global_group", style: "display: none" }))
.append (mw.html.element ("b", {}, "Globale Benutzergruppen:"))
.append (" ")
.append ($(mw.html.element ("span", { id: "steef_user_status_global_group_loading" }, "wird geladen...")))
);
// Letzter Edit
if (edits > 0)
{
ul.append ($(mw.html.element ("li", { id: "steef_user_status_last_edit" }))
.append (mw.html.element ("b", {}, "Letzter Edit:"))
.append (" ")
.append ($(mw.html.element ("span", { style: user_status.styleLoading, id: "steef_user_status_last_edit_loading" }, "wird geladen...")))
);
user_status.actions.push (
{
apiparams:
{
action: "query",
list: "usercontribs",
ucuser: user_status.user,
uclimit: 1,
format: "json"
},
func : user_status.writeLastEdit
});
}
ul = $(mw.html.element ("ul", { style: "list-style: none" }));
status_box.append (ul);
// Sperren
ul.append ($(mw.html.element ("li", { id: "steef_user_status_block_status" }))
.append (mw.html.element ("b", {}, "Sperrstatus:"))
.append (" ")
.append ($(mw.html.element ("span", { style: ((blocked) ? user_status.styleBlocked : user_status.styleNotBlocked), id: "steef_user_status_block_status_span" }, ((blocked) ? "gesperrt" : "nicht gesperrt"))))
);
if (blocked)
{
ul.append ($(mw.html.element ("li", { id: "steef_user_status_block_time" }))
.append (mw.html.element ("b", {}, "Sperrende:"))
.append (" ")
.append ($(mw.html.element ("span", { style: user_status.styleLoading, id: "steef_user_status_block_time_loading" }, "wird geladen...")))
);
ul.append ($(mw.html.element ("li", { id: "steef_user_status_block_reason" }))
.append (mw.html.element ("b", {}, "Sperrbegründung:"))
.append (" ")
.append ($(mw.html.element ("span", { style: user_status.styleLoading, id: "steef_user_status_block_reason_loading" }, "wird geladen...")))
);
ul.append ($(mw.html.element ("li", { id: "steef_user_status_blocker" }))
.append (mw.html.element ("b", {}, "Sperrender:"))
.append (" ")
.append ($(mw.html.element ("span", { style: user_status.styleLoading, id: "steef_user_status_blocker_loading" }, "wird geladen...")))
);
user_status.actions.push (
{
apiparams:
{
action: "query",
list: "logevents",
letitle: "User:" + user_status.user,
letype: "block",
format: "json",
lelimit: 1
},
func : user_status.writeBlockDetail
});
}
user_status.getHeading ().after (status_box);
user_status.actions.push (
{
apiparams:
{
action: "query",
meta: "globaluserinfo",
guiuser: user_status.user,
guiprop: "groups",
format: "json"
},
func : user_status.writeGlobalGroup
});
user_status.doRequest ();
},
doRequest: function ()
{
var action = user_status.actions[0];
user_status.actions.shift ();
user_status.ajaxRequest ("get", action.apiparams, action.func);
if (user_status.actions.length > 0)
{
window.setTimeout (function (thisObj) { thisObj.doRequest (); }, 100, user_status);
}
},
writeLastEdit: function (answer, textStatus)
{
if (answer.query.usercontribs.length < 1)
{
$("#steef_user_status_last_edit_loading").replace (mw.html.element ("span", { style: user_status.styleMissingData }, "kein Edit gefunden (nur gelöschte Beiträge?)"));
return;
}
var date_str = answer.query.usercontribs[0].timestamp;
var date = new Date ();
date.setUTCFullYear (date_str.substr (0, 4));
date.setUTCMonth (date_str.substr (5, 2) - 1);
date.setUTCDate (date_str.substr (8, 2));
date.setUTCHours (date_str.substr (11, 2));
date.setUTCMinutes (date_str.substr (14, 2));
date.setUTCSeconds (date_str.substr (17, 2));
var now = new Date ();
if (now < date)
{
date = now - 1000;
}
var diff = {
years: 0,
months: 0,
days: 0,
hours: 0,
minutes: 0,
seconds: 0
};
// Jahre
diff.years = now.getFullYear () - date.getFullYear ();
date.setFullYear (now.getFullYear ());
if (date > now)
{
--diff.years;
date.setFullYear (date.getFullYear () - 1);
}
// Monate
while (date < now)
{
diff.months++;
date.setMonth (date.getMonth () + 1);
}
date.setMonth (date.getMonth () - 1);
diff.months--;
// Tage
while (date.getTime () + (24 * 60 * 60 * 1000) < now)
{
diff.days++;
date.setTime (date.getTime () + (24 * 60 * 60 * 1000));
}
// Stunden
diff.hours = Math.floor ((now - date) / (60 * 60 * 1000));
date.setTime (date.getTime () + diff.hours * 60 * 60 * 1000);
// Minuten
diff.minutes = Math.floor ((now - date) / (60 * 1000));
date.setTime (date.getTime () + diff.minutes * 60 * 1000);
// Sekunden
diff.seconds = Math.floor ((now - date) / 1000);
var diff_str = [];
if (diff.years > 0)
{
diff_str.push (diff.years + " Jahr" + ((diff.years > 1) ? "en" : ""));
}
if (diff.months > 0)
{
diff_str.push (diff.months + " Monat" + ((diff.months > 1) ? "en" : ""));
}
if (diff.days > 0)
{
diff_str.push (diff.days + " Tag" + ((diff.days > 1) ? "en" : ""));
}
if (diff.hours > 0)
{
diff_str.push (diff.hours + " Stunde" + ((diff.hours > 1) ? "n" : ""));
}
if (diff.minutes > 0)
{
diff_str.push (diff.minutes + " Minute" + ((diff.minutes > 1) ? "n" : ""));
}
if (diff.seconds > 0 && user_status.lastEditSeconds)
{
diff_str.push (diff.seconds + " Sekunde" + ((diff.seconds > 1) ? "n" : ""));
}
var diff_text = "";
if (diff_str.length === 0)
{
if (user_status.lastEditSeconds)
{
diff_text = "vor weniger als 1 Sekunde";
}
else
{
diff_text = "vor weniger als 1 Minute";
}
}
else
{
diff_text = "vor " + diff_str.join(", ").replace (/(.*)\,([^,]*)/, "$1 und$2");
}
diff_text = diff_text + " (" + user_status.formatDate (date_str) + ")";
$("#steef_user_status_last_edit_loading").replaceWith (diff_text);
},
writeGlobalGroup: function (answer, textStatus)
{
var groups = answer.query.globaluserinfo.groups;
if (typeof(groups) !== "undefined" && groups.length > 0)
{
$("#steef_user_status_global_group_loading").replaceWith (user_status.groups.getLocalNames(groups).join(", ").replace (/(.*)\,([^,]*)/, "$1 und$2"));
$("#steef_user_status_global_group").css ("display", "inline");
}
// Global lock
if (typeof(answer.query.globaluserinfo.locked) !== "undefined")
{
$("#steef_user_status_block_status_span").text ($("#steef_user_status_block_status_span").text () + " [locked]");
}
},
writeBlockDetail: function (answer, textStatus)
{
var duration = "undefined";
var expiry = "undefined";
if (typeof(answer.query.logevents[0].params) !== "undefined")
{
duration = answer.query.logevents[0].params.duration;
expiry = "";
if (duration === "infinite" || duration === "indefinite")
{
duration = "unbeschränkt";
expiry = "nie";
}
else
{
expiry = user_status.formatDate (answer.query.logevents[0].params.expiry);
}
}
$("#steef_user_status_block_status_span").text ("gesperrt (" + duration + ")");
$("#steef_user_status_block_time_loading").replaceWith (expiry);
$("#steef_user_status_block_reason_loading").replaceWith (user_status.parseComment (answer.query.logevents[0].comment, (typeof(answer.query.logevents[0].commenthidden) !== "undefined")));
$("#steef_user_status_blocker_loading").replaceWith (mw.html.element ("a", { "class": "mw-userlink", title: "Benutzer:" + answer.query.logevents[0].user, href: mw.util.getUrl("Benutzer:" + answer.query.logevents[0].user) }, answer.query.logevents[0].user));
},
writePatrolCount: function (answer, textStatus)
{
for (var key in answer.query.pages)
{
if ("-1" !== key)
{
var patrolled_edits = parseInt(answer.query.pages[key].revisions[0]["*"], 10);
if (0 < patrolled_edits)
{
$("#steef_user_status_patrolcount_loading").replaceWith ("" + patrolled_edits);
return;
}
}
break;
}
$("#steef_user_status_patrolcount_loading").replaceWith (mw.html.element ("span", { style: user_status.styleMissingData }, "nicht verfügbar"));
},
parseComment: function (text, hidden)
{
var comment = $(mw.html.element ("span", { "class": "comment", style: "font-style: normal" }));
if (typeof (text) === "undefined")
{
if (hidden)
{
comment.append ("Begründung entfernt").css ("color", "#999999");
return comment;
}
else
{
mw.util.jsMessage("<span style=\"color: #ff0000\">Userstatus: Bitte Steef389 folgendes auf die <a href=\"" + mw.util.getUrl("Benutzer Diskussion:Steef389") + "\">Diskussionsseite</a> setzen:<br /><i>Undefined Comment auf Seite " + user_status.user + "</i></span>", "user_status_error_message");
comment.append ("undefined").css ("color", "red");
return comment;
}
}
else if (text === null || text === "")
{
comment.append ("kein Sperrkommentar").css ("color", "#999999");
return comment;
}
var intLink = /(.*?)\[\[((.*?)\|)?(.*?)\]\](.*)/;
var suche = text;
var ergebnis;
while (null !== (ergebnis = intLink.exec (suche)))
{
comment.append (ergebnis[1]);
if (ergebnis[2] === undefined)
{
comment.append (
mw.html.element (
'a',
{
href: mw.util.getUrl(ergebnis[4]),
title: ergebnis[4]
},
ergebnis[4]
)
);
}
else
{
comment.append (
mw.html.element (
'a',
{
href: mw.util.getUrl(ergebnis[3]),
title: ergebnis[3]
},
ergebnis[4]
)
);
}
suche = ergebnis[5];
}
comment.append (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', user_status]);
$(mw.loader.using('mediawiki.util', user_status.init));
})(jQuery);