User:Erutuon/scripts/imageSize.js

From Wikipedia, the free encyclopedia
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.
/*
	Automatically converts image sizes in pixels to scaling values (upright=),
	as prescribed by [[WP:IMGSIZE]].
	Adds an edit summary only if a change was made.
	Posts the number of replacements in the console log.
*/

/* jshint esversion: 6, undef: true, unused: true, varstmt: true */
/* globals $, CleanupButtons, mw */

(function () {
"use strict";

if ( mw.config.get("wgPageContentModel") === "wikitext"
	&& [ "edit", "submit" ].indexOf(mw.config.get("wgAction")) !== -1) {
	
	const convertToUpright = function (wikitext) {
		const oldWikitext = wikitext;
		
		let count = 0;
		
		// The following regular expression assumes that a given line of wikitext
		// will contain images and nothing else.
		wikitext = wikitext.replace(
			/\[\[(?:[Ff]ile|[Ii]mage).+/g,
			function(wholematch) {
				if ( !/\|(thumb|frameless)/.test(wholematch) )
					return wholematch;
				
				return wholematch.replace(
					/\|\s*(\d+)px\s*([\|\]])/g,
					function(match, number, afterNumber) {
						// Convert string to number.
						number = Number(number);
						if ( number < 50 )
							return match;
						count += 1;
						
						// Convert to upright value.
						number = number / 220;
						// Round to nearest hundredth.
						number = Math.floor( number * 100 ) / 100;
						
						return "|upright=" + number + afterNumber;
					});
			});
		
		if ( wikitext === oldWikitext )
			console.log("imageSize.js made no changes.");
		else if ( count > 0 ) {
			let agreement = count === 1 ? "" : "s";
			
			const message = "imageSize.js made " + count + " replacement" + agreement + ".";
			
			if ( window.imageSizeNotifications )
				mw.notify(message);
			console.log(message);
		}
		
		CleanupButtons.addSummary(count, "converted image sizes in pixels to "
				+ "scaling values, as prescribed by [[WP:IMGSIZE]], using "
				+ "[[User:Erutuon/scripts/imageSize.js|JavaScript]]");
		
		return wikitext;
	};
	
	mw.loader.load("//en.wiktionary.org/w/index.php?title=User:Erutuon/"
		+ "styles/wikitext-cleanup.css&action=raw&ctype=text/css",
		"text/css");
	$.getScript('//en.wiktionary.org/w/index.php?title=User:Erutuon/scripts/CleanupButtons.js&action=raw&ctype=text/javascript')
	.done(() => {
		$(() => {
			const buttons = new CleanupButtons();
			if (CleanupButtons.evaluateConditions(/\[\[(?:[Ff]ile|[Ii]mage)[^\]]+px/)) {
				buttons.addButton({
					button: { text: 'convert pixel to scaling values' },
					func: convertToUpright,
				});
			}
		});
	}).fail(() => {
		console.error("Failed to load CleanupButtons script!");
	});
}

})();