Module:Name item
Documentation for this module may be created at Module:Name item/doc
Code
-- By User:Jura1, based on module:Property documentation
local p = {}
local d = require('Module:Wikidata')
local q = require('Module:Property navbox')
local ii = require('Module:Interwiki from P460')
--- Return 'native label' (P1705), otherwise the item's label (localized or fallback), otherwise the QID
function p.nl(data, qid, linking)
local result = ''
if data then
if data.claims
and data.claims.P1705 then -- 'native label' (P1705)
result = {}
for _, v in ipairs(data.claims.P1705) do
if v.mainsnak.snaktype == 'value' then
table.insert(result, '<bdi>' .. v.mainsnak.datavalue.value.text .. '</bdi>')
end
end
result = table.concat(result, ', ')
end
if result == '' then
result = d._getLabel(data, q.getLang(), 'id')
result = result and ('<bdi>' .. result .. '</bdi>') or ''
end
end
if result == '' then
result = qid or ''
end
if result ~= '' and linking ~= '' then
result = '[[Talk:' .. (qid or '') .. '|' .. result .. ']]'
end
return result
end
-- Get 'pronunciation audio' (P443) value if qualifier 'language of work or name' (P407) set to the given audio language
function p.audiofiles(data, audiolangid)
if data
and data.claims
and data.claims.P443 then -- 'pronunciation audio' (P443)
local propdata = mw.wikibase.getEntityObject('P443')
local proplabel = d._getLabel(propdata) or ''
local audiofiles = {}
for _, v in ipairs(data.claims.P443) do
if v.qualifiers and v.qualifiers.P407 then -- 'language of work or name' (P407)
for _, vv in ipairs(v.qualifiers.P407) do
if vv.datavalue then
local seeid = vv.datavalue.value.id
if seeid == audiolangid
or audiolangid == 'Q1860' -- 'English' (Q1860)
and ( seeid == 'Q7976' -- 'American English' (Q1860)
or seeid == 'Q7979' -- 'British English' (Q1860)
or seeid == 'Q44679' -- 'Australian English' (Q44679)
)
then
local langlabel = d._getLabel(seeid) or ''
table.insert(audiofiles, '[[File:Speaker Icon.svg|11px|' ..
proplabel .. ' (' .. langlabel .. ')|link=File:' ..
v.mainsnak.datavalue.value .. ']]')
end
end
end
end
end
if #audiofiles > 0 then
return ' ' .. table.concat(audiofiles, ' ') .. ' '
end
end
return ''
end
function p.langs(data)
if data
and data.claims
and data.claims.P407 then -- 'language of work or name' (P407)
local langs = {}
for _, v in ipairs(data.claims.P407) do
if v.mainsnak.snaktype == 'value' then
local langid = v.mainsnak.datavalue.value.id
local langlabel = d._getLabel(langid) or ''
table.insert(langs, '<bdi>' .. langlabel .. '</bdi>' .. (p.audiofiles(data, langid) or ''))
end
end
if #langs > 0 then
return ' <small>(' .. table.concat(langs, ', ') .. ')</small>'
end
end
return ''
end
-- Return 'nickname' (P1449), preferably from 'statement is subject of' (P805) qualifiers (excepting diminutives)
function p.nicknames(data)
if data
and data.claims
and data.claims.P1449 then -- 'nickname' (P1449)
local nicknames = {}
for _, v in ipairs(data.claims.P1449) do
if v.qualifiers and v.qualifiers.P805 then -- 'statement is subject of' (P805)
for _, vq in ipairs(v.qualifiers.P805) do
if vq.datavalue and vq.datavalue.value then
local nicknameid = vq.datavalue.value.id
if nicknameid
and nicknameid ~= 'Q1130279' then -- ignore 'hypocorism' (Q1130279): diminutive, short nickname, pet name...
local nicknamedata = mw.wikibase.getEntityObject(nicknameid)
local nicknamelabel = d._getLabel(nicknameid) or ''
table.insert(nicknames, p.nl(nicknamedata, nicknameid, 'yes') .. p.langs(nicknamedata))
end
end
end
end
if #nicknames == 0
and v.mainsnak.snaktype == 'value' then
table.insert(nicknames, v.mainsnak.datavalue.value.text)
end
end
return table.concat(nicknames, ', ')
end
return ''
end
function p.related(data)
if data
and data.claims
and data.claims.P460 then -- 'said to be the same as' (P460)
local related = {}
for _, v in ipairs(data.claims.P460) do
if v.mainsnak.snaktype == 'value' then
local relatedid = v.mainsnak.datavalue.value.id
local relateddata = mw.wikibase.getEntityObject(relatedid)
if relateddata then
table.insert(related, p.nl(relateddata, relatedid, 'yes') .. p.langs(relateddata))
end
end
end
return table.concat(related, ', ')
end
return ''
end
function p.ogender(data)
if data
and data.claims
and data.claims.P1560 then -- 'given name version for other gender' (P1560)
local ogenders = {}
for _, v in ipairs(data5.claims.P1560) do
if v.mainsnak.snaktype == 'value' then
local ogenderid = v.mainsnak.datavalue.value.id
local ogenderdata = mw.wikibase.getEntityObject(ogenderid)
if seedata2 then
table.add(ogenders, p.nl(ogenderdata, ogenderid, 'yes') .. p.langs(ogenderdata))
table.add(ogenders, p.related(ogenderdata))
end
end
end
return table.concat(ogenders, ', ')
end
return ''
end
-- Get 'URL' (P2699) qualifiers of 'described by' (P1343) statements set to 'Wiktionnary' (Q151)
function p.wikt(data)
if data
and data.claims
and data.claims.P1343 then -- 'described by' (P1343)
local result = {}
for _, v in ipairs(data.claims.P1343) do
if v.mainsnak.datavalue
and v.mainsnak.datavalue.value.id == 'Q151' then -- 'Wiktionnary' (Q151)
if v.qualifiers
and v.qualifiers.P2699 then -- 'URL' (P2699)
for _, vv in ipairs(v.qualifiers.P2699) do
if vv.datavalue
and vv.datavalue.value then
table.insert(result, '[' .. vv.datavalue.value .. ' Wiktionnary]')
end
end
end
end
end
return table.concat(result, ', ')
end
return ''
end
function p.view(frame)
local qid = frame.args.id or frame:preprocess('{{PAGENAME}}')
if qid ~= 'None' then
local data = mw.wikibase.getEntityObject(qid)
if data
and data.claims then
local result = ''
local mylabel = p.nl(data, qid, '')
if mylabel ~= '' then
result = '<b><bdi>' .. mylabel .. '</bdi></b>'
end
local description = d._getDescription(data, q.getLang()) or ''
if description ~= '' then
result = result .. ': ' .. '<bdi>' .. description .. '</bdi>' .. p.langs(data)
end
local script = d.formatStatementsE { item = qid, property = 'P282', displayformat = '' } or ''
if script ~= '' then
result = result .. ' <small>(<bdi>' .. script .. '</bdi>)</small>'
end
local names
local namestable = {}
names = d.formatStatementsE { item = qid, property = 'P2440', displayformat = '' } or ''
if names ~= '' then
table.insert(namestable, '[[' .. qid .. '#P2440|transliteration]]</td><td>' .. names)
end
names = p.nicknames(data)
if names ~= '' then
table.insert(namestable, '[[' .. qid .. '#P1449|nicknames]]</td><td>' .. names)
end
names = p.related(data)
if names ~= '' then
table.insert(namestable, '[[' .. qid .. '#P460|related]]</td><td>' .. names)
end
names = p.ogender(data)
if names ~= ''then
table.insert(namestable, '[[' .. qid .. '#P1560|other gender]]</td><td>' .. names)
end
-- TODO: add other props
names = p.wikt(data)
if names ~= '' then
table.insert(namestable, 'Wiktionnary</td><td>' .. names)
end
names = ii.InterwikiNameTalk(qid) or ''
if names ~= '' then
table.insert(namestable, 'Wikimedia</td><td>' .. names)
end
if #namestable > 0 then
result = result .. '<table><tr valign="top"><td>' ..
table.concat(namestable, '</td></tr><tr valign="top"><td>') ..
'</td></tr></table>'
end
return result
end
end
return ''
end
return p