Järjestelmäviesti:Gadget-linkeddata.js

Huomautus: Selaimen välimuisti pitää tyhjentää asetusten tallentamisen jälkeen, jotta muutokset tulisivat voimaan.

  • Firefox ja Safari: Napsauta Shift-näppäin pohjassa Päivitä, tai paina Ctrl-F5 tai Ctrl-R (⌘-R Macilla)
  • Google Chrome: Paina Ctrl-Shift-R (⌘-Shift-R Macilla)
  • Internet Explorer ja Edge: Napsauta Ctrl-näppäin pohjassa Päivitä tai paina Ctrl-F5
  • Opera: Paina Ctrl-F5.
function insert_wqssearch()
{
	function do_wqssearch() {
		var sparql="\
# Finnish movies\n\
SELECT DISTINCT\n\
  (?item as ?Wikidata) \n\
  (?itemLabel as ?Nimike) \n\
  (?itemDescription as ?Kuvaus) \n\
  (YEAR(?p577) as ?Julkaistu) \n\
  (?article as ?Wikipedia) \n\
WHERE\n\
{\n\
__REPLACE_WITH_FILTER_RULE__\n\
  OPTIONAL { ?item wdt:P577 ?p577 }\n\
  OPTIONAL {\n\
    ?article  schema:about ?item ;\n\
     schema:isPartOf <https://fi.wikipedia.org/> .\n\
  } \n\
  SERVICE wikibase:label {\n\
	bd:serviceParam wikibase:language \"[AUTO_LANGUAGE],en\".\n\
	?item rdfs:label ?itemLabel .\n\
	?item schema:description ?itemDescription .\n\
  }\n\
}\n\
LIMIT 1000\n\
";
		var wqs=$("#wqssearccontainer");
		var sparql_rule="";
		wqs.find(".collapsible").find("tr").each(function(){
			var props=$(this).find("td").first().find(".wqswikidataproperty[data-wqswikidataproperty]");
			if (props.length) {
				var propertyrule="";
				var prop=props.first();
				if (prop.is("[data-wqswikidatapropertyrule]")) {
					propertyrule=prop.attr("data-wqswikidatapropertyrule");
				}
				else if (prop.is("[data-wqswikidataproperty]")) {
					propertyrule="wdt:" + prop.attr("data-wqswikidataproperty")
				}
				if (propertyrule!="") {
					props.first().attr("data-wqswikidataproperty");
					$(this).find("td").last().find("input:checked").each(function () {
						var v=$(this).val();
						if (v.match(/Q[0-9]+/)) {
							sparql_rule+="      ?item " + propertyrule + " wd:" + v +" . \n";
						}
						else
						{
							//
						}
					});
				}
			}
		});
		
		// Do not run search if there is no filters selected
		if (sparql_rule=="") return false;
		
		if ($("#wqssearccontainer").find("[value='wqsarticlesonly']:checked").length)
		{
			sparql_rule+="      FILTER BOUND(?article)\n";
		}
		
		var wqsquery=wqs.find(".wqsquery").find('a[href^="https://query.wikidata.org/#"]');
		if (wqsquery.length)
		{
			sparql=decodeURIComponent(wqsquery.attr("href").replace("https://query.wikidata.org/#", ""));
		}
		
		sparql=sparql.replace("__REPLACE_WITH_FILTER_RULE__", sparql_rule);
		var url="https://query.wikidata.org/embed.html#" + encodeURIComponent(sparql);
		
		if ($("#wqssearccontainer").find("[value='wqsnewwindow']:checked").length)
		{
			window.open(url, "_blank", "noreferrer");	
		}
		else
		{
            showSparqlResponse(sparql, $("#wqsiframecontainer"));			
		}
	}
	
	function getLabelString(labelkey)
	{
		var wqs=$("#wqssearccontainer");
		var wqskey= "data-msg-" + labelkey;

		if (wqs.length)
		{
			if (wqs.is("[" + wqskey + "]")) {
				return wqs.attr(wqskey);
			}
		}
		return wqskey;
	}
	
	var wqs=$("#wqssearccontainer");
	if (wqs.length) {
		var title=wqs.find(".navbox-title").find("span[style='font-size:110%;'").last();
		if (title.length) {
			title.html(title.html().replace("Linkitetty data", 	getLabelString('linked-data-search')));
		}
		wqs.find(".wqsconj").text(" ");
		wqs.find(".wqsinlinehelp").show();	
		wqs.find(".wqsbacklink[data-wqswikidatavalue]").each(function() {
			var id=$(this).attr("data-wqswikidatavalue");	
			var input=$("<input type=checkbox>");
			input.attr("class", "wqsinlinecheckbox");
			input.attr("name",id);
			var wqsdefault=$(this).closest("tr").find("td").first().find(".wqsdefault");
			if (wqsdefault.length) input.prop( "checked", true );
			input.val(id);
			$(this).prepend(input);
		});
		/*
		wqs.find("time").each(function() {
			var datetime=$(this).attr("datetime");
			var input=$("<input type=checkbox>");
			input.attr("name", "datetime");
			input.val(datetime);
			$(this).append(input);
		});
		*/
		var tablebody=wqs.find(".collapsible").find("tr").parent();	
		var buttonrow=wqs.find(".wqsquery").closest("tr");
		if (buttonrow.lenght==0) {
			buttonrow=wqs.find(".collapsible").find("tr").last().clone();
			buttonrow.find("td").html("");
			tablebody.append(buttonrow);
		}
		buttonrow.find("td").last().each(function() {
			var button=$("<button>"+ getLabelString('search')  +"</button>");
			button.css("margin-right", "0.5em");
			button.click(do_wqssearch);
			$(this).append(button);
			
			var wqsnewwindowcontainer=$("<span>");
			wqsnewwindowcontainer.id="wqsnewwindowcontainer";
			wqsnewwindowcontainer.text(getLabelString('open-in-new-window'));
			var input=$("<input type=checkbox>");
			input.attr("name","wqsnewwindow");
			input.val("wqsnewwindow");
			wqsnewwindowcontainer.append(input);
			$(this).append(wqsnewwindowcontainer);
			
			var wqsarticlesonlycontainer=$("<span>");
			wqsarticlesonlycontainer.id="wqsarticlesonlycontainer";
			wqsarticlesonlycontainer.text(getLabelString('articles-only'));
			var input2=$("<input type=checkbox>");
			input2.attr("name","wqsarticlesonly");
			input2.val("wqsarticlesonly");
			wqsarticlesonlycontainer.append(input2);
			$(this).append(wqsarticlesonlycontainer);

		});
		
		if (tablebody.length)
		{
			var tr=$("<tr>");
			var td=$("<td>");
			td.attr("colspan", 2);
			var wqsiframecontainer=$("<div>");
			wqsiframecontainer.css("margin-top", "0.5em");
			wqsiframecontainer.attr("id", "wqsiframecontainer");
			td.append(wqsiframecontainer);
			tr.append(td);
			tablebody.append(tr);
		}	
	}
}

function showSparqlResponse(sparql, container) {
    div=$('<div>');
    var url="https://query.wikidata.org#" + encodeURIComponent(sparql);
    sparqllink=$('<a>', { href:url });
    sparqllink.text('Loading SPARQL Query ...');
    div.append(sparqllink);
    container.empty();
	container.append(div);

    var api = new mw.Api({
            ajax: {
                url: 'https://query.wikidata.org/bigdata/namespace/wdq/sparql?',
                dataType: 'json',
                cache: true
            }
        });
    api.get({
         query: sparql
    }).done(function(data) {

        list=$('<table>', {class:'wikitable', style:'width:100%'});
        for (var k in data.results.bindings) {
            var row=$('<tr>');
            var page = data.results.bindings[k];
            var pid = page.Wikidata.value.replace('http://www.wikidata.org/entity/', '');
            var label = page.Nimike.value;
            var titlecolumn=$("<td>", {style: 'padding-left:0.25em; padding-right:0.25em;text-align:left'} );
            if (page.Wikipedia) {
                var link=$('<a>', { href: page.Wikipedia.value });
                link.text(label);
                titlecolumn.append(link);
            }
            else {
                var link=$('<span>');
                link.text(label);
                titlecolumn.append(link);
            }
            row.append(titlecolumn);

            var descriptioncolumn=$("<td>", {style: 'padding-left:0.25em; padding-right:0.25em;text-align:left'});

            if (page.Kuvaus) {
                descriptioncolumn.text(page.Kuvaus.value);
            }
            row.append(descriptioncolumn);

            var wdcolumn=$("<td>");
            var wdlink=$('<a>', { href:'https://wikidata.org/wiki/' + pid, style: 'padding-left:0.25em; padding-right:0.25em' });
            wdlink.text(pid);
            wdcolumn.append(wdlink);
            row.append(wdcolumn);
           
            list.append(row);
        }
        div.append(list);
        sparqllink.text('SPARQL Query');


    });       
}

$(insert_wqssearch);