Module:Wikidata: Difference between revisions
Jump to navigation
Jump to search
>RexxS (If the article doesn't exist on this wiki, display text of Wikidata label, linked to the Wikidata entry, change marker for message to '*') |
>RexxS (simplify) |
||
Line 11: | Line 11: | ||
for k, v in pairs(entity.claims[propertyID]) do | for k, v in pairs(entity.claims[propertyID]) do | ||
if v.mainsnak.snaktype == 'value' then | if v.mainsnak.snaktype == 'value' then | ||
local qid = "Q" .. v.mainsnak.datavalue.value["numeric-id"] | |||
out[#out + 1] = "[[" .. mw.wikibase.sitelink( | if mw.wikibase.sitelink(qid) then | ||
out[#out + 1] = "[[" .. mw.wikibase.sitelink(qid) .. "]]" | |||
else | else | ||
out[#out + 1] = "[[:d: | out[#out + 1] = "[[:d:" .. qid .. "|" .. mw.wikibase.label(qid) .. "]]<abbr title='Article is not yet available in this wiki'>[*]</abbr>" | ||
end | end | ||
end | end |
Revision as of 16:19, 13 August 2014
Documentation for this module may be created at Module:Wikidata/doc
local p = {} -- This is used to get a normal wiki-linked value, or a comma separated list of them if multiple values exist p.getValue = function(frame) local propertyID = mw.text.trim(frame.args[1] or "") local input_parm = mw.text.trim(frame.args[2] or "") if input_parm == "FETCH_WIKIDATA" then local entity = mw.wikibase.getEntity() if entity.claims[propertyID] ~= nil then local out = {} for k, v in pairs(entity.claims[propertyID]) do if v.mainsnak.snaktype == 'value' then local qid = "Q" .. v.mainsnak.datavalue.value["numeric-id"] if mw.wikibase.sitelink(qid) then out[#out + 1] = "[[" .. mw.wikibase.sitelink(qid) .. "]]" else out[#out + 1] = "[[:d:" .. qid .. "|" .. mw.wikibase.label(qid) .. "]]<abbr title='Article is not yet available in this wiki'>[*]</abbr>" end end end return table.concat(out, ", ") else return "" end else return input_parm end end -- This is used to get a value like 'male' (for property p21) which won't be linked p.getRawValue = function(frame) local propertyID = mw.text.trim(frame.args[1] or "") local input_parm = mw.text.trim(frame.args[2] or "") if input_parm == "FETCH_WIKIDATA" then local entity = mw.wikibase.getEntity() if entity.claims[propertyID] ~= nil then local out = {} for k, v in pairs(entity.claims[propertyID]) do if v.mainsnak.snaktype == 'value' then out[#out + 1] = mw.wikibase.label("Q" .. v.mainsnak.datavalue.value["numeric-id"]) end end return table.concat(out, ", ") else return "" end else return input_parm end end -- This is used to get a date value for date_of_birth (p569), etc. which won't be linked -- consolidate by testing if entity.claims[propertyID].mainsnak.datavalue.type is "time" -- Dates are stored as 28 characters if the year >99 -- e.g. +00000002014-01-01T00:00:00Z for 2014 -- Dates are stored as 26 characters if the year =<99 -- e.g. +000000050-01-01T00:00:00Z for 50 CE p.getDateValue = function(frame) local propertyID = mw.text.trim(frame.args[1] or "") local input_parm = mw.text.trim(frame.args[2] or "") local date_format = mw.text.trim(frame.args[3] or "dmy") if input_parm == "FETCH_WIKIDATA" then local entity = mw.wikibase.getEntity() if entity.claims[propertyID] ~= nil then local out = {} local dt = {} for k, v in pairs(entity.claims[propertyID]) do if v.mainsnak.snaktype == 'value' then local d = v.mainsnak.datavalue.value.time if #d > 26 then dt.year = string.sub(d, 9, 12) dt.month = string.sub(d, 14, 15) dt.day = string.sub(d, 17, 18) else dt.year = string.sub(d, 9, 10) dt.month = string.sub(d, 12, 13) dt.day = string.sub(d, 15, 16) end if date_format == "dmy" then out[#out + 1] = os.date("%e %B %Y", os.time(dt)) else out[#out + 1] = os.date("%B %e, %Y", os.time(dt)) end end end return table.concat(out, ", ") else return "" end else return input_parm end end return p