User:Karima Rafes/TabLaboratory.js

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.
$(document).ready(function() {
	//precondition
		//precondition
	if( /^(mediawiki|wikidata|meta|commons)wiki$/.test( mw.config.get( 'wgDBname' ) ))
		return; //end
		
	var wgWikibaseItemId = mw.config.get("wgWikibaseItemId");
	if (!wgWikibaseItemId) {
		console.log("no wikidata");
		return;
	}
	
	var nameWiki = mw.config.get( 'wgDBname' );
	var contentTab = 
	'<script>'+
	'function openTabLaboratory() {' +
    '$(\'#bodyContentLaboratory\').is(\':visible\')?$(\'#bodyContentLaboratory\').hide():$(\'#bodyContentLaboratory\').show();' +
    '}'+
	'</script>'+
	'<li id="ca-laboratory"><span><a id="linktab-laboratory" style="color:lightblue;" href="javascript:openTabLaboratory()" title="Laboratory">Lab</a></span></li>';
		
	var tab = $('#p-namespaces ul').append(contentTab);
    var content = '<div id="bodyContentLaboratory" class="mw-body-content" style="z-index: 5;display: none;background: rgb(220, 220, 220);"></div>';
    $(content).insertBefore('#bodyContent');
    
        //Display team of INRIA
        var endpointWikidata = "https://query.wikidata.org/bigdata/namespace/wdq/sparql";
		var queryFindLabelEnglish = "PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> \
PREFIX wd: <http://www.wikidata.org/entity/> \
select  DISTINCT * \
where { \
        wd:"+wgWikibaseItemId+" rdfs:label ?label . \
  FILTER (langMatches( lang(?label), \"EN\" ) ) \
      } \
LIMIT 1";

    $.ajax({
                url: endpointWikidata,
                dataType: 'json', 
                data: { 
                    queryLn: 'SPARQL',
                    query: queryFindLabelEnglish , 
                    limit: 'none',
                    infer: 'true',
                    Accept: 'application/sparql-results+json'
                },
                success: findTeamInria, 
                error: displayError
        });


    function displayError(xhr, textStatus, errorThrown) {
        console.log(textStatus);
        console.log(errorThrown);
    }
    
/////////////////////////////////// INRIA

	 function capitalize(s)
	{
	    return s[0].toUpperCase() + s.slice(1);
	}

    function findTeamInria(data) {
        var labelEn =     data.results.bindings[0].label.value ;
        var endpointTeamInria = "https://opendata1.opendata.u-psud.fr/sparql/";
var queryFindTeam = "PREFIX inria: <http://inria.fr/> \
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> \
PREFIX wdt: <http://www.wikidata.org/prop/direct/> \
SELECT DISTINCT ?ACMCode ?ACMCodeLabel ?linkPageTeam ?teamLabel ?teamComment \
WHERE { \
GRAPH <http://pages.saclay.inria.fr/gregory.grefenstette/> \
{ \
   ?article   rdfs:label '''"+capitalize(labelEn)+"''' ; \
	wdt:P2179  ?ACMCode ; \
	rdfs:seeAlso ?linkPageTeam . \
	?linkPageTeam rdfs:label ?teamLabel ; \
	rdfs:comment ?teamComment ;	wdt:P2179  ?ACMCode  . \
	?objectACM a <http://dl.acm.org/ontology#code> ; \
	rdfs:label ?ACMCodeLabel ; \
	wdt:P2179  ?ACMCode . \
} \
} ORDER BY ?ACMCodeLabel  ?teamLabel";
//console.log("Debug 6");
//console.log(labelEn);
//console.log(queryFindTeam);
    $.ajax({
                url: endpointTeamInria,
                dataType: 'json', 
                data: { 
                    queryLn: 'SPARQL',
                    query: queryFindTeam , 
                    limit: 'none',
                    infer: 'true',
                    Accept: 'application/sparql-results+json'
                },
                success: displayTeamInria, 
                error: displayError
        });
    }
    
   function displayTeamInria(data) {
		var textHtml = '<h2><span class="mw-headline">Inria teams in relation</span></h2>';
		
       textHtml += '<p>';
       if(data.results.bindings.length === 0){
    		textHtml += 'Sorry, no teams found';
    	}else{
			textHtml += '<div style="display: inline-block;">';
	        var currentCodeLabel = "";
	        var label = "";
	 		$.each(data.results.bindings, function(index, bs) {
	 			label = bs["ACMCodeLabel"].value == "" ? bs["ACMCode"].value : bs["ACMCodeLabel"].value ;
	 			if (currentCodeLabel != label ){
		 			if (currentCodeLabel != "" ){
			 			textHtml += 	'</ul>'
											+'</div>'
										+'</div>';
		 			}
	 				textHtml += '<div id="p-cactions' +
					        	bs["ACMCode"].value 
					        	+ '" role="navigation" class="vectorMenu" aria-labelledby="p-cactions-label" style="margin: 2px;">'
							+'<button id="p-cactions-label' +
					        	bs["ACMCode"].value 
					        	+ '" class="mw-ui-button mw-ui-constructive" style="background: cornflowerblue; border-color:cornflowerblue;">'
								+'<span>' +
					        	label
					        	+ '</span>'
							+'</button>'
							+'<div class="menu" style="top: 2em;">'
									+'<ul>';
											
					currentCodeLabel = label;
	 			}
	 			var label = bs["teamLabel"].value  + ' : '+bs["teamComment"].value;
	 			if(label.length>70)
	 				label = label.substring(0, 67) +"...";
	 				
	        	textHtml +='<li id="ca-move' +
							        	bs["ACMCode"].value 
							        	+ '"><span class="reference-text">'+
	        	'<a href="http://www.inria.fr/en/' + bs["teamLabel"].value + '">' +
	        	  label +'</a> ' + 
	        	'</span></li>';
	       });
        
			textHtml += '</div>';
        	$('#linktab-laboratory').removeAttr("style");
    	}
        textHtml += '</p>';
         $('#bodyContentLaboratory').append(textHtml);
         
    }
 });