Modulo:Uragano

Da Wikipedia, l'enciclopedia libera.
Vai alla navigazione Vai alla ricerca
-- ========================================================
-- Modulo di supporto al template:Uragano per la determinazione
-- della classificazione dei un uragano rispetto ai venti
-- ========================================================
require('strict')

local p = {}
local getArgs = require('Module:Arguments').getArgs

-- tabella dei colori da usare in base al codice della tempesta
local colore_tempesta = {
	['1'] = 'ffffcc',
	['cat1'] = 'ffffcc',
	['2'] = 'ffe775',
	['cat2'] = 'ffe775',
	['3'] = 'ffc140',
	['cat3'] = 'ffc140',
	['4'] = 'ff8f20',
	['cat4'] = 'ff8f20',
	['STY'] = 'ff6699',
	['S'] = 'ff6699',
	['catS'] = 'ff6699',
	['5'] = 'ff6060',
	['cat5'] = 'ff6060',
	['typhoon'] = 'fdaf9a',
	['tifone'] = 'fdaf9a',
	['TY'] = 'fdaf9a',
	['STS'] = 'ccffff',
	['strong'] = 'ccffff',
	['storm'] = '00faf4',
	['tempesta'] = '00faf4',
	['depression'] = '5ebaff0',
	['depressione'] = '5ebaff0',
	['subtropical'] = 'ddeee00',
	['subtropicale'] = 'ddeee00',
	['extratropicale'] = 'ddeee00',
	['extratropical'] = 'cccccc0',
	['unknown'] = 'c0c0c00',
	['sconosciuta'] = 'c0c0c00',
}

-- Ritorno il valore della tabella colore_tempesta o un default se non trovato
local function _colore_tempesta(tipo)
	return (tipo and colore_tempesta[tipo]) or 'c0c0c00'
end

-- ==========================================================
-- Dizionario dei possibili criteri di classificazione:
-- Ogni elemento del dizionario è a sua volta un dizionario
-- con i seguenti elementi:
-- - Parametro vento = nome del parametro contenente la velocità del vento da usare
-- - Classificazione = lista di [ velocità massima, codice categoria, nome categoria ]
-- - Max = [ 0, codice categoria, nome categoria]  (per la classificazione di max livello)
-- - Suffisso = testo da aggiungere alla classificazione
-- ==========================================================

local bacini = {
	['Aus'] = {
		['Parametro vento'] = 'Venti',
		['Classificazione'] ={
			{ 49,  'cat1', 'Ciclone debole' },
			{ 67,  'cat1', 'Ciclone categoria 1' }, 
			{ 92,  'cat2', 'Ciclone categoria 2' }, 
			{ 121, 'cat3', 'Ciclone categoria 3' }, 
			{ 151, 'cat4', 'Ciclone categoria 4' }, 
		},
		['Max'] = { 0, 'cat5', 'Ciclone categoria 5' },
		['Suffisso'] = ' ([[Ciclone tropicale|Scala australiana]])'
	},
	['WPac'] = {
		['Parametro vento'] = 'Venti 10-min',
		['Classificazione'] ={
			{ 34,  'depressione', 'Depressione tropicale' },
			{ 48,  'tempesta', 'Tempesta tropicale' }, 
			{ 64,  'STS', 'Tempesta tropicale forte' }, 
		},
		['Max'] = { 0, 'tifone', 'Tifone' },
		['Suffisso'] = ' ([[Japan Meteorological Agency|JMA]])'
	},
	['NIO'] = {
		['Parametro vento'] = 'Venti 3-min',
		['Classificazione'] ={
			{ 28,  '', 'Depressione' }, 
			{ 34,  'depressione', 'Depressione profonda' }, 
			{ 48,  'tempesta', 'Tempesta ciclonica' }, 
			{ 64, 'STS', 'Forte tempesta ciclonica' }, 
			{ 120, 'cat2', 'Tempesta ciclonica molto forte' }, 
		},
		['Max'] = { 0, 'cat4', 'Super tempesta ciclonica' },
		['Suffisso'] = ' ([[India Meteorological Department|IMD]])'
	},
	['SSH'] = {
		['Parametro vento'] = 'Venti 1-min',
		['Classificazione'] ={
			{ 34,  'depressione', '' }, 
			{ 64,  'tempesta', '' }, 
			{ 83,  'cat1', 'Categoria 1' }, 
			{ 96,  'cat2', 'Categoria 2' }, 
			{ 114, 'cat3', 'Categoria 3' }, 
			{ 136, 'cat4', 'Categoria 4' }, 
		},
		['Max'] = { 0, 'cat5', 'Categoria 5' },
		['Suffisso'] = ' ([[Scala Saffir-Simpson|SSHS]])'
	},
}

function p.classificazione(frame)
	-- leggo i parametri base da usare dal template
	local pargs = getArgs(frame, { frameOnly = true})
	local bacino_di_classificazione = pargs[1] or 'SSH'-- codice della classificazione da usare
	if bacini[bacino_di_classificazione] == nil then
		return ''
	end 
	-- tabella di classificazione da usare
	local tab_bacino = bacini[bacino_di_classificazione]['Classificazione']
	-- leggo i parametri passati all'infobox
	local args = getArgs (frame, { parentOnly = true}) 
	local vento = tonumber(args[bacini[bacino_di_classificazione]['Parametro vento']] or '') -- velocità del vento
	if vento == nil then -- se non è un numero ritorna
		return '' 
	end
	local bacino = args['bacino'] or ''
	if bacino ~= bacino_di_classificazione and bacino_di_classificazione ~= 'SSH' then
		return ''
	end
	-- classifico il vento scandendo la tabella di classificazione e confrontando la velocità
	-- del vento con il limite superiore
	local pos = 1
	local found = false
	while not found and pos < #tab_bacino  do 
		if vento <= tab_bacino[pos][1] then
			found = true
		else
			pos = pos + 1 
		end
	end
	-- riga da usare per l'output (riga della tabella di Classificazione se trovata o la riga di valore massimo)
	local row = (found and tab_bacino[pos]) or bacini[bacino_di_classificazione]['Max']
	-- premetto il valore del parametro Tipo se il metodo di classificazione è SSH 
	local tipo = ((bacino_di_classificazione == 'SSH') and args['Tipo']) or ''
	if tipo ~= '' then 
		tipo = tipo .. '&nbsp;'
	end
	return table.concat({'<div style="background-color:#', _colore_tempesta(row[2]) or '',';">', tipo, row[2], 
						bacini[bacino_di_classificazione]['Suffisso'], '</div>'})
end

return p