User:Writ Keeper/Scripts/blockDefaults.js

From Wikipedia, the free encyclopedia
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.
importScript("Special:MyPage/defaultBlockSettings.js");

$(document).ready(function()
{
	mw.loader.using( ['mediawiki.util', 'mediawiki.user'], function() {
		if(mw.config.get("wgCanonicalSpecialPageName") === "Block")
		{
			if(typeof wkDefaultBlockSettings === "undefined")
			{
				wkDefaultBlockSettings = {"Revoking talk page access: inappropriate use of user talk page while blocked":{"mw-input-wpDisableUTEdit":"checked"},"{{softerblock}}":{"mw-input-wpCreateAccount":"unchecked","mw-input-wpDisableEmail":"unchecked","mw-input-wpDisableUTEdit":"unchecked","mw-input-wpAutoBlock":"unchecked"}};
			}
			$("#mw-input-wpReason").change(function()
			{
				if(wkDefaultBlockSettings != null)
				{
					var defaults = wkDefaultBlockSettings[$("#mw-input-wpReason").val()];
					if(typeof defaults !== "undefined")
					{
						var defaultKeys = Object.keys(defaults);
						for(var i = 0; i < defaultKeys.length; i++)
						{
							if(defaults[defaultKeys[i]] === "checked")
							{
								$("#"+defaultKeys[i]).prop('checked', true);
							}
							else if(defaults[defaultKeys[i]] === "unchecked")
							{
								$("#"+defaultKeys[i]).prop('checked', false);
							}
						}
					}
				}
			});
			$("#mw-input-wpReason").after("<br><span style='font-size:x-small'>To adjust the default settings for the different block types, please go to <a href='"+mw.util.getUrl("Special:MyPage/defaultBlockSettings")+"'>this page.</a></span>");
		}
		else if(mw.config.get("wgPageName") === "User:" + mw.config.get("wgUserName").replace(" ", "_") + "/defaultBlockSettings")
		{
			if(typeof wkDefaultBlockSettings === "undefined")
			{
				wkDefaultBlockSettings = {"Revoking talk page access: inappropriate use of user talk page while blocked":{"mw-input-wpDisableUTEdit":"checked"},"{{softerblock}}":{"mw-input-wpCreateAccount":"unchecked","mw-input-wpDisableEmail":"unchecked","mw-input-wpDisableUTEdit":"unchecked","mw-input-wpAutoBlock":"unchecked"}};
			}
			var reasonList = '<select name="wpReason" id="mw-input-wpReason"><optgroup label="Common block reasons"><option value="[[WP:Vandalism|Vandalism]]">[[WP:Vandalism|Vandalism]]</option><option value="[[WP:Vandalism-only account|Vandalism-only account]]">[[WP:Vandalism-only account|Vandalism-only account]]</option><option value="Violations of the [[WP:BLP|Biographies of living persons policy]]">Violations of the [[WP:BLP|Biographies of living persons policy]]</option><option value="Using Wikipedia for [[WP:Spam|spam]] or [[WP:Advertising|advertising]] purposes">Using Wikipedia for [[WP:Spam|spam]] or [[WP:Advertising|advertising]] purposes</option><option value="[[WP:Spam|Spam]] / [[WP:Advertising|advertising]]-only account">[[WP:Spam|Spam]] / [[WP:Advertising|advertising]]-only account</option><option value="Creating [[WP:Attack page|attack]], [[WP:Patent nonsense|nonsense]] or other inappropriate pages">Creating [[WP:Attack page|attack]], [[WP:Patent nonsense|nonsense]] or other inappropriate pages</option><option value="[[WP:Copyright violations|Copyright violations]]">[[WP:Copyright violations|Copyright violations]]</option><option value="Abusing [[WP:Sock puppetry|multiple accounts]]">Abusing [[WP:Sock puppetry|multiple accounts]]</option><option value="[[WP:Block#Evasion of blocks|Block evasion]]">[[WP:Block#Evasion of blocks|Block evasion]]</option><option value="[[WP:No personal attacks|Personal attacks]] or [[WP:Harassment|harassment]]">[[WP:No personal attacks|Personal attacks]] or [[WP:Harassment|harassment]]</option><option value="[[WP:Edit warring|Edit warring]]">[[WP:Edit warring|Edit warring]]</option><option value="Violation of the [[WP:Three-revert rule|three-revert rule]]">Violation of the [[WP:Three-revert rule|three-revert rule]]</option><option value="[[WP:Disruptive editing|Disruptive editing]]">[[WP:Disruptive editing|Disruptive editing]]</option><option value="Making [[WP:No legal threats|legal threats]]">Making [[WP:No legal threats|legal threats]]</option><option value="[[WP:Arbitration enforcement|Arbitration enforcement]]">[[WP:Arbitration enforcement|Arbitration enforcement]]</option><option value="Deliberately triggering the [[WP:Edit filter|Edit filter]]">Deliberately triggering the [[WP:Edit filter|Edit filter]]</option><option value="[[WP:Long term abuse|Long term abuse]]">[[WP:Long term abuse|Long term abuse]]</option><option value="Revoking talk page access: inappropriate use of user talk page while blocked">Revoking talk page access: inappropriate use of user talk page while blocked</option></optgroup><optgroup label="Templated reasons"><option value="{{anonblock}}">{{anonblock}}</option><option value="{{schoolblock}}">{{schoolblock}}</option><option value="{{blocked proxy}}">{{blocked proxy}}</option><option value="{{usernameblock}}">{{usernameblock}}</option><option value="{{causeblock}}">{{causeblock}}</option><option value="{{UsernameHardBlocked}}">{{UsernameHardBlocked}}</option><option value="{{softerblock}}">{{softerblock}}</option><option value="{{checkuserblock}}">{{checkuserblock}}</option><option value="{{checkuserblock-account}}">{{checkuserblock-account}}</option><option value="{{Tor}}">{{Tor}}</option><option value="{{webhostblock}}">{{webhostblock}}</option><option value="{{colocationwebhost}}">{{colocationwebhost}}</option><option value="{{vaublock}}">{{vaublock}}</option><option value="{{spamusernameblock}}">{{spamusernameblock}}</option></optgroup></select>';
			$("#mw-content-text").html('<h2>Welcome to the default block setup screen!</h2>To use this screen, simply select one of the preloaded block reasons from the menu below, select the options you wish to make the default for that block reason, and hit the "Save as default" button. When you\'re done with all of them, hit the "Finished" button, and your preferences will be saved in an automated edit to your common.js page. <b>TAKE NOTE</b>: your changes are not truly permanent until you\'ve hit the "Finished" button; if you leave the page before doing so, your changes will be lost. Also, after hitting "Finished" and seeing the confirmation box pop up, you may need to <a href="'+ mw.util.getUrl("WP:BYPASS") +'" target="_blank">bypass your cache</a> to see the changes.If you\'ve never done this before, there are a few settings that come with; if you have, then you\'ll be able to see your currently-set preferences as well.');
			$("#mw-content-text").append("<h3>Settings</h3>" + reasonList + "<table id='blockOptionsTable'><tbody><tr><th><!--label--></th><th>Checked</th><th>Unchecked</th><th>don't change</th><th>Current default</th></tr><tr><td>Block account creation:</td><td><input type='radio' name='mw-input-wpCreateAccount' value='checked'></td><td><input type='radio' name='mw-input-wpCreateAccount' value='unchecked'></td><td><input type='radio' name='mw-input-wpCreateAccount' value='nochange'></td><td id='mw-input-wpCreateAccountCurrent' class='currentSetting' name='mw-input-wpCreateAccount'>don't change</td></tr><tr><td>Block user from sending email:</td><td><input type='radio' name='mw-input-wpDisableEmail' value='checked'></td><td><input type='radio' name='mw-input-wpDisableEmail' value='unchecked'></td><td><input type='radio' name='mw-input-wpDisableEmail' value='nochange'></td><td id='mw-input-wpDisableEmailCurrent' name='mw-input-wpDisableEmail' class='currentSetting'>don't change</td></tr><tr><td>Prevent this user from editing their own talk page while blocked:</td><td><input type='radio' name='mw-input-wpDisableUTEdit' value='checked'></td><td><input type='radio' name='mw-input-wpDisableUTEdit' value='unchecked'></td><td><input type='radio' name='mw-input-wpDisableUTEdit' value='nochange'></td><td id='mw-input-wpDisableUTEditCurrent' name='mw-input-wpDisableUTEdit' class='currentSetting'>don't change</td></tr><tr><td>Autoblock any IP addresses used:</td><td><input type='radio' name='mw-input-wpAutoBlock' value='checked'></td><td><input type='radio' name='mw-input-wpAutoBlock' value='unchecked'></td><td><input type='radio' name='mw-input-wpAutoBlock' value='nochange'></td><td id='mw-input-wpAutoBlockCurrent' class='currentSetting' name='mw-input-wpAutoBlock'>don't change</td></tr><tr><td>Watch this user's user and talk pages:</td><td><input type='radio' name='mw-input-wpWatch' value='checked'></td><td><input type='radio' name='mw-input-wpWatch' value='unchecked'></td><td><input type='radio' name='mw-input-wpWatch' value='nochange'></td><td id='mw-input-wpWatchCurrent' class='currentSetting' name='mw-input-wpWatch'>don't change</td></tr><tr><td>Prevent logged-in users from editing from this IP address:</td><td><input type='radio' name='mw-input-wpHardBlock' value='checked'></td><td><input type='radio' name='mw-input-wpHardBlock' value='unchecked'></td><td><input type='radio' name='mw-input-wpHardBlock' value='nochange'></td><td id='mw-input-wpHardBlockCurrent' class='currentSetting' name='mw-input-wpHardBlock'>don't change</td></tr></tbody></table><input type='button' id='saveItemPrefs' value='Save as default'><input type='button' id='finalizePrefs' value='Finished'>");
			
			$("#mw-input-wpReason").change(function()
			{
				var settings;
				if(typeof wkDefaultBlockSettings === "undefined" || wkDefaultBlockSettings === null || typeof wkDefaultBlockSettings[$("#mw-input-wpReason").val()] === "undefined")
				{
					settings = null;
				}
				else
				{
					settings = wkDefaultBlockSettings[$("#mw-input-wpReason").val()];
				}
				$("#blockOptionsTable .currentSetting").each(function(ind, el)
				{
					if(settings != null && typeof settings[$(el).attr("name")] !== "undefined")
					{
						$(el).html(settings[$(el).attr("name")]);
					}
					else
					{
						$(el).html("don't change");
					}
					
				});
			});
			$("#saveItemPrefs").click(function()
			{
				var checkedItems = $("input:checked");
				var outputArray = {};
				checkedItems.each(function(ind, el)
				{
					if($(el).attr("value") !== "nochange")
					{
						outputArray[$(el).attr("name")] = $(el).attr("value");
					}
				});
				wkDefaultBlockSettings[$("#mw-input-wpReason").val()] = outputArray;
				$("#mw-input-wpReason").change();
			});
			$("#finalizePrefs").click(function()
			{
				var contentString = "wkDefaultBlockSettings = " + JSON.stringify(wkDefaultBlockSettings)+";";
				contentString = contentString.replace(/\\"/g, '"').replace(/= \"{/, '= {').replace(/}";/, '};');
				var requestData = {action: "edit", title: "User:" + mw.config.get("wgUserName") + "/defaultBlockSettings.js", text: contentString, summary:"Updating default block setting preferences.", minor:"true", token: mw.user.tokens.get( 'csrfToken' )};
				$("#finalizePrefs").val("Saving...");
				$.post(mw.config.get("wgScriptPath") + "/api.php", requestData, function()
				{
					$("#finalizePrefs").val("Finished");
					alert("Save complete!");
				});
			});
		}
	});
});