Modulo:Uragano
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 .. ' '
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