Module:Official website: Difference between revisions

Content deleted Content added
m capitalisation tweak
detect whether Wikidata websites are qualified as being in the English language
Line 9:
return result
end
end
 
-- Gets the rank for a Wikidata property table. Returns 1, 0 or -1, in
-- order of rank.
local function getRank(prop)
local ranksrank = {}prop.rank
if rank == 'preferred' then
return 1
elseif rank == 'normal' then
return 0
elseif rank == 'deprecated' then
return -1
else
-- No rank or undefined rank is treated as "normal".
return 0
end
end
 
-- Finds whether a Wikidata property is qualified as being in English.
local function isEnglish(prop)
local lang = quickPcall(function ()
return websiteprop.mainsnakqualifiers.P2439.datavalue.value['numeric-id']
end)
return lang == 1860
end
 
Line 18 ⟶ 42:
return mw.wikibase.getEntityObject().claims.P856
end)
 
websites = websites or {}
-- Clone the objects in case other code needs them in their original order.
websites = websites and mw.clone(websites) or {}
-- Find the website object with the highest rank, or the first one if there
 
-- is a tie. Then get the URL from that object.
-- Add the table index to the objects in case it is needed in the sort.
local ranks = {}
for i, website in ipairs(websites) do
if website.rank_index and not ranks[website.rank]= theni
ranks[website.rank] = i
end
end
 
-- Sort the websites, first by highest rank, and then by websites in the
-- English language, then by the website's original position in the
-- property list. When we are done, get the URL from the highest-sorted
-- object.
table.sort(websites, function(ws1, ws2)
local r1 = getRank(ws1)
local r2 = getRank(ws2)
if r1 ~= r2 then
return r1 > r2
end
local e1 = isEnglish(ws1)
local e2 = isEnglish(ws2)
if e1 ~= e2 then
return e1
end
return ws1._index > ws2._index
end)
local url = quickPcall(function ()
return websites[1].mainsnak.datavalue.value
local website = websites[ranks.preferred or ranks.normal or ranks.deprecated]
return website.mainsnak.datavalue.value
end)
 
-- Cache the result so that we only do the heavy lifting once per #invoke.
fetchWikidataUrl = function ()