Diferencia entre revisiones de «Módulo:Centrar»
Sin resumen de edición |
versión funcionalmente idéntica pero casi la mitad de grande, código más limpio // avisar cualquier catástrofe por favor Etiqueta: Revertido |
||
Línea 1: | Línea 1: | ||
-- módulo para plantillas de formato |
-- módulo para plantillas de formato |
||
local p = {} |
local p = {} |
||
local make_style_string = require('Module:Optional style').make_style_string |
|||
local tamFuente = { --tamaños de letra segun nombre de las plantillas |
local tamFuente = { --tamaños de letra segun nombre de las plantillas |
||
['xx-menor']="58%" , |
['xx-menor']="58%" , |
||
Línea 61: | Línea 63: | ||
['ancho']=1,['estilo']=1,['color']=1,['fondo']=1,['plantilla']=1,['colgante']=1,['bloque']=1, ['clase']=1} |
['ancho']=1,['estilo']=1,['color']=1,['fondo']=1,['plantilla']=1,['colgante']=1,['bloque']=1, ['clase']=1} |
||
function argus_estilo(argus) |
|||
function p.centrar( frame ) -- función principal para llamar desde {{centrar}} |
|||
-- Función que procesa la lista de parámetros (argus) y |
|||
local argus = {} |
|||
-- regresa una table con todos los estilos CSS |
|||
for k,v in pairs(frame.args) do |
|||
argus[k] = v |
|||
end |
|||
for k,v in pairs(frame:getParent().args) do -- crea una tabla con los parámetros incluídos en la plantilla, y elimina parámetros vacíos |
|||
argus[k] = v |
|||
end |
|||
local css = {} |
|||
for k,v in pairs(altparams) do --parámetros con nobmres alternativos. |
|||
local clases = {} |
|||
if argus[k] and not argus[v] then |
|||
argus[v] = argus[k] |
|||
css['text-align'] = argus.alinear |
|||
end |
|||
css['width'] = argus.ancho |
|||
end |
|||
css['float'] = argus.float |
|||
local html = mw.html.create() -- cuerpo principal de la plantilla |
|||
local div = html:tag(argus['tag'] or 'div') |
|||
-- sección de parámetros |
|||
div:css('text-align', argus['alinear']) |
|||
---- tamaño |
|||
if argus['ancho'] then |
|||
if argus.fs and tamFuente[argus.fs]~=nil then |
|||
div:css('width', argus['ancho']) |
|||
css['font-size'] = tamFuente[argus.fs] -- tamaños usando el nombre de las plantillas de tamaño de fuente |
|||
end |
|||
elseif argus.fs then |
|||
css['font-size'] = argus.fs -- tamaño personalizado |
|||
div:css('float', argus['float']) |
|||
end |
end |
||
if argus.lh then |
|||
-- sección de parámetros |
|||
css['line-height'] = argus.lh |
|||
div:css('font-size',tamFuente[argus['fs']]) --tamaños usando el nombre de las plantillas de tamaño de fuente |
|||
elseif argus['fs'] then |
|||
div:css('font-size',argus['fs']) -- tamaño personalizado |
|||
end |
end |
||
if argus |
if argus.sp then |
||
css['letter-spacing'] = argus.sp |
|||
end |
end |
||
if argus['sp'] then |
|||
div:css('letter-spacing',argus['sp']) |
|||
end |
|||
if argus['color'] then |
|||
if mw.ustring.sub( argus['color'], 0, 1 ) == '#' then |
|||
color = argus['color'] |
|||
else |
|||
color = frame:expandTemplate{ title = 'RGB', args = { argus['color'] } } |
|||
end |
|||
color = mw.ustring.gsub(color, '#', '#') |
|||
div:css('color',color) |
|||
end |
|||
if argus['fondo'] then |
|||
if mw.ustring.sub( argus['fondo'], 0, 1 ) == '#' then |
|||
fondo = argus['fondo'] |
|||
else |
|||
fondo = frame:expandTemplate{ title = 'RGB', args = { argus['fondo'] } } |
|||
end |
|||
fondo = mw.ustring.gsub(fondo, '#', '#') |
|||
div:css('background',fondo) |
|||
end |
|||
-- sección de opciones |
-- sección de opciones |
||
Línea 126: | Línea 93: | ||
if type(k) == 'number' and k~= 1 then |
if type(k) == 'number' and k~= 1 then |
||
if textTransform[argus[k]] ~= nil then |
if textTransform[argus[k]] ~= nil then |
||
css['text-transform'] = textTransform[argus[k]] --opciones transformación de texto |
|||
elseif fontVariant[argus[k]] ~= nil then -- opcion variante de fuente (small caps) |
elseif fontVariant[argus[k]] ~= nil then -- opcion variante de fuente (small caps) |
||
css['font-variant'] = fontVariant[argus[k]] |
|||
elseif fontFamily[argus[k]] ~= nil then -- opcion familia de fuentes |
elseif fontFamily[argus[k]] ~= nil then -- opcion familia de fuentes |
||
css['font-family'] = fontFamily[argus[k]] |
|||
elseif tamFuente[argus[k]] ~= nil then -- opciones de tamaño de fuente sin usar el parámetro fs |
elseif tamFuente[argus[k]] ~= nil then -- opciones de tamaño de fuente sin usar el parámetro fs |
||
css['font-size'] = tamFuente[argus[k]] |
|||
elseif fontWeight[argus[k]] ~= nil then -- opcion de peso de fuente (negrita) |
elseif fontWeight[argus[k]] ~= nil then -- opcion de peso de fuente (negrita) |
||
css['font-weight'] = fontWeight[argus[k]] |
|||
elseif fontStyle[argus[k]] ~= nil then -- opcion de estilo de fuente (cursiva) |
elseif fontStyle[argus[k]] ~= nil then -- opcion de estilo de fuente (cursiva) |
||
css['font-style'] = fontStyle[argus[k]] |
|||
elseif textDecoration[argus[k]] ~= nil then -- opcion de decoracion de texto (subrayado) |
elseif textDecoration[argus[k]] ~= nil then -- opcion de decoracion de texto (subrayado) |
||
css['text-decoration'] = textDecoration[argus[k]] |
|||
end |
end |
||
end |
end |
||
end |
end |
||
-- |
-- css['clear'] = 'both' — No utilidad aparente? |
||
--texto |
|||
div:wikitext(argus[1]) |
|||
--otros parámetros |
--otros parámetros |
||
if argus |
if argus.plantilla == 'derecha' then --para reutilizar código en {{derecha}} |
||
css['margin-right'] = argus.margen or argus[2] |
|||
end |
end |
||
if argus |
if argus.float == 'right' then --asimilar comportamieto de {{float right}} y {{flotador derecha}} |
||
table.insert(clases, 'ws-flotador-d') |
|||
css['margin-right'] = argus.margen or argus[2] |
|||
css['margin-top'] = argus[3] |
|||
css['margin-bottom'] = argus[3] |
|||
css['margin-left'] = argus[4] |
|||
end |
end |
||
if argus |
if argus.float == 'left' then --asimilar comportamieto de {{float left}} y {{flotador izquierda}} |
||
table.insert(clases, 'ws-flotador-i') |
|||
css['margin-top'] = argus[2] |
|||
css['margin-bottom'] = argus[2] |
|||
css['margin-right'] = argus[3] |
|||
end |
end |
||
if argus |
if argus.colgante == 's' then --asimilar comportamieto de {{sangría colgante}} |
||
table.insert(clases, 'ws-sangria-colgante') |
|||
local margen = argus.margen or argus[2] or 'NaN' |
|||
if tonumber(margen:sub(1,1)) then |
|||
css['margin-left'] = margen |
|||
css['text-indent'] = '-'..margen |
|||
end |
|||
if argus['colgante'] == 'm' then --asimilar comportamieto de {{sangría colgante/m}} |
|||
table.insert(clases,'ws-sangria-colgante-m') |
|||
local margen = argus['margen'] or argus[2] or 'NaN' |
local margen = argus['margen'] or argus[2] or 'NaN' |
||
if tonumber(margen:sub(1,1)) then |
if tonumber(margen:sub(1,1)) then |
||
css['margin-left'] = margen |
|||
div:css('text-indent', '-'..margen) |
|||
end |
end |
||
end |
end |
||
end |
|||
if argus['bloque'] == 'centro' then --asimilar comportamiento de {{bloque centro}} |
|||
if argus.bloque == 'centro' then --asimilar comportamiento de {{bloque centro}} |
|||
div:addClass('ws-bloque-centro') |
|||
table.insert(clases, 'ws-bloque-centro') |
|||
if argus['max-width'] then |
if argus['max-width'] then |
||
css['max-width'] = argus['max-width'] |
|||
end |
end |
||
elseif argus |
elseif argus.bloque == 'derecha' then --asimilar comportamiento de {{bloque derecha}} |
||
table.insert(clases, 'ws-bloque-derecha') |
|||
css['margin-right'] = argus.margen |
|||
css['text-align'] = argus.alinear |
|||
if argus['max-width'] then |
if argus['max-width'] then |
||
css['max-width'] = argus['max-width'] |
|||
end |
end |
||
html:tag('div'):css('clear','right') |
|||
elseif argus.bloque == 'izquierda' then --asimilar comportamiento de {{bloque izquierda}} |
|||
table.insert(clases, 'ws-bloque-izquierda') |
|||
elseif argus['bloque'] == 'izquierda' then --asimilar comportamiento de {{bloque izquierda}} |
|||
css['margin-left'] = argus.margen or argus[2] |
|||
div:addClass('ws-bloque-izquierda') |
|||
div:css('margin-left', argus['margen'] or argus[2]) |
|||
if argus['max-width'] then |
if argus['max-width'] then |
||
css['max-width'] = argus['max-width'] |
|||
end |
end |
||
end |
end |
||
if argus |
if argus.estilo then --estilo personalizado, al final para poder sobreescribir todo |
||
css['estilo'] = argus.estilo |
|||
end |
end |
||
return css, clases |
|||
-- anclaje |
|||
end |
|||
if argus['anclaje'] then |
|||
function color_string(frame, color) |
|||
div:attr('id', argus['anclaje']) |
|||
if mw.ustring.sub( color, 0, 1 ) == '#' then |
|||
div:addClass('anclaje') |
|||
color = color |
|||
else |
|||
color = frame:expandTemplate{ title = 'RGB', args = { color } } |
|||
end |
end |
||
color = mw.ustring.gsub(color, '#', '#') |
|||
return color |
|||
end |
|||
-- función principal para llamar desde {{centrar}} o similar |
|||
function p._centrar(frame, argus ) |
|||
local texto = argus[1] |
|||
local id = argus.anclaje or '' |
|||
local css, clases = argus_estilo(argus) |
|||
local tag = argus.tag or 'div' |
|||
-- manejo especial para el color |
|||
if argus.color then |
|||
css['color'] = color_string(frame, argus.color) |
|||
end |
|||
if argus.fondo then |
|||
css['background'] = color_string(frame, argus.fondo) |
|||
end |
|||
-- anclaje (ID) |
|||
if id ~= '' then |
|||
table.insert(clases, 'anclaje') |
|||
end |
|||
-- clases CSS adicionales |
|||
if argus.clase then |
|||
table.insert(clases, argus.clase) |
|||
end |
end |
||
-- inicio de tag |
|||
contenido = '<'..tag..' ' |
|||
-- atributos HTML |
|||
atributos = { |
|||
'id="'..id..'"', |
|||
'class="'..table.concat(clases, ' ')..'"', |
|||
make_style_string(css) |
|||
} |
|||
-- agregar atributos |
|||
contenido = contenido..table.concat(atributos, ' ')..'>' |
|||
-- agregar texto y cerrar tag si no estamos en {{plantilla/c}} |
|||
if not argus.open then |
|||
contenido = contenido..texto..'</'..tag..'>' |
|||
if argus.bloque == 'derecha' then -- fix para {{bloque derecha}} |
|||
contenido = contenido..'<br style="clear:right"/>' |
|||
end |
|||
end |
|||
-- categorías de mantenimiento |
|||
for k,v in pairs(argus) do |
for k,v in pairs(argus) do |
||
if (type(k) ~= 'number') and (params[k]==nil) and (altparams[k]==nil) then |
if (type(k) ~= 'number') and (params[k]==nil) and (altparams[k]==nil) then |
||
contenido = contenido .. '[[Categoría:Wikisource:Artículos que usan parámetros no reconocidos en el módulo Centrar]]' |
|||
end |
end |
||
end |
end |
||
return contenido |
|||
return tostring(html) |
|||
end |
end |
||
function p.open( frame ) -- función principal para llamar desde {{bloque centro/c}} y similares |
|||
local argus = {} |
|||
local clases = {} |
|||
for k,v in pairs(frame.args) do |
|||
argus[k] = v |
|||
end |
|||
for k,v in pairs(frame:getParent().args) do -- crea una tabla con los parámetros incluídos en la plantilla, y elimina parámetros vacíos |
|||
argus[k] = v |
|||
end |
|||
-- metafunciones |
|||
for k,v in pairs(altparams) do --parámetros con nobmres alternativos. |
|||
function main(frame, argus) |
|||
if argus[k] and not argus[v] then |
|||
--parámetros con nobmres alternativos |
|||
argus[v] = argus[k] |
|||
for k,v in pairs(altparams) do |
|||
end |
|||
if argus[k] and not argus[v] then |
|||
end |
|||
argus[v] = argus[k] |
|||
local div = '<'..(argus['tag'] or 'div').. ' style="' |
|||
div=div..'text-align:'..(argus['alinear'] or '')..';' |
|||
if argus['ancho'] then |
|||
div=div..'width:'..(argus['ancho'])..';' |
|||
end |
|||
if argus['float'] then |
|||
div=div..'float:'..argus['float']..';' |
|||
end |
|||
-- sección de parámetros |
|||
if argus['fs'] and tamFuente[argus['fs']]~=nil then |
|||
div=div..'font-size:'..tamFuente[argus['fs']]..';' --tamaños usando el nombre de las plantillas de tamaño de fuente |
|||
elseif argus['fs'] then |
|||
div=div..'font-size:'..argus['fs']..';' -- tamaño personalizado |
|||
end |
|||
if argus['lh'] then |
|||
div=div..'line-height:'..argus['lh']..';' |
|||
end |
|||
if argus['sp'] then |
|||
div=div..'letter-spacing:'..argus['sp']..';' |
|||
end |
|||
if argus['color'] then |
|||
if mw.ustring.sub( argus['color'], 0, 1 ) == '#' then |
|||
color = argus['color'] |
|||
else |
|||
color = frame:expandTemplate{ title = 'RGB', args = { argus['color'] } } |
|||
end |
end |
||
color = mw.ustring.gsub(color, '#', '#') |
|||
div=div..'color:'..color..';' |
|||
end |
|||
if argus['fondo'] then |
|||
if mw.ustring.sub( argus['fondo'], 0, 1 ) == '#' then |
|||
fondo = argus['fondo'] |
|||
else |
|||
fondo = frame:expandTemplate{ title = 'RGB', args = { argus['fondo'] } } |
|||
end |
|||
fondo = mw.ustring.gsub(fondo, '#', '#') |
|||
div=div..'background:'..fondo..';' |
|||
end |
|||
-- sección de opciones |
|||
for k,v in pairs(argus) do -- opciones |
|||
if type(k) == 'number' then |
|||
if textTransform[argus[k]] ~= nil then |
|||
div=div..'text-transform:'..textTransform[argus[k]]..';' --opciones transformación de texto |
|||
elseif fontVariant[argus[k]] ~= nil then -- opcion variante de fuente (small caps) |
|||
div=div..'font-variant:'..fontVariant[argus[k]]..';' |
|||
elseif fontFamily[argus[k]] ~= nil then -- opcion familia de fuentes |
|||
div=div..'font-family:'..fontFamily[argus[k]]..';' |
|||
elseif tamFuente[argus[k]] ~= nil then -- opciones de tamaño de fuente sin usar el parámetro fs |
|||
div=div..'font-size:'..tamFuente[argus[k]]..';' |
|||
elseif fontWeight[argus[k]] ~= nil then -- opcion de peso de fuente (negrita) |
|||
div=div..'font-weight:'..fontWeight[argus[k]]..';' |
|||
elseif fontStyle[argus[k]] ~= nil then -- opcion de estilo de fuente (cursiva) |
|||
div=div..'font-style:'..fontStyle[argus[k]]..';' |
|||
elseif textDecoration[argus[k]] ~= nil then -- opcion de decoracion de texto (subrayado) |
|||
div=div..'text-decoration:'..textDecoration[argus[k]]..';' |
|||
end |
|||
end |
|||
end |
end |
||
return p._centrar(frame, argus) |
|||
-- div:css('clear','both') — No utilidad aparente? |
|||
end |
|||
-- función para plantillas cerradas |
|||
--otros parámetros |
|||
function p.centrar(frame) |
|||
if argus['plantilla'] == 'derecha' then --para reutilizar código en {{derecha}} |
|||
local argus = require('Module:Arguments').getArgs(frame) |
|||
div=div..'margin-right:'..(argus['margen'] or argus[1] or '')..';' |
|||
return main(frame, argus) |
|||
end |
|||
end |
|||
if argus['float'] == 'right' then --asimilar comportamieto de {{float right}} y {{flotador derecha}} |
|||
-- función para plantillas abiertas |
|||
table.insert(clases,'ws-flotador-d') |
|||
function p.open(frame) |
|||
div=div..'margin-right:'..( argus['margen'] or argus[1] or '')..';' |
|||
local argus = require('Module:Arguments').getArgs(frame) |
|||
div=div..'margin-top:'..( argus[2] or '')..';' |
|||
table.insert(argus, 1, '') -- inserta primer parámetro vacío para asimilar |
|||
div=div..'margin-bottom:'..( argus[2] or '')..';' |
|||
argus.open = true |
|||
div=div..'margin-left:'..( argus[3] or '')..';' |
|||
return main(frame, argus) |
|||
end |
|||
if argus['float'] == 'left' then --asimilar comportamieto de {{float left}} y {{flotador izquierda}} |
|||
table.insert(clases,'ws-flotador-i') |
|||
div=div..'margin-top:'..(argus[1] or '')..';' |
|||
div=div..'margin-bottom:'..(argus[1] or '')..';' |
|||
div=div..'margin-right:'..(argus[2] or '')..';' |
|||
end |
|||
if argus['colgante'] == 's' then --asimilar comportamieto de {{sangría colgante}} |
|||
table.insert(clases,'ws-sangria-colgante') |
|||
local margen = argus['margen'] or argus[1] or 'NaN' |
|||
if tonumber(margen:sub(1,1)) then |
|||
div=div..'margin-left:'..margen..';' |
|||
div=div..'text-indent:'..'-'..margen..';' |
|||
end |
|||
end |
|||
if argus['colgante'] == 'm' then --asimilar comportamieto de {{sangría colgante/m}} |
|||
table.insert(clases,'ws-sangria-colgante-m') |
|||
local margen = argus['margen'] or argus[1] or 'NaN' |
|||
if tonumber(margen:sub(1,1)) then |
|||
div=div..'margin-left:'..margen..';' |
|||
end |
|||
end |
|||
if argus['bloque'] == 'centro' then --asimilar comportamiento de {{bloque centro}} |
|||
table.insert(clases,'ws-bloque-centro') |
|||
if argus['max-width'] then |
|||
div=div..'max-width:'..argus['max-width']..';' |
|||
end |
|||
elseif argus['bloque'] == 'derecha' then --asimilar comportamiento de {{bloque derecha}} |
|||
table.insert(clases,'ws-bloque-derecha') |
|||
if argus['margen'] then |
|||
div=div..'margin-right:'..(argus['margen'] or '')..';' |
|||
end |
|||
if argus['alinear'] then |
|||
div=div..'text-align:'..(argus['alinear'])..';' |
|||
end |
|||
if argus['max-width'] then |
|||
div=div..'max-width:'..(argus['max-width'])..';' |
|||
end |
|||
--html:tag('div'):css('clear','right') -- ATENCION!!! |
|||
elseif argus['bloque'] == 'izquierda' then --asimilar comportamiento de {{bloque izquierda}} |
|||
table.insert(clases,'ws-bloque-izquierda') |
|||
if (argus['margen'] or argus[1]) then |
|||
div=div..'margin-left:'..(argus['margen'] or argus[1])..';' |
|||
end |
|||
if argus['max-width'] then |
|||
div=div..'max-width:'..(argus['max-width'])..';' |
|||
end |
|||
end |
|||
if argus['estilo'] then --estilo personalizado, al final para poder sobreescribir todo |
|||
div=div..argus['estilo']..';' |
|||
end |
|||
div=div..'" ' |
|||
-- anclaje |
|||
if argus['anclaje'] then |
|||
div=div..'id="'..argus['anclaje']..'"' |
|||
div=div..'class="anclaje" ' |
|||
end |
|||
--clases |
|||
div=div..'class="' |
|||
for k,c in ipairs(clases) do |
|||
div = div..c..' ' |
|||
end |
|||
if argus['clase'] then |
|||
div=div..argus['clase'] |
|||
end |
|||
div=div..'"' |
|||
-- |
|||
div=div..'>' |
|||
mw.log(div) |
|||
return tostring(div) |
|||
end |
end |
||
return p |
return p |
Revisión del 05:28 27 mar 2024
Uso
En: {{centrar}}, {{derecha}}, {{Flotador izquierda}}, {{Flotador derecha}}, {{sangría colgante}}, {{bloque centro}}, {{bloque derecha}}, {{bloque izquierda}}.
También las versiones abiertas: {{sangría colgante/c}}, {{bloque centro/c}}, {{bloque derecha/c}}, {{bloque izquierda/c}}
Opciones
Las plantillas que utilizan el módulo Centrar, pueden usar como segundo, tercer, cuarto, etc. parámetro cualquiera de una serie de códigos. En la siguiente tabla se indican todos los códigos disponibles, usando por ejemplo la plantilla {{centrar}}:
código | descripción | ejemplo |
---|---|---|
sc; may | small-caps, convierte el texto a versalita. | Ejemplo de texto
|
asc | all-small-caps, convierte el texto a versalita y deja todas las letras en minúscula. | Ejemplo de texto
|
lc | lower-case, convierte el texto a minúsculas. | Ejemplo de texto
|
uc | upper-case, convierte el texto a MAYÚSCULAS. | Ejemplo de texto
|
cap | capitalize, Convierte En Mayúsculas Las Primeras Letras De Cada Palabra | Ejemplo de texto
|
bold; negrita | pone el texto en negrita | Ejemplo de texto
|
cursiva; itálica; italic | pone el texto en negrita | Ejemplo de texto
|
subrayado; underline | subraya el texto | Ejemplo de texto
|
Tamaños de la fuente del texto
código | ejemplo |
---|---|
xx-menor | Ejemplo
|
x-menor | Ejemplo
|
menor | Ejemplo
|
grande | Ejemplo
|
x-grande | Ejemplo
|
xx-grande | Ejemplo
|
xxx-grande | Ejemplo
|
xxxx-grande | Ejemplo
|
xxxxx-grande | Ejemplo
|
xxxxxx-grande | Ejemplo
|
Familia genérica de fuentes
código | ejemplo |
---|---|
monospace | Ejemplo
|
serif | Ejemplo
|
sans-serif | Ejemplo
|
cursive | Ejemplo
|
fantasy | Ejemplo
|
Parámetros opcionales
parámetro | otros nombres | descripción |
---|---|---|
tamaño | fs; font-size | establece el tamaño del texto de manera más flexible evitando utilizar los parámetros de tamaño de texto predefinidos. Funciona con parámetros en em, px y porcentaje. |
Texto Centrado
Texto Centrado
Texto Centrado
| ||
interlineado | lh; line-height | altura de la línea. Funciona con parámetros en em, px y porcentaje. |
Texto Centrado
Texto Centrado
Texto Centrado
| ||
espaciado | letter-spacing | espaciado entre letras. Funciona con parámetros en em, px; no funciona con porcentaje. |
Texto Centrado
Texto Centrado
| ||
color | - | color del texto, para los valores válidos véase w:Ayuda:Tablas#Definición de colores. Funciona con colores predefinidos así como valores hexadecimales. |
Texto Centrado
Texto Centrado
| ||
estilo | - | estilo css personalizado. |
Texto Centrado
| ||
id | anclaje | genera un anclaje HTML personalizado, como la plantilla {{anclaje}} |
Los editores pueden experimentar en la zona de pruebas
Por favor, añade las categorías a la subpágina de documentación.
(subpáginas - enlaces)
-- módulo para plantillas de formato
local p = {}
local make_style_string = require('Module:Optional style').make_style_string
local tamFuente = { --tamaños de letra segun nombre de las plantillas
['xx-menor']="58%" ,
['x-menor']="69%" ,
['menor']="83%" ,
['grande']="120%" ,
['x-grande']="144%" ,
['xx-grande']="182%" ,
['xxx-grande']="207%" ,
['xxxx-grande']="249%" ,
['xxxxx-grande']="283%" ,
['xxxxxx-grande']="323%",
['sm']="smaller"
}
local textTransform = {
['lc']='lowercase' ,
['uc']='uppercase' ,
['cap']='capitalize'
}
local fontVariant = {
['sc']='small-caps',
['may']='small-caps',
['asc']='all-small-caps',
['all-small-caps']='all-small-caps'
}
local fontFamily = { --familia genérica de fuentes
['monospace']='monospace',
['serif']='serif',
['sans-serif']='sans-serif',
['cursive']='cursive',
['fantasy']='fantasy'
}
local fontWeight = { --negrita
['negrita'] = 'bold',
['bold'] = 'bold',
}
local fontStyle = { --cursivas
['cursiva'] = 'italic',
['itálica'] = 'italic',
['italic'] = 'italic',
['normal'] = 'normal', -- sin cursiva
}
local textDecoration = { --subrayado
['subrayado'] = 'underline',
['underline'] = 'underline',
}
local altparams= {['font-size']='fs', ['tamaño']='fs',
['line-height']='lh', ['interlineado']='lh',
['letter-spacing']='sp', ['espaciado']='sp',
['offset']='margen',
['id']='anclaje',
['width']='ancho',
['align'] = 'alinear',
['style'] = 'estilo',
['class'] = 'clase'
}
local params ={['tag']=1,['alinear']=1,['ancho']=1,['float']=1,['fs']=1,['lh']=1,['sp']=1,['margen']=1,['max-width']=1,['anclaje']=1,
['ancho']=1,['estilo']=1,['color']=1,['fondo']=1,['plantilla']=1,['colgante']=1,['bloque']=1, ['clase']=1}
function argus_estilo(argus)
-- Función que procesa la lista de parámetros (argus) y
-- regresa una table con todos los estilos CSS
local css = {}
local clases = {}
css['text-align'] = argus.alinear
css['width'] = argus.ancho
css['float'] = argus.float
-- sección de parámetros
---- tamaño
if argus.fs and tamFuente[argus.fs]~=nil then
css['font-size'] = tamFuente[argus.fs] -- tamaños usando el nombre de las plantillas de tamaño de fuente
elseif argus.fs then
css['font-size'] = argus.fs -- tamaño personalizado
end
if argus.lh then
css['line-height'] = argus.lh
end
if argus.sp then
css['letter-spacing'] = argus.sp
end
-- sección de opciones
for k,v in pairs(argus) do -- opciones
if type(k) == 'number' and k~= 1 then
if textTransform[argus[k]] ~= nil then
css['text-transform'] = textTransform[argus[k]] --opciones transformación de texto
elseif fontVariant[argus[k]] ~= nil then -- opcion variante de fuente (small caps)
css['font-variant'] = fontVariant[argus[k]]
elseif fontFamily[argus[k]] ~= nil then -- opcion familia de fuentes
css['font-family'] = fontFamily[argus[k]]
elseif tamFuente[argus[k]] ~= nil then -- opciones de tamaño de fuente sin usar el parámetro fs
css['font-size'] = tamFuente[argus[k]]
elseif fontWeight[argus[k]] ~= nil then -- opcion de peso de fuente (negrita)
css['font-weight'] = fontWeight[argus[k]]
elseif fontStyle[argus[k]] ~= nil then -- opcion de estilo de fuente (cursiva)
css['font-style'] = fontStyle[argus[k]]
elseif textDecoration[argus[k]] ~= nil then -- opcion de decoracion de texto (subrayado)
css['text-decoration'] = textDecoration[argus[k]]
end
end
end
-- css['clear'] = 'both' — No utilidad aparente?
--otros parámetros
if argus.plantilla == 'derecha' then --para reutilizar código en {{derecha}}
css['margin-right'] = argus.margen or argus[2]
end
if argus.float == 'right' then --asimilar comportamieto de {{float right}} y {{flotador derecha}}
table.insert(clases, 'ws-flotador-d')
css['margin-right'] = argus.margen or argus[2]
css['margin-top'] = argus[3]
css['margin-bottom'] = argus[3]
css['margin-left'] = argus[4]
end
if argus.float == 'left' then --asimilar comportamieto de {{float left}} y {{flotador izquierda}}
table.insert(clases, 'ws-flotador-i')
css['margin-top'] = argus[2]
css['margin-bottom'] = argus[2]
css['margin-right'] = argus[3]
end
if argus.colgante == 's' then --asimilar comportamieto de {{sangría colgante}}
table.insert(clases, 'ws-sangria-colgante')
local margen = argus.margen or argus[2] or 'NaN'
if tonumber(margen:sub(1,1)) then
css['margin-left'] = margen
css['text-indent'] = '-'..margen
end
if argus['colgante'] == 'm' then --asimilar comportamieto de {{sangría colgante/m}}
table.insert(clases,'ws-sangria-colgante-m')
local margen = argus['margen'] or argus[2] or 'NaN'
if tonumber(margen:sub(1,1)) then
css['margin-left'] = margen
end
end
end
if argus.bloque == 'centro' then --asimilar comportamiento de {{bloque centro}}
table.insert(clases, 'ws-bloque-centro')
if argus['max-width'] then
css['max-width'] = argus['max-width']
end
elseif argus.bloque == 'derecha' then --asimilar comportamiento de {{bloque derecha}}
table.insert(clases, 'ws-bloque-derecha')
css['margin-right'] = argus.margen
css['text-align'] = argus.alinear
if argus['max-width'] then
css['max-width'] = argus['max-width']
end
elseif argus.bloque == 'izquierda' then --asimilar comportamiento de {{bloque izquierda}}
table.insert(clases, 'ws-bloque-izquierda')
css['margin-left'] = argus.margen or argus[2]
if argus['max-width'] then
css['max-width'] = argus['max-width']
end
end
if argus.estilo then --estilo personalizado, al final para poder sobreescribir todo
css['estilo'] = argus.estilo
end
return css, clases
end
function color_string(frame, color)
if mw.ustring.sub( color, 0, 1 ) == '#' then
color = color
else
color = frame:expandTemplate{ title = 'RGB', args = { color } }
end
color = mw.ustring.gsub(color, '#', '#')
return color
end
-- función principal para llamar desde {{centrar}} o similar
function p._centrar(frame, argus )
local texto = argus[1]
local id = argus.anclaje or ''
local css, clases = argus_estilo(argus)
local tag = argus.tag or 'div'
-- manejo especial para el color
if argus.color then
css['color'] = color_string(frame, argus.color)
end
if argus.fondo then
css['background'] = color_string(frame, argus.fondo)
end
-- anclaje (ID)
if id ~= '' then
table.insert(clases, 'anclaje')
end
-- clases CSS adicionales
if argus.clase then
table.insert(clases, argus.clase)
end
-- inicio de tag
contenido = '<'..tag..' '
-- atributos HTML
atributos = {
'id="'..id..'"',
'class="'..table.concat(clases, ' ')..'"',
make_style_string(css)
}
-- agregar atributos
contenido = contenido..table.concat(atributos, ' ')..'>'
-- agregar texto y cerrar tag si no estamos en {{plantilla/c}}
if not argus.open then
contenido = contenido..texto..'</'..tag..'>'
if argus.bloque == 'derecha' then -- fix para {{bloque derecha}}
contenido = contenido..'<br style="clear:right"/>'
end
end
-- categorías de mantenimiento
for k,v in pairs(argus) do
if (type(k) ~= 'number') and (params[k]==nil) and (altparams[k]==nil) then
contenido = contenido .. '[[Categoría:Wikisource:Artículos que usan parámetros no reconocidos en el módulo Centrar]]'
end
end
return contenido
end
-- metafunciones
function main(frame, argus)
--parámetros con nobmres alternativos
for k,v in pairs(altparams) do
if argus[k] and not argus[v] then
argus[v] = argus[k]
end
end
return p._centrar(frame, argus)
end
-- función para plantillas cerradas
function p.centrar(frame)
local argus = require('Module:Arguments').getArgs(frame)
return main(frame, argus)
end
-- función para plantillas abiertas
function p.open(frame)
local argus = require('Module:Arguments').getArgs(frame)
table.insert(argus, 1, '') -- inserta primer parámetro vacío para asimilar
argus.open = true
return main(frame, argus)
end
return p