MediaWiki:Gadget-relateditems.js
From wikibase-docker
Revision as of 18:53, 6 April 2022 by WikibaseAdmin (talk | contribs) (Created page with "(function (mw, $, wb) { "use strict"; var inverseLabelItemProperty = "P112"; var wikibaseUrl = "https://eltedata.elte-dh.hu"; var wdqsUrl = "https://query.elte-dh.hu"...")
Note: After saving, 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: Go to Menu → Settings (Opera → Preferences on a Mac) and then to Privacy & security → Clear browsing data → Cached images and files.
(function (mw, $, wb) {
"use strict";
var inverseLabelItemProperty = "P112";
var wikibaseUrl = "https://eltedata.elte-dh.hu";
var wdqsUrl = "https://query.elte-dh.hu";
var itemNamespace = 120;
if (
mw.config.get("wgNamespaceNumber") !== itemNamespace ||
!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...",
},
hu: {
title: "Származtatott állítások",
more: "több",
inverse: "inverz",
"show-inverse": "származtatott állítások megjelenítése",
"no-result": "nincs találat",
loading: "betöltés...",
},
nb: {
title: "avledet-utsagn",
more: "mer",
inverse: "invers",
"show-inverse": "vis inverse utsagn",
"no-result": "ingen resultat",
loading: "laster...",
},
sv: {
title: "Härledda uttalanden",
more: "mer",
inverse: "omvänt",
"show-inverse": "visa härledda uttalanden",
"no-result": "inget resultat",
loading: "laddar...",
},
"zh-hans": {
title: "派生陈述",
more: "更多",
inverse: "反向",
"show-inverse": "显示派生陈述",
"no-result": "无结果",
loading: "加载中...",
},
},
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: wdqsUrl + "/proxy/wdqs/bigdata/namespace/wdq/sparql?",
dataType: "json",
cache: true,
},
});
api
.get({
query:
"SELECT DISTINCT ?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:" +
inverseLabelItemProperty +
' ?inverseproperty .\
} LIMIT 300 }\
SERVICE wikibase:label {bd:serviceParam wikibase:language "' +
lang +
',en" .}\
} ORDER BY ?property',
})
.done(function (data) {
var stid = false;
var baseurl = wikibaseUrl + "/wiki/";
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(wikibaseUrl + "/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.replace(
wikibaseUrl + "/entity/",
wikibaseUrl + "/wiki/Property:"
) +
'">' +
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 entityurl = page.subject.value;
var eid = entityurl.replace(wikibaseUrl + "/entity/", "");
if (eid.startsWith("Q")) {
entityurl = baseurl + "Item:" + eid;
} else if (eid.startsWith("P")) {
entityurl = baseurl + "Property:" + eid;
} else if (eid.startsWith("L")) {
entityurl = baseurl + "Lexeme:" + eid.replace(/-/, "#");
}
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="' +
entityurl +
'">' +
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="' +
wikibaseUrl +
"/w/index.php?title=Special:WhatLinksHere&target=" +
entityid +
"&namespace=" +
itemNamespace +
'">' +
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);