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>"));
        }
    });
}