Modulo:Fuso orario/sandbox: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Nuova sandbox
 
Omega Bot (discussione | contributi)
m Bot: rimuovo no globals obsoleto
 
(8 versioni intermedie di un altro utente non mostrate)
Riga 3:
]]--
 
require('Modulo:No globalsstrict')
 
local getArgs = require('Modulo:Arguments').getArgs
Riga 16:
local title = mw.title.new(name)
return title and title.exists
end
 
local function makeSequence(tbl)
local ret = {}
for item, _ in pairs(tbl) do
table.insert(valuesret, '</li></ul>'item)
end
return ret
end
 
Line 26 ⟶ 34:
local function formatList(values)
table.sort(values, compValues)
tablereturn string.insertformat('<ul><li>%s</li></ul>', mw.text.listToText(values, 1'</li><li>', '<ul/li><li>'))
table.insert(values, '</li></ul>')
return mw.text.listToText(values, '</li><li>', '</li><li>')
end
 
local function formatTimezones(items)
local formattedItems = {}
for item_, _item in pairsipairs(items) do
table.insert(formattedItems, string.format('[[%s]]', mw.wikibase.sitelinkgetSitelink(item)))
end
return #formattedItems > 1 and formatList(formattedItems) or formattedItems[1]
Line 45 ⟶ 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 68 ⟶ 72:
 
return ret
end
 
-- Se i claims hanno un qualifier P518 (parte coinvolta), restituisce quelli
-- il cui valore è tra i P131 dell'elemento, altrimenti quelli senza P518.
local function filterByP518(claims, args)
local inP518, noP518 = {}, {}
for _, claim in ipairs(claims) do
local items = mWikidata._formatQualifiers(claim, 'P518', { formatting = 'raw' }, true)
if numTimezones#items > 0 then
for _, item in ipairs(items) do
if mWikidata._indexOf({ 'P131', item, from = args.from }) then
table.insert(inP518, claim)
end
end
else
table.insert(noP518, claim)
end
end
return #inP518 > 0 and inP518 or noP518
end
 
local function getTimezones(args)
local ret = {}
local country = mWikidata._getProperty( { 'P17', from = args.from, formatting = 'raw', n = 1 } )
local numTimezones = 0
-- entità amministrative soppresse con P17 a novalue (in futuro il modulo:Wikidata restituirà nil)
if country == "''nessun valore''" then
country = nil
end
 
-- ricerca la proprietà fuso orario (P421)
local claims = mWikidata._getClaims('P421', { from = args.from, rank = 'best' } ) or {}
-- risultato temporaneo per Q142
if #claims == 0 and (args.iso3166 == 'FRA' or country == 'Q142') then
return { 'Q6655' }
end
-- se non presente la ricerca nell'elemento ottenuto da iso3166
if #claims == 0 and args.iso3166 then
claims = mWikidata._getClaims('P421', { noqualifier = 'P518', from = cfg.iso3166[args.iso3166] } ) or {}
end
-- se non presente la ricerca nell'item in nazionepaese (P17)
if #claims == 0 then
local itemclaims = mWikidata._getProperty_getClaims( { 'P17P421', from{ = args.from, formattingnoqualifier = 'rawP518', nfrom = 1country } ) or {}
claims = mWikidata._getClaims('P421', { from = item, rank = 'best' } ) or {}
end
-- se non è uno Stato filtra i fusi orari in base a P518 (parte coinvolta), se presente
if not mWikidata._instanceOf({ 'Q6256', from = args.from }) then
-- per ora limitato alla Spagna, per una introduzione graduale
if country == 'Q29' then
claims = filterByP518(claims, args)
end
end
 
for _, claim in ipairs(claims) do
local item = mWikidata._formatStatement(claim, { formatting = 'raw' })
Line 93 ⟶ 131:
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 100 ⟶ 137:
end
 
-- trasforma in una più semplice sequence
return ret, numTimezones
return makeSequence(ret)
end
 
local function getWikidataCategory(userval, wdval)
local cat
if userval then
if not wdval then
cat = 'P421 assente su Wikidata'
elseif wdval == userval then
cat = 'P421 uguale su Wikidata'
else
cat = 'P421 differente su Wikidata'
end
elseif wdval then
cat = 'P421 letta da Wikidata'
end
return string.format('[[Categoria:%s]]', args.cat)
end
 
-- Per l'utilizzo da altro modulo
function p._main(args)
local retuserval, wdval, cat
 
-- valore utente
if args[1] then
retuserval = formatUserInput(args[1])
if not retuserval and args.errmsg then
local msg = mw.ustring.gsub(args.errmsg, '\\{', '{')
msg = mw.ustring.gsub(msg, '\\}', '}')
ret =return mw.getCurrentFrame():preprocess(msg)
end
end
else
 
local timezones, numTimezones = getTimezones(args)
-- valore letto da Wikidata
if args.unico and numTimezones > 1 then
local timezones, numTimezones = getTimezones(args)
numTimezones = 0
if #timezones == 1 or (#timezones > 1 and args.multiplo ~= 'no') then
end
retwdval = formatTimezones(timezones)
if numTimezones > 0 then
end
ret = formatTimezones(timezones)
 
elseif args.cat and mw.title.getCurrentTitle().namespace == 0 then
-- categorie di servizio
return string.format('[[Categoria:%s]]', args.cat)
elseif args.cat and if mw.title.getCurrentTitle().namespace == 0 then
if not userval and not wdval and args.cat then
cat = string.format('[[Categoria:%s]]', args.cat)
elseif userval or (wdval and #timezones <= 1) then
cat = getWikidataCategory(userval, wdval)
end
end
 
return ret
return (userval or wdval or '') .. (cat or '')
end