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