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.

$(document.getElementsByClassName("fileInfo")).ready(function() {

	// Filenamespace only

	if (mw.config.get("wgNamespaceNumber") !== 6) return;

	

	// Get file information: height and width

	var fileInfo = document.getElementsByClassName("fileInfo")[0];

	if(!fileInfo) return;

	var height_width = fileInfo.innerHTML.match(/([\d,]+) × ([\d,]+)/);



	// With the height and width, calculate the total pixel count

	var width = parseInt(height_width1].replace(/,/g,''));

	var height = parseInt(height_width2].replace(/,/g,''));

	var total_pixels = height*width;



	// Maximum pixel count per IMAGERES

	var max_pixels = 100000;



	// Calculate the new width, height, dimensions and total pixel count with the

	// formula from IMAGERES, and confirm the new total pixel count is within range

	var new_width = Math.floor(Math.sqrt(max_pixels*width/height));

	var new_height = Math.round(height*new_width/width);

	var new_total_pixels = new_width*new_height;

	while (new_total_pixels > max_pixels) {

		new_width--;

		new_height = Math.round(height*new_width/width);

		new_total_pixels = new_width*new_height;

	}

	var new_dimensions = new_width+" × "+new_height;



	// Colour coding the results; green = good, red = bad

	var colour_start = "";

	var colour_end = "";

	if (total_pixels > max_pixels) {

		colour_start = "<span style='color:red'><b>";

		colour_end = "</b></span>";

	} else {

		colour_start = "<span style='color:green'>";

		colour_end = "</span>";

	}



	// Add the total pixel count after the initial dimensions

	fileInfo.innerHTML = fileInfo.innerHTML.replace("pixels,",

		"pixels, "+colour_start+number_format(total_pixels)+colour_end+" total pixels, ");

	

	// If the image exceeds 0.1MP, then report the error

	if (total_pixels > max_pixels) {

		// Create a image link with the maximum reduced size

		var image_link = document.getElementsByClassName('internal')[0].href;

		var new_image_link = image_link.replace("/en/", "/en/thumb/")+"/"+new_width+"px-"+image_link.substr(image_link.lastIndexOf("/")+1);

		

		var reuploadReason = "Resize to less than 0.1 MP per [[WP:IMAGERES]] via [[User:Alex 21/script-imageres|script]].";

		var replaceLink = document.getElementById('mw-imagepage-reupload-link');

		if ( !replaceLink || !replaceLink.children) return;

		var reuploadLink = replaceLink.children0];

		var reuploadLinkNew = reuploadLink.href+"&wpUploadDescription="+reuploadReason;

		

		// Add the maximum size of the image that's less than 0.1MP, the total pixel count, the new image link, and the reupload link summary

		fileInfo.innerHTML = fileInfo.innerHTML+"<br>(maximum size: "+colour_start+new_dimensions+colour_end+

			" pixels, "+number_format(new_total_pixels)+" total pixels, <a href='"+new_image_link+"'>resized file</a>, <a href='"+reuploadLinkNew+"'>upload resized file</a>)";

	}



	// Add commas to values over 1,000

	function number_format(x) {

		return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");

	}

});