Modulo:Prospetto sistemi planetari
Vai alla navigazione
Vai alla ricerca
Modulo in Lua per gestire le funzioni del template {{Prospetto sistemi planetari}}
-- ========================================================================================
-- Funzione per l'implementazione del template:Prospetto sistemi planetari
-- ========================================================================================
local getArgs = require('Module:Arguments').getArgs
local immagine_sinottico = require('Module:Immagine sinottico')._main
-- ========================================================================================
-- Funzione da richiamare da template:Prospetto sistemi planetari
-- ========================================================================================
local function tabella(frame)
-- parametri indicizzati da controllare
local param_names = { 'pianeta', 'tipo', 'massa', 'raggio', 'densità', 'periodo_orb', 'sem', 'ecc', 'incl', 'anno'}
-- header delle colonne dei parametri
local headers = { pianeta = '[[Pianeta]]', tipo = 'Tipo', massa = '[[Massa (fisica)|Massa]]', raggio = '[[Raggio (astronomia)|Raggio]]', ['densità'] = '[[Densità]]',
periodo_orb = '[[Periodo di rivoluzione|Periodo orb.]]', sem = '[[Semiasse maggiore|Sem. maggiore]]',
ecc = '[[Eccentricità orbitale|Eccentricità]]' , incl = '[[Inclinazione orbitale|Incl. orbita]]', anno = 'Scoperta'}
local args = getArgs(frame, { parentonly = true } )
--contatore di parametri effettivamente presenti
local index_table = 0
--crea e inizializza tabella dati e tabella che indica se i dati esistono per un dato nome
local found = {}
local tabella = {}
for _,base_name in ipairs(param_names) do
tabella[base_name] = {}
found[base_name] = false
end
-- esamina ordinatamente tutti i parametri da <nome>1 a <nome>9 e carica i dati in tabella
for i = 1, 9 do
local pos = tostring(i)
local found_index = false
for _,base_name in ipairs(param_names) do
local name = base_name .. pos
if args[name] then
if not found_index then
index_table = index_table + 1
found_index = true
end
found[base_name] = true
tabella[base_name][index_table] = args[name]
end
end
end
--if true then return mw.text.jsonEncode(tabella) end
-- se non ha trovato niente ritorna
if index_table == 0 then return end
-- crea la tabella html
local table_html = mw.html.create('table'):addClass('wikitable' .. (args['pianeta2'] and ' sortable' or '')):css('text-align', 'center')
-- inizializza la riga degli header
local rh = mw.html.create('tr')
for _,name in ipairs(param_names) do
if found[name] then rh:tag('th'):wikitext(headers[name]) end
end
table_html:node(rh)
-- carica i dati della tabella
for i =1, index_table do
local rd = mw.html.create('tr')
for _,name in ipairs(param_names) do
if found[name] then
if tabella[name][i] then
rd:tag('td'):wikitext(tabella[name][i])
else
rd:tag('td')
end
end
end
table_html:node(rd)
end
-- genera il codice html per le immagini appoggiandosi al modulo Module:Immagine_sinottico
local immagine1 = immagine_sinottico({args['immagine1'],
args['didascalia1'] or 'Prospetto delle distanze dei pianeti dalla stella centrale',
dim_utente = args['px1'],
dim = '640'})
local immagine2 = immagine_sinottico({args['immagine2'],
args['didascalia2'] or '',
dim_utente = args['px2'],
dim = '640'})
-- conta il numer di colonne effettivamente esistenti
local col_count = 0
for _,name in ipairs(param_names) do
if found[name] then col_count = col_count + 1 end
end
-- inserisce le immagini in tabella
if immagine1 ~= nil and immagine1 ~= '' then
table_html:tag('tr'):addClass('sortbottom'):tag('td'):attr('colspan', tostring(col_count)):wikitext(immagine1)
end
if immagine2 ~= '' and immagine2 ~= '' then
table_html:tag('tr'):addClass('sortbottom'):tag('td'):attr('colspan', tostring(col_count)):wikitext(immagine2)
end
return tostring(table_html)
end
return { tabella = tabella }