Modulo:Discendenza/sandbox: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Messbot (discussione | contributi)
Nessun oggetto della modifica
Riga 1:
require('Module:No globals')
local getArgs = require('Module:Arguments').getArgs
local errorCategory = '[[Categoria:Errori di compilazione del template Discendenza]]'
 
local p = {}
Line 6 ⟶ 7:
local tabella = {}
local txt = {}
 
local function errhandler(msg)
local cat = mw.title.getCurrentTitle().namespace == 0 and errorCategory or ''
return string.format('<span class="error">%s</span>%s', msg, cat)
end
 
local function agg(t)
Line 15 ⟶ 21:
local resto = 0
local nx,px
-- conta elementi
local err = '-'
 
while (dati[n]) do n = n+1 end
n = n-1
-- crea pers dai dati
 
for m=4,n,4 do
nx = tonumber(dati[m-3])
Line 26 ⟶ 31:
if (px) then
if (pers[nx]) then
err = error(string.format('inseritoInserito id = <b>%d</b> per più elementi',nx))
else
pers[nx] = { padre = px, testo = dati[m-1], nota = dati[m], id = -1, x = -1, y = -1, sp = 0, figli = {} }
end
else
err = error(string.format('inseritoInserito id genitore = <b>%s</b> non numerico (id = <b>%d</b>)',dati[m-2],nx))
end
else
err = error(string.format('inseritoInserito id = <b>%s</b> non numerico',dati[m-3]))
end
resto = n-m
end
if (err == '-' and resto > 0) then
err = error(string.format('numeroNumero di dati %d non valido (elementi in più: %d)',n,resto))
end
return err
end
 
Line 194 ⟶ 198:
end
 
local function mostramostraX(pid,allinea,largo,dida)
local xy = massimoXY(pid, {0, 0})
local p1, p2, p3
Line 201 ⟶ 205:
local xx, xp
if (allinea == 'destra') then
agg(string.format('<div class="floatright" style="width:'..largo..'px%dpx;padding:3px;background:#fff;border:1px solid #c8ccd1">', largo))
agg('<table cellpadding="1" cellspacing="0" border=0 style="border-collapse:separate;text-align:center;font-size:95%;line-height:110%;margin:0px auto">')
else
agg('<div align="center"><table cellpadding="1" cellspacing="0" border=0 style="border-collapse:separate;text-align:center;font-size:95%;line-height:110%;margin:10px auto">')
end
local lg = math.floor(100/(xy[1]+2))
Line 256 ⟶ 261:
 
agg('</table>')
if (allinea == 'destra') then agg('</div>') else agg('</div>') end
if not (dida=='') then agg('<p style="font-size:87%;font-style:normal;border-top:1px solid #c8ccd1;margin:8px 2px 3px">'..dida..'</p>') end
agg('</div>')
end
 
return table.concat(txt)
end
 
local function calcolaY(pid, t)
if (pers[pid].y > t) then t = pers[pid].y end
for _, v in pairs(pers[pid].figli) do
t = calcolaY(v,t)
pers[pid].sp = pers[pid].sp + 1 + pers[v].sp
end
return t
end
 
local function mostraY2(pid, a)
if (pers[pid].id > 1) then agg('<tr>') end
if (pers[pid].padre > -1) then
agg('<td style="width:6px"></td><td style="border-left:1px solid #666;border-bottom:1px solid #666;width:10px;line-height:3px;height:12px">&nbsp;</td>')
agg(string.format('<td colspan=%d rowspan=2 style="padding: 0px 3px 2px 1px">%s',2*a-1,pers[pid].testo))
if not (pers[pid].nota == '') then agg(string.format(' - %s',pers[pid].nota)) end
agg('</td></tr>')
agg('<tr><td></td><td style="line-height:8px;line-height:3px;height:12px')
if (pers[pid].id < #pers[pers[pid].padre].figli) then
agg(';border-left:1px solid #666')
end
agg('">&nbsp;</td></tr>')
if (pers[pid].sp > 0) then
agg(string.format('<tr><td rowspan=%d></td><td rowspan=%d',2*pers[pid].sp,2*pers[pid].sp))
if (pers[pid].id < #pers[pers[pid].padre].figli) then
agg(' style="border-left:1px solid #666"')
end
agg('>&nbsp;</td>')
end
else
agg(string.format('<td colspan=%d style="padding: 0px 0px 2px 2px">%s',2*a-1,pers[pid].testo))
if not (pers[pid].nota == '') then agg(string.format(' - %s',pers[pid].nota)) end
agg('</td></tr><tr>')
end
if (pers[pid].sp > 0) then
-- agg(string.format('<td rowspan=%d style="width:6px">&nbsp;</td>',2*pers[pid].sp))
for _, v in pairs(pers[pid].figli) do
mostraY2(v,a-1)
end
end
end
 
local function mostraY(pid)
agg('<table cellpadding="0" cellspacing="0" border=0 style="text-align:left;margin:10px 0 10px 16px"><tr>')
mostraY2(pid,calcolaY(pid,0))
agg('</tr></table>')
return table.concat(txt)
end
 
function p.main_discendenza(frameargs)
local capo = -1
local n1, n2
local errlato = args['-allinea'] or 'centro'
local larg = args['larghezza'] or '300'
local tipo = args['tipo'] or 'o'
local dida = args['didascalia'] or ''
dividi(args)
n1 = 0
for i, v in pairs(pers) do
n1 = n1+1
if (v.padre == -1) then
if (capo == -1) then
capo = i
else
error(string.format('Inseriti più elementi come capostipite (id = <b>%d, %d</b>)',capo,i))
end
else
if (v.padre == i) then
error(string.format('Inserito elemento come figlio di se stesso (id = <b>%d</b>)', i))
elseif (pers[v.padre]) then
table.insert(pers[v.padre].figli,i)
else
error(string.format('Inserito id genitore = <b>%d</b> non valido (id = <b>%d</b>)',v.padre,i))
end
end
end
 
if (capo == -1) then
error('Capostipite non definito')
else
n2 = organizza(capo, 1)
if (n1 == n2) then
if (tipo == 'v') then
return mostraY(capo)
elseif (tipo == 'o') then
calcolaX1(capo)
calcolaX2(capo)
calcolaX3(capo, 0)
return mostraX(capo, lato, larg, dida)
end
else
error('Inseriti elementi non collegati al capostipite')
end
end
end
 
function p.discendenza(frame)
local args = getArgs(frame, {
valueFunc = function (key, value)
Line 279 ⟶ 379:
end
})
return p._discendenza(args)
local lato = args['allinea'] or 'centro'
local larg = args['larghezza'] or '300'
err = dividi(args)
if (err == '-') then
n1 = 0
for i, v in pairs(pers) do
n1 = n1+1
if (v.padre == -1) then
if (capo == -1) then
capo = i
else
err = string.format('inseriti più elementi come capostipite (id = <b>%d, %d</b>)',capo,i)
end
else
if (v.padre == i) then
err = string.format('inserito elemento come figlio di se stesso (id = <b>%d</b>)', i)
elseif (pers[v.padre]) then
table.insert(pers[v.padre].figli,i)
else
err = string.format('inserito id genitore = <b>%d</b> non valido (id = <b>%d</b>)',v.padre,i)
end
end
end
 
if (err == '-') then
if (capo == -1) then
err = 'capostipite non definito'
else
n2 = organizza(capo, 1)
if (n1 == n2) then
calcolaX1(capo)
calcolaX2(capo)
calcolaX3(capo, 0)
else
err = 'inseriti elementi non sono collegati al capostipite'
end
end
end
end
if (err == '-') then
return mostra(capo, lato, larg)
else
return string.format('<p style="color:#b80000"><b>Template:Discendenza - Errore:</b> %s</p>[[Categoria:Errori di compilazione del template Discendenza]]',err)
end
end