Jump to content

User:Zackmann08/scripts/AddCheckForDeprecatedParameters.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.
//<nowiki>
jQuery(document).ready(function($) {

// Disable in article namespace as it shouldn't ever be used there
if(mw.config.get('wgNamespaceNumber') != 0 && document.getElementsByName('wpTextbox1')[0] && mw.config.get('wgUserName') == 'Zackmann08') {
	mw.loader.using(['mediawiki.util']).done( function() {
		var portletlink = mw.util.addPortletLink('p-tb','#','Chk4Dep','t-chk4dep');
		$(portletlink).click(function(e) {
			e.preventDefault();
			wpBuildCheckForDeprecatedParameters();
		});
	});
}
// -------------------------------------------------------------------------------- //
function wpBuildCheckForDeprecatedParameters()
{
	var template_title = mw.config.get('wgTitle');
	template_title = template_title.replace(/(.*)\/sandbox/, "$1");
	var paste_text = "{{deprecated parameters category|" + template_title + "}}";
	
	var dummy = $('<input>').val(paste_text).appendTo('body').select();
	document.execCommand('copy');

	var mycontent = document.getElementById('wpTextbox1');
	// Copy the contents of the text window so we can modify it without problems
	var mytxt = mycontent.value;
	var original_text = mycontent.value;
	// Make sure we haven't already done this before
	if(mytxt.search(/\{\{#invoke:[Cc]heck[_ ]+for[_ ]+deprecated[_ ]+parameters/g) >= 0 ) {
  		alert('Already added. Aborting');
  		return;
	}
	
	myfullpagename = mw.config.get('wgPageName');
	myfullpagename = myfullpagename.replace(/_/g, ' ');
	myfullpagename = myfullpagename.replace(/\/sandbox$/, '');
	mypagename = myfullpagename.replace(/^Template:/, '');
	mypagename = mypagename.charAt(0).toLowerCase() + mypagename.slice(1);
	mypagename = mypagename.replace(/^wikiProject/, 'WikiProject');
  
	mytxt = '{' + '{#invoke:'
    + 'Check for deprecated parameters|check\n'
    + '| _category = {' + '{main other|[[Category:Pages using ' + mypagename + ' with deprecated parameters|_VALUE_]]}}\n';
    
    const alias_regex = /\|\s*\_alias\-map\s*=\s*([^\|]+)/;
	var alias_map = original_text.match(alias_regex);
	var aliases = [];
	if (alias_map && alias_map[1]) {
		aliases = alias_map[1].split(',');
		for (let i = 0; i < aliases.length; i++) {
			mytxt = mytxt + '| ' + aliases[i].trim().split(':')[0] + '; ' + aliases[i].trim().split(':')[1] + '\n';
		}
	}
	
	const if_empty_regex = /(\{\{if empty\s*\|(?:\{\{\{[^\{\}]*\}\}\}|[^\{\}])*\}\})/gmi;
	const allMatches = [...original_text.matchAll(if_empty_regex)];
	
	var found = {};
	if (allMatches && allMatches[0] && allMatches[0][0]) {
		for (let i = 0; i<allMatches.length; i++){
			var match = allMatches[i][0];
			match = match.replace(/\|\}\}\}/g, '}}}');
			
			const params = [...match.matchAll(/\{\{\{([\w\s\-\(\)]+)\}\}\}/gm)];
			var new_param = '| ';
			if (params.length>1){
				for (let j = 0; j<params.length; j++){
					new_param = new_param + params[j][1] +'; ';
				}
				new_param = new_param.replace(/;([^;]*)$/gm, '$1');
				if (!found[new_param]) {
					mytxt = mytxt + new_param +'\n';
					found[new_param] = 1;
				}
			}
		}
	}
	mytxt = mytxt + "}}";
	
	if (Object.values(found).length == 0 && aliases.length == 0) {
		alert('No deprecated parameters found');
		return;
	}
	
	alert('Deprecated param check added with ' + (Object.values(found).length + aliases.length) + ' parameters.');

	mycontent.value = mycontent.value + mytxt;
	// Move up
	mycontent.value = mycontent.value.replace(/([\r\n \t][\r\n \t]*)(\{\{#invoke:Check for deprecated parameters(?:\{\{(?:\{\{[^{}]*\}\}|[^{}])*\}\}|[^{}])*\}\})/gi, '$2$1');
	mycontent.value = mycontent.value.replace(/(<noinclude>(?:<!--[^<>]*-->|[^<>])*<\/noinclude>)(\{\{#invoke:Check for deprecated parameters(?:\{\{(?:\{\{[^{}]*\}\}|[^{}])*\}\}|[^{}])*\}\})/gi, '$2$1');
	mycontent.value = mycontent.value.replace(/([\r\n \t][\r\n \t]*)(\{\{#invoke:Check for deprecated parameters(?:\{\{(?:\{\{[^{}]*\}\}|[^{}])*\}\}|[^{}])*\}\})/gi, '$2$1');

	mysummary = 'Adding deprecated parameter tracking through ['
		+ '[:Category:Pages using ' + mypagename + ' with deprecated parameters]] using ['
		+ '[User:Zackmann08/scripts/AddCheckForDeprecatedParameters.js|AddCheckForDeprecatedParameters]]'
		+ ' and [[Module:check for deprecated parameters]]';
  
	var editsummary = document.getElementsByName('wpSummary')[0];
    	if(typeof editsummary == 'object') {
    	if (editsummary.value.indexOf(mysummary) == -1) {
        if (editsummary.value.match(/[^\*\/\s][^\/\s]?\s*$/)) {
          editsummary.value += '; ' + mysummary;
        } else {
          editsummary.value += mysummary;
        }
      }
    }
}
// -------------------------------------------------------------------------------- //
});
//</nowiki>