Modulo:Sandbox/M.casanova/Prova2: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
mNessun oggetto della modifica
Omega Bot (discussione | contributi)
m Bot: rimuovo no globals obsoleto
 
(37 versioni intermedie di un altro utente non mostrate)
Riga 1:
require('Module:No globalsstrict')
local getArgs = require('Module:Arguments').getArgs
 
local p = {}
local txt = {}
local getArgs = require('Module:Arguments').getArgs
local colore = require('Module:Partiti').colore
local lcella = 60
local tcella = '<th width="'..lcella..'px">Voti</th><th width="'..lcella..'px">%</th>'
local ff = 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 edate = '<br/><span style="font-size:85%%">%s</span>'
local flex = {}
flex['primo'] = {'<div style="display:flex;flex-direction:row;flex-wrap:wrap"><div style="flex-grow:0;flex-shrink:0;flex-basis:auto;padding: 0 2em 0 0">','</div>','0'}
flex['medio'] = {'<div style="flex-grow:0;flex-shrink:0;flex-basis:auto;padding: 0 2em 0 0">','</div>','0'}
flex['ultimo'] = {'<div style="flex-grow:0;flex-shrink:0;flex-basis:auto;padding: 0 2em 0 0">','</div></div>','0'}
flex['centro'] = { [3] = 'auto' }
 
local function aggerrhandler(a,...msg)
local cat = mw.title.getCurrentTitle().namespace == 0 and errorCategory or ''
local args = {...}
return string.format('<span class="error">%s</span>%s', msg, cat)
for _, s in ipairs(args) do
table.insert(a, s)
end
end
 
local function estraigcd(partitoa,b)
local ar = partitoa % b
return r == 0 and b or gcd(b,r)
local x1 = string.find(a,'%[%[')
if (x1) then
local x2 = a:sub(x1):find('%|')
local x3 = a:sub(x1):find('%]%]')
if (x3) then
if (x2) then
a = a:sub(x1+2,x2-1)
else
a = a:sub(x1+2,x3-1)
end
end
end
return a
end
 
local function vrgsemplifica(a,bt)
local s1, kd
localif s2(t[1] == 0) ''..athen
return t
while true do
s2, k = s2:gsub("^(-?%d+)(%d%d%d)", '%1&nbsp;%2')
if (k==0) then break end
end
if (t[1] >= t[2]) then
s1 = string.format('<td>%s</td><td><small>%4.2f</small></td>', s2, 100*tonumber(a)/b)
d=gcd(t[1],t[2])
s1 = s1:gsub('%.',',')
else
return s1
d=gcd(t[2],t[1])
end
return {t[1]/d,t[2]/d}
end
 
local function coloramoltiplica(a,b)
return coloresemplifica({estrai(a)[1]*b[1],(a[2]*b or '#EEE')[2]})
end
 
local function verificamostra(e,el,vt,tt,b,el2,vt2,tt2a)
if (vta[1] == 0) then e = e..' - non indicati votanti della votazione' end
error('Errore nei dati')
if (el == 0) then e = e..' - non indicati elettori della votazione' end
if (vt < tt) then e = e..' - il totale è superiore al numero di votanti' end
if (b>0) then
if (vt2 == 0) then e = e..' - non indicati votanti del ballottaggio' end
if (el2 == 0) then e = e..' - non indicati elettori del ballottaggio' end
if (vt2 < tt2) then e = e..' - il totale è superiore al numero di votanti nel ballottaggio' end
end
return e
end
 
local function fine(el,vt,tt,b,el2,vt2,tt2,cc,cc2,e)
local ss = {}
local ss2 = '<tr><td align=left colspan='..cc..'>'
 
if (b>0) then
agg(ss,string.format('<tr><td colspan=%d></td></tr>',cc2+2))
agg(ss,ss2,'Iscritti</td>',vrg(el,el),vrg(el2,el2),'</tr>')
agg(ss,ss2,'&#x21b3; Votanti <small>(% su iscritti)</small></td>',vrg(vt,el),vrg(vt2,el2),'</tr>')
if (e == 1) then
agg(ss,ss2,'&emsp;&#x21b3; Voti validi <small>(% su votanti)</small></td>',vrg(tt,vt),vrg(tt2,vt2),'</tr>')
agg(ss,ss2,'&emsp;&#x21b3; Voti non validi <small>(% su votanti)</small></td>',vrg(vt-tt,vt),vrg(vt2-tt2,vt2),'</tr>')
agg(ss,ss2,'&#x21b3; Astenuti <small>(% su iscritti)</small></td>',vrg(el-vt,el),vrg(el2-vt2,el2),'</tr>')
end
else
if (a[2] == 1) then
agg(ss,string.format('<tr><td colspan=%d></td></tr>',cc2))
return a[1]
agg(ss,ss2,'Iscritti</td>',vrg(el,el),'</tr>')
else
agg(ss,ss2,'&#x21b3; Votanti <small>(% su iscritti)</small></td>',vrg(vt,el),'</tr>')
return '<sup>'..a[1]..'</sup>⁄<sub>'..a[2]..'</sub>'
if (e == 1) then
agg(ss,ss2,'&emsp;&#x21b3; Voti validi <small>(% su votanti)</small></td>',vrg(tt,vt),'</tr>')
agg(ss,ss2,'&emsp;&#x21b3; Voti non validi <small>(% su votanti)</small></td>',vrg(vt-tt,vt),'</tr>')
end
agg(ss,ss2,'&#x21b3; Astenuti <small>(% su iscritti)</small></td>',vrg(el-vt,el),'</tr>')
end
return table.concat(ss)
end
 
local function sfondop._main(aargs)
local tuni = a:sub(6){}
local cr,cg,cbn = 1
local valore = false
if (t:len() == 6) then
local note = false
cr = tonumber(t:sub(1,2),16) or 255
while (args['nome'..n]) do
cg = tonumber(t:sub(3,4),16) or 255
uni[n] = {
cb = tonumber(t:sub(5,6),16) or 255
nome = args['nome'..n],
elseif (t:len() == 3) then
valore = args['valore'..n] or -1,
cr = 17*(tonumber(t:sub(1,1),16) or 15)
unita = args['unit'..n] or '',
cg = 17*(tonumber(t:sub(2,2),16) or 15)
cb nota = 17*(tonumber(t:sub(3,3),16)args['nota'..n] or 15)'',
numero = { tonumber(args['num'..n]) or 0, tonumber(args['den'..n]) or 1},
else
num = {1,1}
return '#F2F2F2'
}
if (uni[n].nota ~= '') then note = true end
if (uni[n].valore ~= -1) then valore = true end
uni[n].numero = semplifica(uni[n].numero)
n = n+1
end
n = n-1
local bTabella = mw.html.create('table')
:addClass('wikitable'):css({['text-align']='center'})
local bRiga = mw.html.create('tr')
bRiga:node(mw.html.create('th'):attr({['colspan']=n}):wikitext('Nome'))
if (valore == true) then
bRiga:node(mw.html.create('th'):attr({['colspan']=2}):wikitext('Valore'))
end
if (note == true) then
return string.format('rgba(%d,%d,%d,0.15)',cr,cg,cb)
bRiga:node(mw.html.create('th'):wikitext('Note'))
end
end
 
bTabella:node(bRiga)
function p.colorato(a,frame)
for i, v in pairs(uni) do
return colore({estrai(a),'#EEE'})
local bRiga = mw.html.create('tr')
end
for j=1,i-1 do
 
uni[j].num = moltiplica(uni[j].num,v.numero)
function p.unico(frame)
bRiga:node(mw.html.create('td'):css('background','#eee'):wikitext(mostra(uni[j].num)))
local args = getArgs(frame, { valueFunc = ff })
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 edata = ''
if (args['data']) then edata = string.format(edate,args['data']) end
local edata2 = ''
if (args['data2']) then edata2 = string.format(edate,args['data2']) end
local ball = tonumber(args['ball1'] or 0)
local titolo = args['titolo'] or ''
local allinea = args['allinea'] or ''
local solovotanti = args['solovotanti'] and 0 or 1
local err = '-'
local ss = {}
local num = 1
local tot,tot2 = 0,0
local dati = {}
 
while (args['cand'..num]) do
if (args['voti'..num]) then
dati[num] = {
n = args['cand'..num], v = tonumber(args['voti'..num]), b = tonumber(args['ball'..num] or -1),
p = args['part'..num] or '—', c = colora(args['part'..num] or '',args['col'..num])
}
tot = tot+dati[num].v
if (dati[num].b > -1) then tot2 = tot2 + dati[num].b end
else
err = ' - non indicato il numero di voti per il candidato '..num
end
bRiga:node(mw.html.create('td'):attr({['colspan']=n-i+1,['align']='left'}):wikitext(v.nome))
num = num+1
if (valore == true) then
end
if (v.valore == -1) then
num = num-1
bRiga:node(mw.html.create('td'):attr({['colspan']=2}))
 
err = verifica(err,elettori,votanti,tot,ball,elettori2,votanti2,tot2)
if (err == '-') then
if (flex[allinea]) then agg(ss,flex[allinea][1]) end
agg(ss,'<table class="wikitable" style="text-align:right;margin:10px ',flex[allinea] and flex[allinea][3] or '0','"><caption>',titolo,'</caption><tr><th rowspan=2 colspan=2>Partito</th><th rowspan=2>Candidato</th><th colspan=2>')
if (ball>0) then agg(ss,'Primo turno',edata,'</th><th colspan=2>Ballottaggio',edata2) else agg(ss,'Risultati',edata) end
agg(ss,'</th></tr><tr>',tcella,((ball>0) and tcella or ''),'</tr>')
 
for i=1,num do
if (i==1) then
agg(ss,string.format('<tr style="font-weight:bold;background:%s">',sfondo(dati[i].c)))
else
bRiga:node(mw.html.create('td'):wikitext(v.valore))
agg(ss,'<tr>')
bRiga:node(mw.html.create('td'):wikitext(v.unita))
end
agg(ss,string.format('<td style="width:0;background:%s"></td><td align=left>%s</td><td align=left>%s</td>', dati[i].c, dati[i].p, dati[i].n))
agg(ss,vrg(dati[i].v,tot))
if (dati[i].b>-1) then agg(ss,vrg(dati[i].b,tot2)) end
agg(ss,'</tr>')
end
if (note == true) then
agg(ss,fine(elettori,votanti,tot,ball,elettori2,votanti2,tot2,3,5,solovotanti))
if (args['v.nota == '']) then
bRiga:node(mw.html.create('td'):wikitext(''))
agg(ss,string.format('<tr><td colspan=%d></td></tr>', (ball>0 and 7 or 5)))
agg(ss,string.format('<tr><td style="width:0;background:%s"></td>', dati[1].c))
agg(ss,string.format('<td align=left colspan=%d style="font-size:90%%">%s</td></tr>',(ball>0 and 6 or 4),args['nota']))
elseif (args['part0'] and not (dati[1].p == '—')) then
agg(ss,string.format('<tr><td colspan=%d></td></tr>', (ball>0 and 7 or 5)))
agg(ss,string.format('<tr><td style="width:0;background:%s"></td><td align=left colspan=%d style="font-size:90%%"><b>Esito:</b> ', dati[1].c,(ball>0 and 6 or 4)))
if (estrai(dati[1].p) == estrai(args['part0'])) then
agg(ss,string.format('collegio confermato a %s</b>', dati[1].p))
elseif (args['part0'] == 'n') then
agg(ss,string.format('collegio a %s (nuovo collegio)',dati[1].p))
else
bRiga:node(mw.html.create('td'):attr({['align']='left'}):wikitext('<small>'..v.nota..'</small>'))
agg(ss,string.format('collegio passa da %s a %s',args['part0'],dati[1].p))
end
agg(ss,'</td></tr>')
end
bTabella:node(bRiga)
agg(ss,'</table>')
if (flex[allinea]) then agg(ss,flex[allinea][2]) end
return table.concat(ss)
else
return '<p style="color:red"><b>Errore nel template:</b> '..err..'</p>'
end
return tostring(bTabella)
end
 
function p.polimain(frame)
local args = getArgs(frame, {
valueFunc = fffunction (key, }value)
if type(key) == "number" then
local elettori = tonumber(args['elettori'] or 0)
if value == nil then
local elettori2 = tonumber(args['elettori2'] or elettori)
return nil
local votanti = tonumber(args['votanti'] or 0)
else
local votanti2 = tonumber(args['votanti2'] or 0)
value = mw.text.trim(value)
local edata = ''
end
if (args['data']) then edata = string.format(edate,args['data']) end
local edata2 = ''
if (args['data2']) then edata2 = string.format(edate,args['data2']) end
local eletti = tonumber(args['eletti'] or 0)
local ball = tonumber(args['ball1'] or 0)
local titolo = args['titolo'] or ''
local allinea = args['allinea'] or ''
local err = '-'
local ss = {}
local num = 1
local dati = {}
 
while (args['cand'..num]) do
if (args['voti'..num]) then
dati[num] = {
n = args['cand'..num], v = tonumber(args['voti'..num]), b = tonumber(args['ball'..num] or -1),
p = args['part'..num] or '—', c = colora(args['part'..num] or '',args['col'..num])
}
else
err = ' - non indicato il numero di voti per il candidato '..num
end
num = num+1
end
num = num-1
 
err = verifica(err,elettori,votanti,votanti,ball,elettori2,votanti2,votanti2)
if (eletti == 0) then err = err..' - non indicati eletti della votazione' end
if (err == '-') then
if (flex[allinea]) then agg(ss,flex[allinea][1]) end
agg(ss,'<table class="wikitable" style="text-align:right;margin:10px ',flex[allinea] and flex[allinea][3] or '0','"><caption>',titolo,'</caption><tr><th rowspan=2 colspan=2>Partito</th><th rowspan=2>Candidato</th><th colspan=2>')
if (ball>0) then agg(ss,'Primo turno',edata,'</th><th colspan=2>Ballottaggio',edata2) else agg(ss,'Risultati',edata) end
agg(ss,'</th></tr><tr>',tcella,((ball>0) and tcella or ''),'</tr>')
 
for i=1,num do
if (i<=eletti) then
agg(ss,string.format('<tr style="font-weight:bold;background:%s">',sfondo(dati[i].c)))
else
if value == '' then return nil end
agg(ss,'<tr>')
end
end
return value
agg(ss,string.format('<td style="width:0;background:%s"></td><td align=left>%s</td><td align=left>%s</td>', dati[i].c, dati[i].p, dati[i].n))
agg(ss,vrg(dati[i].v,votanti))
if (dati[i].b>-1) then agg(ss,vrg(dati[i].b,votanti2)) end
agg(ss,'</tr>')
end
})
agg(ss,fine(elettori,votanti,1,ball,elettori2,votanti2,1,3,5,0))
if return p._main(args['nota']) then
agg(ss,string.format('<td align=left colspan=%d></td></tr>',(ball>0 and 7 or 5)))
agg(ss,string.format('<td align=left colspan=%d style="font-size:90%%">%s</td></tr>',(ball>0 and 7 or 5),args['nota']))
end
agg(ss,'</table>')
if (flex[allinea]) then agg(ss,flex[allinea][2]) end
return table.concat(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 = ff })
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 edata = ''
if (args['data']) then edata = string.format(edate,args['data']) end
local edata2 = ''
if (args['data2']) then edata2 = string.format(edate,args['data2']) end
local ball = tonumber(args['ball1'] or 0)
local titolo = args['titolo'] or ''
local allinea = args['allinea'] or ''
local solovotanti = args['solovotanti'] and 0 or 1
local err = '-'
local ss = {}
local num = 1
local tot,tot2 = 0,0
local dati = {}
 
while (args['part'..num]) do
if (args['voti'..num]) then
dati[num] = {
p = args['part'..num], v = tonumber(args['voti'..num]), b = tonumber(args['ball'..num] or -1),
c = colora(args['part'..num] or '',args['col'..num]), s = args['seggi'..num] or '', sv = args['seggiv'..num] or '<small>n.d.</small>'
}
tot = tot+dati[num].v
if (dati[num].b > -1) then tot2 = tot2 + dati[num].b end
else
err = ' - non indicato il numero di voti per il partito '..num
end
num = num+1
end
num = num-1
 
err = verifica(err,elettori,votanti,tot,ball,elettori2,votanti2,tot2)
if (err == '-') then
if (flex[allinea]) then agg(ss,flex[allinea][1]) end
agg(ss,'<table cellpadding=0 cellspacing=0 style="margin:10px ',flex[allinea] and flex[allinea][3] or '0','"><caption><b>',titolo,'</b><tr style="vertical-align:top"><td>')
agg(ss,'<table class="wikitable" style="text-align:right"><tr><th rowspan=2 colspan=2>Partito</th><th colspan=2>')
if (ball>0) then agg(ss,'Primo turno',edata,'</th><th colspan=2>Ballottaggio',edata2) else agg(ss,'Risultati',edata) end
agg(ss,'</th><th colspan=2>Seggi')
agg(ss,'</th></tr><tr>',tcella,((ball>0) and tcella or ''),'<th>Num</th><th>±</th></tr>')
 
for i=1,num do
agg(ss,string.format('<tr><td style="width:0;background:%s"></td><td align=left>%s</td>', dati[i].c, dati[i].p))
agg(ss,vrg(dati[i].v,tot))
if (ball>0) then
if (dati[i].b>-1) then agg(ss,vrg(dati[i].b,tot2)) else agg(ss,'<td></td><td></td>') end
end
agg(ss,string.format('<td>%s</td><td>%s</td></tr>',dati[i].s,dati[i].sv))
end
agg(ss,fine(elettori,votanti,tot,ball,elettori2,votanti2,tot2,2,6,solovotanti))
if (args['nota']) then
agg(ss,string.format('<td align=left colspan=%d></td></tr>',(ball>0 and 8 or 6)))
agg(ss,string.format('<td align=left colspan=%d style="font-size:90%%">%s</td></tr>',(ball>0 and 8 or 6),args['nota']))
end
agg(ss,'</table>')
agg(ss,'</td><td width="12px"></td><td><table class="wikitable"><tr><th colspan=2>Eletti</th></tr>')
num = 1
while (args['el'..num]) do
agg(ss,string.format('<tr><td style="background:%s"> </td><td>%s</td></tr>',dati[tonumber(args['part el'..num])].c, args['el'..num]))
num = num+1
end
agg(ss,'</table></td></tr></table>')
if (flex[allinea]) then agg(ss,flex[allinea][2]) end
return table.concat(ss)
else
return '<p style="color:red"><b>Errore nel template:</b> '..err..'</p>'
end
end