MediaWiki:PatrolPageRevisions.js
Jump to navigation
Jump to search
Note: After saving, you have to bypass your browser's cache to see the changes. Internet Explorer: press Ctrl-F5, Mozilla: hold down Shift while clicking Reload (or press Ctrl-Shift-R), Opera/Konqueror: press F5, Safari: hold down Shift + Alt while clicking Reload, Chrome: hold down Shift while clicking Reload.
![]() | Documentation for this user script can be added at MediaWiki:PatrolPageRevisions. |
/**
* [[MediaWiki:PatrolPageRevisions.js]]
*
* Adds button that when pressed patrols all revisions of one page
*
*/
/*jshint */
/*global jQuery:false, mediaWiki:false*/
(function ($, mw) {
'use strict';
var ppr, pt;
function firstItem(o) { for (var i in o) { if (o.hasOwnProperty(i)) { return o[i]; } } }
ppr = {
init: function() {
pt = mw.user.tokens.get('patrolToken');
if (!pt) return mw.log('[[MediaWiki:PatrolPageRevisions.js]] found no patrol token for you. Are you still a patroller?');
$('<button type="button"></button>')
.text('Patrol all revisions')
.attr('title', "Patrols up to 500 revisions of one page.")
.insertAfter($('.mw-history-compareselectedversions-button').first())
.click(ppr.doPatrol);
},
doPatrol: function(e) {
e.preventDefault();
var $b = $(this).attr('disabled', 'disabled').text('Patrolling …');
mw.loader.using('ext.gadget.libAPI', function() {
mw.libs.commons.api.$query({
'action': 'query',
'prop': 'revisions',
'titles': mw.config.get('wgPageName').replace(/_/g, ' '),
'rvprop': 'ids',
'rvlimit': 500
}).done(function(r) {
var pg = firstItem(r.query.pages),
reqOk = 0,
reqExpired = 0,
reqFailed = 0,
reqIssued = 0;
$.each(pg.revisions, function(i, rev) {
// FIXME: AND NOW ... WE DO EVIL! WE'RE FLOODING THE API.
reqIssued++;
$.post(mw.util.wikiScript('api'), {
'format': 'json',
'action': 'patrol',
'token': pt,
'revid': rev.revid
}).done(function(r) {
if (r && r.patrol) {
reqOk++;
} else {
if (r && r.error && r.error.code === 'notpatrollable') {
reqExpired++;
} else {
reqFailed++;
}
}
}).fail(function() {
reqFailed++;
}).always(function() {
if (reqOk + reqFailed + reqExpired === reqIssued) {
$b.text('TOTAL: ' + reqIssued + ' Ok:' + reqOk + ' (Expired:' + reqExpired + ') Failed:' + reqFailed);
}
});
});
});
});
}
};
if ('history' !== mw.config.get('wgAction')) return;
mw.loader.using(['mediawiki.user', 'user.options'], ppr.init);
}(jQuery, mediaWiki));