MediaWiki:Massrollback.js
From BetaArchive Wiki
Note: After publishing, you may have to bypass your browser's cache to see the changes.
- Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
- Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
- Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
- Opera: Press Ctrl-F5.
//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; } function rollbackEverythingWKMR(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.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('p-cactions', '#', "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('p-cactions', '#', "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++) { $(checkboxArray[i]).prop("checked", true); } } else { for(var i = start; i > stop; i--) { $(checkboxArray[i]).prop("checked", true); } } } $("#ca-rollbacksome").data("lastSelectedIndex", newIndex); }); }); } });