Jump to content

User:Bargioni/StatementsSitelinksCountsSBN.js: Difference between revisions

From Meta, a Wikimedia project coordination wiki
Content deleted Content added
Bargioni (talk | contribs)
mNo edit summary
Bargioni (talk | contribs)
mNo edit summary
Line 113: Line 113:
if (v.st.value < 5)
if (v.st.value < 5)
colour = " style='color: " + (v.st.value === "0" ? "#d33" : "chocolate") + "'";
colour = " style='color: " + (v.st.value === "0" ? "#d33" : "chocolate") + "'";
var ydobd = (v.yob.value||'?') + '-' + (v.yod.value||'?') + ' ';
var dob = v.yob ? v.yob.value : '';
var dod = v.yod ? v.yod.value : '';
var ydobd = (dob||'?')+'-'+(dod||'?');
var au = $("a[title='" + v.page.value.replace(/(['"])/g, "\\\$1") + "']")
var au = $("a[title='" + v.page.value.replace(/(['"])/g, "\\\$1") + "']")
.after(" <small>("+ydobd+"<a href='https://www.wikidata.org/wiki/" + qid + "'" + colour + ">"
.after(" <small>("+ydobd+"<a href='https://www.wikidata.org/wiki/" + qid + "'" + colour + ">"

Revision as of 15:28, 28 June 2023

/* This script runs on category pages and shows the number of statements and
   sitelinks that each page in the category has in its Wikidata items.
   Links for pages with fewer than 5 statements are highlighted to make it
   easier to see which pages' items are most likely to need improvement.

   To use it, add the following line to your global.js on Meta-Wiki if you want
   it to work on all wikis, or to your common.js on a specific wiki if you only
   want to use it on that wiki:
   mw.loader.load("//meta.wikimedia.org/w/index.php?title=User:Bargioni/StatementsSitelinksCountsSBN.js&action=raw&ctype=text/javascript");

   License: CC0
   
   Initially forked from [[User:Nikki/StatementCounts.js]]; see also [[User:Epìdosis/StatementsSitelinksCountsSBN.js]]
*/

$(document).ready(function () {
(function () {
	if (mw.config.get("wgCanonicalNamespace") !== "Category")
		return;

	var lang = mw.config.get("wgContentLanguage");
	var domain = mw.config.get("wgServerName");

	var pages = [];

	// $(".ns-14 #mw-pages li a, .ns-14 #mw-subcategories li a").each(function (i, v) {
	$(".ns-14 #mw-pages li a").each(function (i, v) {
		var page = '"' + v.title.replace(/"/g, '\\\"') + '"@' + lang;
		pages.push(page);
	});
	
	if (!pages.length)
		return;

	function buttons(action) {
		if(action == 'create') {
			$('#mw-pages h2').append(' <button id="toggle_completi">Nascondi/mostra completi</button>');
			// $('#mw-pages h2').append(' <button id="toggle_senza_SBN">Nascondi/mostra se senza SBN</button>');
			// $('#mw-pages h2').append(' <button id="toggle_senza_VIAF">Nascondi/mostra se senza VIAF</button>');
		}
		if (action == 'activate') {
			$('#toggle_completi').click(function(){
				// $('.con_viaf').add('.con_sbn').parent().parent().toggle();
				var ss = $('small a span.con_sbn');
				var with_both = ss.filter(function(i,e){if($(e).parent().find('span.con_viaf').length) return true});
				$(with_both).parent().parent().toggle();
			});
			$('#toggle_senza_SBN').click(function(){
				$('.con_viaf').add('.con_sbn').add('.senza_viaf').add('.senza_sbn').css('display','inline');
				$('.senza_sbn').parent().parent().toggle();
			});
			$('#toggle_senza_VIAF').click(function(){
				$('.con_viaf').add('.con_sbn').add('.senza_viaf').add('.senza_sbn').css('display','inline');
				$('.senza_viaf').parent().parent().toggle();
			});
		}
	}

	function sbn_json_autocomplete(name) {
		var url = 'https://opac.sbn.it/o/opac-api/autocomplete?core=sbn&name=nome&facet=nomescan&query=';
		var encoded_name = encodeURIComponent(name);
		return url + encoded_name;
		// url = url + encoded_name;
		// var gw = 'https://catalogo.pusc.it/cgi-bin/koha/kohapi/gw.pl?url=' + encodeURIComponent(url) + '&contentype=application%3fjson';
		// $.getJSON(gw, function(R){
		// 	alert(R);
		// });
	}

	function sbn_search_link(au) {
		if ($(au).parent().find('.con_sbn').length) return;
		var T = $(au).text();
		var sbn_icon = "<img class=\"ii\" src=\"https://www.iccu.sbn.it/export/sites/iccu/immagini/OPACSBN_new.png_1658547990.png\" height=\"22px\">";
		var sbn_link = sbn_json_autocomplete(T);
		var S = "<a style=\"cursor:pointer\" target=\"_blank\" title=\"cerca su SBN\" href=\""+sbn_link+"\">"+sbn_icon+"</a>";
		$(au).parent().append(' '+S);
	}
	
	function viaf_search_link(au) {
		if ($(au).parent().find('.con_viaf').length) return;
		var T = $(au).text();
		var viaf_icon = "<img class=\"ii\" src=\"https://upload.wikimedia.org/wikipedia/commons/1/19/Viaf_icon.png\" height=\"22px\">";
		var viaf_link = "https://viaf.org/viaf/search?query=local.personalNames%20all%20%22" + encodeURIComponent(T)+"%22&sortKeys=holdingscount&recordSchema=BriefVIAF"; // https://viaf.org/viaf/search?query=local.personalNames%20all%20%22Filiberto%20Ignazio%20Guillier%22&sortKeys=holdingscount&recordSchema=BriefVIAF
		var V = "<a target=\"_blank\" title=\"cerca su VIAF\" href=\""+viaf_link+"\">"+viaf_icon+"</a>";
		$(au).parent().append(' '+V);
	}
	
	buttons('create');

	var query = "\
		select ?page ?sitelink ?item ?yob ?yod \
			?si ?idn ?st (IF(BOUND(?viaf),\"<span class='con_viaf'>+VIAF</span>\",\"<span class='senza_viaf'>-VIAF</span>\") AS ?viaf0) (IF(BOUND(?sbn),\"<span class='con_sbn'>+SBN</span>\",\"<span class='senza_sbn'>-SBN</span>\") AS ?sbn0) { \
			values ?page { " + pages.join(" ") + " } \
			?sitelink schema:name ?page; \
				schema:isPartOf <https://" + domain + "/>; \
				schema:about ?item. \
			?item wikibase:sitelinks ?si; \
				wikibase:identifiers ?idn; \
				wikibase:statements ?st. \
			OPTIONAL {?item wdt:P214 ?viaf}. \
			OPTIONAL {?item wdt:P396 ?sbn}. \
			OPTIONAL {?item p:P569/psv:P569 [ wikibase:timePrecision \"11\"^^xsd:integer ; wikibase:timeValue ?time1 ] . } \
			OPTIONAL {?item p:P570/psv:P570 [ wikibase:timePrecision \"11\"^^xsd:integer ; wikibase:timeValue ?time2 ] . } \
			BIND (year(?time1) as ?yob) \
			BIND (year(?time2) as ?yod) \
		}";

	$.post("https://query.wikidata.org/sparql?format=json", { query: query }, function (data) {
		$.each(data.results.bindings, function (i, v) {
			var qid = v.item.value.replace(/.*\//, "");
			var colour = "";
			if (v.si.value === "1") v.si.value.replace(/1/, "🌼");
			if (v.st.value < 5)
				colour = " style='color: " + (v.st.value === "0" ? "#d33" : "chocolate") + "'";
			var dob = v.yob ? v.yob.value : '';
			var dod = v.yod ? v.yod.value : '';
			var ydobd = (dob||'?')+'-'+(dod||'?');
			var au = $("a[title='" + v.page.value.replace(/(['"])/g, "\\\$1") + "']")
				.after(" <small>("+ydobd+"<a href='https://www.wikidata.org/wiki/" + qid + "'" + colour + ">" 
				+ v.si.value + " sit.; " + v.st.value + " sta.; " + v.idn.value + " IDs; "
				+ v.viaf0.value + "; " + v.sbn0.value + "</a>)</small>");
			if( $(au).parent().find('small').length > 1 ) $($(au).parent().find('small')[0]).remove();
			else {
				viaf_search_link(au);
				sbn_search_link(au);
			}
			$('.ii').click(function(){
				$('li').css('border','none');
				$(this).parent().parent().css('border','1px solid black');
			});
		});
		$('.con_viaf').css({'color':'green','font-weight':'bold'});
		$('.senza_viaf').css({'color':'red','font-weight':'bold'});
		$('.con_sbn').css({'color':'green','font-weight':'bold'});
		$('.senza_sbn').css({'color':'red','font-weight':'bold'});
		
		$('.mw-category-group li a').attr('target','_blank'); // Wikipedia links open in new page
		$('small>a').attr('target','_blank'); // Wikidata links open in new page

		buttons('activate');
	});
})();
});