Jump to content

User:Alex 21/script-plotlength.js

From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by Alex 21 (talk | contribs) at 11:54, 8 September 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', '#', 'Plot lengths', 't-plotlength', '', '', '#t-redlinks');
	$(portletlink).click( function(e) {
		e.preventDefault();
		var plotlength = '<span class="plotlength"></span>';
		var dlength; var summary = ''; var i; var d = new Date(); var plotString;
		var firstSummary = document.getElementsByClassName('summary')[0];
		
		var inPlot = false; var firstElem;
		var IDs = ["Plot", "Premise", "Synopsis", "Summary", "Plot summary", "Overview"];
		for (var id = 0; id < IDs.length; id++) {
			var summaryElem = document.getElementById(IDs[id]);
			if (summaryElem === null) continue;
			var nodes = summaryElem.parentNode.parentNode.children;
			for (i = 0; i < nodes.length; i++) {
				if (nodes[i] == summaryElem.parentNode) {
					inPlot = true;
				} else if (inPlot === true) {
					if (nodes[i].tagName == 'H2') {
						inPlot = false;
					} else {
						summary += nodes[i].innerHTML+' ';
						if (firstElem === undefined & nodes[i].tagName == "P") firstElem = nodes[i];
					}
				}
			}
			if (summary.lastIndexOf(plotlength) > 0) summary = summary.substr(summary.lastIndexOf(plotlength)+plotlength.length);
			summary = summary.replace(/(\r\n|\n|\r)/gm,"").replace(/<table(.*)\/table\>/g,'');
			summary = summary.replace(/<\/?([^>]*)>/g,'').trim();
			dlength = summary.split(' ').length+1;
			if (dlength > 700) {
				firstElem.innerHTML = "<span style='color:red'><b>("+dlength+")</b></span> "+plotlength+firstElem.innerHTML;
				plotString = "{{Plot|film|date="+d.getMonthName()+" "+d.getFullYear()+"}}";
				copyContent(plotString);
				alert('The main plot summary is too long per WP:FILMPLOT.\nCopied to clipboard: '+plotString);
			} else {
				firstElem.innerHTML = "("+dlength+") "+plotlength+firstElem.innerHTML;
				alert('The main plot summary is sufficiently short per WP:FILMPLOT.');
			}
			break;
		}
	
		var episodes = '';
		var desc = document.getElementsByClassName('description');
		var trs = document.getElementsByTagName("tr");
		var tenperc = 0;
		for (i = 0; i < desc.length; i++) {
			summary = desc[i].innerHTML.replace(/(\r\n|\n|\r)/gm,"").replace(/<table(.*)\/table\>/g,'');
			if (summary.lastIndexOf(plotlength) > 0) summary = summary.substr(summary.lastIndexOf(plotlength)+plotlength.length);
			summary = summary.replace(/<\/?([^>]*)>/g,'');
			dlength = summary.split(' ').length+1;
			if (dlength > 200) {
				for (var j = 0; j < trs.length; j++) {
					if (desc[i] == trs[j].children[0]) {
						var doubleep = (trs[j-1].cells[0].innerHTML.match(/(\d*)/g).filter(Number).length > 1);
						if (doubleep && dlength <= 400) {
							desc[i].innerHTML = "("+dlength+") "+plotlength+desc[i].innerHTML;
						} else if ((!doubleep && dlength <= 215) || (doubleep && dlength <= 415)) {
							desc[i].innerHTML = "<span style='color:green'>("+dlength+")</span> "+plotlength+desc[i].innerHTML;
							tenperc++;
						} else if ((!doubleep && dlength > 215) || (doubleep && dlength > 415)) {
							episodes += trs[j-1].cells[0].innerHTML.replace(/\n/g,'')+" ("+dlength+")\n";
							desc[i].innerHTML = "<span style='color:red'><b>("+dlength+")</b></span> "+plotlength+desc[i].innerHTML;
						}
					}
				}
			} else {
				desc[i].innerHTML = "("+dlength+") "+plotlength+desc[i].innerHTML;
			}
		}
		var tenpercS = (tenperc?'('+tenperc+' summar'+(tenperc==1?'y is':'ies are')+' only a few words over the limit)\n':'');
		if (episodes) {
			plotString = "{{Plot|episode|date="+d.getMonthName()+" "+d.getFullYear()+"}}";
			copyContent(plotString);
			alert("Episode summaries exist that are too long per WP:TVPLOT:\n"+episodes+tenpercS+'Copied to clipboard: '+plotString);
		} else {
			alert('All episode summaries are sufficiently short per WP:TVPLOT.\n'+tenpercS);
		}
	});
});