
Questo è un modulo scritto in Lua. Le istruzioni che seguono sono contenute nella sottopagina Modulo:Wikibase/man (modifica · cronologia)
Sandbox: Modulo:Wikibase/sandbox (modifica · cronologia) · Test: Modulo:Wikibase/test (modifica · cronologia · Esegui)
Il modulo Wikibase implementa le funzionalità base di accesso a Wikidata orientate al popolamento del template {{Quickbar}}.
--[[ Source script: https://it.wikivoyage.org/wiki/Modulo:Wikibase Maintainers: Andyrom75, Nastoshka ]] local item = mw.wikibase.getEntityObject() local function is_defined(s) if s and s ~= '' then return s end return nil end 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 is_defined(dbname) and 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 is_defined(fallback) 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(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 is_defined(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) return getId(frame.args[1]) 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 and is_defined(frame.args[1]) 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 function p.wikilink(wikiname, frame) if frame and is_defined(frame.args[1]) then return frame.args[1] end local sl = sitelink(wikiname) if is_defined(sl) then return sl end --[[ local t = mw.title.getCurrentTitle().text if is_defined(t) then return t end ]] return '' end -- Restituisce il collegamento corrispondente a Wikipedia in italiano. function p.itwikilink(frame) return p.wikilink('itwiki', frame) end -- Restituisce il collegamento corrispondente a Wikiquote in italiano. function p.itwikiquotelink(frame) return p.wikilink('itwikiquote', frame) end -- Restituisce il collegamento corrispondente a Wikisource in italiano. function p.itwikisourcelink(frame) return p.wikilink('itwikisource', frame) end -- Restituisce il collegamento corrispondente a Wikinotizie in italiano. function p.itwikinewslink(frame) return p.wikilink('itwikinews', frame) end -- Restituisce il collegamento corrispondente a Wikibooks in italiano. function p.itwikibookslink(frame) return p.wikilink('itwikibooks', frame) end -- Restituisce il nome della categoria di Commons collegata all'articolo attraverso Wikidata. function p.commonslink(frame) if frame and is_defined(frame.args[1]) 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 return '' end function p.sito(frame) if frame then if is_defined(frame.args[1]) then return frame.args[1] end local parent = frame:getParent() if parent then local args = parent.args if is_defined(args.Sito) then return args.Sito end if is_defined(args['Sito ufficiale']) then return args['Sito ufficiale'] end end end return aggiornato('P856',frame) end function p.WDProperty(PID, ExtVar, frame) if frame then if is_defined(frame.args[1]) then return frame.args[1] end local parent = frame:getParent() if parent and is_defined(parent.args[ExtVar]) then return parent.args[ExtVar] end end return aggiornato(PID, frame) end -- Restituisce il nome della capitale o del capoluogo attuale dell'elemento. function p.capitale(frame) return p.WDProperty('P36', 'Capitale', frame) end function p.capoluogo(frame) return p.WDProperty('P36', 'Capoluogo', frame) end function p.valuta(frame) return p.WDProperty('P38', 'Valuta', frame) end function p.banner(frame) return p.WDProperty('P948', 'Banner', frame) end function p.stemma(frame) return p.WDProperty('P94', 'Stemma', frame) end function p.bandiera(frame) return p.WDProperty('P41', 'Bandiera', frame) end function p.abitanti(frame) return p.WDProperty('P1082', 'Abitanti', frame) end function p.stato(frame) return p.WDProperty('P17', 'Stato', frame) end function p.immagine( frame ) return p.WDProperty('P18', 'Immagine', frame) end function p.localizzazione(frame) return p.WDProperty('P242', 'Localizzazione', frame) end -- metri sul livello del mare (senza unità) function p.altitudine( frame ) -- Use the passed param if available, otherwise continue with fetching from Wikidata if frame then if is_defined(frame.args[1]) then return frame.args[1] end end local elevation = p.WDProperty('P2044', 'Altitudine', frame) if elevation then return elevation["amount"] end return nil end function p.unesco(frame) return p.WDProperty('P757', 'Unesco', frame) end function p.CAP(frame) return p.WDProperty('P281', 'CAP', frame) end function p.IATA(frame) return p.WDProperty('P238', 'IATA', frame) end function p.airport_status(frame) return p.WDProperty('P5817', 'Status', frame) end -- Può essere una città, regione, stato federato etc... function p.situato_in(frame) return p.WDProperty('P131', 'Unità amministrativa', frame) end -- Type of airport (international, domestic, commercial...) function p.airport_type(frame) -- Use the passed param if available, otherwise continue with fetching from Wikidata if frame and is_defined(frame.args[1]) then return frame.args[1] end local airport_type = p.get_instanceof_numeric_ids() -- Non davvero plausibile, c'è sempre un instanceof ma chissà... if #airport_type == 0 then return "" end -- Define a table mapping Wikidata entity IDs to their corresponding airport types local airportCategorization = { -- Internazionale [644371] = "Internazionale", -- Aeroporto internazionale [10536263] = "Internazionale", -- Aeroporto internazionale di compagnia -- Regionale o Nazionale [837800] = "Domestico", -- Aeroporto nazionale [2138424] = "Domestico", -- Aeroporto regionale --[[ -- Specializzato [1479818] = "", -- Aeroporto speciale [4811588] = "", -- Hub di compagnia [5419792] = "", -- Aeroporto esecutivo [5196508] = "", -- Aeroporto privato [17144062] = "", -- Aeroporto senza torre di comando [106643740] = "", -- Aeroporto federale [94993988] = "", -- Aerodromo commerciale [117475712] = "", -- Vertiport -- Standard (generic type for airports not fitting other categories) [1248784] = "", -- Scalo [20977786] = "", -- Aeroporto commerciale [392406] = "", -- Aeroporto alternato [62782337] = "", -- Aeroporto di aviazione generale [15733670] = "", -- Aeroporto di partenza [15733672] = "", -- Aeroporto di arrivo [55612991] = "", -- Greenfield Airport [109558168] = "", -- Outstation ]]-- } -- Check each airport type against the categorization and return the first match for _, item in ipairs(airport_type) do local label = airportCategorization[item] if is_defined(label) then return label end end return '' -- Return empty string if no match is found 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 zone = {} for i, e in pairs(item.claims.P421) 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 end function p.instanceof(arg) arg = tonumber(arg.args[1] or arg) if item and item.claims and item.claims.P31 then for index, claim in pairs(item.claims.P31) 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 -- Used to loop through tables to operate with instances of certain types -- at moment types of airports but in principles would work also for cities, regions, beaches etc... function p.get_instanceof_numeric_ids( ) -- Early return se sappiamo che non c'è quel che ci interessa if not item or not item.claims or not item.claims['P31'] then return nil end local numeric_ids = {} for _, claim in pairs(item.claims['P31']) do local qual = claim.qualifiers -- Proceed if there are no disqualifying qualifiers if not qual or not qual.P582 then if claim.mainsnak and claim.mainsnak.datavalue and claim.mainsnak.datavalue.value then local val = claim.mainsnak.datavalue.value if val['numeric-id'] then table.insert(numeric_ids, val['numeric-id']) end end end end return numeric_ids -- Return the table (can be empty) end return p