Jump to content

User:Alex 21/script-linecolour.js

From Wikipedia, the free encyclopedia
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
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() {
		$.when( mw.loader.using( ['mediawiki.util']), $.ready ).then(function() {
			var portletlink = mw.util.addPortletLink('p-tv', '#', 'Line colours');
			$(portletlink).click( function(e) {
				e.preventDefault();
				// Default parameters and determine if we need to go to the editing page
				var loc = window.location.href; var wpTextbox1 = document.getElementById('wpTextbox1'); var i;
				if (loc.indexOf('action=edit') < 0 && loc.indexOf('action=submit') < 0) {
					alert("Go to the edit page to use this script.");
				} else {
					// Gather colours from text of textarea
					var colours = [];
					var topcolours = [];
					var s = wpTextbox1.value.split("\n");
					for (i = 0; i < s.length; i++) {
						if (s[i].indexOf('LineColor') > 0 || s[i].indexOf('TopColor') > 0 || s[i].indexOf('line_color') > 0) {
							// LineColor regex
							var reg = /\|\s*(LineColor|TopColor|line_color)[\s\=\#]*([^\s]*)/g;
							var t = reg.exec(s[i]);
							if (!t) continue;
							// Add colour to saved colours if its not already added
							var fontColor = t[2];
							if (colours.indexOf(fontColor) >= 0) continue;
							colours[colours.length] = fontColor;
							if (s[i].indexOf('TopColor') > 0) topcolours[topcolours.length] = fontColor;
						}
					}
					
					for (i = 0; i < colours.length; i++) {
						// Gather colour, and individually adjust to AAA compliancy
						var thiscolour = colours[i];
						var fground = (topcolours.indexOf(thiscolour) >= 0 ? '0645AD' : false);
						var newcolour = colourCompliance(thiscolour,fground);
						
						// Update if the original colour has been changed to be compliant
						if (thiscolour != newcolour) {
							// 3-digits codes (e.g. #FF3344 = #F34)
							var _3code;
							if (thiscolour[0] == thiscolour[1] && thiscolour[2] == thiscolour[3] && thiscolour[4] == thiscolour[5])
								_3code = thiscolour[0]+thiscolour[2]+thiscolour[4]+'|';
							else _3code = '';
							
							// Replace colours, check for minus error
							var reg2 = new RegExp('\\b'+_3code+thiscolour+'\\b','gi');
							if (newcolour.indexOf("-") < 0) wpTextbox1.value = wpTextbox1.value.replace(reg2,newcolour);
							else alert("Error fixing colour code "+thiscolour+" - please fix manually.");
						}
					}
					
					// Done
					document.getElementById('wpSummary').value += "Adjusted color contrasts via [[User:Alex 21/script-linecolour|script]] per [[WP:COLOR]] and [[Template talk:Infobox television season/Archive 3]].";
				}
			});
		});
	},300);
});