Info Istruzioni per l'uso
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