Lankide:EpochFail/ArticleQuality-system.js

Wikipedia, Entziklopedia askea

Oharra: Gorde ondoren zure nabigatzailearen katxea ekidin beharko duzu aldaketak ikusteko. Mozilla / Firefox / Safari: Shift tekla sakatu birkargatzeko momentuan, edo Ctrl-Shift-R sakatu (Cmd-Shift-R Apple Mac baten); IE: Ctrl tekla sakatu birkargatzeko momentuan, edo Ctrl-F5 sakatu; Konqueror:: Birkargatzeko klik egin, edo F5 sakatu, besterik ez; Opera erabiltzaileek Tresnak-Hobespenak atalera jo eta katxea garbitzeko aukera hautatu.

articleQuality = {};
(function($, mw, articleQuality){
	var ORES_HOST = "https://ores.wikimedia.org"
	var CLASS_WEIGHTS = {Stub: 1, Start: 2, C: 3, B: 4, GA: 5, FA: 6}
	var CLASS_NAMES = {Stub: "{{ikono|z}}", Start: "{{ikono|h}}", C: "{{ikono|c}}", B: "{{ikono|b}}",
	                   GA: "{{ikono|ao}}", FA: "{{ikono|na}}"}
	var ASSESSMENT_SYSTEM_NAME = "Kalitate neurketa"
	var DB_NAME = mw.config.get('wgDBname')
	var parserOutputNode = $('#bodyContent')
	var computeWeightedSum = function(data, revId){
		//console.log(["rendering", data])
		var clsProba = data[DB_NAME].scores[revId].wp10.score.probability
		var weightedSum = 0
		for (var cls in clsProba) {
			//console.log(cat)
			if (clsProba.hasOwnProperty(cls)) {
				var proba = clsProba[cls]
				weightedSum += proba * CLASS_WEIGHTS[cls]
			}
		}
		return weightedSum
	}
	var extractPrediction = function(data, revId){
		return  data[DB_NAME].scores[revId].wp10.score.prediction
	}
	var renderArticleQualityHeader = function(data, revId){
		var prediction = extractPrediction(data, revId)
		var weightedSum = computeWeightedSum(data, revId)
		var rawText = ASSESSMENT_SYSTEM_NAME + ": " + 
			CLASS_NAMES[prediction] + " (" + 
			Math.round(weightedSum*100)/100 + ")"
		var qualityBlock = $('<div>').addClass("article_quality")
		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)})
	}
	articleQuality.getAndRenderArticleQualityHeader = function(){
		var revId = mw.config.get('wgCurRevisionId')
	    var url = ORES_HOST + "/v3/scores/" + DB_NAME + "/" + revId + "/wp10"
		$.ajax(url, {success: function(data){renderArticleQualityHeader(data, revId)},
		             error: function(jqxmlhr, status, error){console.log(status + ": " + error)}})
	}
	var renderArticleQualityLink = function(data, span, revId){
		var prediction = extractPrediction(data, revId)
		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: CLASS_NAMES[prediction], contentmodel: "wikitext", formatversion: 2, prop: "text", disablelimitreport: true})
		   .done(function(data){span.prepend($(data.parse.text).find('p').html())})
		   .fail(function(error){console.log(error)})
	}
	var getAndRenderArticleQualityLink = function(revId, span){
		var url = ORES_HOST + "/v3/scores/" + DB_NAME + "/" + revId + "/wp10"
		$.ajax(url, {success: function(data){renderArticleQualityLink(data, span, revId)},
		             error: function(jqxmlhr, status, error){console.log(status + ": " + error)}})
		
	}
	articleQuality.addPredictionsToArticleLinks = function(){
		var api = new mw.Api()
		$("span.ores-wp10-prediction").each(function(){
			var span = $(this)
			var anchor = span.find('a')
			var page_title = anchor.attr('title')
			api.get({action: 'query', prop: 'revisions', titles: page_title, rvprop: 'ids', formatversion: 2})
				.done(function(data){
					getAndRenderArticleQualityLink(data.query.pages[0].revisions[0].revid, span)})
		})
	}
})(jQuery, mediaWiki, articleQuality)