Jump to content

User:Alex 21/script-tvepisoderatings.js

From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by Alex 21 (talk | contribs) at 02:13, 1 May 2017. 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($) {
	setTimeout(function() {
		var portletlink = mw.util.addPortletLink('p-tv', '#', 'Television episode ratings');
		$(portletlink).click( function(e) {
			e.preventDefault();
			var loc = window.location.href; var i; var _j = 1;
			if (loc.indexOf('action=edit') < 0 && loc.indexOf('action=submit') < 0) {
				// Find all sortable tables
				var tables = document.getElementsByClassName('sortable');
				var alltables = ""; var checkedcols = false;
				
				for (i = 0; i < tables.length; i++) {
					// Begin template
					alltables += "{{Television episode ratings\n";
					for (var j = 1; j < tables[i].rows.length; j++, _j++) {
						var link; var cells = tables[i].rows[j].cells;
						
						// Header cell
						if (cells[0].tagName == 'TH') { _j--; continue; }
						else if (!checkedcols) {
							// Add parameters for demographics that aren't used
							if (cells[3] === undefined) alltables += "| hide_rs      = y\n";
							if (cells[4] === undefined) alltables += "| hide_viewers = y\n";
							if (cells[5] === undefined) alltables += "| hide_dvr     = y\n";
							if (cells[6] === undefined) alltables += "| hide_dvrv    = y\n";
							if (cells[7] === undefined) alltables += "| hide_total   = y\n";
							if (cells[8] === undefined) { alltables += "| hide_totalv  = y\n"; alltables += "\n"; }
							checkedcols = true;
						}
						
						// Title cell including link
						if (cells[1].children.length > 0) {
							link = cells[1].children[0];
							var elem = document.createElement('textarea');
							elem.innerHTML = link.innerHTML;
							
							title = (link.title?link.title:link.href.substr(link.href.indexOf("#")));
							link = "[["+title+(title!=link.innerHTML?"|"+elem.value:"")+"]]";
						} else {
							link = cells[1].innerHTML.substr(1, cells[1].innerHTML.length-2);
						}
						
						// Date cell
						var date = (cells[2].children.length>1?cells[2].children[1]:cells[2]).innerHTML;
						date = date.replace(/ /g,' ').replace(/<span(.*)\/span\>/g,'');
						
						// Include all demographics if included, minus references
						alltables += "| title"+ _j +"   = "+link+"\n";
						alltables += "| date"+ _j +"    = "+date+"\n";
						if (cells[3] !== undefined) alltables += "| rs"+ _j +"      = "+hlcr(cells[3])+"\n";
						if (cells[4] !== undefined) alltables += "| viewers"+ _j +" = "+hlcr(cells[4])+"\n";
						if (cells[5] !== undefined) alltables += "| dvr"+ _j +"     = "+hlcr(cells[5])+"\n";
						if (cells[6] !== undefined) alltables += "| dvrv"+ _j +"    = "+hlcr(cells[6])+"\n";
						if (cells[7] !== undefined) alltables += "| total"+ _j +"   = "+hlcr(cells[7])+"\n";
						if (cells[8] !== undefined) alltables += "| totalv"+ _j +"  = "+hlcr(cells[8])+"\n";
						if (j != tables[i].rows.length-1) alltables += "\n";
					}
					
					// All completed, after removal of any occurrences of lowercase tba/tbd
					alltables += "}}\n\n";
					alltables = alltables.replace(/\|(.*)\= (.*)tb[a|d](.*)\n/g,'');
				}
				
				// Copy, alert that references need to be copied as well
				copyContent(alltables);
				alert('Tables copied. You will need to paste them before copying the referenes. Now click the edit link for the Ratings section.');
			} else {
				// Copy all references in section containing ratings tables
				var allrefs = '';
				var wpTextbox1 = document.getElementById('wpTextbox1').value.split("\n");
				for (i = 0; i < wpTextbox1.length; i++) {
					var res1 = /<ref(.*)>(.*)<\/ref>/.exec(wpTextbox1[i]);
					if (res1 && allrefs.indexOf(res1[0]) < 0) allrefs += res1[0]+"\n";
					var res2 = /<ref([^>]*)\/>/.exec(wpTextbox1[i]);
					if (res2 && allrefs.indexOf(res2[0]) < 0) allrefs += res2[0]+"\n";
				}
				
				// Copy, done
				copyContent(allrefs);
				alert('References copied.');
			}
			
			// HLCR: HTML content, lower case, references removed
			function hlcr(x) { return x.innerHTML.toLowerCase().replace(/<sup(.*)\/sup\>/g,''); } 
		});
	},800);
});