User:Animum/massdelete.js

mw.loader.using(['mediawiki.api', 'mediawiki.Title'], function () {

"use strict";

var config = mw.config.get(['wgNamespaceNumber', 'wgTitle', 'wgUserGroups', 'skin']);

function removeBlanks(arr) {

var ret = [];

var i, len;

for (i = 0, len = arr.length; i < len; i++) {

var s = arr[i];

s = s.trim();

if (s) {

ret.push(s);

}

}

return ret;

}

function doMassDelete() {

document.getElementById("wpMassDeleteSubmit").disabled = true;

var articles = document.getElementById("wpMassDeletePages").value.split("\n");

articles = removeBlanks(articles);

if (!articles.length) {

return;

}

var

api = new mw.Api(),

wpMassDeleteReasons = document.getElementById("wpMassDeleteReasons").value,

wpMassDeleteReason = document.getElementById("wpMassDeleteReason").value,

deleted = 0,

failed = [],

error = [],

deferreds = [],

reason = wpMassDeleteReasons == "other" ?

wpMassDeleteReason :

wpMassDeleteReasons + (wpMassDeleteReason ? " (" + wpMassDeleteReason + ")" : ""),

onSuccess = function () {

deleted++;

document.getElementById("wpMassDeleteSubmit").value = "(" + deleted + ")";

};

function makeDeleteFunc(article) {

return function () {

return $.Deferred(function (deferred) {

var promise = api.postWithToken('csrf', {

format: 'json',

action: 'delete',

title: article,

reason: reason

});

promise.done(onSuccess);

promise.fail(function (code, obj) {

failed.push(article);

error.push(obj.error.info);

});

promise.always(function () {

deferred.resolve();

});

});

};

}

// Make a chain of deferred objects. We chain them rather than execute them in

// parallel so that we don't make 1000 simultaneous delete requests and bring the

// site down. We use deferred objects rather than the promise objects returned

// from the API request so that the chain continues even if some articles gave

// errors.

var deferred = makeDeleteFunc(articles[0])();

for (var i = 1, len = articles.length; i < len; i++) {

deferred = deferred.then(makeDeleteFunc(articles[i]));

}

// Show the output and do cleanup once all the requests are done.

$.when(deferred).then(function () {

document.getElementById("wpMassDeleteSubmit").value = "Done (" + deleted + ")";

if (failed.length) {

var $failedList = $('