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 entradadiv(text, argus)
local entrada = mw.html.create() -- cuerpo principal de la plantilla
-- icp1 = div principal
local icp1 = entrada:tag('div')
:addClass('icp1')
:css({['width']=argus['entrada-ancho'],
['text-align']=argus['entrada-alineación'],
['padding-left']=argus['sangría'],
['text-indent']=(argus['sangría'] and '-'..argus['sangría']),
})
-- icpito = pequeño div que oculta el inicio de los "puntos"
local icpito = icp1:tag('span')
:addClass('icpito')
:css({['width']=argus['sangría'],
['background']=argus['fondo'],
})
:wikitext(' ')
-- icp2 = span que contiene el texto de la entrada
local icp2 = icp1:tag('span')
:addClass('icp2')
:css({['background']=argus['fondo']})
:wikitext(text)
-- icp3 = los "puntos"
local icp3 = icp1:tag('span')
:addClass('icp3 ws-noexport')
:css({['letter-spacing']= argus['espacio']})
:wikitext(string.rep((argus['símbolo'] or '.'),
(argus['reps'] or 200)))
-- icp4 = entrada-final
local icp4 = icp1:tag('span')
:addClass('icp4')
:css({['background']=argus['fondo'],
['padding-left']=argus['sangría'],
})
:wikitext(argus['entrada-final'] or ' ')
return tostring(entrada)
end
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
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
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
-- construir filas
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(entradadiv(argus[arguactual], argus))
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-left']=argus['margen'] or '1em', ['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(entradadiv(argus[arguactual], argus))
else
row:tag('td'):css({['text-align']=argus['número-alineación'] or 'right',
['vertical-align']=argus['número-valineación'] or 'bottom',
['padding-left']=argus['margen'] or '1em',
['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(entradadiv(argus[arguactual], argus))
elseif a==3 then
row:tag('td'):wikitext(argus[arguactual]):css({['width']=argus['tercer-ancho'] or '15%', ['padding-left']=argus['margen'] or '1em', ['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-left']=argus['margen'] or '1em', ['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>]]
if argus.autolinks then
return require('Módulo:Autolinks')._autolink{tostring(html), argus.autolinks}
end
return tostring(html)
end
return p