User:Xain36/Non-adminClosure.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.
// <syntaxhighlight lang="javascript">
// Non-admin Closure by [[User:Xain36]]
// 4.3.2019 v.1.0
// based on [[User:Armbrust/closemrv.js]] and [[User:Andy M. Wang/closeRM.js]]
// If forking this script, please give all of us credit

$(document).ready(function() {
	"use strict";
	// Add only when editing section
	// Assumes Requested move has a level 2 header, ends at end of section
	if ((document.title.indexOf("Editing ") === -1)
			|| (document.title.indexOf("(section)") === -1)) {
		return;
	}
	
	function rmClick(e) {
		e.preventDefault();
		var closeStr = prompt("The discussion may be closed 7 days after being opened, if consensus has been reached.\n"
		+ "Closing statement/Result for requested move:");
		if (closeStr === null || closeStr === '') {
			alert("Aborted or canceled by the user.");
			return;
		}

		var editform = document.editform, t = editform.wpTextbox1;
		var lines = t.value.split('\n');

		var inReqMoveTemplate = false;
		var foundReqMoveTemplate = false;
		var acc = '';
		for (var idx in lines) {
			if (lines[idx].toLowerCase().includes("{{requested move/dated")) {
				acc += '{{subst:RM top|' + closeStr + " {{subst:RMnac}}}}";
				inReqMoveTemplate = !lines[idx].includes("}}");
				foundReqMoveTemplate = true;
			} else if (foundReqMoveTemplate && inReqMoveTemplate) {
				inReqMoveTemplate = !lines[idx].includes("}}");
			} else {
				acc += lines[idx] + '\n';
			}
		}

		if (!foundReqMoveTemplate) {
			alert("{{requested move/dated}} NOT FOUND. Wikitext not updated\n\n"
				+ "Possible reasons:\n"
				+ "1. This edited section is not a requested move discussion.\n"
				+ "2. The discussion was alraedy closed by another editor.\n"
				+ "What to do?:\n"
				+ "1. Please reload the page and try again.\n"
				+ "2. Check your Internet connection.\n"
				+ "3. If somebody closed the discussion, then do not modify it. ");
			return;
		}

		t.value = acc + "{{subst:" + "RM bottom" + "}}";
		editform.wpSummary.value += "Closing a Requested move discussion: " + closeStr.replace(
				/\{\{subst\:rmnac\}\}|\'\'\'/gi,'').substring(0, 140)
			+ (closeStr.length > 140 ? ' ...' : '')
			+ ' ([[User:Xain36/Non-adminClosure|Non-admin Closure]])';
	}
	
	mw.loader.using( 'mediawiki.util' ).then( function(){
		var portletLink = mw.util.addPortletLink("p-cactions", "#", "Non-admin Closure",
			"ca-rmclose", "Close a requested move discussion section");
		$( portletLink ).click( rmClick );
	} );

});
// </syntaxhighlight>