WD Distrikt

Fills a select box with values from the query service

by Magnus Sälgö

HTML

<script src="https://cdn.rawgit.com/wikimedia/wikidata-query-gui/master/wikibase/queryService/api/Sparql.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/animate.min.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/wow/1.1.2/wow.min.js"></script>
<h2>Bygdeband integration med Wikipedia:<br />
Prototype testar söka "Svenska Distrikt" 
</h2>
<table border=0 width=100%> <tr><td><div id="explain">
Min tanke är ibland kan en sökning vara bättre än att hoppa till huvudartikeln. I nya <a href="https://www.hembygd.se/shf/plats/2" target=_blank>Bygdeband</a> länkar man sig till en artikel i Wikipedia en variant är istället <a href="https://www.mediawiki.org/wiki/API:Search">API:Search</a> och söka i Wikipedia <br /><br />
1) hämtar alla distrikt till listbox<br />
2) sökning sker</div>  <br />
</td>

<td align="right" width=600px rowspan=2>

<iframe width="560" height="315" src="https://www.youtube.com/embed/Bij4z9VM6SA" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe>

</td></tr>

<tr><td valign=top><ll class="list">
  <li><a href="https://www.mediawiki.org/wiki/API:Search">API:Search</a></li>
  <li><a href="https://www.mediawiki.org/wiki/Page_Previews">Page Previews</a></li>
  <li><a href="https://minancestry.blogspot.com/2018/09/page-preview-wikipedia.html">Blogpost</a></li>
<li><a target=_blank href="https://jsfiddle.net/salgo60/2wt63e8L/embedded/result/">Bygdeband Socknar</a></li>
<li><a target=_blank href="https://jsfiddle.net/salgo60/jmpvg8wh/embedded/result/">Bygdeband Församlingar</a></li>
<li>GITHUB <a href="https://github.com/salgo60/WikidataBygdeband" target=_blank>WikidataBygdeband</a></li></ll>
</td></tr></table><br />
<select class="itemList" >
  <option>Välj distrikt</option>
</select><select class="searchOptionList" disabled="disabled">
  <option value="">Search option srqiprofile</option>
  <option value="classic">classic</option>
  <option value="wsum_inclinks">Weighted sum...

CSS

body {
   color: #444;
   background: #e2ecff;
   /* fallback for old browsers */
   background: -webkit-linear-gradient(to left, #9ab8f4, #e2ecff);
   /* Chrome 10-25, Safari 5.1-6 */
   background: linear-gradient(to left, #9ab8f4, #e2ecff);
   /* W3C, IE 10+/ Edge, Firefox 16+, Chrome 26+, Opera 12+, Safari 7+ */
   font-family: 'Dosis', sans-serif;
   background-repeat: no-repeat;
   background-size: cover;
   min-height: 100vh;
   font-size: 16px;
 }

 a {
   color: #444;
   cursor: pointer;
 }

 a:hover {
   color: #555;
   text-decoration: none;
 }

 #URL {
   margin-top: 20px;
   padding: 0 5%;
   color: darkblue;
 }

 #Hits {
   margin-top: 20px;
   padding: 0 5%;
   color: #437746;
   font-size: 30px;
 }

 .more {
   color: darkgreen;
 }

 #output {
   margin-top: 40px;
   padding: 0 5%;
 }


 .list a {
   text-decoration: none;
 }

 li a:hover {
   background: lightgreen;
 }

 h2 a:hover {
   background: lightgreen;
 }


 #text {
   padding: 10px 20px;
   border-top-left-radius: 30px;
   border-bottom-left-radius: 30px;
   border: 0px solid;
   width: 50%;
 }

 #text:focus {
   box-shadow: 1px 3px 40px 5px #536970;
   outline: none;
 }

 #not-found p {
   font-size: 20px;
 }

 .result {
   padding: 0.5% 2%;
   background: #fff;
   margin: 1.5%;
   border-left: 7px solid #536976;
 }

 .result h2 {
   color: #536976;
 }


 button {
   background: #536976;
   color: #fff;
   padding: 10px 20px;
   border: 1px solid #536976;
   border-radius: 30px;
   margin-left: -55px;
 }


 .Item {
   background-color: aliceblue;
   margin: 8px;
   size: 12px;
   border-radius: 25px;
   border: 2px solid darkBlue;
   padding: 20px;
   width: 500px;
   height: 150px;
 }

 .searchmatch {
   color: #a0ccd2;
 }

 #explain {
   color: darkgreen;
   font-family: "Times New Roman", Times, serif;
 }

JavaScript

$(function() {
	new WOW().init();
	var limit = 'limit 10000'; // For testing set number  retrieved


	var query = 'SELECT ?itemLabel WHERE { ?item wdt:P31/wdt:P279* wd:Q18333556.  SERVICE wikibase:label { bd:serviceParam wikibase:language "sv" } } ORDER BY ?itemLabel ' + limit ; 
	var api = new wikibase.queryService.api.Sparql();
	api.query(query).done(function() {
 					var nrHits = api.getResultRawData().results.bindings.length;
		$("#Hits").html("Distrikt som hämtats från Wikidata till listboxen = " + nrHits + " <div data-wow-duration='6s' data-wow-offset='10' class='wow bounceInUp more'>välj ett distrikt</div>");   $.each(api.getResultRawData().results.bindings, function(key, value) {
  		$('.itemList').append($('<option/>').text(value.itemLabel.value));
  	});
	});
});

	$( '.searchOptionList' ).change(function() {       
    var srcopt = '&srqiprofile=' + $('.searchOptionList').val();
    $("#URL").html(srcopt);

  });
	$( '.itemList' ).change(function() {       
    var input = $('.itemList').val();
    var srcopt = '&srqiprofile=classic';
    
//		srcopt = '&srqiprofile=' + $('.searchOptionList').val();
//    $("#URL").html(srcopt);
		var searchLimit = 400 // number of results in search 
    var url = `https://sv.wikipedia.org/w/api.php?action=query&list=search&srsearch=` + input + `&srlimit=` + searchLimit + `&format=json&prop=info&inprop=url` + srcopt;

    $.ajax({
      type: "GET",
      url: url,
      dataType: "jsonp",
      success: function(data) {
        let info = data.query.search;
        console.log(info);

        if (info.length === 0) {
          let notFound = "";
          notFound += `
            <div id="not-found" class="wow fadeIn text-center" data-wow-duration="0.5s">
              <p> No result for parameter </p>
            </div>
          `
          $("#output").html(notFound);
          $("#not-found").delay(5000).fadeOut(500);
        } else {
          let output = "";
          let numberofHits = "Antal träffar i...