Jump to content

User:RCSDevs/rank.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.
$(document).ready(function()
{
	var tab = $('#ca-nstab-main');
	
	//Ensure the current page is an actual article
	if(tab.length && tab.attr('class') === 'selected')
	{
		var goodIcon = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuMTCtCgrAAAAEH0lEQVQ4T4WUD0wUVBzH3x3cH5C/8qfTA5ERMBCygxunEh5keQqIFHkc3Z+O4/inHQ5CMWKDNA04yUG4WOrIZeomE1kOQ6uJZpYZzbUlUgxzrmCrZqxaMbhvv/cYDTLWb/tsb7/33me/95ctEksIB9FH3CemiSlijDhNGAk58b8hIezEOJMxsGQJ5FvlCHc+gtCSMHhle4PFS8C8qI+xUSKHWDRkRDeTMnjrZcg5novOLw/jo7sfY/DeoODi2EW4P3dD/1YmJKlSLvUQ+wheyILgiW6mYAh1haHtxhs4e6cXZ77pwdmRXtEWUHsut/faPgTYAsELoLlNwjIv7LxDUa7E/k8PoLm/BeoYNby8vWCwGXD01jG8PXQEuk06SKVSxGpi0X6lA41XmyArlHPhDJElTBT8AMZZhgT69zJpSQeRlpfGB/1D9Yka2N32BTlDmUGM1Z/MBEuifWXsFiGWXiwOoFEKU18RXh6shyZPs2Cy83gptjUbF+T0ZZlirPW8DaxG7CfnSYKd46fJWqTY0pOH8oEKWE5aoUpWQRmoRKpNK3JlF8qRkJsIhb8CK9asgKO3ROSNfYViLosQwg4uvM9yZ4VJxx7Dtj6jGGR63wRzvxnWCxbYBqwC3uY53sfH8LFr3103K3xCLPsTLpxm5lmhss0XEVkRdGUMsA2aUPqZFZU37dgx5BBUfmGH87oF1suF2NCRhZV50QhqXzorzBHC77hwiguV7Uos6w4V1+CptnS4hm3Y/b0TDT9WonFih6DhhwrsuuvEi7et0L2kgXeYF1TvhEB+SAGWLYQjXDimyJcj6pQK2kvxUC6TQ1sXj/rJF+CeqkKnpxZdqEOXpw5vztSilXL1D4qRaKbqUv2QMhCHyBPhkGXQK2LsMhee9tEokPJBLDZ/lYY4WwRC4gLQPOXAUexED17BebwqOEPtI5Rr+sUC5VI5Ht/zKDbe1GJ1fwxkaiFs4UKjxFsCXW8CjCN62L82QO4nQ7olEb1/1OMG3BjGYdxGJ66jFad+3oVVT0chQO2L0ns5KBjOwOquGC7j6LiQ/xqjy3NCYBrNQvXvBXBe2gTfYAVCVP54fvt67D9kxt6DRShwrIVfkA+CI/zgGtqKqsln8Nyd9QhO8eOyK1w2F7mEJ80dj4qfctE4Y8HrE8V4tmkdEtIjERYZgPCoQCRnRcHk1qN1sgQN02aUTmQjcWcUl/1JaLhofrwmlt6aIKT1U0VoQQktdjvtW5WgE5Vo9jiw5y+6UuPZSK6J5jL+45QKw7+Cv0P+a8yoN4Ziy4drRAWuX/NR81sBqgnXg3yUjG+G4ZwWYbqgucr+UzY/+HvkDx1Bq5YgxrocSbujkVS7EtEmFfxjfLiIc5V4aJmLBa92A8Hf5jWC/87fEvyetRLiNB8Oxv4GTLFVzBQ3zpMAAAAASUVORK5CYII=',
			mehIcon = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuMTCtCgrAAAADj0lEQVQ4T42Vf0jUZxzHn693druKZsFEkQbNLCq9iqwcsRqOsx9q6Zn540a2sYqCiigKtvVHjcWqrXI02MzoDM08C7VGVp6p01UrhX5alr8TyqNYLklI6t3n/ZyGZsI+8OI+vJ/35/29+z7P93tqmLIIaUKB0Cj09MGeWqpAz/+q5UK7yawwOUIhJsmEL9d9COe60bA7DEwSzWRSEE+bkMSB4cpPyDQMhTkLzMgqWIQrt35BU8dZtD7yaBrailBZtwMHXLMQ+ZkCvTJzUDAY8G5lmv0VVm8JxKVbe3CnJR+3m4/rz4FQq2/Nh+fqVqzcYAVnZJahgyqZV8vYaEX19Z04V70bEdMnwPKBP9IzolF775AmbWW01mwzPsH5mt0o+2cznOv9+r8pb5Uu3tz22fMVckujUXNjJ5KdUTS85TfX15qBGj30HimJBGdFaxf0RqVxA7b/rFBclYKyaxuQkGIbNHwgKwn7hYFaonjoPXUxEdv2Kfj5NoonQ7kn2xR+yFJwe2JxujodR4sSEDZlHEZYTFjimKg1siRxotYmTR0Hl3ioFXgW61lmSBaPlGqOcfgCDxeFw12+UHPy4iIUVcWi5K84nKmO17CnxrV+X3aJTc8yg1kM7En+xhe4x2XFibIo/FnzOSpq7bh8czHq7sbhesNSDXtqXKOnwPMp9h0brWeZway3gT+5FP4oNlB6KQg37i9AS8dCeJ/EoasrAd3PHRr21LhGz/nL4/UMZwcGNsemKrjOGii/Ogr1jUHweqehp8uOl88c6H2Sit5Opw/pqfX8Jxfz2rSXM5xlBrMY6J45V+HClZG41xSEkBATzGZjMKY+3tHHf2xGQ0swymR2hmQwi4HpPO3nqgLQ6Z2AigthKMwOR+GhKLj3fgH3rni4v1sO97cCe9G4VngkHJXi5UxpZQB49CRLHxt9sFPSrHj6NBSvX8wCOu3AgxVA3RqgYjtw+kcf7OvW+tbEQy9nOMsMYQQDWfrRyzkWiN4XNuDf+UB7PFDvBGol4O9NPthT45p46HXlBA559Por02IxkJcXLMbpwLN5wOMYoG0Z0JTkgz21rnnak5sbLAfdYNiQlwOLr69febVVX41B44NQvOy24VV3JF4/n6thT63xfigyVo3p/2aZfbPD1grhob+/AXuMFd/vGIvfsz7SsKdmljXx8J4N+ZnDFTfKKRQKrUJvH+x5NNKF9/wFKPUGCTWqaHSE3FkAAAAASUVORK5CYII=',
			badIcon = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuMTCtCgrAAAADkklEQVQ4T41VW0xcVRQ9M8PAoEgNMLSKlkdpC2UytKYRJMojyFQedijTTpwZEGmApIYCpU0gaKNB0S/9cOZDKomUCI3jT0GbNml5FNrGmtEYvrQJD8GExBj91KTW5V7nzlBIQ+JOVu7O3mutc84959yrtokEQUDwlWBF8HcUy4KwwC8g53+FV7AWZ1YoTFXw5Jjx5kEbTjnjJTfBmaIQZ1IQzqrgBAXbhUUQMimF8gwLvuyoxML4h/j1ziTWf7iB9e+vY2U2jMiFPow0OlH2lAK5oglGtY9EyCqzOleSioWxD7AycwlL0+P6uRmx2t1QFzoP2UCNaGm6JbwcrUsIP158B/OfD6JwXzYS4q14/dUK/DwRxE+Xg2iSnLXC/dm4NTIopp3ocJhiM91YPl/uGpdwtbscC6PvIuAqImEDI2+f1NhcI4fcyfbn9PKlxneqN8rPDfi4WGFuwItI6DReK3NuEX/W3aCxuUYOuTPn6/GRaC3GRnH3VZi7OVyqMN1fg1uDPlzudePAMymwWePgKcrVNYK5zWpBgfQmeut1baqvWmud4kEvGi57sg3DiZMOTPe6MN3nwmzfK5jnAP21uP1WnQZz1tgjh9zJVqfW0oNeNPyrPc8wHD2SiKmOItzpLkWkpxKfeg+j9YU9qHVkoE7QJvmQ1CJnKzWH3C+qk7S2TTzotWE4WqEwWaXwrWcnwt5C5KQ8BpO8l4K0ZLj3Pq3BnLU9KY8L5yDuep/VGmrpETNc9uUqXKsyISIz/KbsSdgsJtRmpuHeGy7gjFfgi8KrazWZdiQK54pwqaGWHuK1RMNwkV3hO1cCVtzpqNqViJfSk/HAXw40uoGWZqDtlAHmTfX4R3ov2pM1lxpq6UEvGvp52udefgK/NezWIw8X5wM+MWtuB06/D/QOGWDOmvTISbaa8btnN26KNnq/9bHhYVz1Zdrwx/Es9OTZseQuEZEHaD0DnAsB731tgDlr0lsUztl8O/4UDbXi8YsgnoaME7w+o8VpspwCIEDDGnkGZKk9QMeAAeas6V6J5lITvXrHDauHEUwwmzBeslOIDhEUA/5KEdfJ85gBnUtNeuSMCTdeNKL9xLDYGvwEBTlaS04SFo9m4b6vAA8Ch/Bv4LAG8/syK/aas5NiM6OZmQbbBb8aq3EyctUuG847duDC86kazFnj3RcO39kjy9wuYr8AHgNeJ37+eWg3/wI2NuBhKPUfHZxfMnRRQ04AAAAASUVORK5CYII=';
			selectedIcon = '',
			currentURL = decodeURIComponent(tab.find('span a').eq(0).attr('href')),
			title = currentURL.substring(currentURL.indexOf('/wiki/') + 6),
			params = { //Define parameters for call to MediaWiki API (https://www.mediawiki.org/wiki/API)
				action: 'query',
				prop: 'revisions',
				rvlimit: '50',
				format: 'json',
				titles: title,
				rvprop: 'user|ids|comment'
			};
			
		//Send request with JSON callback
		$.getJSON('https://en.wikipedia.org/w/api.php', params, function(json)
		{
			var pages = json.query.pages,
				//Unfortunatley, there is no tag for revisions that have been reverted/undone
				revs = pages[Object.keys(pages)[0]].revisions;
				ids = "",
				nparams = {},
				flag = 0;
			
			revs.forEach(function(rev) { ids += (rev.revid + '|'); });
			ids = ids.slice(0, -1);
			nparams = {
				models: 'goodfaith|damaging',
				revids: ids
			};
			
			$.getJSON('https://ores.wikimedia.org/v2/scores/enwiki', nparams, function(json)
			{
				var enwiki = json.scores.enwiki,
					score = 0;
				
				//Get an array of revision ids to iterate over. The order doesn't matter because the rev id will be present in both arrays
				Object.keys(enwiki.damaging.scores).forEach(function(id)
				{
					score += enwiki.damaging.scores[id].probability.false;
					score += enwiki.goodfaith.scores[id].probability.true;
				});

				/*
					Not all articles will have 50 revisions, so to find the average
					divide by 2x the number of revisions found (because we add a number to the score 2x per revision)
				*/
				score /= (revs.length * 2);
				//Print score to console for debug purposes
				console.info("There is a " + (score * 100) + "% chance this article is a good one.");
				
				//Only show a bad article if it has a score <= 10%
				if(score <= 0.1)
				{
					selectedIcon = badIcon;
				}
				//Only show a good article if it has a score >= 80%
				else if(score >= 0.8)
				{
					selectedIcon = goodIcon;
				}
				
				//Only append an rating indicator if an article is very good or very bad
				if(selectedIcon.length !== 0)
				{
					var icon = '<div id="mw-indicator-rating" class="mw-indicator"><a href="javascript:void(0)" title="This article has a rating of ' + Math.round(score * 100) + '%"><img width="20" height="20" alt="Page rated" src="' + selectedIcon + '"></a></div>';
					$('.mw-indicators').eq(0).prepend(icon);
				}
			});
		});
	}
});