Utilisateur:Zebulon84/Js2.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./**
* 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();
});
}