Changes

Jump to navigation Jump to search
Created page with "/************************************************************************************************* * This script displays related items on an item page...."
/*************************************************************************************************
* This script displays related items on an item page. *
* This script is taken from https://www.wikidata.org/w/index.php?title=MediaWiki:Gadget-relateditems.js *
* Modifications made: change of namespace 0 --> 120 (TWICE) *
* Change from {query,www}.wikidata.org to equivalent on personaldata.io *
* wdt:P7087 *
* *
**************************************************************************************************/

(function(mw, $, wb) {
"use strict";

if (mw.config.get('wgNamespaceNumber') !== 120 || !mw.config.exists('wbEntityId')) {
return;
}

var lang = mw.config.get('wgUserLanguage');
var messages, entityid = mw.config.get('wbEntityId'), api = new mw.Api();

messages = (function () {
var translations = {
de: {
'title': 'Abgeleitete Aussagen',
'more': 'mehr',
'inverse': 'invers',
'show-inverse': 'zeige abgeleitete Aussagen',
'no-result': 'kein Ergebnis',
'loading': 'laden...'
},
en: {
'title': 'Derived statements',
'more': 'more',
'inverse': 'inverse',
'show-inverse': 'show derived statements',
'no-result': 'no result',
'loading': 'loading...'
},
fr: {
'title': 'Déclarations dérivées',
'more': 'plus',
'inverse': 'inverse',
'show-inverse': 'voir les déclarations dérivées',
'no-result': 'pas de résultats',
'loading': 'chargement...'
}
},
chain = mw.language.getFallbackLanguageChain(),
len = chain.length,
ret = {},
i = len - 1;
while (i >= 0) {
if (translations.hasOwnProperty(chain[i])) {
$.extend(ret, translations[chain[i]]);
}
i = i - 1;
}
return ret;
}());

var html = '\
<h2 class="wb-section-heading section-heading wikibase-statements" dir="auto"><span id="inverseclaims" class="mw-headline"></span></h2>\
<div class="wikibase-statementgrouplistview" id="inversesection"> \
<div class="wikibase-listview"></div> \
<div class="wikibase-showinverse" style="padding:10px;overflow:hidden;"></div> \
</div>';

function loaditems() {
$('span#inverseclaims').text(messages.title);
$('#inversesection').find('.wikibase-showinverse').html(messages.loading);
var api = new mw.Api({
ajax: {
url: 'https://query.personaldata.io/bigdata/namespace/wdq/sparql?',
dataType: 'json',
cache: true
}
});
api.get({
query: 'SELECT ?subject ?subjectLabel ?property ?inversepropertyLabel ?rank WHERE {{\
SELECT ?subject ?property ?inverseproperty ?rank WHERE { \
?subject ?claimpred ?statement .\
?statement ?valpred wd:' + entityid + ' ;\
wikibase:rank ?rank .\
?property wikibase:claim ?claimpred;\
wikibase:statementProperty ?valpred;\
wdt:P7087 ?inverseproperty .\
} LIMIT 300 }\
SERVICE wikibase:label {bd:serviceParam wikibase:language "' + lang + ',en" .}\
} ORDER BY ?property'
}).done(function(data) {
var stid = false;
for (var k in data.results.bindings) {
var page = data.results.bindings[k];
var rank = page.rank.value.replace('http://wikiba.se/ontology#', '').replace('Rank', '').toLowerCase();
var pid = page.property.value.replace('http://wiki.personaldata.io/entity/', 'i');
if (pid != stid){
var statementgroup = '\
<div id="' + pid + '" class="wikibase-statementgroupview listview-item"> \
<div class="wikibase-statementgroupview-property"> \
<div class="wikibase-statementgroupview-property-label" dir="auto"> \
<a href="' + page.property.value + '">' + page.inversepropertyLabel.value + '</a> \
</div> \
</div> \
<div class="wikibase-statementlistview"> \
<div class="wikibase-statementlistview-listview"> \
</div> \
</div> \
</div>';
$('#inversesection').find('.wikibase-listview').append(statementgroup);
stid = pid;
}
var statement = '<div class="wikibase-statementview wb-normal listview-item wikibase-toolbar-item"> \
<div class="wikibase-statementview-rankselector"><div class="wikibase-rankselector ui-state-disabled"> \
<span class="ui-icon ui-icon-rankselector wikibase-rankselector-' + rank + '"></span> \
</div></div> \
<div class="wikibase-statementview-mainsnak-container"> \
<div class="wikibase-statementview-mainsnak" dir="auto"> \
<div class="wikibase-snakview"> \
<div class="wikibase-snakview-property-container"> \
<div class="wikibase-snakview-property" dir="auto"> \
</div> \
</div> \
<div class="wikibase-snakview-value-container" dir="auto"> \
<div class="wikibase-snakview-value wikibase-snakview-variation-valuesnak"> \
<a href="' + page.subject.value + '">' + page.subjectLabel.value + '</a>\
</div> \
</div> \
</div> \
</div> \
</div> \
</div>';
$('.wikibase-statementgroupview').last().find('.wikibase-statementlistview-listview').append(statement);
}
if (data.results.bindings.length == 300) {
$('#inversesection').find('.wikibase-showinverse').html('<a href="https://wiki.personaldata.io/w/index.php?title=Special:WhatLinksHere&target=' + entityid + '&namespace=120">' + messages.more + '</a>');
} else if (data.results.bindings.length === 0) {
$('#inversesection').find('.wikibase-showinverse').html(messages['no-result']);
} else {
$('#inversesection').find('.wikibase-showinverse').html('');
}
});
}
function init() {
$('.wikibase-entityview-main').append(html);
$('#inversesection').find('.wikibase-showinverse').append(
$( '<a>' )
.attr( 'href', '#' )
.attr( 'style', 'border:1px solid #AAA;padding:10px 80px;' )
.text( messages['show-inverse'] )
.click( function ( event ) {
event.preventDefault();
loaditems();
})
);
}

$(init);

}(mediaWiki, jQuery, wikibase));

Navigation menu