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.
/**
 * OngletPurgeCatégorie
 *
 * Onglet permettant de réaliser une purge du cache
 *
 * @source https://www.mediawiki.org/wiki/Snippets/Purge_action
 * @revision 2016-05-22
 * {{Projet:JavaScript/Script|OngletPurge}}
 */

if ( mw.config.get( 'wgNamespaceNumber' ) === 14 ) {
	mw.loader.using( [
		'mediawiki.util',
		'oojs-ui-core',
		'oojs-ui-windows'
	] ).then( function () {
		var api = new mw.Api();
		var clef, cont, purgeTasks, progressBar, fieldset, messageDialog, windowManager;
		
		function init() {
			if ( $( '#ca-purgecat' ).length ) {
				// Il y a déjà un onglet 'purger la catégorie'
				return;
			}
			var node = mw.util.addPortletLink(
				'p-cactions',
				'#',
				'Purger la catégorie',
				'ca-purgecat',
				'Purger le cache des pages de la catégorie (Ns 0)'
			);
			$(node).click( function ( event ) {
				OO.ui.prompt( 
					'Purger la catégorie à partir de :',
					{ textInput: { placeholder: 'clé de tri' } }
				).done( listAndPurgeCategoryPages );
			});
		}
		
		function listAndPurgeCategoryPages( from ) {
			if ( typeof from === 'string' ) {
				clef = from;
				cont = null;
				
				progressBar = new OO.ui.FieldLayout(
					new OO.ui.ProgressBarWidget( { progress: 0 } ),
					{ label: 'Avancement : récupération de la liste de pages', align: 'top' }
				);
				fieldset = new OO.ui.FieldsetLayout( { items: [ progressBar ] } );
				messageDialog = new OO.ui.MessageDialog();
				windowManager = new OO.ui.WindowManager();
				windowManager.addWindows( [ messageDialog ] );
				$( 'body' ).append( windowManager.$element );
				
				windowManager.openWindow( messageDialog, {
					title: 'Purge de la catégorie',
					message: fieldset.$element,
					size: 'large',
					actions: [ { action: 'reject', label: 'Annuler' } ]
				} ).closed.then( function ( data ) {
					if ( data && data.action === 'reject' ) {
						api.abort();
						for ( var i = purgeTasks.length; i > 0; i-- ) {
							clearTimeout( purgeTasks[i-1] );
						}
						document.location.reload(true);
					}
				} );
			} else if ( from && from.continue ) {
				progressBar.getField().setProgress( 0 );
				progressBar.setLabel( 'Récupération de la liste de pages' );
				cont = from;
				messageDialog.toggle( true );
			} else {
				return;
			}
			
			purgeTasks = [];
			
			api.get( {
				action : "query",
				format : "json",
				list : "categorymembers",
				cmtitle : mw.config.get( 'wgPageName' ),
				cmnamespace : "0",
				cmprop : "title",
				cmlimit : 500,
				cmsort : "sortkey",
				cmstartsortkeyprefix : clef,
				cmcontinue : cont,
				utf8 : 1,
				formatversion : "2"
				
			} ).done( function ( data ) {
				var i, page, progress;
				var catList = data.query.categorymembers;
				var length = catList.length;
				progress = 100 / length;
				for ( i = 0; i < length; i++ ) {
					page = catList[i].title;
					if ( page != "Tour de l'Avenir 2017" ) {
						purgeTasks[i] = setTimeout( purgePage, 1000 * i, page, progress );
					}
				}
				
				purgeTasks[length] = setTimeout( function() {
					messageDialog.toggle( false );
					if ( data.continue ) {
						OO.ui.confirm( length + ' pages ont été purgées, faut-il continuer ?' )
						.done( function( OK ) {
							if ( OK ) {
								listAndPurgeCategoryPages( data.continue );
							} else {
								windowManager.closeWindow( messageDialog );
								document.location.reload(true);
							}
						} );
					} else {
						windowManager.closeWindow( messageDialog );
						OO.ui.alert( 'Catégorie purgée (' + length + ' pages)' ).done( function () {
							document.location.reload(true);
						} );
					}
				}, 1000 * ( catList.length + 5 ) );
				/*
				var title = 'Purge des ' + length + 'éléments de la catégorie.';
				if ( data.continue ) {
					title =  'Purge de ' + length + ' éléments de la catégorie.';
				}
				messageDialog.title = title;
				*/
			} ).fail( function () {
				windowManager.closeWindow( messageDialog );
				OO.ui.alert( 'impossible d\'otenir la liste de la catégorie' );
			} );
		}
		
		function purgePage( page, progress ) {
			api.post( {
				action: "purge",
				format: "none",
				forcelinkupdate: 1,
				titles: page
			} ).always( function() {
				if ( progressBar && progress ) {
					var bar = progressBar.getField();
					bar.setProgress( bar.getProgress() + progress );
					progressBar.setLabel( 'Page en cours : ' + page );
				}
			} );
		}
		
		init();
	});
}