Documentación del módulo


Uso

Usado por {{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.

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