Jump to content

User:RCSDevs/rank.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.
$(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);
				}
			});
		});
	}
});