Jump to content

User:Alex 21/script-formatdates.js

From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by Alex 21 (talk | contribs) at 03:42, 8 December 2016. The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.
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.
$(function($) {
	var portletlink = mw.util.addPortletLink('p-tv', '#', 'Format airdates');
	$(portletlink).click( function(e) {
		e.preventDefault();
		/* Textbox value */
		var wpTextbox1 = document.getElementById('wpTextbox1');
		var wpTextbox1_V = wpTextbox1.value.split("\n");
		
		/* Df parameter, update parameters, months and regex used throughout */
		var df = false;
		var AltDate_U = false;
		var OriginalAirDate_U = false;
		var MDY = /(\|\s*(OriginalAirDate)\s*=\s*)(([A-Z][a-z]*)\s*)?((\d{1,2}),\s*)?(\d{4})/;
		var DMY = /(\|\s*(OriginalAirDate)\s*=\s*)((\d{1,2})\s*)?(([A-Z][a-z]*)\s*)?(\d{4})/;
		var ad_reg = /(\|\s*(AltDate)\s*=\s*)\{\{[Ss]tart\sdate\|(\d+)\|0?(\d+)\|0?(\d+)([^\}]*)\}\}/;
		var months = ['','January','February','March','April','May','June','July','August','September','October','November','December'];
		
		/* Iterate through each line of the textbox */
		for (var i = 0; i < wpTextbox1_V.length; i++) {
			var line = wpTextbox1_V[i];
			
			/* Check for df and to see if the line actually needs changing at all */
			if (line.match(/\|\s*df\s*\=\s*([^\s]+)/)) df = true;
			if (line.toLowerCase().indexOf('start date') > -1 && line.indexOf('OriginalAirDate') > -1) continue;
			if (line.toLowerCase().indexOf('start date') == -1 && line.indexOf('AltDate') > -1) continue;
			if ((line.indexOf('OriginalAirDate') == -1 && line.indexOf('AltDate') == -1) || line.indexOf('TableTBA') > -1) continue;
			
			/* Replace OriginalAirDate */
			var line_old = line;
			if (line.match(MDY)) {
				line = line.replace(MDY, "$1{{Start date|$7|$4|$6"+(df?"|df=y":"")+"}}");
			} else {
				line = line.replace(DMY, "$1{{Start date|$7|$6|$4|df=y}}");
			}
			if (line_old == line && line.indexOf("{{Start date") == -1) {
				line = line.replace(/(\|\s*(OriginalAirDate)\s*=\s*)(.*)/, "$1{{Start date|$3}}");
			} else {
				OriginalAirDate_U = true;
			}
			/* Months to numbers */
			for (var j = 1; j < months.length; j++) {
				var re = new RegExp("\\|"+months[j]+"\\|","g");
				line = line.replace(re, "|"+j+"|");
			}
			
			/* Replace AltDate */
			line_old = line;
			if (df) {
				line = line.replace(ad_reg, "$1$5 <<$4>> $3");
			} else {
				line = line.replace(ad_reg, "$1<<$4>> $5, $3");
			}
			if (line_old != line) {
				AltDate_U = true;
			}
			/* Numbers to months */
			for (j = 1; j < months.length; j++) {
				line = line.replace("<<"+j+">>", months[j]);
			}
			
			/* Replace any occurences of {{Start date|}} and similar */
			line = line.replace(/\|\|+/g,'|').replace("|}}","}}").replace("{{Start date}}","");
			wpTextbox1_V[i] = line;
		}
		
		/* Save content */
		var wpTextbox1NewValue = '';
		for (i = 0; i < wpTextbox1_V.length; i++) wpTextbox1NewValue += wpTextbox1_V[i]+"\n";
		wpTextbox1.value = wpTextbox1NewValue;
		
		document.getElementById('wpSummary').value += "Update OriginalAirDate and/or AltDate to use correct formats per template documentation via script.";
	});
});