Modulo:Nazioni

Da Wikipedia, l'enciclopedia libera.
Vai alla navigazione Vai alla ricerca

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:

  • Nazioni: tabella delle nazioni
  • Alias: tabella dei sinonimi dei codici nazione

--[[
* 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