모듈:Capoliste

--
-- This module will implement 
--
require('strict')
local getArgs = require('Module:Arguments').getArgs
local p = {}
local function read_squadre(args, giornate)
	local read_next = true
	local squadre =  {}
	local i = 1
	while read_next do
		local basename = 'c' .. tostring(i)
		local nome = argsbasename .. '-nome'
		if nome then 
			squadrei = {}
			squadrei.nome = nome
			squadrei.da = tonumber(argsbasename .. '-da' or )
			squadrei.a = tonumber(argsbasename .. '-a' or )
			squadrei.colore = argsbasename .. '-colore' or '#FFFFFF'
			if squadrei.da and squadrei.da > giornate then 
				squadrei.da = giornate
				read_next = false
			end
			if squadrei.a and squadrei.a > giornate then 
				squadrei.a = giornate
				read_next = false
			end
		else
			read_next = false
		end
		i = i + 1
	end
	if #squadre == 0 then return squadre end
	-- annullo i valori negativi
	for _,squadra in ipairs(squadre) do
		if squadra.da and (squadra.da  giornate) then squadra.da = nil end
		if squadra.a and (squadra.a  giornate) then squadra.a = nil end
	end
	--normalizzo e assegno valori di default se il valore da o a non è assegnato
	squadre1.da = squadre1.da or 1
	for i = 2, #squadre do
		squadrei.da = squadrei.da or ((squadrei-1.a or squadrei-1.da) +1)
	end
	squadre#squadre.a = squadre#squadre.a or giornate
	for i = 1, #squadre-1 do
		squadrei.a = squadrei.a or (squadrei+1.da -1)
	end 
	return squadre
end
function p.capoliste(frame)
	local args = getArgs(frame) 
	local giornate = tonumber(args.giornate) or 38 
	local squadre = read_squadre(args, giornate)
	--if #squadre == 0 then return 'Nessuna capolista inserita' end
	--if true then return mw.text.jsonEncode(squadre) end
	local div = mw.html.create('div'):css('overflow', 'auto')
	local int_table = div:tag('table'):cssText('font-size:80%; text-align:center; border-collapse:collapse;')
	
	--prima riga per il dimensionamento
	local first_row = int_table:tag('tr'):css('visibility', 'hidden')
	first_row:tag('td'):attr('rowspan', '5'):attr('width', '10px')
	first_row:tag('td'):wikitext('——'):css('height', '25px')
	for i = 2, giornate do first_row:tag('td'):wikitext('——') end
	first_row:tag('td'):attr('rowspan', '5'):attr('width', '1px')
	
	--riga per i nomi
	local name_row = int_table:tag('tr'):cssText('font-family:Arial Narrow; font-size:105%; vertical-align:bottom;')
	local last_pos = 0
	for _,squadra in ipairs(squadre) do
		if squadra.da > last_pos + 1 then
			name_row:tag('th'):attr('colspan', tostring(squadra.da - last_pos - 1))
		end
		name_row:tag('th'):attr('colspan', tostring(squadra.a - squadra.da + 1)):wikitext(squadra.nome)
		last_pos = squadra.a
	end
	if last_pos  last_pos + 1 then
			color_row:tag('td'):attr('colspan', tostring(squadra.da - last_pos - 1))
		end		
		color_row:tag('td')
			:attr('colspan', tostring(squadra.a - squadra.da + 1))
			:cssText('border-left:inset 1px white;')
			:css('background', squadra.colore)
		last_pos = squadra.a
	end
	if last_pos < giornate then color_row:tag('td'):attr('colspan', tostring(giornate-last_pos)) end
	--riga per righello
	local ruler_row = int_table:tag('tr'):cssText('border-top:solid 1px black;')
	local ruler_style = 'border-left:solid 1px black;'
	ruler_row:tag('td'):cssText(ruler_style):attr('height', '1px'):wikitext(' ')
	for i = 2, giornate-1 do ruler_row:tag('td'):cssText(ruler_style):wikitext(' ') end
	ruler_row:tag('td'):cssText('border-left:solid 1px black; border-right:solid 1px black;'):wikitext(' ')
	--riga per header
	local header_row = int_table:tag('tr')
	for i=1, giornate do header_row:tag('th'):wikitext(tostring(i) .. 'ª') end
	-- ritorno il risultato
	return tostring(div)
end
return p