Modulo:Fuso orario/sandbox: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
aggiornato alla versione corrente
+controllo P131, modifiche minori
Riga 16:
local title = mw.title.new(name)
return title and title.exists
end
 
local function makeSequence(tbl)
local catret = {}
for item, _ in pairs(tbl) do
table.insert(ret, item)
end
localreturn ret
end
 
Line 31 ⟶ 39:
local function formatTimezones(items)
local formattedItems = {}
for item_, _item in pairsipairs(items) do
table.insert(formattedItems, string.format('[[%s]]', mw.wikibase.sitelink(item)))
end
Line 43 ⟶ 51:
 
local function checkTimezone(item)
local ret = cfg.validTimezones[item] and item or nil
local ret
ret = cfg.validTimezones[item] and item or nil
-- se non è tra i validTimezones verifica la proprietà "considerato essere uguale a (P460)"
Line 66 ⟶ 72:
 
return ret
end
 
-- Se ci sono più fusi orari e non è uno Stato è necessario leggere P131 (unità amministrativa in cui è situato)
local function checkAdminEntity(timezones, args)
local country = mWikidata._getProperty({ 'P17', from = args.from, formatting = 'raw', n = 1 })
-- Spagna
if country == 'Q29' then
-- P131 (unità amministrativa in cui è situato) non contiene Q5813 (isole Canarie)
timezones = mWikidata._indexOf({ 'P131', 'Q5813', from = args.from }) == -1 and { 'Q6655' } or { 'Q6574' }
end
return timezones
end
 
local function getTimezones(args)
local ret = {}
local numTimezones = 0
 
-- ricerca la proprietà fuso orario (P421)
Line 91 ⟶ 107:
item = checkTimezone(item)
if item then
-- chiave = boolean, per evitarenon avere duplicati
numTimezones = ret[item] and numTimezones or numTimezones + 1
ret[item] = true
end
Line 98 ⟶ 113:
end
 
-- trasforma in una più semplice sequence
return ret, numTimezones
ret = makeSequence(ret)
 
-- se ci sono più fusi orari e non è uno Stato è necessario leggere P131
if #ret > 1 and not mWikidata._instanceOf({ 'Q6256', from = args.from }) then
ret = checkAdminEntity(ret, args)
end
 
return ret, numTimezones
end
 
Line 112 ⟶ 135:
end
elseif wdval then
cat = 'Fuso orario letto da Wikidata'
end
return string.format('[[Categoria:%s]]', cat)
Line 119 ⟶ 142:
-- Per l'utilizzo da altro modulo
function p._main(args)
local userval, wdval, cat
local cat = {}
 
-- valore utente
Line 133 ⟶ 155:
 
-- valore letto da Wikidata
local timezones, numTimezones = getTimezones(args)
if args.multiplo#timezones == 'no'1 andor numTimezones(#timezones > 1 and args.multiplo ~= 'no') then
numTimezones = 0
end
if numTimezones > 0 then
wdval = formatTimezones(timezones)
end
Line 144 ⟶ 163:
if mw.title.getCurrentTitle().namespace == 0 then
if not userval and not wdval and args.cat then
table.insert(cat, = string.format('[[Categoria:%s]]', args.cat))
elseif userval or (wdval and #timezones <= 1) then
end
if cat = getWikidataCategory(userval, or (wdval and numTimezones <= 1) then
table.insert(cat, getWikidataCategory(userval, wdval))
end
end
 
return (userval or wdval or '') .. table.concat(cat or '')
end