User:EpochFail/ItemQuality.js

From Wikidata
Jump to navigation Jump to search

Note: After publishing, you may have to bypass your browser's cache to see the changes.

  • Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
  • Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
  • Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
  • Opera: Press Ctrl-F5.
itemQuality = {};
(function($, mw, itemQuality){
	var ORES_HOST = "https://ores.wikimedia.org"
	var CLASS_WEIGHTS = {E: 1, D: 2, C: 3, B: 4, A: 5}
	var CLASS_NAMES = {E: "E", D: "D", C: "C", B: "B", A: "A"}
	var ASSESSMENT_SYSTEM_NAME = "[[WD:Item quality|Item quality]]"
	var revId = mw.config.get('wgCurRevisionId')
    var url = ORES_HOST + "/v3/scores/wikidatawiki/" + revId + "/itemquality"
	var parserOutputNode = $('#bodyContent')
	var compute_weighted_sum = function(data){
		//console.log(["rendering", data])
		var clsProba = data.wikidatawiki.scores[revId].itemquality.score.probability
		var weighted_sum = 0
		for (var cls in clsProba) {
			//console.log(cat)
			if (clsProba.hasOwnProperty(cls)) {
				var proba = clsProba[cls]
				weighted_sum += proba * CLASS_WEIGHTS[cls]
			}
		}
		return weighted_sum
	}
	var extract_prediction = function(data){
		return  data.wikidatawiki.scores[revId].itemquality.score.prediction
	}
	var render_itemquality = function(data){
		var prediction = extract_prediction(data)
		var weighted_sum = compute_weighted_sum(data)
		var rawText = ASSESSMENT_SYSTEM_NAME + ": " + 
			CLASS_NAMES[prediction] + " (" + 
			Math.round(weighted_sum*100)/100 + ")"
		var qualityBlock = $('<div>')
		parserOutputNode.prepend(qualityBlock)
		var api = new mw.Api()
		// https://en.wikipedia.org/w/api.php?action=parse&text=%27%27foobar%27%27&contentmodel=wikitext&formatversion=2&prop=text&disablelimitreport=true
		api.get({action: "parse", text: rawText, contentmodel: "wikitext", formatversion: 2, prop: "text", disablelimitreport: true})
		   .done(function(data){qualityBlock.html(data.parse.text)})
		   .fail(function(error){console.log(error)})
	}
	window.itemQuality.get_and_render_itemquality = function(){
		$.ajax(url, {success: render_itemquality.bind(this),
		             error: function(jqxmlhr, status, error){console.log(status + ": " + error)}})
	}
})(jQuery, mediaWiki, itemQuality)