From d055f34be8870941ce46a051db6e82424c984327 Mon Sep 17 00:00:00 2001 From: Bryan Housel Date: Sat, 9 Feb 2019 15:18:32 -0500 Subject: [PATCH] Add sitelinks to result from wikidata getDocs --- modules/services/wikidata.js | 33 ++++++++++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/modules/services/wikidata.js b/modules/services/wikidata.js index 88a214849..d4df4e6fb 100644 --- a/modules/services/wikidata.js +++ b/modules/services/wikidata.js @@ -109,6 +109,8 @@ export default { return; } + var i; + var description; if (entity.descriptions && Object.keys(entity.descriptions).length > 0) { description = entity.descriptions[Object.keys(entity.descriptions)[0]].value; @@ -126,7 +128,7 @@ export default { var imageroot = 'https://commons.wikimedia.org/w/index.php'; var props = ['P154','P18']; // logo image, image var prop, image; - for (var i = 0; i < props.length; i++) { + for (i = 0; i < props.length; i++) { prop = entity.claims[props[i]]; if (prop && Object.keys(prop).length > 0) { image = prop[Object.keys(prop)[0]].mainsnak.datavalue.value; @@ -141,8 +143,33 @@ export default { } } - // TODO add wiki sitelink - // result.wiki = ? + if (entity.sitelinks) { + // must be one of these that we requested.. + var langs = _uniq([ + currentLocale.toLowerCase(), + currentLocale.split('-', 2)[0].toLowerCase(), + 'en' + ]); + var englishLocale = (currentLocale.split('-', 2)[0].toLowerCase() === 'en'); + + for (i = 0; i < langs.length; i++) { // check each, in order of preference + var w = langs[i] + 'wiki'; + if (entity.sitelinks[w]) { + var title = entity.sitelinks[w].title; + var tKey = 'inspector.wiki_reference'; + if (!englishLocale && langs[i] === 'en') { // user's currentLocale isn't English but + tKey = 'inspector.wiki_en_reference'; // we are sending them to enwiki anyway.. + } + + result.wiki = { + title: title, + text: tKey, + url: 'https://' + langs[i] + '.wikipedia.org/wiki/' + title.replace(/ /g, '_') + }; + break; + } + } + } callback(null, result); });