:User:Writ Keeper/Scripts/massRollback.js

//Mass rollback function

//Written by John254 and modified/rewritten by Writ Keeper with modifications by TheDJ; original is at https://en.wikipedia.org/wiki/User:John254/mass_rollback.js

//Adapted from User:Mr.Z-man/rollbackSummary.js

//Instructions: Selecting the "rollback all" tab when viewing a user's contributions history

//will open all rollback links displayed there. (Use with caution)

if(typeof wkContribsCheckboxInit === "undefined")

{

wkContribsCheckboxInit = false;

}

if(typeof wkRollbackPortlet === "undefined")

{

wkRollbackPortlet = "p-cactions";

}

function rollbackEverythingWKMR(editSummary)

{

if(editSummary === null)

{

return false;

}

if(mw.config.get("wgRelevantUserName") === mw.config.get("wgUserName"))

{

if(!(confirm("You are about to roll back *all* of *your own* edits. Please note that this will be very difficult to undo. Are you *ABSOLUTELY SURE* you want to do this?")))

{

return false;

}

}

mw.loader.using( 'mediawiki.api' ).done( function()

{

var rbMetadata = {};

rbMetadata.api = new mw.Api();

rbMetadata.userName = mw.config.get("wgRelevantUserName");

rbMetadata.ipRange = (rbMetadata.userName === null);

rbMetadata.titleRegex = /title=([^&]+)/;

rbMetadata.editSummary = editSummary;

$("a[href*='action=rollback']").each(function(ind, el)

{

rollbackOneThingWKMR(el, rbMetadata);

} );

} );

return false;

}

function rollbackSomeThingsWKMR(editSummary)

{

if(editSummary === null)

{

return false;

}

mw.loader.using( 'mediawiki.api' ).done( function()

{

var rbMetadata = {};

rbMetadata.api = new mw.Api();

rbMetadata.userName = mw.config.get("wgRelevantUserName");

rbMetadata.titleRegex = /title=([^&]+)/;

rbMetadata.editSummary = editSummary;

var rollbackList = $("input.revdelIds:checked").parents("li.mw-contributions-current").find("a[href*='action=rollback']");

if(rollbackList.length <= 0)

{

mw.notify("You didn't select any edits that could be rolled back!");

return;

}

$("input.revdelIds:checked").parents("li.mw-contributions-current").find("a[href*='action=rollback']").each(function(ind, el)

{

rollbackOneThingWKMR(el, rbMetadata);

} );

} );

}

function rollbackOneThingWKMR(edit, rbMetadata)

{

var userName;

//if we're in an anonymous IP range, we have to figure out each username on its own, since they might be different for each edit.

if(rbMetadata.userName === null)

{

//the not clause is probably not necessary, but I'm including it just to be sure.

userName = $(edit).parents("li:first").children("a.mw-anonuserlink").not(".mw-contributions-title").text();

}

else

{

userName = rbMetadata.userName;

}

var params = {};

if( rbMetadata.editSummary != '' )

{

params.summary = rbMetadata.editSummary;

}

rbMetadata.api.rollback( decodeURIComponent(rbMetadata.titleRegex.exec(edit.href)[1]), userName, params).done( function()

{

$(edit).after("reverted");

$(edit).remove();

} );

}

$(document).ready(function()

{

if(mw.config.get("wgCanonicalSpecialPageName") == "Contributions" && $("span.mw-rollback-link").length > 0)

{

mw.loader.using("mediawiki.util").done( function ()

{

mw.util.addPortletLink(wkRollbackPortlet, '#', "Rollback all", "ca-rollbackeverything", "rollback all edits displayed here");

if(!wkContribsCheckboxInit)

{

if($("ul.mw-contributions-list .mw-revdelundel-link").length > 0)

{

$("ul.mw-contributions-list .mw-revdelundel-link").each(function(ind,el){

if($(this).children("a").length > 0)

{

var revId = /ids=(\d+)/.exec($(this).children("a").attr("href"))[1];

var pageTitle = /target=([^&]+)/.exec($(this).children("a").attr("href"))[1];

$(el).prepend(" ");

$(el).children(".revdelIds").data("index", ind);

}

});

}

else

{

$("ul.mw-contributions-list a.mw-changeslist-date").each(function(ind,el){

$(el).before(" ");

});

}

wkContribsCheckboxInit = true;

}

mw.util.addPortletLink(wkRollbackPortlet, '#', "Rollback selected", "ca-rollbacksome", "rollback selected edits");

$("#ca-rollbackeverything").click( function(event)

{

event.preventDefault();

mw.loader.load( 'mediawiki.api' ); //start loading, while the user is in the prompt

return rollbackEverythingWKMR(prompt("Rollback all edits: Enter an edit summary, or leave blank to use the default (or hit Cancel to cancel the rollback entirely)"));

});

$("#ca-rollbacksome").click( function(event)

{

event.preventDefault();

mw.loader.load( 'mediawiki.api' ); //start loading, while the user is in the prompt

return rollbackSomeThingsWKMR(prompt("Rollback selected edits: Enter an edit summary, or leave blank to use the default (or hit Cancel to cancel the rollback entirely)"));

});

$("#ca-rollbacksome").data("lastSelectedIndex", -1);

$("input.revdelIds").off("click").click(

function(ev)

{

var lastSelectedRevdel = $("#ca-rollbacksome").data("lastSelectedIndex");

var newIndex = $(this).data("index");

if(ev.shiftKey && lastSelectedRevdel >= 0)

{

var checkboxArray = $("input.revdelIds");

var start = lastSelectedRevdel;

var stop = newIndex;

if(start < stop)

{

for(var i = start; i < stop; i++)

{

if(i != lastSelectedRevdel)

{

$(checkboxArray[i]).prop("checked", !($(checkboxArray[i]).prop("checked")));

}

}

}

else

{

for(var i = start; i > stop; i--)

{

if(i != lastSelectedRevdel)

{

$(checkboxArray[i]).prop("checked", !($(checkboxArray[i]).prop("checked")));

}

}

}

}

$("#ca-rollbacksome").data("lastSelectedIndex", newIndex);

});

});

}

});