User:Erutuon/scripts/footnoteCleanup.js

/*

Moves refs and citation needed tags after punctuation.

const namespaceNumber = mw.config.get("wgNamespaceNumber");

// Add a link just above the edit box, if you're in the main or Draft namespace. if ( namespaceNumber === 0 || namespaceNumber === 118 ) {	mw.loader.load("//en.wiktionary.org/w/index.php?title=User:Erutuon/styles/wikitext-cleanup.css&action=raw&ctype=text/css", "text/css");

var cleanUpFootnotes = function {		var textbox = $("#wpTextbox1"); if ( !textbox ) return; const oldContents = textbox.val; var contents = oldContents; var escaped = []; var i = 0; var replacements = []; var count = 0; var escape = function(text, regexString) {			var regex = new RegExp(regexString, "g"); text = text.replace(				regex,				function(match)				{					escaped[i] = match;					var replacement = "%%" + i + "%%";					i += 1;					return replacement;				}			); return text; };		var puncRegex = /((?:%%\d+%%)+)([\.\,\;\:\"]{1,3})/g;		var reorder = function(match, capture1, capture2)		{			count += 1;			var replacement = capture2 + capture1;			replacements.push(replacement);			return replacement;		};		var fixPunctuationPlacement = function(text)		{			while ( puncRegex.test(text) )				text = text.replace(					/((?:%%\d+%%)+)([\.\,\;\:\"]{1,3})/g,					reorder				); return text; };		/*	Escape various things: ref tags				*/ contents = escape(			contents,			"]*>[^<]+"		); contents = escape(			contents,			""		); // citation needed contents = escape(			contents,			"\\{\\{(?:[Cc]itation needed|[Cc]n|[Ff]act|[Cc]b|[Cc]tn|[Rr]ef\\?)\\|[^\}]+\\}\\}"		); contents = fixPunctuationPlacement(contents); // footnote templates /*	Handles up to one level of nested templates. Any more, and there may be problems. */		contents = escape(			contents,			"\\{\\{(?:sfn|efn|rfn)\\|(?:[^\\}]*?(?:\\{\\{[^\\}]+\\}\\})?)+\\}\\}"		); if ( i > 0 ) {			mw.notify(i + " refs found."); }		contents = fixPunctuationPlacement(contents); if ( count > 0 ) { mw.notify(count + " correction" + ( ( count > 1 && "s" ) || "" ) + " made: " + replacements.join); }		/*	Unescape the various things escaped above. This has to be done twice, since escaping was done twice. */		contents = contents.replace(			/%%(\d+)%%/g,			function(wholematch, number) {				number = Number(number);				return escaped[number];			}		); contents = contents.replace(			/%%(\d+)%%/g,			function(wholematch, number) {				number = Number(number);				return escaped[number];			}		); var isUnchanged = ( oldContents === contents ); if ( isUnchanged ) {			mw.notify("No misplaced footnotes or tagging templates were found."); }		textbox.val(contents); $("#wpSummary").val(function(index, summary)			{				var addition = "made sure refs are after punctuation with JavaScript; see WP:REFPUNC";				const afterSectionName = summary.match(/^(?:\/\*[^\*]+\*\/)?\s*(.+)/);				if ( afterSectionName && afterSectionName[1].length > 1 )				{					addition = "; " + addition;				}				if ( !isUnchanged && ( !afterSectionName || !afterSectionName[1].includes(addition) ) )					return summary + addition;				else					return summary;			}		); };	if ( !$("#wikitext-cleanup-button-wrapper").length ) $("#editform").prepend(' '); $("#wikitext-cleanup-button-wrapper") .append(` clean up footnotes `); $("#footnote-cleanup") .click(cleanUpFootnotes); }

//