Módulo:ICP
Esta documentación está transcluida desde Módulo:ICP/doc.
Los editores pueden experimentar en la zona de pruebas de este módulo.
Por favor, añade las categorías e interwikis a la subpágina de documentación. Subpáginas de este módulo.
Los editores pueden experimentar en la zona de pruebas de este módulo.
Por favor, añade las categorías e interwikis a la subpágina de documentación. Subpáginas de este módulo.
local p = {}
local altparams= {['c-an']='capítulo-ancho',
['c-al']='capítulo-alineación',
['c-val']='capítulo-valineación',
['e-an']='entrada-ancho',
['e-al']='entrada-alineación',
['e-val']='entrada-valineación',
['e-des']='entrada-desplazamiento',
['es-an']='espacio-ancho',
['n-an']='espacio-ancho',
['n-al']='número-alineación',
['n-val']='número-valineación',
['t-an']='tercer-ancho',
['t-al']='tercer-alineación',
['t-val']='tercer-valineación',
['an']='width',
['ancho']='width',
}
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']=(argus['width'] or '100%'), ['margin-left']='auto', ['margin-right']='auto',['font-size']=(argus['tamaño'] or '100%')})
if argus['estilo'] then --estilo personalizado, al final para poder sobreescribir todo
tab:cssText(argus['estilo'])
end
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)
end
elseif unirow then
celdasEnFila[tonumber(unirow)] = tonumber(v)
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 '90%')..
'; text-align:'..(argus['entrada-alineación'] or 'left')..'; text-indent:-'..(argus['sangría'] or '1.0em')..
'; margin-left:'..(argus['sangría'] or '1.0em')..';vertical-align:'..(argus['entrada-valineación'] or 'bottom')..';">'..
'<div style="display:inline; position:relative; left:'..(argus['entrada-desplazamiento'] or '0')..';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:'..(argus['entrada-desplazamiento'] or '0')..'; 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;background:'..(argus['fondo'] or 'white')..';>'.. (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
celdasEnFila['G'] = filasglobal
local maxrow = 1
for k,v in pairs(celdasEnFila) do
if v > maxrow then maxrow = v end
end
while cellcount >0 do
celdasactual = celdasEnFila[filaactual] or filasglobal
local primerovacia=maxrow-celdasactual+1
local row=tab:tag('tr')
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')
primerovacia=maxrow-1
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', ['vertical-align']=argus['capítulo-valineación'] or 'middle'})
:wikitext(argus[arguactual])
elseif a==2 then
row:tag('td'):attr('colspan',primerovacia)
:wikitext(entradastd..argus[arguactual]..entradastd2)
elseif a==3 then
row:tag('td'):css({['text-align']=argus['número-alineación'] or 'right', ['vertical-align']=argus['número-valineación'] or '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']=argus['número-valineación'] or '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])
---- formato para 4 celdas por fila
elseif celdasactual == 4 then
if a==1 and argus[arguactual] =='' then
--row:tag('td'):css('padding','0')
primerovacia=maxrow-1
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', ['vertical-align']=argus['capítulo-valineación'] or 'middle'})
:wikitext(argus[arguactual])
elseif a==2 then
row:tag('td'):attr('colspan',primerovacia)
:wikitext(entradastd..argus[arguactual]..entradastd2)
elseif a==3 then
row:tag('td'):wikitext(argus[arguactual]):css({['width']=argus['tercer-ancho'] or '15%', ['text-align']=argus['tercer-alineación'] or 'right',['vertical-align']=argus['tercer-valineación'] or 'middle'})
elseif a==4 then
row:tag('td'):css({['text-align']=argus['número-alineación'] or 'right', ['vertical-align']=argus['número-valineación'] or 'bottom',
['padding']='0.0em 0.0em 0.0em 0.5em', ['width']=argus['espacio-ancho'] or '2.0em'})
:wikitext(argus[arguactual])
end
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