Utilisateur:Od1n/EtatsFiltres.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.
/*
 * Script pour aider à mettre à jour [[Wikipédia:AbuseFilter/Tableau de bord]]
 */

/* globals Promise, mw, $ */

mw.loader.using('mediawiki.api', function () {
    mw.hook('wikipage.content').add(function ($content) {
        'use strict';

        function getFilters() {
            return new Promise(function (resolve, reject) {
                var filters = [];
                var userGroups = mw.config.get('wgUserGroups');
                var apiLimit = userGroups.includes('sysop') || userGroups.includes('bot') ? 5000 : 500;
                function makeRequest(apiContinue) {
                    var params = {
                        action: 'query',
                        list: 'abusefilters',
                        abfprop: ['id', 'status'],
                        abflimit: apiLimit,
                    };
                    if (apiContinue) {
                        Object.assign(params, apiContinue);
                    }
                    new mw.Api().get(params).done(function (data) {
                        if (!data.query) {
                            reject();
                        }
                        filters = filters.concat(data.query.abusefilters);
                        if (data['continue']) {
                            makeRequest(data['continue']);
                        } else {
                            resolve(filters);
                        }
                    });
                }
                makeRequest();
            });
        }

        getFilters().then(function (filters) {
            var etats = {};

            filters.forEach(function (filter) {
                if (filter.enabled !== undefined) {
                    etats[filter.id] = '<span style="color:green">(activé)</span>';
                } else if (filter.deleted !== undefined) {
                    etats[filter.id] = '<span style="color:red">(supprimé)</span>';
                } else {
                    etats[filter.id] = '<span style="color:orange">(désactivé)</span>';
                }
            });

            $content.find('.mw-parser-output').find('a').each(function (_, link) {
                // on traite les liens vers [[Spécial:Filtre antiabus/<nombre>]]
                var match = (link.title || '').match(/^Spécial:Filtre antiabus\/(\d+)$/);
                if (!match) {
                    return;
                }
                var filterId = match[1];

                // on limite aux liens dont le texte est un nombre (non formaté, ou formaté)
                if (!/^(\d+|\d{1,3}(\xA0\d{3})*)$/.test(link.textContent)) {
                    return;
                }

                var etat = etats[filterId] || '???';

                link.insertAdjacentHTML('afterend', '\xA0' + etat);
            });
        });

    });
});