Utilisateur:Antimuonium/OnlineAdmins.js
Apparence
Note : après avoir enregistré la page, vous devrez forcer le rechargement complet du cache de votre navigateur pour voir les changements.
Mozilla / Firefox / Konqueror / Safari : maintenez la touche Majuscule (Shift) en cliquant sur le bouton Actualiser (Reload) ou pressez Maj-Ctrl-R (Cmd-R sur Apple Mac) ;
Firefox (sur GNU/Linux) / Chrome / Internet Explorer / Opera : maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl-F5./*
* This script shows the number of online admins.
*/
async function init() {
/// INITIALISATION DES VARIABLES
let listAdmins = [];
let listAdmins_LastTimestamp = [];
let listAdmins_Type = [];
let index = 0;
let nowTimestamp = new Date();
let minutes = 10;
let referenceTimestamp = new Date(nowTimestamp); // timestamp de référence, x minutes avant l'heure actuelle
referenceTimestamp.setMinutes(nowTimestamp.getMinutes() - minutes);
/// RÉCUPÉRATION DE LA LISTE DES ADMINS ACTIFS
// actifs = durant les 30 derniers jours (pour économiser des ressources par rapport à liste d'admins complète)
let urlQuery = `${mw.config.get('wgServer')}${mw.config.get('wgScriptPath')}/api.php?action=query&list=allusers&augroup=sysop&aulimit=5000&auactiveusers=true&format=json`;
let apiQuery = await fetch(urlQuery, {
method: "GET"
});
apiQuery = await apiQuery.json(); // On indique que le résultat est un JSON
allusers = apiQuery.query.allusers;
/// RÉCUPÉRATION DE L'HORODATAGE DE LA DERNIÈRE MODIFICATION DE CHAQUE ADMIN
for (let i = 0; i < allusers.length; i++) {
let username = allusers[i].name;
let userEncoded = encodeURIComponent(username);
let urlQuery2 =
`${mw.config.get('wgServer')}${mw.config.get('wgScriptPath')}/api.php?action=query&format=json&list=usercontribs|logevents|abuselog` +
`&uclimit=1&ucprop=timestamp&ucuser=${userEncoded}&lelimit=1&leprop=timestamp&leuser=${userEncoded}&afllimit=1&aflprop=timestamp&afluser=${userEncoded}`;
let apiQuery2 = await fetch(urlQuery2, {
method: "GET"
});
apiQuery2 = await apiQuery2.json(); // On indique que le résultat est un JSON
// Contributions
if (apiQuery2.query.usercontribs[0]) {
let timestamp = new Date(apiQuery2.query.usercontribs[0].timestamp);
if (timestamp > referenceTimestamp) {
listAdmins_LastTimestamp[index] = timestamp;
listAdmins_Type[index] = "contrib";
listAdmins[index] = username;
}
}
// Journaux des logs
if (apiQuery2.query.logevents[0]) {
let timestamp = new Date(apiQuery2.query.logevents[0].timestamp);
if (timestamp > referenceTimestamp) {
if (!listAdmins_LastTimestamp[index] || listAdmins_LastTimestamp[index] < timestamp) {
listAdmins_LastTimestamp[index] = timestamp;
listAdmins_Type[index] = "logevents";
listAdmins[index] = username;
}
}
}
// Journaux des filtrages
if (apiQuery2.query.abuselog[0]) {
let timestamp = new Date(apiQuery2.query.abuselog[0].timestamp);
if (timestamp > referenceTimestamp) {
if (!listAdmins_LastTimestamp[index] || listAdmins_LastTimestamp[index] < timestamp) {
listAdmins_LastTimestamp[index] = timestamp;
listAdmins_Type[index] = "abuselog";
listAdmins[index] = username;
}
}
}
if (listAdmins_LastTimestamp.length > 0) {
if (listAdmins_LastTimestamp[index] > referenceTimestamp) {
index += 1;
}
}
}
/// AFFICHAGE DU RÉSULTAT
let N = listAdmins.length;
// Création de l'item englobant <li>
var li = document.createElement('li');
li.classList.add("mw-list-item");
// Création du <span> affichant le nombre d'admins en ligne
var span = document.createElement('span');
span.setAttribute("id", "onlineAdminsNumber")
let spancolor;
if (N < 5) spancolor = "red"
else if (N >= 5 && N < 10) spancolor = "#e67600"
else if (N >= 10 && N < 15) spancolor = "green"
else if (N >= 15 && N < 20) spancolor = "blue"
else spancolor = "purple"
span.style.color = spancolor;
span.innerHTML = N + ' admin' + (N < 2 ? '' : 's') + ' en ligne';
li.appendChild(span);
// Création de la liste des admins
var ul = document.createElement('ul');
ul.setAttribute("id", "onlineAdminsList");
ul.style.fontSize = "9pt";
ul.style.marginLeft = "10pt";
ul.style.textIndent = "4pt";
ul.style.lineHeight = "0.9";
ul.style.display = "none";
for (var i = 0; i < N; i++) { // Création d'un <li> pour chaque admin en ligne
var username = listAdmins[i];
var liAdmin = document.createElement('li');
liAdmin.style.listStyleType = "'▸'";
var spanAdmin = document.createElement('span');
var aAdmin = document.createElement('a');
var href;
switch (listAdmins_Type[i]) {
case "contrib":
href = mw.config.get('wgServer') + mw.config.get('wgArticlePath').split('$1').join('Special:Contributions/' + username);
break;
case "logevents":
href = mw.config.get('wgServer') + mw.config.get('wgArticlePath').split('$1').join('Special:Journal/' + username);
break;
case "abuselog":
href = mw.config.get('wgServer') + "/w/index.php?title=Spécial:Journal_du_filtre_antiabus&wpSearchUser=" + username;
break;
}
aAdmin.setAttribute('href', href)
aAdmin.setAttribute('target', '_blank')
aAdmin.innerHTML = username;
spanAdmin.appendChild(aAdmin);
liAdmin.appendChild(spanAdmin);
ul.appendChild(liAdmin);
}
// Ajout de la liste des admins
li.appendChild(ul);
// Ajout du <li> englobant
var nav = document.getElementById("p-navigation");
if (nav) nav.getElementsByTagName("ul")[0].appendChild(li);
/// AFFICHER LA LISTE DES ADMINS EN LIGNE PAR L'UTILISATEUR
var spanOnlineAdmins = document.getElementById("onlineAdminsNumber");
spanOnlineAdmins.addEventListener("click", toggleList);
function toggleList() {
var ulOnlineAdminsList = document.getElementById("onlineAdminsList");
if (ulOnlineAdminsList.style.display == "none") ulOnlineAdminsList.style.display = "inherit"
else ulOnlineAdminsList.style.display = "none"
}
}
init();