Utilisateur:Od1n/EtatsFiltres.js
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);
});
});
});
});