Modulo:Nazionale
Aspetto

Questo è un modulo scritto in Lua. Le istruzioni che seguono sono contenute nella sottopagina Modulo:Nazionale/man (modifica · cronologia)
Sandbox: Modulo:Nazionale/sandbox (modifica · cronologia) · Sottopagine: lista · Test: Modulo:Nazionale/test (modifica · cronologia · esegui)
Modulo Lua che implementa le funzionalità dei template {{Naz}}, {{NazBD}}, {{NazBA}}, {{NazNB}} e {{NazU}}.
--[[
* Modulo che implementa il template Naz e le varianti NazBD, NazBA, NazNB e NazU.
]]
require('strict')
-- Moduli
local getArgs = require('Modulo:Arguments').getArgs
local mNazioni = require('Modulo:Nazioni')
local mBandiera = require('Modulo:Bandiera')
-- Configurazione
local sports = mw.loadData('Modulo:Nazionale/Sport')
-------------------------------------------------------------------------------
-- Funzioni di utilità
-------------------------------------------------------------------------------
-- Error handler per xpcall, formatta l'errore
local function errhandler(msg)
-- se necessita il backtrace usare:
-- "<pre>" .. debug.traceback(msg) .. "</pre>"
return string.format('<span style="color:red;">Errore: %s</span>', msg:match('.+:(.+)$'))
end
-- Aggiunge testo alla tabella "t", svolge anche la funzione di concatenatore
local function dumpText(t, ...)
local arg = {...}
for _, val in ipairs(arg) do
table.insert(t, val)
end
end
-------------------------------------------------------------------------------
-- classe Nazionale
-------------------------------------------------------------------------------
local Nazionale = {}
function Nazionale:new(args, mode)
local self = {}
local bArgs = {}
setmetatable(self, { __index = Nazionale } )
-- ha unicamente 5 parametri posizionali
self.sportName = args[1]
self.nazName = args[2]
self.sesso = args[3]
-- con NazU è args[4] usato per gli anni
self.altro = args[4]
self.hide = args[5]
self.mode = mode
-- ricerca sport e nazione
self.sport = sports[self.sportName]
self.naz = mNazioni._main( { self.nazName }, true )
-- verifica argomenti
if not self.sport then
error('il codice sport ' .. (self.sportName or '') .. ' non è valido')
elseif not self.naz then
error('la nazionalità ' .. (self.nazName or '') .. ' non è valida')
end
-- bandiera
if self.mode ~= 'NB' then
bArgs = { self.nazName }
if self.mode == 'BA' then
bArgs.dim = '40x40'
end
self.bandiera = mBandiera.getClass():new(bArgs)
end
return self
end
function Nazionale:getWikiText()
local t = {}
-- HTML Entity Code per lo spazio
local SPACE = ' '
local ret
dumpText(t, '[[', self.naz.sel and 'Selezione' or 'Nazionale')
if self.mode == 'U' then
dumpText(t, SPACE, 'Under-', self.altro)
elseif self.altro then
dumpText(t, SPACE, self.altro)
end
dumpText(t, ' di ', self.sport, ' ')
if self.sesso then
if self.sesso:lower() == 'f' then
dumpText(t, 'femminile', SPACE)
elseif self.sesso:lower() == 'm' then
dumpText(t, 'maschile', SPACE)
end
end
if self.naz.gen then
dumpText(t, self.naz.gen)
elseif self.naz.di then
dumpText(t, self.naz.di,
self.naz.di:sub(-1) ~= '\'' and SPACE or '',
self.naz.st)
end
dumpText(t, '|', self.naz.st)
if self.mode == 'U' then
dumpText(t, SPACE, 'U-', self.altro)
elseif self.altro and not self.hide then
dumpText(t, SPACE, self.altro)
end
dumpText(t, ']]')
if self.mode == 'NB' then
ret = table.concat(t)
elseif self.mode == 'BD' then
ret = table.concat(t) .. ' ' .. self.bandiera:getWikiText()
elseif self.mode == 'BA' then
ret = self.bandiera:getWikiText() .. '<br />' .. table.concat(t)
else
ret = self.bandiera:getWikiText() .. ' ' .. table.concat(t)
end
return ret
end
-------------------------------------------------------------------------------
-- API
-------------------------------------------------------------------------------
local p = {}
-- Entry-point per {{NazBD}}
function p.nazbd(frame)
return select(2, xpcall(function()
return Nazionale:new(getArgs(frame, {parentOnly = true}), 'BD'):getWikiText()
end, errhandler))
end
-- Entry-point per {{NazBA}}
function p.nazba(frame)
return select(2, xpcall(function()
return Nazionale:new(getArgs(frame, {parentOnly = true}), 'BA'):getWikiText()
end, errhandler))
end
-- Entry-point per {{NazNB}}
function p.naznb(frame)
return select(2, xpcall(function()
return Nazionale:new(getArgs(frame, {parentOnly = true}), 'NB'):getWikiText()
end, errhandler))
end
-- Entry-point per {{NazU}}
function p.nazu(frame)
return select(2, xpcall(function()
return Nazionale:new(getArgs(frame, {parentOnly = true}), 'U'):getWikiText()
end, errhandler))
end
-- Entry-point per {{Naz}}
function p.main(frame)
return select(2, xpcall(function()
return Nazionale:new(getArgs(frame, {parentOnly = true})):getWikiText()
end, errhandler))
end
return p