Modulo:Nazioni
Questo è un modulo scritto in Lua. Le istruzioni che seguono sono contenute nella sottopagina Modulo:Nazioni/man (modifica · cronologia)
Sandbox: Modulo:Nazioni/sandbox (modifica · cronologia) · Sottopagine: lista · Test: Modulo:Nazioni/test (modifica · cronologia · Esegui)
Modulo che implementa il template {{Nazioni}}.
Fornisce l'accesso a un'unica tabella (Modulo:Nazioni/Nazioni) dove sono contenute tutte le informazioni sulle nazioni, che possono essere utili a template o ad altri moduli. Attraverso Modulo:Nazioni/Alias gestisce anche le redirezioni.
Queste informazioni erano una volta contenute in pagine separate: nelle 292 sottopagine di {{AggNaz}} presenti in Categoria:Template AggNaz e nelle 858 sottopagine di {{Naz}} presenti in Categoria:Template Naz. Vi erano inoltre 1678 redirect a queste sottopagine, ora rappresentati dall'unico Modulo:Nazioni/Alias.
È possibile consultare tutti i dati attualmente presenti e formattati in una unica tabella alla pagina: Template:Nazioni/report.
Configurazione
Ha due sottopagine di configurazione:
--[[
* Il modulo Nazioni fornisce l'accesso a una tabella con tutte le informazioni
* sulle nazioni (Modulo:Nazioni/Nazioni), una volta suddivise tra le 844 sottopagine
* nella "Categoria:Template Naz" e le 290 della "Categoria:Template AggNaz".
* Attraverso Modulo:Nazioni/Alias gestisce anche le precedenti redirezioni.
]]
require('strict')
local getArgs = require('Modulo:Arguments').getArgs
-- Configurazione
local nazioni = mw.loadData('Modulo:Nazioni/Nazioni')
local alias = mw.loadData('Modulo:Nazioni/Alias')
-------------------------------------------------------------------------------
-- Funzioni di ricerca e report
-------------------------------------------------------------------------------
-- Ritorna il valore di un campo della tabella nazioni
-- dato il codice della nazione e il nome del campo
-- Aggiunge un eventuale   per "articolo", "in_luogo" e "di_spec", quando senza apostrofo
local function query(nazName, fieldName)
local hasSpace = { art = true, inl = true, di = true }
local ret
nazName = alias[nazName] or nazName
if nazioni[nazName] then
ret = nazioni[nazName][fieldName]
-- se manca fs/fp prova con ms/mp
if not ret then
if fieldName == 'fs' then
ret = nazioni[nazName]['ms']
elseif fieldName == 'fp' then
ret = nazioni[nazName]['mp']
end
end
-- eventuale spazio
if ret and hasSpace[fieldName] and ret:sub(-1) ~= '\'' then
ret = ret .. ' '
end
end
return ret
end
-- Ritorna una tabella wiki con tutte le nazioni e tutti i campi
local function report()
local tableNode, trNode
local sortedNaz = {}
local nazFields = {
'band', 'di', 'st', 'gen', 'wl', 'sel', 'sb',
'bl', 'dip', 'art', 'inl', 'ms', 'fs', 'mp', 'fp'
}
-- genera una lista ordinata dei nomi delle nazioni
for k in pairs(nazioni) do
table.insert(sortedNaz, k)
end
table.sort(sortedNaz)
tableNode = mw.html.create('table')
-- header
tableNode
:addClass('wikitable')
:addClass('sortable')
:tag('tr')
:tag('th')
:attr('colspan', #nazFields + 2)
:wikitext('Nazioni accettate dal [[Template:Nazioni]]')
:done()
:done()
trNode = tableNode:tag('tr')
trNode:tag('th'):wikitext('#'):tag('th'):wikitext('codice')
for _, field in ipairs(nazFields) do
trNode:tag('th'):wikitext(field)
end
-- rows
for n, k in ipairs(sortedNaz) do
local v = nazioni[k]
trNode = tableNode:tag('tr')
trNode:tag('td'):wikitext(n):tag('td'):wikitext(k)
for _, field in ipairs(nazFields) do
if field == 'band' then
trNode:tag('td'):wikitext(v[field] and ('[[File:' .. v[field] .. '|border|20x16px]] ' .. v[field]) or '')
elseif field == 'sel' or field == 'sb' then
trNode:tag('td'):wikitext(v[field] and 'true' or '')
else
trNode:tag('td'):wikitext(v[field] or '')
end
end
end
return tostring(tableNode)
end
-------------------------------------------------------------------------------
-- API
-------------------------------------------------------------------------------
local p = {}
-- Per utilizzare la ricerca da un altro modulo.
-- Se rawTable è true ritorna l'intera nazione invece di un campo della nazione.
function p._main(args, rawTable)
local nazName, fieldName = args[1], args[2]
local ret
if rawTable and nazName then
ret = nazioni[alias[nazName] or nazName]
else
ret = (nazName and fieldName) and query(nazName, fieldName)
end
return ret
end
-- Entry-point per {{Nazioni/report}}
function p.report(frame)
return report()
end
-- Entry-point per {{Nazioni}}
function p.main(frame)
return p._main(getArgs(frame, {parentOnly = true}))
end
return p