Jump to content

User:Writ Keeper/Scripts/massRevdel.js

From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by Writ Keeper (talk | contribs) at 09:58, 28 September 2015 (fx). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.
Note: After saving, you have to bypass your browser's cache to see the changes. Google Chrome, Firefox, Microsoft Edge and Safari: Hold down the ⇧ Shift key and click the Reload toolbar button. For details and instructions about other browsers, see Wikipedia:Bypass your cache.
$(document).ready(function()
{
	if(mw.config.get("wgCanonicalSpecialPageName") == "Contributions")
	{
		$("ul.mw-contributions-list").before("Revision deletion: <form style='display:inline;'><input type='button' id='revdelSelectAll' value='Select all'><input type='button' id='revdelSelectNone' value='Select none'><input type='checkbox' id='revdelContent' name='revdelOptions' value='content'> delete content <input type='checkbox' id='revdelName' name='revdelOptions' value='userName'> delete user name <input type='checkbox' id='revdelComment' name='revdelOptions' value='editSummary'> delete edit summary <input type='checkbox' id='undelContent' name='revdelOptions' value='content'> undelete content <input type='checkbox' id='undelName' name='revdelOptions' value='userName'> undelete user name <input type='checkbox' id='undelComment' name='revdelOptions' value='editSummary'> undelete edit summary <br/><select id='wpRevDeleteReasonList'><option value='other'>Other reason</option></select><input name='wpReason' size='60' id='wpReason' maxlength='100'><input type='button' id='revdelSubmit' value='Revdel selected entries'>");
		$("span.mw-revdelundel-link").each(function(ind,el){
			var revId = /ids=(\d+)/.exec($(this).children("a").attr("href"))[1];
			el.innerHTML = "<input type='checkbox' name='revdelIds' class='revdelIds' value='"+revId+"'>";
		});
		$("ul.mw-contributions-list").after("</form>");
		
		//load canned summaries
		$.post("/w/index.php?title=MediaWiki:Revdelete-reason-dropdown&action=raw",function(data)
		{
			reasons = data.replace(/\*\* ([^\*]+)/g, '<option value="$1">$1</option>');
			reasons = reasons.replace(/\* ([^<]+)([^\*]+)/g, '<optgroup label="$1">$2</optgroup>');
			$('#wpRevDeleteReasonList').append(reasons);
		});
		
		//attach handlers
		$("#revdelSelectAll").click(
			function()
			{
				$('input.revdelIds').each(function()
				{
					$(this).prop("checked", true);
				})
			}
		);
		$("#revdelSelectNone").click(
			function()
			{
				$('input.revdelIds').each(function()
				{
					$(this).prop("checked", false);
				})
			}
		);
		$("#revdelSubmit").click(
			function()
			{
				//figure out which revisions we're working on.
				var revIds = "";
				var revCount = 0;
				$("input.revdelIds:checked").each(function(ind)
				{
					revCount = ind + 1;
					if(ind > 49)
					{
						alert("You can't do more than 50 revdels at once! Canceling...");
						return false;
					}
					if(revIds != "")
					{
						revIds = revIds + ",";
					}
					revIds = revIds + $(this).val();
				});
				if(revIds == "")
				{
					alert("You didn't select any revisions to delete!");
					return false;
				}
				var confirmString = "You are attempting to delete " + revCount + " revisions.\n\nThe following revision attributes will be changed:\n";
				
				//figure out what we're doing to each revision. This is pretty clunky, but whatever.
				var deleteString = "";
				var revealString = "";
				
				if($("#revdelContent").prop("checked") == $("#undelContent").prop("checked"))
				{
					confirmString = confirmString + "-Content visibility won't change.\n";
				}
				else if($("#revdelContent").prop("checked"))
				{
					deleteString = "content";
					confirmString = confirmString + "-Content will be deleted.\n";
				}
				else
				{
					revealString = "content";
					confirmString = confirmString + "-Content will be revealed.\n";
				}
				if($("#revdelComment").prop("checked") == $("#undelComment").prop("checked"))
				{
					confirmString = confirmString + "-Edit summary visibility won't change.\n";
				}
				else if($("#revdelComment").prop("checked"))
				{
					if(deleteString != "")
					{
						deleteString = deleteString + "|";
					}
					deleteString = deleteString + "comment";
					confirmString = confirmString + "-Edit summary will be deleted.\n";
				}
				else
				{
					if(revealString != "")
					{
						revealString = revealString + "|";
					}
					revealString = revealString + "comment";
					confirmString = confirmString + "-Edit summary will be revealed.\n";
				}
				if($("#revdelName").prop("checked") == $("#undelName").prop("checked"))
				{
					confirmString = confirmString + "-User name visibility won't change.\n";
				}
				else if($("#revdelName").prop("checked"))
				{
					if(deleteString != "")
					{
						deleteString = deleteString + "|";
					}
					deleteString = deleteString + "user";
					confirmString = confirmString + "-User name will be deleted.\n";
				}
				else
				{
					if(revealString != "")
					{
						revealString = revealString + "|";
					}
					revealString = revealString + "user";
					confirmString = confirmString + "-User name will be revealed.\n";
				}
				if(deleteString == "" && revealString == "")
				{
					alert("You didn't select any properties of the revisions to change!");
					return false;
				}
				
				var summary = "";
				
				//construct the revdel summary
				if($("#wpRevDeleteReasonList").val() == "other")
				{
					if($("#wpReason").val() == "")
					{
						alert("You didn't select or write in an edit summary for the logs!");
						return false;
					}
					summary = $("#wpReason").val();
				}
				else
				{
					summary = $("#wpRevDeleteReasonList").val();
					if($("#wpReason").val() != "")
					{
						summary = summary + ": " +  $("#wpReason").val();
					}
				}
				confirmString = confirmString + "\nYour revdel summary is: "+ summary +"\n\nAre you sure you want to do this?";
				
				if(confirm(confirmString))
				{
					var ajaxData;
					ajaxData = {action:"revisiondelete",type:"revision",ids:revIds,reason:summary,token: mw.user.tokens.get( 'editToken' )};
					if(deleteString != "")
					{
						ajaxData.hide=deleteString;
					}
					if(revealString != "")
					{
						ajaxData.show=revealString;
					}
					$.post('/w/api.php/', ajaxData,function(){
						alert("deleted " + revCount + " revisions successfully!");
						return false;
					})
				}
				return false;
			}
		)
	}
});