MediaWiki:Gadget-MulembiWaMwezi.xx
(function () { 'use strict';
var DAYS = 30; var API = new mw.Api();
function getTimestamp(daysAgo) { var d = new Date(); d.setUTCDate(d.getUTCDate() - daysAgo); return d.toISOString(); }
function getRecentChanges(start, end, cont) { var params = { action: 'query', list: 'recentchanges', rcstart: start, rcend: end, rcdir: 'older', rcnamespace: 0, rcprop: 'user|timestamp|title|flags', rcshow: '!bot', rctype: 'edit|new', rclimit: '500', format: 'json' };
if (cont) { Object.assign(params, cont); }
return API.get(params); }
function collectChanges() { var start = new Date().toISOString(); var end = getTimestamp(DAYS); var counts = {}; var lastTimestamp = null;
function next(cont) { return getRecentChanges(start, end, cont).then(function (data) { var changes = (data.query && data.query.recentchanges) || [];
changes.forEach(function (change) { if (!change.user) { return; }
counts[change.user] = (counts[change.user] || 0) + 1; lastTimestamp = change.timestamp; });
if (data.continue) { return next(data.continue); }
return counts; }); }
return next(null); }
function getWinner(counts) { var users = Object.keys(counts);
if (!users.length) { return null; }
users.sort(function (a, b) { return counts[b] - counts[a]; });
return { user: users[0], edits: counts[users[0]] }; }
function render() { $('.mulembi-wa-mwezi-result').each(function () { var box = $(this);
box.text('Ŵeruzgani...');
collectChanges().then(function (counts) { var winner = getWinner(counts);
if (!winner) { box.text('Palije vyakuŵerengeka.'); return; }
var userPage = mw.util.getUrl('User:' + winner.user); var contributions = mw.util.getUrl('Special:Contributions/' + winner.user);
box.html(
'
'<a href="' + userPage + '">' + mw.util.escape(winner.user) + '</a>' +
'' + '
'' + winner.edits + ' vyakusinthika mu mazuŵa ' + DAYS + ' ghaumaliro · ' + '<a href="' + contributions + '">Wonani vyakusinthika</a>' +
''
); }).catch(function () { box.text('Chinthu chachitika pakupanga ziŵerengero.'); }); }); }
$(render); })();