Utilisateur:Od1n/ProtectionsModeles.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) ;

Chrome / Internet Explorer / Opera : maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl-F5.
// à exécuter sur [[Spécial:Modèles les plus liés]]

/* jshint esversion: 8 */
/* globals mw, $ */

if (mw.config.get('wgCanonicalSpecialPageName') === 'Mostlinkedtemplates') {

    // mise en évidence des redirections, pour éviter de modifier par erreur la page de destination
    // refs [[phab:T308504]]
    mw.loader.addStyleTag('.mw-spcontent .mw-redirect { color:#0b0; font-style:italic }');

    mw.loader.using('mediawiki.api', function () {
        $(async function ($) {
            'use strict';

            const lines = {};

            $('.special').find('li').each(function (_, li) {
                const title = li.querySelector('a').textContent;
                lines[title] = li;
            });

            const titles = Object.keys(lines);

            const userGroups = mw.config.get('wgUserGroups');
            const titlesLimit = (userGroups.includes('sysop') || userGroups.includes('bot')) ? 500 : 50;

            const api = new mw.Api();

            // ne pas utiliser forEach(), qui ne supporte pas les codes asynchrones
            for (const chunk of makeChunks(titles, titlesLimit)) {
                // requêtes POST, car avec des requêtes GET on peut avoir des erreurs "414 URI Too Long"
                const data = await api.post({
                    action: 'query',
                    titles: chunk,
                    prop: 'info',
                    inprop: 'protection',
                    formatversion: 2,
                });
                for (const page of data.query.pages) {
                    handlePage(page);
                }
            }

            function handlePage(page) {
                let iconeEdit = '';
                let iconeMove = '';
                for (const protection of page.protection) {
                    if (protection.type === 'edit') {
                        iconeEdit = icone(protection.level);
                    }
                    else if (protection.type === 'move') {
                        iconeMove = icone(protection.level);
                    }
                }
                const icones = iconeEdit + iconeMove;
                if (icones !== '') {
                    lines[page.title].insertAdjacentHTML('afterbegin', icones);
                }
            }

            function icone(level) {
                if (level === 'sysop') {
                    return '<img src="//upload.wikimedia.org/wikipedia/commons/thumb/6/6f/Crystal_Clear_action_lock1.png/15px-Crystal_Clear_action_lock1.png"> ';
                }
                else if (level === 'editextendedsemiprotected') {
                    return '<img src="//upload.wikimedia.org/wikipedia/commons/thumb/c/c6/Crystal_Clear_action_lock7.png/15px-Crystal_Clear_action_lock7.png"> ';
                }
                else if (level === 'autoconfirmed') {
                    return '<img src="//upload.wikimedia.org/wikipedia/commons/thumb/2/2b/Crystal_Clear_action_half_lock.png/15px-Crystal_Clear_action_half_lock.png"> ';
                }
                else {
                    return '';
                }
            }

            function makeChunks(arr, size) {
                const chunks = [];
                for (let i = 0; i < arr.length; i += size) {
                    chunks.push(arr.slice(i, i + size));
                }
                return chunks;
            }

        });
    });
}