Questa pagina è protetta dallo spostamento
Questa pagina è protetta

Modulo:Prospetto sistemi planetari

Da Wikipedia, l'enciclopedia libera.
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 }