Quick Patrol in MediaWiki
// ==UserScript==
// @name Quick Patrol
// @namespace http://rabbi.town/
// @version 0.2
// @description Quick Patrol in MediaWiki
// @author Milkory
// @match *://*.huijiwiki.com/*
// @match *://*.fandom.com/*
// @match *://*.wikipedia.org/*
// @license MIT
// @grant none
// ==/UserScript==
(function () {
'use strict';
let mwApi;
window.addEventListener('load', init, false);
async function init() {
mwApi = new mw.Api();
let rights = (
await mwApi.get({
action: 'query',
meta: 'userinfo',
uiprop: 'rights',
})
).query.userinfo.rights;
if (rights.includes('patrol')) {
$('.mw-changeslist-unpatrolled').attr('data-mw-revid', function (_i, value) {
$(this)
.find('.unpatrolled')
.css('cursor', 'pointer')
.attr('title', 'Click to partoll')
.click(function () {
let me = $(this);
if ($(this).text() == '!') {
$(this).text('~').css('color', 'darkgreen').attr('title', 'Patrolling...');
patrol(
value,
function () {
me.text('✔')
.css({
'text-decoration': 'none',
'border-bottom': 'none',
color: 'green',
cursor: 'default',
})
.attr('title', 'Successfully partolled');
},
function () {
console.log(`[QuickPatrol] FAILED (revid: ${value})`);
me.text('!').css('color', 'red').attr('title', 'Click to partol');
}
);
}
});
return value;
});
}
}
function patrol(revid, successFallback, failFallback) {
mwApi
.get({
action: 'query',
meta: 'tokens',
type: 'patrol',
format: 'json',
})
.done(function (data) {
console.log(`[QuickPatrol] TRYING (revid: ${revid})`);
mwApi
.post({
action: 'patrol',
revid: revid,
token: data.query.tokens.patroltoken,
format: 'json',
})
.done(function () {
console.log(`[QuickPatrol] SUCCESS (revid: ${revid})`);
successFallback();
})
.fail(failFallback);
})
.fail(failFallback);
}
})();