Utilisateur:0x010C/script/CatPurge.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.
var CATPvars_Texts = {
	"purgelink"              : "Purger entièrement cette catégorie",
	"waitingmessage"         : "$1 articles purgés",
	"successnotif"           : "<span>Fin de l'execution de <span style=\"font-style: italic;\">catpurge</span>.<br/>$1 articles purgés !</span>",
};
var CATPvars_nb = 0;
var CATPvars_crawl_started = 1;
var CATPvars_crawl_finished = 0;
var CATPvars_already_crawled = [];


$(function() {
	if ($(".ns-14").length > 0)
		$('#firstHeading').before('<div style="float:right;" id="catpurge-link"><small>[<a href="javascript:catpurge_init();">' + CATPvars_Texts['purgelink'] + '</a>]</small></div>');
});


function catpurge_init() {
	var limit = (mw.config.get('wgUserGroups').indexOf("sysop") != -1 || mw.config.get('wgUserGroups').indexOf("bot") != -1) ? '5000' : '500';
	$("#catpurge-link").html('<small>[' + CATPvars_Texts['waitingmessage'].split("$1").join('<span id="catpurge-nb">0</span>') + ']</small>');
	CATPvars_already_crawled[0] = mw.config.get('wgPageName');
	catpurge_crawl(mw.config.get('wgPageName'), limit, '');
}


function catpurge_crawl(catname, limit, cmcontinue) {
	$.ajax({
		url: mw.util.wikiScript('api'),
		method: 'POST',
		data: {
			action: 'query',
			format: 'json',
			list: 'categorymembers',
			cmtitle: catname,
			cmprop: 'title',
			cmtype: 'subcat',
			gcmlimit: limit,
		},
		dataType: 'json',
		success: function(data) {
			$.each(data.query.categorymembers, function(k, v) {
				if (CATPvars_already_crawled.indexOf(v.title) == -1) {
					CATPvars_crawl_started += 1;
					CATPvars_already_crawled[CATPvars_already_crawled.length] = v.title;
					catpurge_crawl(v.title, limit, '');
				}
			});
			if (typeof(data.continue) != "undefined") {
				catpurge_crawl(catname, limit, data.continue.cmcontinue);
			} else {
				catpurge_purge(catname, limit, '');
				CATPvars_crawl_finished += 1;
				if (catname == mw.config.get('wgPageName'))
					catpurge_wait();
			}
		}
	});
}


function catpurge_purge(catname, limit, gcmcontinue) {
	$.ajax({
		url: mw.util.wikiScript('api'),
		method: 'POST',
		data: {
			action: 'purge',
			format: 'json',
			forcelinkupdate: '',
			generator: 'categorymembers',
			gcmtitle: catname,
			gcmprop: 'ids',
			gcmtype: 'page',
			gcmlimit: limit,
			gcmcontinue: gcmcontinue,
		},
		dataType: 'json',
		success: function(data) {
			CATPvars_nb += data.purge.length;
			$("#catpurge-nb").text(CATPvars_nb);
			if (typeof(data.continue) != "undefined")
				catpurge_purge(mw.config.get('wgPageName'), '10', data.continue.gcmcontinue);
		}
	});
}


function catpurge_wait() {
	if (CATPvars_crawl_started == CATPvars_crawl_finished)
		mw.notify($(CATPvars_Texts['successnotif'].split("$1").join(CATPvars_nb)));
	else
		setTimeout(function() {
			catpurge_wait()
		}, 1500);
}