Utilisateur:Od1n/WhatlinkshereDeluxe.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) ;
Firefox (sur GNU/Linux) / Chrome / Internet Explorer / Opera : maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl-F5./*
* WhatlinkshereDeluxe
*
* Permet de comptabiliser le nombre de pages liées
* Documentation : [[Projet:JavaScript/Notices/WhatlinkshereDeluxe]]
*
* {{Catégorisation JS|WhatlinkshereDeluxe}}
*/
if (mw.config.get('wgCanonicalSpecialPageName') === 'Whatlinkshere') {
mw.loader.using(['mediawiki.util', 'mediawiki.Title'], function () {
$(function ($) {
'use strict';
function isParamEnabled(name) {
var value = mw.util.getParamValue(name);
return !!value && value !== '0';
}
$('p:contains("Les pages ci-dessous")').eq(0).each(function () {
this.innerHTML = this.innerHTML.replace('Les pages ci-dessous', '<span id="WhatlinkshereRecap">0</span> pages');
});
var Recap = document.getElementById('WhatlinkshereRecap');
if (!Recap) { return; }
var TitrePage = mw.config.get('wgRelevantPageName');
var Namespaces = mw.util.getParamValue('namespace') || '';
if (isParamEnabled('invert') && Namespaces) {
// ["0", "1", "2", "3" ...]
var allNamespaces = Object.keys(mw.config.get('wgFormattedNamespaces')).filter(function (val) {
return val >= 0;
});
var splitNamespaces = Namespaces.split('|');
Namespaces = allNamespaces.filter(function (val) {
return !splitNamespaces.includes(val);
}).join('|');
}
var Transclusions = !isParamEnabled('hidetrans');
var Links = !isParamEnabled('hidelinks');
var Redirs = !isParamEnabled('hideredirs');
var Images = new mw.Title(TitrePage).getNamespaceId() === 6
&& !isParamEnabled('hideimages');
function updateFunction(count) {
if (count <= 100000) {
Recap.innerHTML = count;
} else {
Recap.innerHTML = '100000+';
return false;
}
}
function whenAllDone() {
Recap.style.fontWeight = 'bold';
}
var userGroups = mw.config.get('wgUserGroups');
var apiLimit = userGroups.includes('sysop') || userGroups.includes('bot') ? 5000 : 500;
function requete(origParams, progressFunction, doneFunction, continueParams) {
var params = continueParams
? Object.assign({}, origParams, continueParams)
: Object.assign({
'action' : 'query',
'format' : 'json',
}, origParams);
$.getJSON(mw.util.wikiScript('api'), params, function (data) {
var shouldContinue = progressFunction(data);
if (!data.continue || shouldContinue === false) {
doneFunction();
} else {
requete(params, progressFunction, doneFunction, data.continue);
}
});
}
var pageCount = 0;
var linksDone = false;
var transclusionsDone = false;
var imagesDone = false;
if (!Links && !Redirs) {
linksDone = true;
tryAllDone();
} else {
requete({
'list' : 'backlinks',
'bllimit' : apiLimit,
'blfilterredir' : (!Redirs ? 'nonredirects' : !Links ? 'redirects' : 'all'),
'blnamespace' : Namespaces,
'bltitle' : TitrePage,
}, function (data) {
pageCount += data.query.backlinks.length;
return updateFunction(pageCount);
}, function () {
linksDone = true;
tryAllDone();
});
}
if (!Transclusions) {
transclusionsDone = true;
tryAllDone();
} else {
requete({
'list' : 'embeddedin',
'eilimit' : apiLimit,
'einamespace' : Namespaces,
'eititle' : TitrePage,
}, function (data) {
pageCount += data.query.embeddedin.length;
return updateFunction(pageCount);
}, function () {
transclusionsDone = true;
tryAllDone();
});
}
if (!Images) {
imagesDone = true;
tryAllDone();
} else {
requete({
'list' : 'imageusage',
'iulimit' : apiLimit,
'iunamespace' : Namespaces,
'iutitle' : TitrePage,
}, function (data) {
pageCount += data.query.imageusage.length;
return updateFunction(pageCount);
}, function () {
imagesDone = true;
tryAllDone();
});
}
function tryAllDone() {
if (linksDone && transclusionsDone && imagesDone) {
whenAllDone();
}
}
});
});
}