User:DarkMatterMan4500/massRollback.js: Difference between revisions
From WikiOasis Meta
More actions
Created page with "//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")" |
mNo edit summary |
||
| Line 5: | Line 5: | ||
//will open all rollback links displayed there. (Use with caution) | //will open all rollback links displayed there. (Use with caution) | ||
if(typeof wkContribsCheckboxInit === "undefined") | 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("<input type='checkbox' name='"+decodeURIComponent(pageTitle)+"' class='revdelIds' value='"+revId+"'> "); | |||
$(el).children(".revdelIds").data("index", ind); | |||
} | |||
}); | |||
} | |||
else | |||
{ | |||
$("ul.mw-contributions-list a.mw-changeslist-date").each(function(ind,el){ | |||
$(el).before("<input type='checkbox' class='revdelIds'> "); | |||
}); | |||
} | |||
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); | |||
}); | |||
}); | |||
} | |||
}); | |||