Jump to content

User:Alex 21/script-seriesoverview.js

From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by Alex 21 (talk | contribs) at 02:59, 23 June 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-tb', '#', 'Series overview');
	$(portletlink).click( function(e) {
		e.preventDefault();
		var overview = document.getElementById('seriesoverview');
		if (overview === null) {
			var k = 0;
			var alltables = document.getElementById('mw-content-text').getElementsByTagName('table');
			var className = alltables[k].className; 
			while (ser_ov_tableIndexOf(className,"ambox") || ser_ov_tableIndexOf(className,"infobox") || ser_ov_tableIndexOf(className,"mw-collapsible")){ 
				k++;
				overview = alltables[k];
			}
		}

		var overview_template = ("{{Series overview\n"); var uk = 0; var i; var _i = 1;
		var MDYreg = /([A-Za-z]*)\s*(\d{1,2}),\s*(\d{4})/; var DMYreg = /(\d{1,2})\s*([A-Za-z]*)\s*(\d{4})/;

		var minus = 3; var network = 0; var networkC;
		if (overview.rows[0].cells[3] !== undefined && overview.rows[0].cells[3].innerHTML.toLowerCase() == "network") {
			minus = 4; network = 1;
		}
		var head = overview.rows[0].cells.length-minus;
		var info = overview.rows[1].cells.length-(minus-1);
		var onerowheader = (overview.rows[1].cells[0].tagName == "TD");
		if (head > 0) overview_template += ("| infoheader = "+overview.rows[0].cells[minus].innerHTML+"\n");
		if (info > 0 && !onerowheader)
			for (i = 0; i < info; i++)
				overview_template += ("| info"+("ABCDE"[i])+"      = "+overview.rows[1].cells[i+(minus-1)].innerHTML.replace("\n","")+"\n");
		if (head||info) overview_template += ("\n");
		
		for (i = (onerowheader?1:2); i < overview.rows.length; i++) {
			var R = overview.rows[i];
			var RC = R.cells;
			var startdate,enddate;
			
			var seasonLink = (RC[1].firstChild.href !== undefined ? RC[1].firstChild : RC[1].firstChild.firstChild);
			var link;
			if (!seasonLink) link = '';
			else link = decodeURIComponent(seasonLink.href.substr(seasonLink.href.lastIndexOf('/')+1).replace(/_/g, ' ').replace(/\.([A-Z0-9]{2})/g, '%$1')).split('#');
			
			overview_template += ("| color"+_i+"     = "+(RC[0].bgColor?RC[0].bgColor:RGBSTRtoHEX(RC[0].style.background?RC[0].style.background:RC[0].style.backgroundColor))+"\n");
			overview_template += ("| link"+_i+"      = <includeonly>"+link[0]+"</includeonly>"+(link[1]?"#"+link[1]:"")+"\n");
			if (RC[2].innerHTML.toLowerCase().indexOf("tba") < 0) overview_template += ("| episodes"+_i+"  = "+ser_ov_IR(RC[2])+"\n");
			
			var reS = MDYreg.exec(ser_ov_dateexec(RC[3]));
			if (!reS) {
				reS = DMYreg.exec(ser_ov_dateexec(RC[3]));
				if (reS) {temp = reS[1]; reS[1] = reS[2]; reS[2] = temp; uk = 1; }
			}
			if (reS) startdate = ser_ov_startend(reS,"Start",uk);
			
			var reE;
			if (RC[4] !== undefined) {
				reE = MDYreg.exec(ser_ov_dateexec(RC[4]));
				if (!reE) {
					reE = DMYreg.exec(ser_ov_dateexec(RC[4]));
					if (reE) {temp = reE[1]; reE[1] = reE[2]; reE[2] = temp; uk = 1; }
				}
				if (reE) enddate = ser_ov_startend(reE,"End",uk);
			}
			
			if (reS) overview_template += ("| start"+_i+"     = "+startdate+"\n");
			if (reE) overview_template += ("| end"+_i+"       = "+enddate+"\n");
			
			if (network && RC[5] !== undefined && RC[5].getAttribute('rowspan')) {
				var nwlink = RC[5].children[0].href.replace("https://en.wikipedia.org/wiki/","").replace("_", " ");
				var nwlinkc = "[["+(RC[5].children[0].innerHTML==nwlink?"":nwlink+"|")+RC[5].children[0].innerHTML+"]]";
				overview_template += ("| network"+_i+"   = "+nwlinkc+" ");
				overview_template += ("| network"+_i+"length = "+RC[5].getAttribute('rowspan')+"\n");
				networkC = 1;
			} else networkC = 0;
			
			if (RC[5+networkC]) overview_template += ("| info"+_i+"A     = "+ser_ov_IR(RC[5+networkC])+"\n");
			if (RC[6+networkC]) overview_template += ("| info"+_i+"B     = "+ser_ov_IR(RC[6+networkC])+"\n");
			if (RC[7+networkC]) overview_template += ("| info"+_i+"C     = "+ser_ov_IR(RC[7+networkC])+"\n");
			if (RC[8+networkC]) overview_template += ("| info"+_i+"D     = "+ser_ov_IR(RC[8+networkC])+"\n");
			if (RC[9+networkC]) overview_template += ("| info"+_i+"E     = "+ser_ov_IR(RC[9+networkC])+"\n");
			
			if (i < overview.rows.length-1) overview_template += ("\n");
			_i++;
		}
		if (uk) overview_template += ("\n| uk         = y\n");
		overview_template += ("}}");

		copyContent(overview_template);
		alert("Copied! Now go to the editing page and paste over the raw code.");
		
		function ser_ov_IR(cell) {
			return cell.innerHTML.replace(/<sup(.*)\/sup\>/g,'');
		}
		
		function ser_ov_dateexec(cell) {
			return (cell.innerHTML.indexOf('<')>=0 ? cell.innerHTML.substr(0, cell.innerHTML.indexOf('<')) : cell.innerHTML).split('&nbsp;').join(' ');
		}
		
		function ser_ov_startend(cell,se,uk) {
			return "{{"+se+" date|"+cell[3]+"|"+(new Date(Date.parse(cell[1]+" 1, 2005")).getMonth()+1)+"|"+cell[2]+(uk?"|df=y":"")+"}}";
		}
		
		function ser_ov_tableIndexOf(className,content) {
			return (className.indexOf(content) >= 0);
		}
	});
});