Aller au contenu

Utilisateur:Antimuonium/OnlineAdmins.js

Une page de Wikipédia, l'encyclopédie libre.
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();