Modulo:Giochi olimpici
Istruzioni per l'uso
Questo è un modulo scritto in Lua. Le istruzioni che seguono sono contenute nella sottopagina Modulo:Giochi olimpici/man (modifica · cronologia)
Sandbox: Modulo:Giochi olimpici/sandbox (modifica · cronologia) · Sottopagine: lista · Test: Modulo:Giochi olimpici/test (modifica · cronologia · Esegui)
Questo è un modulo scritto in Lua. Le istruzioni che seguono sono contenute nella sottopagina Modulo:Giochi olimpici/man (modifica · cronologia)
Sandbox: Modulo:Giochi olimpici/sandbox (modifica · cronologia) · Sottopagine: lista · Test: Modulo:Giochi olimpici/test (modifica · cronologia · Esegui)
Modulo che implementa i template {{EdizOlimp}} e {{Link Giochi olimpici}}.
Ha una sottopagina di configurazione:
in cui si possono definire tutte le varie edizioni dei Giochi olimpici, sia estivi che invernali, paralimpici e giovanili.
--[[
* Modulo che implementa i template EdizOlimp e Link Giochi olimpici.
]]--
require('strict')
local getArgs = require('Modulo:Arguments').getArgs
local cfg = mw.loadData('Modulo:Giochi olimpici/Configurazione')
local errorCategory = '[[Categoria:Voci con errori del modulo Giochi olimpici]]'
local p = {}
local function errhandler(msg)
local cat = mw.title.getCurrentTitle().namespace == 0 and errorCategory or ''
return string.format('<span class="error">%s</span>%s', msg, cat)
end
local function getTable(tipo, stagione)
local ret
if tipo == 'G' then
ret = stagione == 'I' and cfg.giochi_olimpici_giovanili_invernali or cfg.giochi_olimpici_giovanili_estivi
elseif tipo == 'P' then
ret = stagione == 'I' and cfg.giochi_paralimpici_invernali or cfg.giochi_paralimpici_estivi
else
ret = stagione == 'I' and cfg.giochi_olimpici_invernali or cfg.giochi_olimpici_estivi
end
return ret
end
local function getAnno(tbl, edizione)
local ret
for key, val in pairs(tbl) do
if val.e == edizione then
ret = key
break
end
end
return ret
end
local function formatTarget(disciplina, specialita, anno, edizione, stagione, tipo)
local target
if disciplina then
local prep = 'ai'
if (stagione == 'I' or tipo == 'P') and (edizione == 'VIII' or edizione == 'XI') then
prep = 'agli'
end
disciplina = string.format('%s %s ', disciplina, prep)
else
disciplina = ''
end
if tipo == 'G' then
target = string.format('%s Giochi olimpici giovanili %s',
edizione, stagione == 'I' and 'invernali' or 'estivi')
elseif tipo == 'P' then
target = string.format('%s Giochi paralimpici %s',
edizione, stagione == 'I' and 'invernali' or 'estivi')
else
if stagione == 'I' then
target = string.format('%s Giochi olimpici invernali', edizione)
else
if anno == '1906' then
target = 'Giochi olimpici intermedi'
else
target = string.format('Giochi della %s Olimpiade', edizione)
end
end
end
specialita = specialita and (' - ' .. mw.language.getContentLanguage():ucfirst(specialita)) or ''
return disciplina .. target .. specialita
end
function p._edizOlimp(args)
local ret
-- args[3] e args[4] sono opzionali, per indicare estivi/invernali e paralimpici/giovanili
if args[1] and args[2] then
local field, anno_ediz, stagione, tipo = args[1], args[2], args[3], args[4]
local tbl = getTable(tipo, stagione)
local anno = tonumber(anno_ediz) and anno_ediz or getAnno(tbl, anno_ediz)
if anno and tbl[anno] then
ret = field == 'a' and anno or tbl[anno][field]
else
error('Anno o edizione non esistente', 2)
end
end
return ret
end
function p._getWlink(args)
local ret
-- args[2] obbligatorio, args[1] può essere vuoto
if args[2] then
local disciplina, anno, stagione, tipo = args[1], args[2], args[3], args[4]
local tbl = getTable(tipo, stagione)
local citta
anno = tonumber(anno) and anno or getAnno(tbl, anno)
if tbl[anno] then
citta = tbl[anno].c .. (tbl[anno].c2 and ' ' .. tbl[anno].c2 or '')
end
if tbl[anno] and not mw.ustring.find(citta, '(non disputat', 1, true) then
if args.formatting == 'label' then
ret = string.format('%s %s', citta, anno)
elseif args.formatting == 'target' then
ret = formatTarget(disciplina, args['specialità'], anno, tbl[anno].e, stagione, tipo)
elseif args.formatting == 'città_paese' then
local linkCitta = string.format('[[%s|%s]]', tbl[anno].d, tbl[anno].c)
if tbl[anno].c2 then
linkCitta = linkCitta .. ' e ' .. string.format('[[%s|%s]]', tbl[anno].d2, tbl[anno].c2)
end
ret = string.format('%s, [[%s]]', linkCitta, tbl[anno].p)
else
ret = string.format('[[%s|%s %s]]',
formatTarget(disciplina, args['specialità'], anno, tbl[anno].e, stagione, tipo),
citta, anno)
end
elseif args.errore == 'sì' then
error('Anno o edizione non esistente', 2)
else
ret = string.format("''%s - Nessuna %s %s%s''", args[2],
tipo == 'P' and 'Paralimpiade' or 'Olimpiade',
tipo == 'G' and 'giovanile ' or '',
stagione == 'I' and 'invernale' or 'estiva')
end
end
return ret
end
-- Entry-point per {{EdizOlimp}}
function p.EdizOlimp(frame)
return select(2, xpcall(function()
return p._edizOlimp(getArgs(frame, {parentOnly = true}))
end, errhandler))
end
-- Entry-point per {{Link Giochi olimpici}}
function p.Link_Giochi_olimpici(frame)
return select(2, xpcall(function()
return p._getWlink(getArgs(frame, {parentOnly = true}))
end, errhandler))
end
return p