local item = mw.wikibase.getEntityObject()
function getId( id )
if id then
return id
end
if item then
return item.id
end
return nil
end
-- Restituisce il collegamento corrispondente al codice fornito.
function sitelink(dbname)
if (dbname or '') == '' then
return ''
end
if item and item:getSitelink(dbname) then
return item:getSitelink(dbname)
end
return ''
end
-- Restituisce le coordinate geografiche corrispondenti all'elemento
function coords(typ, fallback)
if (fallback or '') ~= '' and string.match(fallback, '^<%!%-%-.*%-%->$') == nil then
return fallback
end
if item and item.claims then
local coords = item.claims.P625
if coords and #coords == 1 and coords[1].mainsnak and coords[1].mainsnak.datavalue and coords[1].mainsnak.datavalue.value then
return coords[1].mainsnak.datavalue.value[typ]
end
end
return ''
end
function normalize_timezone(tz)
local k = string.gsub(tz, '%+0(%d)$', '+%1')
k = string.gsub(k, '%+0(%d:%d%d)$', '+%1')
return string.gsub(k, '(%+%d%d?):00$', '%1')
end
function normalize_timezone_list(list)
--alphaindexline
return mw.text.listToText(list)
end
-- Restituisce l'elemento più aggiornato tra una serie di asserzioni
-- TODO: ranks
function aggiornato(item, prop, frame)
if item and item.claims and item.claims[prop] then
for index, claim in pairs(item.claims[prop]) do
local qual = claim.qualifiers
if qual == nil or qual.P582 == nil then
-- P582 è la data di fine, significa che non è il valore attuale
if claim.mainsnak and claim.mainsnak.datavalue and claim.mainsnak.datavalue.value then
local val = claim.mainsnak.datavalue.value
if val['numeric-id'] then
local id = 'Q'..val['numeric-id']
local sl = mw.wikibase.sitelink(id)
local lb = mw.wikibase.label(id)
if sl and sl ~= '' then
return frame:preprocess('[['..sl..'|'..lb..']]')
end
return lb
end
return val
end
end
end
end
return ''
end
local p = {}
--
-- Restituisce l'ID dell'elemento collegato alla pagina corrente.
function p.id(frame)
id = getId(frame.args[1])
if id then
return id
end
return '(nessun elemento trovato)'
end
-- Restituisce l'ID dell'elemento collegato alla pagina corrente sotto forma di link a Wikidata.
function p.idLink(frame)
local id = getId(frame.args[1])
if id then
return '[[d:' .. id .. '|' .. id .. ']]'
end
return '(nessun elemento trovato)'
end
-- Restituisce l'etichetta di un elemento.
function p.label(frame)
local id = getId(frame.args[1])
if id then
return mw.wikibase.label( id )
end
return '(nessun elemento trovato)'
end
-- Restituisce il primo valore non nullo (nell'ordine) tra il: parametro passato in ingresso, etichetta dell'entità Wikidata, nome della pagina.
function p.pagename(frame)
if (frame.args[1] or '') ~= '' then
return frame.args[1]
end
local id = getId()
if id then
return mw.wikibase.label( id )
end
return mw.title.getCurrentTitle().text
end
-- Restituisce la pagina locale dell'elemento di Wikidata fornito.
function p.page(frame)
local id = getId(frame.args[1])
if id then
return mw.wikibase.sitelink( id )
end
return '(nessun elemento trovato)'
end
-- Restituisce il collegamento corrispondente al codice fornito.
function p.sitelink(frame)
return sitelink(frame.args.dbname or frame.args[1])
end
-- Restituisce il collegamento corrispondente a Wikipedia in italiano.
function p.itwikilink(frame)
if (frame.args[1] or '') ~= '' then
return frame.args[1]
end
local sl = sitelink('itwiki')
if sl and sl ~= '' then
return sl
end
--[[ local t = mw.title.getCurrentTitle().text
if t and t ~= '' then
return t
end
]]
return ''
end
-- Restituisce il collegamento corrispondente a Wikiquote in italiano.
function p.itwikiquotelink(frame)
if (frame.args[1] or '') ~= '' then
return frame.args[1]
end
local sl = sitelink('itwikiquote')
if sl and sl ~= '' then
return sl
end
return ''
end
-- Restituisce il collegamento corrispondente a Wikisource in italiano.
function p.itwikisourcelink(frame)
if (frame.args[1] or '') ~= '' then
return frame.args[1]
end
local sl = sitelink('itwikisource')
if sl and sl ~= '' then
return sl
end
return ''
end
-- Restituisce il collegamento corrispondente a Wikinotizie in italiano.
function p.itwikinewslink(frame)
if (frame.args[1] or '') ~= '' then
return frame.args[1]
end
local sl = sitelink('itwikinews')
if sl and sl ~= '' then
return sl
end
return ''
end
-- Restituisce il nome della categoria di Commons collegata all'articolo attraverso Wikidata.
function p.commonslink(frame)
if (frame.args[1] or '') ~= '' then
return 'Category:'..frame.args[1]
end
if item and item.claims then
local cat = item.claims.P373
if cat and #cat == 1 and cat[1].mainsnak and cat[1].mainsnak.datavalue and cat[1].mainsnak.datavalue.value then
return 'Category:'..(cat[1].mainsnak.datavalue.value)
end
end
--[[ local t = mw.title.getCurrentTitle().text
if t and t ~= '' then
return 'Category:'..t
end
]]
return ''
end
-- Restituisce il nome della capitale o del capoluogo attuale dell'elemento.
function p.capitale(frame)
if (frame.args[1] or '') ~= '' then
return frame.args[1]
end
local parent = frame:getParent()
if parent and (parent.args.Capitale or '') ~= '' then
return parent.args.Capitale
end
return aggiornato(item,'P36',frame)
end
function p.capoluogo(frame)
return p.capitale(frame)
end
function p.valuta(frame)
if (frame.args[1] or '') ~= '' then
return frame.args[1]
end
local parent = frame:getParent()
if parent and (parent.args.Valuta or '') ~= '' then
return parent.args.Valuta
end
return aggiornato(item,'P38',frame)
end
function p.sito(frame)
if (frame.args[1] or '') ~= '' then
return frame.args[1]
end
local parent = frame:getParent()
if parent then
local args = parent.args
if (args.Sito or '') ~= '' then
return args.Sito
end
if (args['Sito ufficiale'] or '') ~= '' then
return args['Sito ufficiale']
end
end
return aggiornato(item,'P856',frame)
end
function p.banner(frame)
if (frame.args[1] or '') ~= '' then
return frame.args[1]
end
local parent = frame:getParent()
if parent and (parent.args.Banner or '') ~= '' then
return parent.args.Banner
end
return aggiornato(item,'P948',frame)
end
function p.stemma(frame)
if (frame.args[1] or '') ~= '' then
return frame.args[1]
end
local parent = frame:getParent()
if parent and (parent.args.Stemma or '') ~= '' then
return parent.args.Stemma
end
return aggiornato(item,'P94',frame)
end
function p.bandiera(frame)
if (frame.args[1] or '') ~= '' then
return frame.args[1]
end
local parent = frame:getParent()
if parent and (parent.args.Bandiera or '') ~= '' then
return parent.args.Bandiera
end
return aggiornato(item,'P41',frame)
end
function p.abitanti(frame)
if (frame.args[1] or '') ~= '' then
return frame.args[1]
end
local parent = frame:getParent()
if parent and (parent.args.Abitanti or '') ~= '' then
return parent.args.Abitanti
end
return aggiornato(item,'P1082',frame)
end
-- Restituisce l'etichetta dell'elemento rappresentante la bandiera relativa all'elemento dell'articolo
function p.bandiera_titolo(frame)
if item then
local claims = item.claims
if claims and claims.P163 and claims.P163[0] and claims.P163[1] == nil then
return mw.wikibase.label('Q'..claims.P163[0].mainsnak.datavalue.value['numeric-id'])
end
end
return mw.title.getCurrentTitle().text..' - Bandiera'
end
-- Restituisce l'etichetta dell'elemento rappresentante lo stemma relativo all'elemento dell'articolo
function p.stemma_titolo(frame)
if item then
local claims = item.claims
if claims and claims.P237 and claims.P237[0] and claims.P237[1] == nil then
return mw.wikibase.label('Q'..claims.P237[0].mainsnak.datavalue.value['numeric-id'])
end
end
return mw.title.getCurrentTitle().text..' - Stemma'
end
-- Restituisce la latitudine corrispondente all'articolo.
function p.latitudine(frame)
return coords('latitude',frame.args[1])
end
-- Restituisce la longitudine corrispondente all'articolo.
function p.longitudine(frame)
return coords('longitude',frame.args[1])
end
function p.fuso_orario(frame)
local link = false
for i, e in pairs(frame.args) do
if e == 'link' then
link = true
break
end
end
if item and item.claims and item.claims.P421 then
local claims = item.claims.P421
local zone = {}
for i, e in pairs(claims) do
local id = e.mainsnak.datavalue.value['numeric-id']
local z = normalize_timezone(mw.wikibase.label('Q'..id))
if link then
z = frame:preprocess('[[d:Q'..id..'|'..z..']]')
end
table.insert(zone, z)
end
return normalize_timezone_list(zone)
end
return ''
end
function p.disambig(frame)
if p.instanceof(4167410) then
return true
end
return false
end
function p.instanceof(arg)
-- arg = tonumber(arg.args[1] or arg)
if item and item.claims and item.claims.P31 then
local claims = item.claims.P31
for index, claim in pairs(claims) do
if claim.mainsnak and claim.mainsnak.datavalue then
local val = claim.mainsnak.datavalue.value
if val and val['numeric-id'] and arg == val['numeric-id'] then
return true
end
end
end
end
return false
end
return p