require('Module:No globals')
local p = {}
local getArgs = require('Module:Arguments').getArgs
local colore = require('Module:Partiti').colore
local function vrg(a,b,c)
local s1, k
local s2 = a or 0
if (c == 1) then
s1 = '<b>%s</b></td><td><b>%4.2f</b>'
else
s1 = '%s</td><td>%4.2f'
end
while true do
s2, k = string.gsub(s2, "^(-?%d+)(%d%d%d)", '%1 %2')
if (k==0) then break end
end
s1 = string.format(s1, s2, 100*tonumber(a or 0)/b)
s1 = s1:gsub('%.',',')
s1 = '<td>' .. s1 .. '<div style="width:120px;background:#f0f0f0;border:1px solid #eee;height:3px"><div style="width:'..math.floor(120*tonumber(a or 0)/b)..'px;background:#007cc3;height:3px"></div></div></td>'
return s1
end
local function colora(a,b,c)
local clr = '#eee'
if (a) then
local x1 = string.find(a,'%[%[')
if (x1) then
local x2 = string.find(a:sub(x1),'%|')
local x3 = string.find(a:sub(x1),'%]%]')
if (x3) then
if (x2) then
a = a:sub(x1+2,x2-1)
else
a = a:sub(x1+2,x3-1)
end
end
end
clr = colore({a,(b or clr)})
end
return clr
end
function p.unico(frame)
local args = getArgs(frame, {
valueFunc = function (key, value)
if type(key) == "number" then
if value == nil then
return nil
else
value = mw.text.trim(value)
end
else
if value == '' then return nil end
end
return value
end
})
local elettori = tonumber(args['elettori'] or 0)
local elettori2 = tonumber(args['elettori2'] or elettori)
local votanti = tonumber(args['votanti'] or 0)
local votanti2 = tonumber(args['votanti2'] or 0)
local ball = tonumber(args['ball1'] or 0)
local titolo = args['titolo'] or ''
local err = '-'
local ss = ''
local num = 0
local tot,tot2 = 0,0
ss = '<table class="wikitable" style="text-align:right;margin:10px auto"><caption>'..titolo..'</caption><tr><th rowspan=2>Candidato</th><th rowspan=2 colspan=2>Partito</th><th colspan=2>'
if (ball>0) then ss= ss..'Primo turno</th><th colspan=2>Ballottaggio' else ss = ss..'Risultati' end
ss = ss..'</tr><tr><th>Voti</th><th>%</th>'
if (ball>0) then ss= ss..'<th>Voti</th><th>%</th>' end
ss = ss..'</tr>'
num = 1
while (args['cand'..num]) do
if (args['voti'..num]) then
tot = tot+tonumber(args['voti'..num])
tot2 = tot2+tonumber(args['ball'..num] or 0)
else
err = 'non indicato il numero di voti per il candidato '..num
end
num = num+1
end
if (votanti == 0 or elettori == 0) then err = 'non indicati elettori o votanti della votazione' end
if (ball>0) then
if (votanti2 == 0 or elettori2 == 0) then err = 'non indicati elettori o votanti del ballottaggio' end
end
num = num-1
for i=1,num do
if (i==1) then
ss = ss..string.format('<tr><td align=left><b>%s</b></td><td style="width:8px;background:%s"> </td><td align=left>%s</td>', args['cand'..i], colora(args['part'..i],args['col'..i]), (args['part'..i] or '—'))
if (ball>0) then
ss = ss..vrg(args['voti'..i],tot,0)
ss = ss..vrg(args['ball'..i],tot2,1)
else
ss = ss..vrg(args['voti'..i],tot,1)
end
ss = ss..'</tr>'
else
ss = ss..string.format('<tr><td align=left>%s</td><td style="width:8px;background:%s"> </td><td align=left>%s</td>', args['cand'..i], colora(args['part'..i],args['col'..i]), (args['part'..i] or '—'))
ss = ss.. vrg(args['voti'..i],tot,0)
if (args['ball'..i]) then ss = ss..vrg(args['ball'..i],tot2,0) end
ss = ss..'</tr>'
end
end
ss = ss..string.format('<tr><td colspan=%d></td></tr>', ball>0 and 7 or 5)
ss = ss..'<tr><td colspan=3>Iscritti</td>'..vrg(elettori,elettori,0)
if (ball>0) then ss = ss..vrg(elettori2,elettori2,0) end
ss = ss..'</tr><tr><td colspan=3>Astenuti</td>'..vrg(elettori-votanti,elettori,0)
if (ball>0) then ss = ss..vrg(elettori2-votanti2,elettori2,0) end
ss = ss..'</tr><tr><td colspan=3>Votanti</td>'..vrg(votanti,elettori,0)
if (ball>0) then ss = ss..vrg(votanti2,elettori2,0) end
ss = ss..'</tr><tr><td colspan=3>Voti non validi</td>'..vrg(votanti-tot,votanti,0)
if (ball>0) then ss = ss..vrg(votanti2-tot2,votanti2,0) end
ss = ss..'</tr><tr><td colspan=3>Voti validi</td>'..vrg(tot,votanti,0)
if (ball>0) then ss = ss..vrg(tot2,votanti2,0) end
ss = ss..'</tr></table>'
if (err == '-') then
return ss
else
return '<p style="color:red"><b>Errore nel template:</b> '..err..'</p>'
end
end
function p.poli(frame)
local args = getArgs(frame, {
valueFunc = function (key, value)
if type(key) == "number" then
if value == nil then
return nil
else
value = mw.text.trim(value)
end
else
if value == '' then return nil end
end
return value
end
})
local elettori = tonumber(args['elettori'] or 0)
local elettori2 = tonumber(args['elettori2'] or elettori)
local votanti = tonumber(args['votanti'] or 0)
local votanti2 = tonumber(args['votanti2'] or 0)
local eletti = tonumber(args['eletti'] or 0)
local ball = tonumber(args['ball1'] or 0)
local titolo = args['titolo'] or ''
local err = '-'
local ss = ''
local num = 0
local tot,tot2 = 0,0
ss = '<table class="wikitable" style="text-align:right;margin:10px auto"><caption>'..titolo..'</caption><tr><th rowspan=2>Candidato</th><th rowspan=2 colspan=2>Partito</th><th colspan=2>'
if (ball>0) then ss= ss..'Primo turno</th><th colspan=2>Ballottaggio' else ss = ss..'Risultati' end
ss = ss..'</th></tr><tr><th>Voti</th><th>%</th>'
if (ball>0) then ss= ss..'<th>Voti</th><th>%</th>' end
ss = ss..'</tr>'
num = 1
while (args['cand'..num]) do
if (args['voti'..num]) then
tot = tot+tonumber(args['voti'..num])
tot2 = tot2+tonumber(args['ball'..num] or 0)
else
err = 'non indicato il numero di voti per il candidato '..num
end
num = num+1
end
if (votanti == 0 or elettori == 0 or eletti == 0) then err = 'non indicati elettori, votanti o eletti della votazione' end
if (ball>0) then
if (votanti2 == 0 or elettori2 == 0) then err = 'non indicati elettori o votanti del ballottaggio' end
end
num = num-1
for i=1,num do
if (i<=eletti) then
ss = ss..string.format('<tr><td align=left><b>%s</b></td><td style="width:8px;background:%s"> </td><td align=left>%s</td>', args['cand'..i], colora(args['part'..i],args['col'..i]), (args['part'..i] or '—'))
if (ball>0) then
ss = ss..vrg(args['voti'..i],votanti,0)
ss = ss..vrg(args['ball'..i],votanti2,1)
else
ss = ss..vrg(args['voti'..i],votanti,1)
end
ss =ss..'</tr>'
else
ss = ss..string.format('<tr><td align=left>%s</td><td style="width:8px;background:%s"> </td><td align=left>%s</td>', args['cand'..i], colora(args['part'..i],args['col'..i]), (args['part'..i] or '—'))
ss = ss..vrg(args['voti'..i],votanti,0)
if (args['ball'..i]) then ss = ss..vrg(args['ball'..i],votanti2,0) end
ss = ss..'</tr>'
end
end
ss = ss..string.format('<tr><td colspan=%d></td></tr>', ball>0 and 7 or 5)
ss = ss..'<tr><td colspan=3>Iscritti</td>'..vrg(elettori,elettori,0)
if (ball>0) then ss = ss..vrg(elettori2,elettori2,0) end
ss = ss..'</tr><tr><td colspan=3>Astenuti</td>'..vrg(elettori-votanti,elettori,0)
if (ball>0) then ss = ss..vrg(elettori2-votanti2,elettori2,0) end
ss = ss..'</tr><tr><td colspan=3>Votanti</td>'..vrg(votanti,elettori,0)
if (ball>0) then ss = ss..vrg(votanti2,elettori2,0) end
ss = ss..'</tr></table>'
if (err == '-') then
return ss
else
return '<p style="color:red"><b>Errore nel template:</b> '..err..'</p>'
end
end
function p.lista(frame)
local args = getArgs(frame, {
valueFunc = function (key, value)
if type(key) == "number" then
if value == nil then
return nil
else
value = mw.text.trim(value)
end
else
if value == '' then return nil end
end
return value
end
})
local elettori = tonumber(args['elettori'] or 0)
local elettori2 = tonumber(args['elettori2'] or elettori)
local votanti = tonumber(args['votanti'] or 0)
local votanti2 = tonumber(args['votanti2'] or 0)
local ball = tonumber(args['ball1'] or 0)
local titolo = args['titolo'] or ''
local err = '-'
local ss = ''
local num = 0
local tot,tot2 = 0,0
ss = '<table cellpadding=0 cellspacing=0 style="border-collapse:collapse;margin:10px auto"><caption><b>'..titolo..'</b><tr style="vertical-align:top"><td>'
ss = ss..'<table class="wikitable" style="text-align:right"><tr><th rowspan=2 colspan=2>Partito</th><th colspan=2>'
if (ball>0) then ss= ss..'Primo turno</th><th colspan=2>Ballottaggio</th>' else ss = ss..'Risultati</th>' end
ss = ss..'<th rowspan=2>Seggi</th></tr>'
ss = ss..'<tr><th>Voti</th><th>%</th>'
if (ball>0) then ss= ss..'<th>Voti</th><th>%</th>' end
ss = ss..'</tr>'
num = 1
while (args['part'..num]) do
if (args['voti'..num]) then
tot = tot+tonumber(args['voti'..num])
tot2 = tot2+tonumber(args['ball'..num] or 0)
else
err = 'non indicato il numero di voti per il partito '..num
end
num = num+1
end
if (ball>0) then
if (votanti2 == 0 or elettori2 == 0) then
err = 'non indicati elettori o votanti del ballottaggio'
end
end
num = num-1
for i=1,num do
ss = ss..string.format('<tr><td style="width:8px;background:%s"></td><td align=left>%s</td>', colora(args['part'..i],args['col'..i]), args['part'..i])
ss = ss..vrg(args['voti'..i],tot,0)
if (ball>0) then
if (args['ball'..i]) then ss = ss..vrg(args['ball'..i],tot2,0) else ss=ss..'<td></td><td></td>' end
end
ss = ss..'<td>'..(args['seggi'..i] or '')..'</td></tr>'
end
ss = ss..string.format('<tr><td colspan=%d></td></tr>',ball>0 and 7 or 5)
ss = ss..'<tr><td colspan=2>Iscritti</td>'..vrg(elettori,elettori,0)
if (ball>0) then ss = ss..vrg(elettori2,elettori2,0) end
ss = ss..'</tr><tr><td colspan=2>Astenuti</td>'..vrg(elettori-votanti,elettori,0)
if (ball>0) then ss = ss..vrg(elettori2-votanti2,elettori2,0) end
ss = ss..'</tr><tr><td colspan=2>Votanti</td>'..vrg(votanti,elettori,0)
if (ball>0) then ss = ss..vrg(votanti2,elettori2,0) end
ss = ss..'</tr><tr><td colspan=2>Voti non validi</td>'..vrg(votanti-tot,votanti,0)
if (ball>0) then ss = ss..vrg(votanti2-tot2,votanti2,0) end
ss = ss..'</tr><tr><td colspan=2>Voti validi</td>'..vrg(tot,votanti,0)
if (ball>0) then ss = ss..vrg(tot2,votanti2,0) end
ss = ss..'</tr></table></td><td width="12px"></td><td><table class="wikitable"><tr><th colspan=2>Eletti</th></tr>'
num = 1
while (args['el'..num]) do
ss = ss..string.format('<tr><td style="background:%s"> </td><td>%s</td></tr>',colora(args['part el'..num],args['col'..num]), args['el'..num])
num = num+1
end
ss = ss..'</table></td></tr></table>'
if (err == '-') then
return ss
else
return '<p style="color:red"><b>Errore nel template:</b> '..err..'</p>'
end
end
return p