|
|
(2 intermediate revisions by 2 users not shown) |
Line 1: |
Line 1: |
| /* {{Catégorisation JS}}<nowiki> */
| |
|
| |
| /* imported from fr vikidia*/
| |
|
| |
| // Basé sur [[wp:en:User:Fran Rogers/dimorphism.js]] et [[wp:en:User:Splarka/sysopdectector.js]] ;
| |
| // Modifié et retravaillé par Bulest85 et Matteo1234321.
| |
| // Traduction en --> fr par Matteo1234321
| |
| // (n'hésitez surtout pas à vous plaindre du fait qu'il ne sait pas parler anglais car c'est une vérité)
| |
|
| |
| // Fonction qui met au pluriel au besoin.
| |
| function UserinfoJsFormatQty(qty, singular, plural) {
| |
| return String(qty).replace(/\d{1,3}(?=(\d{3})+(?!\d))/g, "$& ") + "\u00a0" + (qty == 1 ? singular : plural);
| |
| }
| |
|
| |
| function UserinfoJsFormatDateRel(old) {
| |
| // Ce code nécessite que l'horloge de l'ordinateur est correcte.
| |
| var age = new Date().getTime() - old.getTime();
| |
| var ageNumber, ageRemainder, ageWords;
| |
| if(age < 60000) {
| |
| // Utilisateur enregistré il y a moins d'une minute.
| |
| ageNumber = Math.floor(age / 1000);
| |
| ageWords = UserinfoJsFormatQty(ageNumber, "seconds", "secondes");
| |
| } else if(age < 3600000) {
| |
| // Utilisateur enregistré il y a moins d'une heure.
| |
| ageNumber = Math.floor(age / 60000);
| |
| ageWords = UserinfoJsFormatQty(ageNumber, "minute", "minutes");
| |
| } else if(age < 86400000) {
| |
| // Utilisateur enregistré il y a moins d'un jour.
| |
| ageNumber = Math.floor(age / 3600000);
| |
| ageWords = UserinfoJsFormatQty(ageNumber, "hour", "hours");
| |
| ageRemainder = Math.floor((age - ageNumber * 3600000) / 60000);
| |
| } else if(age < 604800000) {
| |
| // Utilisateur enregistré il y a moins d'une semaine.
| |
| ageNumber = Math.floor(age / 86400000);
| |
| ageWords = UserinfoJsFormatQty(ageNumber, "day", "days");
| |
| } else if(age < 2592000000) {
| |
| // Utilisateur enregistré il y a moins d'un mois.
| |
| ageNumber = Math.floor(age / 604800000);
| |
| ageWords = UserinfoJsFormatQty(ageNumber, "week", "weeks");
| |
| } else if(age < 31536000000) {
| |
| // Utilisateur enregistré il y a moins d'un an.
| |
| ageNumber = Math.floor(age / 2592000000);
| |
| ageWords = UserinfoJsFormatQty(ageNumber, "month", "month");
| |
| } else {
| |
| // Utilisateur enregistré il y a plus d'un an.
| |
| ageNumber = Math.floor(age / 31536000000);
| |
| ageWords = UserinfoJsFormatQty(ageNumber, "year", "years");
| |
| ageRemainder =
| |
| Math.floor((age - ageNumber * 31536000000) / 2592000000);
| |
| if(ageRemainder) {
| |
| ageWords += " " +
| |
| UserinfoJsFormatQty(ageRemainder, "month", "months");
| |
| }
| |
| }
| |
| return ageWords;
| |
| }
| |
|
| |
| // Afficher les infos utilisateur seulement sur la page utilisteur et de discussion dudit utilisateur...
| |
| if((mw.config.get("wgNamespaceNumber") == 2 || mw.config.get("wgNamespaceNumber") == 3) && !(/\//.test(mw.config.get("wgTitle")))) {
| |
| // Ajout d'un crochet...
| |
| mw.loader.using( ['mediawiki.util'], function() { $(function(){
| |
| // Demander les informations de l'utilisateur via l'API.
| |
| // Noter que ceci est autorisé jusqu'à l'âge de 5 minutes [traduction douteuse].
| |
| var et = encodeURIComponent(mw.config.get("wgTitle"));
| |
|
| |
| $.getJSON(mw.config.get("wgScriptPath") + "/api.php?format=json&action=query&list=users|usercontribs&usprop=blockinfo|editcount|gender|registration|groups&uclimit=1&ucprop=timestamp&ususers=" + et + "&ucuser=" + et + "&meta=allmessages&refix=grouppage-&amincludelocal=1")
| |
| .done(function(query) {
| |
| // Quand les informations arrivent, extrayons-en celles dont on a besoin.
| |
| if(!query.query) { return; } // Suggéré par [[wp:en:User:Gary]] pour éviter les erreurs JavaScript. --PS 25.08.2010
| |
| query = query.query;
| |
| var user, invalid, missing, groups, groupPages={}, editcount, registration, blocked, gender, lastEdited;
| |
| try {
| |
| user = query.users[0];
| |
| invalid = typeof user.invalid != "undefined";
| |
| missing = typeof user.missing != "undefined";
| |
| groups = (typeof user.groups == "object") ? user.groups : [];
| |
| editcount = (typeof user.editcount == "number") ? user.editcount : null;
| |
| registration = (typeof user.registration == "string") ?
| |
| new Date(user.registration) : null;
| |
| blocked = typeof user.blockedby != "undefined";
| |
| gender = (typeof user.gender == "string") ? user.gender : null;
| |
| lastEdited = (typeof query.usercontribs[0] == "object") &&
| |
| (typeof query.usercontribs[0].timestamp == "string") ?
| |
| new Date(query.usercontribs[0].timestamp) : null;
| |
| for (var am=0; am<query.allmessages.length; am++) {
| |
| groupPages[query.allmessages[am].name.replace("grouppage-","")] = query.allmessages[am]["*"].replace("{{ns:project}}:","Project:");
| |
| }
| |
| } catch(e) {
| |
| return; // Pas beaucoup à faira quand le serveur renvoie une erreur (par exemple le nom de l'utilisateur est mal formé)...
| |
| }
| |
|
| |
| // Formatage des informations affichées.
| |
| // Ces trois variables déterminent le genre de l'utilisateur/trice et modifient le texte.
| |
| var userf, userf2, userf3;
| |
| switch(gender) {
| |
| case "male":
| |
| userf = "", userf2 = "eur", userf3 = "eur";
| |
| break;
| |
| case "female":
| |
| userf = "e", userf2 = "rice", userf3 = "euse";
| |
| break;
| |
| default:
| |
| userf = "", userf2 = "eur", userf3 = "eur";
| |
| }
| |
| var statusText = "";
| |
| var ipUser = false;
| |
| var ipv4User = false;
| |
| var ipv6User = false;
| |
|
| |
| if (missing) {
| |
| statusText += "unregistered username";
| |
| } else if (invalid) {
| |
| ipv4User = mw.util.isIPv4Address(user.name);
| |
| ipv6User = mw.util.isIPv6Address(user.name);
| |
| ipUser = ipv4User || ipv6User;
| |
| if (ipv4User) {
| |
| statusText += "IPv4 anonymous user";
| |
| } else if (ipv6User) {
| |
| statusText += "IPv6 anonymous user";
| |
| } else {
| |
| statusText += "invalid username";
| |
| }
| |
| } else {
| |
| // L'utilisateur est enregistré et pourrait être dans un groupe privilégié. En dessous un liste desdits groupes.
| |
| // Nous avons juste besoin de ceux différents de ceux du programme (ou ceux à exclure).
| |
| var friendlyGroupNames = {
| |
| // Exclure les groupes implicites des utilisateurs ; par MW 1.17. --PS 17.02.2012
| |
| '*': false,
| |
| 'user': false,
| |
| autoconfirmed: "autoconfirmed" + userf,
| |
| sysop: "administrator" + userf2,
| |
| 'interface-admin': "admin" + userf2 + " interface",
| |
| bureaucrat: "bureaucrat",
| |
| checkuser: "checkuser" + userf2 + " User",
| |
| developer: "developer" + userf2,
| |
| accountcreator: "accountcreator",
| |
| 'import': "importer" + userf2,
| |
| transwiki: "transwiki" + userf2 + " importer",
| |
| 'ipblock-exempt': "ipblock" + userf + " exempt",
| |
| oversight: "oversighter" + userf3,
| |
| confirmed: "confirmed" + userf2 + " user" + userf,
| |
| abusefilter: "abusefilter" + userf2 + " filter",
| |
| 'abusefilter-helper': "abusefilter-helper",
| |
| autoreviewer: "autoreviewer" + userf2 + " reviewer" + userf,
| |
| epcoordinator: "Education Program course coordinator",
| |
| epcampus: "Education Program campus volunteer",
| |
| epinstructor: "Education Program instructor",
| |
| eponline: "Education Program online volunteer",
| |
| filemover: "file mover",
| |
| 'massmessage-sender': "mass message sender",
| |
| templateeditor: "template editor",
| |
| extendedconfirmed: "extended confirmed user",
| |
| extendedmover: "page mover",
| |
| 'flow-bot': "Bot Flow",
| |
| reviewer: "pending changes reviewer",
| |
| suppress: "nuker",
| |
| bot: "bot",
| |
| patroller: "patroller" + userf3
| |
| };
| |
|
| |
| var friendlyGroups = [];
| |
| for(var i = 0; i < groups.length; ++i) {
| |
| var s = groups[i];
| |
| var t = friendlyGroupNames.hasOwnProperty(s) ? friendlyGroupNames[s] : s;
| |
| if (t) {
| |
| if (groupPages.hasOwnProperty(s)) {
| |
| friendlyGroups.push("<a href=\"/wiki/" + encodeURIComponent( groupPages[s] ) + "\">" + t + "</a>");
| |
| } else {
| |
| friendlyGroups.push(t);
| |
| }
| |
| }
| |
| }
| |
| switch(friendlyGroups.length) {
| |
| case 0:
| |
| // L'utilisateur n'est pas dans un groupe privilégié.
| |
| // Changé à « utilisateur enregistré » (« registered user » en anglais) à la demande de [[wp:en:User:RiverStyx23]]. --PS 16.05.2010
| |
|
| |
| // statusText += "utilisateur";
| |
| if(blocked) {
| |
| statusText += "user" + userf2;
| |
| } else {
| |
| statusText += "registered" + userf2 + " user" + userf;
| |
| }
| |
| break;
| |
| case 1:
| |
| statusText += friendlyGroups[0];
| |
| break;
| |
| case 2:
| |
| statusText += friendlyGroups[0] + " et " + friendlyGroups[1];
| |
| break;
| |
| default:
| |
| statusText += friendlyGroups.slice(0, -1).join(", ") +
| |
| " and " + friendlyGroups[friendlyGroups.length - 1];
| |
| break;
| |
| }
| |
| }
| |
| // Statut de l'utilisateur ; est-il bloqué ?
| |
| if(blocked) {
| |
| statusText += "<a href=\"" + mw.config.get("wgScriptPath") +
| |
| "/index.php?title=Special:Log&page=" +
| |
| encodeURIComponent(mw.config.get("wgFormattedNamespaces")[2] + ":" + user.name) +
| |
| "&type=block\"> bloqué" + userf +"</a>";
| |
| }
| |
|
| |
| // Date de la création du compte.
| |
| if(registration) {
| |
| var firstLoggedUser = new Date("17:42, 22 January 2008"); // When the [[Special:Log/newusers]] was first activated
| |
| if(registration >= firstLoggedUser) {
| |
| statusText += ", account" + userf + " created <a href='" + mw.config.get("wgScriptPath") +
| |
| "/index.php?title=Special:Log&type=newusers&dir=prev&limit=1&user=" +
| |
| et + "'>" + UserinfoJsFormatDateRel(registration) + "</a>";
| |
| } else {
| |
| statusText += ", account" + userf + " created <a href='" + mw.config.get("wgScriptPath") +
| |
| "/index.php?title=Special:ListUsers&limit=1&username=" +
| |
| et + "'>" + UserinfoJsFormatDateRel(registration) + "</a>";
| |
| }
| |
| }
| |
|
| |
| // Compteur du nombre d'éditions.
| |
| if(editcount !== null) {
| |
| statusText += " with " +
| |
| "<a href=\"https://fr.vikidia.org/wiki/Spécial:Contributions/" +
| |
| encodeURIComponent(user.name) + "\">" +
| |
| UserinfoJsFormatQty(editcount, "edit", "edits") + "</a>";
| |
| }
| |
|
| |
| // Déterminant
| |
| if("AEIOaeio".indexOf(statusText.charAt(statusText.indexOf('>')+1)) >= 0) {
| |
| statusText = "An" + userf + " " + statusText;
| |
| } else {
| |
| statusText = "A" + userf + " " + statusText;
| |
| }
| |
|
| |
| // Point à la fin de la phrase, mais seulement si l'utilisateur a des contributions.
| |
| if(lastEdited) {
| |
| statusText += ".";
| |
| };
| |
|
| |
| // Dernière modification --PS 27.06.2010
| |
| // Ajout d'un lien à la page de contributions --PS 3.07.201
| |
| if(lastEdited) {
| |
| statusText += " Last edited <a href=\"" + mw.config.get("wgArticlePath").replace("$1", "Spécial:Contributions/" + encodeURIComponent(user.name)) + "\">" + UserinfoJsFormatDateRel(lastEdited) + "</a>";
| |
| };
| |
| // Ajouter le symbole de genre correct.
| |
| var fh = document.getElementById("firstHeading") ||
| |
| document.getElementById("section-0");
| |
| // Ajout de classes pour les utilisateurs bloqués, enregistrés et anonymes (IPs).
| |
| var newClasses = [];
| |
| if(blocked) {
| |
| newClasses.push("ps-blocked");
| |
| }
| |
| if(ipUser) {
| |
| newClasses.push("ps-anonymous");
| |
| } else if(invalid) {
| |
| newClasses.push("ps-invalid");
| |
| } else {
| |
| newClasses.push("ps-registered");
| |
| }
| |
| fh.className += (fh.className.length ? " " : "") + groups.map(function(s) {
| |
| return "ps-group-" + s;
| |
| }).concat(newClasses).join(" ");
| |
| var genderSpan = document.createElement("span");
| |
| genderSpan.id = "ps-gender-" + (gender || "unknown");
| |
| genderSpan.style.paddingLeft = "0.25em";
| |
| genderSpan.style.fontFamily = '"Lucida Grande", "Lucida Sans Unicode", "sans-serif"';
| |
| genderSpan.style.fontSize = "75%";
| |
| var genderSymbol;
| |
| switch(gender) {
| |
| case "male": genderSymbol = "\u2642"; break;
| |
| case "female": genderSymbol = "\u2640"; break;
| |
| default: genderSymbol = "";
| |
| }
| |
| genderSpan.appendChild(document.createTextNode(genderSymbol));
| |
| fh.appendChild(genderSpan);
| |
|
| |
| // Maintenant, ajouter les autres informations. Pas standard, mais au moins ça fait le taf ^^.
| |
| // Ajouter un point après le texte en faisant ainsi. --PS 3.07.2010
| |
|
| |
| var ss = document.getElementById("siteSub");
| |
| if(!ss) {
| |
| ss = document.createElement("div");
| |
| ss.id = "siteSub";
| |
| ss.innerHTML = "";
| |
| var bc = document.getElementById("bodyContent");
| |
| bc.insertBefore(ss, bc.firstChild);
| |
| }
| |
| ss.innerHTML = '<span id="ps-userinfo">' + statusText + '</span>' + ss.innerHTML + '.';
| |
| ss.style.display = "block";
| |
| });
| |
| }); });
| |
| }
| |
| /* </nowiki> */
| |
| importScript('User:DR/UserInfoEN.js'); // Backlink: [[User:DR/UserInfoEN.js]] | | importScript('User:DR/UserInfoEN.js'); // Backlink: [[User:DR/UserInfoEN.js]] |