User:Opencooper/otherImages.js

/* Checks if the current page has a wikidata image that isn't currently present */ /* Attribution for close icon: https://commons.wikimedia.org/wiki/File:Antu_application-exit.svg */ /* Possible other method: * Use API to get HTML of interlanguage links * Convert to Jquery HTML * Use selectors to get all images, excluding .icon .noview, etc * Add them all to a set * Go through enwiki images, removing the ones inside from the set * Find a way to display the resulting images

Alternative method: Use API props such as `images` or `pageimages` w/ a `langlinks` generator

TODO: Check out https://commons.wikimedia.org/wiki/Commons:JavaScript_styleguide#How_to_construct_URIs

License: CC0

Test page: https://en.wikipedia.org/wiki/Ronald_Barnes,_3rd_Baron_Gorell

function setup { // If we're not reading an article, do nothing if (!(mw.config.get("wgAction") === "view" && mw.config.get("wgIsArticle") && !location.search.split('oldid=')[1] && !mw.config.get("wgIsMainPage"))) { return; }

// Make sure we have somewhere to put result if (!$("#contentSub").length) { return; }

if (wikidataId === null) { return; }

// API docs: https://www.wikidata.org/w/api.php?action=help&modules=wbgetclaims $.ajax({       url: "https://www.wikidata.org/w/api.php",        data: {            action: "wbgetclaims",            entity: wikidataId,            property: "P18",            format: "json",            origin: "*"        },        success: parseProperty    }); }

function parseProperty(response) { var filename; if (typeof response.claims.P18 != "undefined") { filename = response.claims.P18[0].mainsnak.datavalue.value; } else { return; }

filename = filename.replace(/ /g, "_"); searchForImage(filename); }

function searchForImage(filename) { var foundMatch; // See history for an inline implementation var filenameEscaped = mw.util.escapeRegExp(filename); var re = new RegExp(filenameEscaped);

$("#bodyContent img").each(function {       var src = $(this).attr("src");        // MediaWiki seems to encode anything not alphanumeric...        src = decodeURI(src).replace(/%2C/g, ",").replace(/%3B/g, ";").replace(/%26/g, "&").replace(/%40/g, "@").replace(/%2B/g, "+");        /* console.log("otherImages.js: filename: " + filename);        console.log("otherImages.js: filename escaped: " + filenameEscaped);        console.log("otherImages.js: src: " + src); */        if (re.test(src)) {            console.log("otherImages.js: Page already has wikidata image");            $(this).attr('id', 'otherImages-pageImage');            foundMatch = true;            return false;        }    });

if (!foundMatch) { getThumbUrl(filename); } }

function getThumbUrl(filename) { // See: https://www.mediawiki.org/wiki/Help:Magic_words var thumbTemplate = "";

// API docs: https://www.mediawiki.org/wiki/API:Expandtemplates var apiUrl = location.origin + "/w/api.php"; $.ajax({       url: apiUrl,        data: {            action: "expandtemplates",            text: thumbTemplate,            prop: "wikitext",            format: "json",        },        success: function(response) {        	var thumbUrl = response.expandtemplates.wikitext;        	displayImage(filename, thumbUrl);        }    }); }

function displayImage(filename, thumbUrl) { var commonsUrl = "//commons.wikimedia.org/wiki/File:" + filename; var wikidataUrl = "https://www.wikidata.org/wiki/" + wikidataId + "#P18";

var wikidataLogoMarkup = ""; var thumbMarkup = ""; var closeButtonMarkup = "";

var containerMarkup = " " + thumbMarkup + wikidataLogoMarkup + closeButtonMarkup + " ";   $("#contentSub").before(containerMarkup); addHandlers; }

function addHandlers { $("#otherImage").hover(function{		$("#otherImage #closeButton").show;	}, function{		$("#otherImage #closeButton").hide;	}); $("#otherImage #closeButton").click(function {		$("#otherImage").remove;	}); }

var wikidataId = mw.config.get( 'wgWikibaseItemId' ); var wikidataLogoUrl = "https://upload.wikimedia.org/wikipedia/commons/thumb/f/ff/Wikidata-logo.svg/30px-Wikidata-logo.svg.png"; var closeButtonUrl = "https://upload.wikimedia.org/wikipedia/commons/thumb/c/cc/Antu_application-exit.svg/25px-Antu_application-exit.svg.png"; $(setup);