Module:Wikidata: Difference between revisions
From Zoophilia Wiki
Jump to navigationJump to search
meta>RexxS simplify Qid; capitalise first word returned by getRawValue |
meta>Jackmcbarn add methods for qualifiers |
||
Line 15: | Line 15: | ||
else | else | ||
out[#out + 1] = "[[:d:Q" .. v.mainsnak.datavalue.value["numeric-id"] .. "|" .. mw.wikibase.label("Q" .. v.mainsnak.datavalue.value["numeric-id"]) .. "]]<abbr title='Article is not yet available in this wiki'>[*]</abbr>" | out[#out + 1] = "[[:d:Q" .. v.mainsnak.datavalue.value["numeric-id"] .. "|" .. mw.wikibase.label("Q" .. v.mainsnak.datavalue.value["numeric-id"]) .. "]]<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 | |||
p.getQualifierValue = function(frame) | |||
local propertyID = mw.text.trim(frame.args[1] or "") | |||
local qualifierID = mw.text.trim(frame.args[2] or "") | |||
local input_parm = mw.text.trim(frame.args[3] 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 | |||
for k2, v2 in pairs(v.qualifiers[qualifierID]) do | |||
if v2.snaktype == 'value' then | |||
if (mw.wikibase.sitelink("Q" .. v2.datavalue.value["numeric-id"])) then | |||
out[#out + 1] = "[[" .. mw.wikibase.sitelink("Q" .. v2.datavalue.value["numeric-id"]) .. "]]" | |||
else | |||
out[#out + 1] = "[[:d:Q" .. v2.datavalue.value["numeric-id"] .. "|" .. mw.wikibase.label("Q" .. v2.datavalue.value["numeric-id"]) .. "]]<abbr title='Article is not yet available in this wiki'>[*]</abbr>" | |||
end | |||
end | end | ||
end | end | ||
Line 38: | Line 66: | ||
if v.mainsnak.snaktype == 'value' then | if v.mainsnak.snaktype == 'value' then | ||
out[#out + 1] = mw.wikibase.label("Q" .. v.mainsnak.datavalue.value["numeric-id"]) | out[#out + 1] = mw.wikibase.label("Q" .. v.mainsnak.datavalue.value["numeric-id"]) | ||
end | |||
end | |||
local ret = table.concat(out, ", ") | |||
return string.upper(string.sub(ret, 1, 1)) .. string.sub(ret, 2) | |||
else | |||
return "" | |||
end | |||
else | |||
return input_parm | |||
end | |||
end | |||
p.getRawQualifierValue = function(frame) | |||
local propertyID = mw.text.trim(frame.args[1] or "") | |||
local qualifierID = mw.text.trim(frame.args[2] or "") | |||
local input_parm = mw.text.trim(frame.args[3] 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 | |||
for k2, v2 in pairs(v.qualifiers[qualifierID]) do | |||
if v2.snaktype == 'value' then | |||
out[#out + 1] = mw.wikibase.label("Q" .. v2.datavalue.value["numeric-id"]) | |||
end | |||
end | end | ||
end | end | ||
Line 78: | Line 131: | ||
else | else | ||
out[#out + 1] = os.date("%B %e, %Y", os.time(dt)) | 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 | |||
p.getQualifierDateValue = function(frame) | |||
local propertyID = mw.text.trim(frame.args[1] or "") | |||
local qualifierID = mw.text.trim(frame.args[2] or "") | |||
local input_parm = mw.text.trim(frame.args[3] or "") | |||
local date_format = mw.text.trim(frame.args[4] 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 | |||
for k2, v2 in pairs(v.qualifiers[qualifierID]) do | |||
if v2.snaktype == 'value' then | |||
local d = v2.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 | ||
end | end |
Revision as of 01:49, 11 September 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
if (mw.wikibase.sitelink("Q" .. v.mainsnak.datavalue.value["numeric-id"])) then
out[#out + 1] = "[[" .. mw.wikibase.sitelink("Q" .. v.mainsnak.datavalue.value["numeric-id"]) .. "]]"
else
out[#out + 1] = "[[:d:Q" .. v.mainsnak.datavalue.value["numeric-id"] .. "|" .. mw.wikibase.label("Q" .. v.mainsnak.datavalue.value["numeric-id"]) .. "]]<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
p.getQualifierValue = function(frame)
local propertyID = mw.text.trim(frame.args[1] or "")
local qualifierID = mw.text.trim(frame.args[2] or "")
local input_parm = mw.text.trim(frame.args[3] 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
for k2, v2 in pairs(v.qualifiers[qualifierID]) do
if v2.snaktype == 'value' then
if (mw.wikibase.sitelink("Q" .. v2.datavalue.value["numeric-id"])) then
out[#out + 1] = "[[" .. mw.wikibase.sitelink("Q" .. v2.datavalue.value["numeric-id"]) .. "]]"
else
out[#out + 1] = "[[:d:Q" .. v2.datavalue.value["numeric-id"] .. "|" .. mw.wikibase.label("Q" .. v2.datavalue.value["numeric-id"]) .. "]]<abbr title='Article is not yet available in this wiki'>[*]</abbr>"
end
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
local ret = table.concat(out, ", ")
return string.upper(string.sub(ret, 1, 1)) .. string.sub(ret, 2)
else
return ""
end
else
return input_parm
end
end
p.getRawQualifierValue = function(frame)
local propertyID = mw.text.trim(frame.args[1] or "")
local qualifierID = mw.text.trim(frame.args[2] or "")
local input_parm = mw.text.trim(frame.args[3] 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
for k2, v2 in pairs(v.qualifiers[qualifierID]) do
if v2.snaktype == 'value' then
out[#out + 1] = mw.wikibase.label("Q" .. v2.datavalue.value["numeric-id"])
end
end
end
local ret = table.concat(out, ", ")
return string.upper(string.sub(ret, 1, 1)) .. string.sub(ret, 2)
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
p.getQualifierDateValue = function(frame)
local propertyID = mw.text.trim(frame.args[1] or "")
local qualifierID = mw.text.trim(frame.args[2] or "")
local input_parm = mw.text.trim(frame.args[3] or "")
local date_format = mw.text.trim(frame.args[4] 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
for k2, v2 in pairs(v.qualifiers[qualifierID]) do
if v2.snaktype == 'value' then
local d = v2.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
end
return table.concat(out, ", ")
else
return ""
end
else
return input_parm
end
end
return p