User:Writ Keeper/Scripts/syntaxChecker.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.
$(document).ready(function()
{
	if(mw.config.get("wgNamespaceNumber") != 0 && (mw.config.get("wgAction") == "edit" || mw.config.get("wgAction") == "submit") && $("#editform").length > 0)
	{
		regex = new RegExp(/(\{\[|\]\}|\[\{|\}\])/g);
		$("#editform").on("submit", function(event) 
		{
			var previousErrors = [...$("#wpTextbox1").text().matchAll(regex)].map(match => match.index);
			var addedErrors = [...$("#wpTextbox1").val().matchAll(regex)].map(match => match.index);
			var prevCount = previousErrors.length;
			var addedCount = addedErrors.length;
			var indexA = 0;
			var indexP = 0;
			while(indexP >= 0 && indexA < addedCount && indexP < prevCount)
			{
				if(previousErrors[indexP] == addedErrors[indexA])
				{
					indexA++;
					indexP++;
				}
				else if( previousErrors[indexP] < addedErrors[indexA]) 
				{
					indexP++;
				}
				else
				{
					indexP = -1;
				}
			}
			if(indexP == -1 || (indexP == prevCount && indexA < addedCount))
			{
				$("#wpTextbox1").focus().prop({'selectionStart': addedErrors[indexA], 'selectionEnd': addedErrors[indexA]+2})
				return(confirm("Mismatched curly and square braces detected! Are you sure you want to save this edit?"));
			}
			else return true;
		});
	}
});