User:Vvekbv/recoin id.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.
/**
 * Recoin: Relative Completeness Indicator
 * 
 * Explanations module: Lists the most important missing attributes, which are used for computing the relative completeness indicator and adds a relative completeness indicator symbol to the page status indicators
 * 
 * Developers  : Vevake Balaraman (vevake.balaraman@gmail.com), Simon Razniewski (razniewski@inf.unibz.it), Albin Ahmeti (albin.ahmeti@gmail.com)
 * Inspired by : COOL-WD: COmpleteness toOL for WikiData (Fariz Darari)
 */

( function( mw, $ ) {
	
    'use strict';
    
	console.log('recoin_id-plugin loaded');

	/**
	 * Check if we're viewing an item
	 */
	var entityID = mw.config.get( 'wbEntityId' );
	var lang = mw.config.get( 'wgUserLanguage' );
	var pageid = "48139757";
	var title = "Most relevant ID properties which are absent";
	if ( !entityID ) 
	{
		return;
	}
    
    /**
	 * holds the DOM input element for the label
	 */
    var labelsParent_id;

	function init() 
	{
        
        // Element into which to add the missing attributes
		labelsParent_id = $('#wb-item-' + entityID + ' div.wikibase-entitytermsview-heading');
		if (labelsParent_id.length < 1) 
		{
			return;
		}	
		
		var labelsDOM_id = $('<div id="recoin_id-property" style="display:none"></div>');
		var labelsUL_id = $('<ul></ul>');
        var labelsText_id = $('<div class="wikibase-entitytermsview-recoinproperty-toggler ui-toggler ui-toggler-toggle ui-state-default" id = "recoin_id-title"></div>');
		// var translate_help = $('<span class="wikibase-entitytermsview-entitytermsforlanguagelistview-configure" id="translate_id"><a href="https://www.wikidata.org/wiki/Wikidata:Recoin/translation"> [Help with translations]</a></span>');        
		$.getJSON( 'https://www.wikidata.org/w/api.php?action=query&prop=extracts&titles=Wikidata:Recoin/translation&format=json', 
		   function ( result ) 
		   {
		   	var desc = result.query.pages[pageid].extract;
		   	desc = desc.replace(/<p>/g, "");
		   	desc = desc.replace(/<\/p>/g, "");
		   	desc = desc.split("\n");
		   	for (var i=0; i< desc.length; i++)
		   	{
		   		var s = desc[i].split(";");
		   		if (s[0]===lang && s.length>=7)
		   		{
					title = s[1];
					break;
		   		}
		   	}
   			var toggleSlider_id = $('<span class = "ui-toggler-icon ui-icon ui-icon-triangle-1-e" id="status_id"></span>\
			<span class="ui-toggler-label">'+ title +': ID </span>');
			labelsText_id.append(toggleSlider_id);
			labelsParent_id.append(labelsText_id);
			// labelsParent.append(translate_help);

		   });
        $.getJSON( 'https://tools.wmflabs.org/recoin/getmissingattributes_id.php?callback=?', 'subject=' + entityID + '&lang=' + lang, 
			   function ( result ) 
			   {
			   	// Avoid `TypeError: can't access property "length", result.entities is undefined ``
			   	// Seen on https://recoin.toolforge.org/getmissingattributes_id.php?callback=jQuery34104710056820494901_1611334851637&subject=Q105000091&lang=en&_=1611334851638
			   	// which provides invalid response.
			   	if(!result || !result.entities) return;
            
			    for (var i=0; i< result.entities.length; i++) 
			    {
                    var insertElem_id = '<li> ' +
                            '<label><a href="https://www.wikidata.org/wiki/Property:'+ result.entities[i].entity + '">' + 
                            result.entities[i].entity + '</a>' +
                               ' - ' + result.entities[i].label + ' - ' + result.entities[i].rating + ' '+ 
                            '</label></li>';
                    labelsUL_id.append(insertElem_id);
                }
				labelsDOM_id.append(labelsUL_id);
				labelsParent_id.append(labelsDOM_id);
			
				$("#recoin_id-title" ).click(function() {
				$( "#recoin_id-property" ).slideToggle();
				$("#status_id").toggleClass("ui-icon-triangle-1-e ui-icon-triangle-1-s ui-toggler-icon3dtrans");
				});
		});
	}
	
	$( function () {
		mw.hook( 'wikipage.content' ).add( init );
	});

	} ( mediaWiki, jQuery ) );