MediaWiki:ProcessFileList.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:ProcessFileList. |
// <nowiki>
// (c) 2012 by Rainer Rillke
/* global $, mw */
$.when(mw.loader.using('mediawiki.util'), $.ready).then(function () {
'use strict';
if (mw.config.get('wgPageName') !== 'User:Filbot/Report') return;
$('div#mw-content-text.mw-content-ltr ul:last').find('li').each(function (i, e) {
try {
var $e = $(e);
var file = decodeURIComponent($e.find('a').attr('href').match(/(?:\/|title\=)(File:.+?)(?:\&action\=edit.+)?$/i)[1].replace(/_/g, ' '));
$e.data('reFile', file).prepend($('<a>', { href: '#', text: '[rm from list]', title: 'Mark this as done. Requests are queued. Empty the queue before leaving the page.' }).click(
function (e) {
e.preventDefault();
$(this).fadeOut();
addToDoneQueue(file, $e);
}
), ' ');
} catch (ex) {
}
});
var doneQueue = [];
var DOMQueue = [];
var lastListPageContent = '';
var queueSize = 25;
var markRedlinks = function () {
queueSize = 200;
$('div#mw-content-text.mw-content-ltr ul:last').find('li a.new').siblings('a').click();
queueSize = 25;
};
var addToDoneQueue = function (file, domE) {
if (sendingRequest) {
setTimeout(function () {
addToDoneQueue(file, domE);
}, 1000);
return;
}
doneQueue.push(file);
DOMQueue.push(domE);
reQueueNode.find('#queueCounter').text(doneQueue.length);
if (doneQueue.length > 25) processDoneQueue();
};
var processing = false;
var sendingRequest = false;
var processDoneQueue = function () {
if (processing) return;
processing = true;
var doRemove = function (pageText) {
var l = doneQueue.length;
sendingRequest = true; // Prevent adding further files to the list
reQueueNode.find('#queueCounter').text('Processing..');
if (lastListPageContent && lastListPageContent !== pageText)
reQueueNode.append('<br>Warning! Someone else is working on the list.');
for (var i = 0; i < l; i++) {
var file = doneQueue[i];
var reFile = new RegExp('\\n\\*\\[\\[\\:' + mw.RegExp.escape(file) + '\\]\\].+');
pageText = pageText.replace(reFile, '');
}
var params = {
action: 'edit',
title: mw.config.get('wgPageName'),
nocreate: 1,
// redirect: 1,
summary: 'Removing ' + doneQueue.length + ' files done from this list.',
text: pageText,
token: (window['wikilove-edittoken'] || mw.user.tokens.get('csrfToken')),
format: 'json'
};
var removalDone = function (result) {
processing = false;
sendingRequest = false;
lastListPageContent = pageText;
if (!result) return;
if (result.error) {
alert('Unable to remove done files from list. Maybe reloading the page helps.\n' + result.error.code + '\n' + result.error.info);
} else {
doneQueue = [];
var l = DOMQueue.length;
for (var i = 0; i < l; i++)
DOMQueue[i].fadeOut();
DOMQueue = [];
}
reQueueNode.find('#queueCounter').text(doneQueue.length);
};
$.post(mw.util.wikiScript('api'), params, removalDone);
reQueueNode.find('#queueCounter').text('Processing...');
};
$.get(mw.config.get('wgScript'), { action: 'raw', title: mw.config.get('wgPageName'), dummy: Math.round(Math.random() * 4294967296), maxage: 0 }, doRemove);
reQueueNode.find('#queueCounter').text('Processing.');
};
var reQueueNode = $('<div>', { style: 'position:fixed; background: #efe; top: 30px; left: 30px; border:solid 2px #000; z-index:1005;' }).append(
$('<span>', { id: 'queueCounter', text: '0' }), ' items in removal queue. ', $('<a>', { href: '#', text: 'remove from list now' }).click(function (e) {
e.preventDefault();
processDoneQueue();
}), '<br>',
$('<a>', { href: '#', text: 'mark all redlinks as done' }).click(function (e) {
e.preventDefault();
markRedlinks();
})
);
$('body').prepend(reQueueNode);
});
// </nowiki>