User:Lectrician1/embed-statement.js
Note: After publishing, 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: Press Ctrl-F5.
/* THIS IS A COMPILED TYPESCRIPT FILE.
* Please see User:Lectrician1/embed-statement.js/ts.js for the source code.
* License: CC0
*/
var translatedMessages = {
noStatement: {
en: 'No statement with this ID found on the above entity'
}
};
var wikiURL = 'test.wikidata.org';
var parentClass = 'exampleParent';
jQuery(function () {
var propertyURL = window.location.href;
var propertyID = propertyURL.substring(propertyURL.lastIndexOf(":") + 1).split("#")[0];
var userLang = mw.config.get('wgUserLanguage');
$('#P97148').find('.wikibase-statementview').each(function () {
var statementToAppendToID = $.escapeSelector($(this).attr('id'));
var statementToGetID = $(this).find('.wb-external-id').text();
var itemToGet = statementToGetID.split('$')[0];
// Add parent container
addExampleStatement(statementToGetID, statementToAppendToID, wikiURL, itemToGet, propertyID, userLang);
});
// when statement is changed
mw.hook("wikibase.statement.saved").add(function (entityID, claimID, oldClaim, newClaim) {
var newStatementValue = newClaim.getClaim().getMainSnak().getValue().getValue();
var itemToGet = newStatementValue.split('$')[0];
$("#".concat($.escapeSelector(claimID), " > .").concat(parentClass)).remove();
addExampleStatement(newStatementValue, $.escapeSelector(claimID), wikiURL, itemToGet, propertyID, userLang);
});
});
function addExampleStatement(statementToGetID, statementToAppendToID, wikiURL, itemToGet, propertyID, userLang) {
var exampleDivParentID = getExampleParentID(statementToGetID);
var exampleDivParentIDEscaped = $.escapeSelector(exampleDivParentID);
$("#".concat(statementToAppendToID, " > .wikibase-statementview-mainsnak-container")).after("<div class=\"".concat(parentClass, "\" id=\"").concat(exampleDivParentID, "\" style=\"padding-left: 26px\"></div>"));
// Add item of statement label
var exampleDivLabel = "".concat(statementToGetID, "-label");
var exampleDivLabelEscaped = $.escapeSelector(exampleDivLabel);
$("#".concat(exampleDivParentIDEscaped)).append("<a href=\"https://".concat(wikiURL, "/wiki/").concat(itemToGet, "\" id=\"").concat(exampleDivLabel, "\"></a>"));
showLabel(wikiURL, itemToGet, exampleDivLabelEscaped);
// Add statement
var exampleDivID = "".concat(statementToGetID, "-example");
var exampleDivIDEscaped = $.escapeSelector(exampleDivID);
$("#".concat(exampleDivParentIDEscaped)).append("<div id=\"".concat(exampleDivID, "\"></div>"));
// Load statement into container
$("#".concat(exampleDivIDEscaped)).load("https://".concat(wikiURL, "/wiki/").concat(itemToGet, " #").concat(propertyID), function () {
// remove statements that are not the one we want
var statementIDToGetEscaped = $.escapeSelector(statementToGetID);
$("#".concat(exampleDivIDEscaped)).find('.wikibase-statementlistview-listview').children(":not(#".concat(statementIDToGetEscaped, ")")).remove();
// If container has no statements
if ($("#".concat(exampleDivIDEscaped)).find('.wikibase-statementlistview-listview').children().length === 0) {
// remove property with no values
$("#".concat(exampleDivIDEscaped)).find('.wikibase-statementgroupview').remove();
// show warning
if (translatedMessages.noStatement[userLang]) {
$("#".concat(exampleDivIDEscaped)).append("<div style=\"color: red\">".concat(translatedMessages.noStatement[userLang], "</div>"));
}
else {
$("#".concat(exampleDivIDEscaped)).append("<div style=\"color: red\">".concat(translatedMessages.noStatement.en, "</div>"));
}
}
else {
$('.wikibase-snakview-property-container').css('display', 'block');
// Make sure main statement doesn't get small in width
$("#".concat(exampleDivIDEscaped)).find('.wikibase-snakview-body').css('margin-right', 0);
// Make sure qualifiers don't get small in width
$("#".concat(exampleDivIDEscaped)).find('div.wikibase-statementview-mainsnak').css('margin-right', 0);
}
});
}
function getExampleParentID(statementID) {
return "".concat(statementID, "-parent");
}
function showLabel(wikiURL, itemToGet, exampleDivNameEscaped) {
var userLang = mw.config.get('wgUserLanguage');
// get label of entity using mediawiki api
$.getJSON("https://".concat(wikiURL, "/w/api.php?action=wbgetentities&format=json&ids=").concat(itemToGet, "&props=labels&languages=").concat(userLang, "&languagefallback=1&formatversion=2"), function (data) {
var label = data.entities[itemToGet].labels[userLang].value;
$("#".concat(exampleDivNameEscaped)).text(label);
if (data.entities[itemToGet].labels[userLang].hasOwnProperty('for-language')) {
$("#".concat(exampleDivNameEscaped)).append("<sup>".concat(data.entities[itemToGet].labels[userLang].language, "</sup>"));
}
});
}