Módulo:ICP
[ máis información | ver o historial | | | ver as instrucións ]
Aínda non se redactaron as instrucións sobre como usar este módulo.
[ máis información | ver o historial | | | ver as instrucións ]
Os editores poden probar cambios no mesmo en Módulo:ICP/probas.
Por favor, engade as categorías na subpáxina de documentación e os interwikis no Wikidata. Ver as subpáxinas deste módulo.
Por favor, engade as categorías na subpáxina de documentación e os interwikis no Wikidata. Ver as subpáxinas deste módulo.
local p = {}
local altparams= {['c-an']='capítulo-ancho',
['c-al']='capítulo-alineación',
['e-an']='entrada-ancho',
['e-al']='entrada-alineación',
['es-an']='espacio-ancho',
['n-al']='número-alineación',
}
local maxrow = 0
function p.ICP( frame ) -- función principal para llamar desde {{ICP}}
local argus = (frame.args[1] ~= nil) and frame.args or frame:getParent().args
for k,v in pairs(altparams) do --parámetros con nobmres alternativos.
if argus[k] and not argus[v] then
argus[v] = argus[k]
end
end
local html = mw.html.create() -- cuerpo principal de la plantilla
local tab = html:tag(argus['tag'] or 'table')
:addClass('ws-summary')
:css({['border-collapse']='collapse', ['border-spacing']='0', ['empty-cells']='hide', ['width']='100%' })
local celdasEnFila={}
local cellcount = 0
for k, v in pairs( argus ) do
mw.log(k,v)
if type(k) == 'number' then
if cellcount < k then --contar parámetros sin nombre
cellcount = k
end
elseif type(k) == 'string' then
local rnglow
local rnghigh
rnglow, rnghigh = k:match( '^%s*nfila(%d+)a(%d+)%s*$' )
unirow = k:match( '^%s*nfila(%d+)%s*$' )
if rnglow and rnghigh then -- si los dos son válidos
mw.log('low',rnglow)
mw.log('high',rnghigh)
if tonumber(rnglow) > tonumber(rnghigh) then -- si el orden está mal, invertir
rnglow, rnghigh = rnghigh, rnglow
end
for rrow = rnglow, rnghigh, 1 do
celdasEnFila[rrow] = celdasEnFila[rrow] or tonumber(v)
if tonumber(v) > maxrow then maxrow = tonumber(v) end --lleva la cuenta de la fila con mayor número de celdas
end
elseif unirow then
celdasEnFila[tonumber(unirow)] = tonumber(v)
if tonumber(v) > maxrow then maxrow = tonumber(v) end --lleva la cuenta de la fila con mayor número de celdas
end
end
end
mw.log('cellcount',cellcount)
-- construir filas
--HTML masivos que no sé cómo simplificar. Por el momento acá escondidos
local entradastd='<div style="position:relative; width:100%;"><div style="max-width:'..(argus['entrada-ancho'] or '80%')..'; text-align:'..(argus['entrada-alineación'] or 'left')..'; text-indent:-'..(argus['sangría'] or '1.0em')..'; margin-left:'..(argus['sangría'] or '1.0em')..';">'..
'<div style="display:inline; position:relative; text-align:left; padding:0.0em 0.5em 0.0em 0.0em; background:'..(argus['fondo'] or 'white')..'; z-index:2;">'
local entradastd2='</div></div>'..'<div style="position:absolute; left:0px; bottom:0px; width:'..(argus['sangría'] or '1.0em')..' height:0.75em; background:'..(argus['fondo'] or 'white')..'; z-index:1;"></div>'..
'<div style="position:absolute; right:0px; bottom:0px; width:100%; overflow:hidden; white-space:nowrap; text-align:right; z-index:0;"><div style="float:right;"><span style="float:left;letter-spacing:' .. (argus['espacio'] or '4px') ..
';">' .. string.rep((argus['símbolo'] or '.'),(argus['reps'] or 384)) ..'</span><span style="position:absolute;right:0>'.. (argus['entrada-final'] or ' ').. '</span></div></div></div>'
local arguactual=1
local filaactual=1
local filasglobal=tonumber(argus['n']) or 3
local celdasactual = celdasEnFila[1] or filasglobal
mw.log('maxrow',maxrow)
while cellcount >0 do
celdasactual = celdasEnFila[filaactual] or filasglobal
local row=tab:tag('tr')
if celdasactual > maxrow then maxrow = celdasactual end -- por defecto 3,
for a = 1, celdasactual, 1 do
if argus[arguactual] then
---- formato para 3 celdas por fila
if celdasactual==3 then
if a==1 and argus[arguactual] =='' then
row:tag('td'):css('padding','0')
elseif a==1 then
row:tag('td'):css({['width']=argus['capítulo-ancho']or '2.5em', ['max-width']=argus['capítulo-ancho'] or '2.5em', ['padding']='0.0em 0.5em 0.0em 0.0em', ['text-align']=argus['capítulo-alineación'] or 'right'})
:wikitext(argus[arguactual])
elseif a==2 then
row:tag('td'):wikitext(entradastd..argus[arguactual]..entradastd2)
elseif a==3 then
row:tag('td'):css({['text-align']=argus['número-alineación'] or 'right', ['vertical-align']='bottom',['padding']='0.0em 0.0em 0.0em 0.5em', ['width']=argus['espacio-ancho'] or '2.0em'})
:wikitext(argus[arguactual])
end
---- formato para 2 celdas por fila
elseif celdasactual == 2 then
if a==1 then
if maxrow > 2 then row:tag('td') end
row:tag('td'):wikitext(entradastd..argus[arguactual]..entradastd2)
else
row:tag('td'):css({['text-align']=argus['número-alineación'] or 'right', ['vertical-align']='bottom',['padding']='0.0em 0.0em 0.0em 0.5em', ['width']=argus['espacio-ancho'] or '2.0em'})
:wikitext(argus[arguactual])
end
---- formato para 1 celda por fila
elseif celdasactual == 1 then
row:tag('td'):attr('colspan',maxrow):wikitext(argus[arguactual])
elseif argus[arguactual] ~='' then
row:tag('td'):wikitext(argus[arguactual])
end
end
arguactual = arguactual + 1
cellcount = cellcount - 1
end
filaactual = filaactual + 1
end
--[['<span style="float:left;letter-spacing:' .. (args['leaderspacing'] or '4px') .. ';">' ..
string.rep((args['leadersym'] or '.'),(args['leaderrepeat'] or 384)) ..
'</span>]]
return tostring(html)
end
return p