🏛️ ¡La Enciclopedia Colchagüina te necesita!
Día a día trabajamos con pasión para rescatar y compartir la historia, cultura y memoria de nuestra tierra. Para que este proyecto siga siendo 100% libre y gratuito, necesitamos de tu apoyo para cubrir los costos de funcionamiento y mantención.
Si valoras lo que hacemos, por favor considera apoyarnos. Puedes ayudarnos desde tan solo $2.000 pesos. ¡Cada granito de arena construye nuestra historia!
Diferencia entre revisiones de «Módulo:Ficha»
De la Enciclopedia Colchagüina
Sin resumen de edición Etiquetas: Reversión manual Revertido |
Sin resumen de edición |
||
| (No se muestran 2 ediciones intermedias del mismo usuario) | |||
| Línea 6: | Línea 6: | ||
local HtmlBuilder = require('Module:HtmlBuilder') | local HtmlBuilder = require('Module:HtmlBuilder') | ||
local marco = {} | local marco = {} | ||
local args | local args | ||
local root | local root | ||
local anchoImagen = '320px' | local anchoImagen = '320px' | ||
function union(t1, t2) | function union(t1, t2) | ||
-- devuelve la unión de los valores de dos tablas, como una secuencia | -- devuelve la unión de los valores de dos tablas, como una secuencia | ||
| Línea 49: | Línea 49: | ||
.tag('th') | .tag('th') | ||
.attr('colspan', 3) | .attr('colspan', 3) | ||
.addClass('section') | |||
.addClass(rowArgs.clasefila) | .addClass(rowArgs.clasefila) | ||
.css('text-align', 'center') | .css('text-align', 'center') | ||
| Línea 61: | Línea 62: | ||
.attr('scope', 'row') | .attr('scope', 'row') | ||
.css('text-align', 'left') | .css('text-align', 'left') | ||
.addClass('label') | |||
.addClass(rowArgs.clasefila) | .addClass(rowArgs.clasefila) | ||
.cssText (rowArgs.estiloetiqueta or args.estiloetiqueta) | .cssText (rowArgs.estiloetiqueta or args.estiloetiqueta) | ||
| Línea 80: | Línea 82: | ||
.addClass(rowArgs.clase) | .addClass(rowArgs.clase) | ||
.cssText (rowArgs.estilodatos or args.estilodatos) | .cssText (rowArgs.estilodatos or args.estilodatos) | ||
.wikitext('\n' .. rowArgs.datos) | .wikitext('\n' .. rowArgs.datos) | ||
end | end | ||
end | end | ||
| Línea 115: | Línea 106: | ||
.addClass(cabecera) | .addClass(cabecera) | ||
.css('text-align', 'center') | .css('text-align', 'center') | ||
. | .cssText( (args.colorfondo or args.colorfondotitulo) and ('background-color:' .. (args.colorfondo or args.colorfondotitulo)) ) | ||
. | .cssText( (args.colortexto or args.colorfondo or args.colorfondotitulo) and ('color:' .. (args.colortexto or 'inherit')) ) | ||
.cssText(args.estilotitulo) | .cssText(args.estilotitulo) | ||
.wikitext(args.titulo) | .wikitext(args.titulo) | ||
| Línea 259: | Línea 250: | ||
if args.pieizquierdo then brcondicionalizquierdo = 'br' end | if args.pieizquierdo then brcondicionalizquierdo = 'br' end | ||
if args.piederecho then brcondicionalderecho = 'br' end | if args.piederecho then brcondicionalderecho = 'br' end | ||
root | root | ||
.tag('tr') | .tag('tr') | ||
.tag('td') | .tag('td') | ||
.attr('colspan', '3') | .attr('colspan', '3') | ||
.css('align', 'center') | .css('align', 'center') | ||
.tag('table') | .tag('table') | ||
.css('width', '100%') | .css('width', '100%') | ||
.addClass('mergedrow') | .addClass('mergedrow') | ||
| Línea 273: | Línea 262: | ||
.tag('td') | .tag('td') | ||
.css('text-align', 'center') | .css('text-align', 'center') | ||
.addClass(args.claseimagenizquierda) | .addClass(args.claseimagenizquierda) | ||
.css('align', 'center') | .css('align', 'center') | ||
.css('text-align', 'center') | .css('text-align', 'center') | ||
.css('vertical-align', 'middle') | .css('vertical-align', 'middle') | ||
.cssText(args.estiloimagenizquierda) | .cssText(args.estiloimagenizquierda) | ||
.wikitext('[[Archivo:' .. args.imagenizquierda .. '|' .. args['tamañoimagenizquierda'] .. ']]' ) | .wikitext('[[Archivo:' .. args.imagenizquierda .. '|' .. args['tamañoimagenizquierda'] .. ']]' ) | ||
| Línea 287: | Línea 275: | ||
.done() | .done() | ||
.tag('td') | .tag('td') | ||
.css('text-align', 'center') | .css('text-align', 'center') | ||
.css('align', 'center') | .css('align', 'center') | ||
.css('vertical-align', 'middle | .css('vertical-align', 'middle') | ||
.addClass(args.claseimagenderecha) | .addClass(args.claseimagenderecha) | ||
.cssText(args.estiloimagenderecha) | .cssText(args.estiloimagenderecha) | ||
| Línea 302: | Línea 289: | ||
.newline() | .newline() | ||
elseif args.imagenderecha or args.imagenizquierda then | elseif args.imagenderecha or args.imagenizquierda then | ||
imagenL = {} | imagenL = {} | ||
if args.imagenderecha ~= '' and args.imagenderecha ~= nil then | if args.imagenderecha ~= '' and args.imagenderecha ~= nil then | ||
| Línea 334: | Línea 320: | ||
end | end | ||
local function hacerImagenes() | local function hacerImagenes() | ||
if args.imagen then | if args.imagen then | ||
args.imagen1 = args.imagen | args.imagen1 = args.imagen | ||
| Línea 340: | Línea 326: | ||
if args['tamañoimagen'] then | if args['tamañoimagen'] then | ||
args['tamañoimagen1'] = args['tamañoimagen'] | args['tamañoimagen1'] = args['tamañoimagen'] | ||
end | |||
if args['imagenmodooscuro'] then | |||
args['imagenmodooscuro1'] = args['imagenmodooscuro'] | |||
end | end | ||
| Línea 351: | Línea 340: | ||
local flotante = args['imagenflotante' .. num] or false | local flotante = args['imagenflotante' .. num] or false | ||
if args['tamañoimagen'..num] == nil then | if args['tamañoimagen'..num] == nil then | ||
args['tamañoimagen'..num] = | args['tamañoimagen'..num] = anchoImagen | ||
end | end | ||
local claseInversion = args['imagenmodooscuro' .. num] and 'class=skin-invert-image' or '' | |||
imagen = {} | imagen = {} | ||
local cadenaBusqueda = mw.ustring.gsub(args['imagen'..num],'UNIQ','[') | local cadenaBusqueda = mw.ustring.gsub(args['imagen'..num],'UNIQ','[') | ||
if mw.ustring.find(cadenaBusqueda, '[{[|]') == nil then | if mw.ustring.find(cadenaBusqueda, '[{[|]') == nil then | ||
imagen = ('[[Archivo:' .. args['imagen' .. num] .. '|'.. args['tamañoimagen' ..num] .. ']]' ) | imagen = ('[[Archivo:' .. args['imagen' .. num] .. '|'.. args['tamañoimagen' ..num] .. '|' .. claseInversion .. ']]' ) | ||
else | else | ||
imagen = args['imagen'..num] | imagen = args['imagen'..num] | ||
| Línea 362: | Línea 354: | ||
local datos = HtmlBuilder.create().wikitext(imagen) | local datos = HtmlBuilder.create().wikitext(imagen) | ||
if pie and not flotante then | if pie and not flotante then | ||
datos | |||
.tag('br', {selfClosing = true}) | .tag('br', {selfClosing = true}) | ||
.done() | .done() | ||
| Línea 402: | Línea 394: | ||
function tieneDatosFila(fila) | function tieneDatosFila(fila) | ||
if fila.tipo == 'sección' or fila.tipo == 'seccion' then | if fila.tipo == 'sección' or fila.tipo == 'seccion' then | ||
for k, filaSeccion in ipairs(fila) do | for k, filaSeccion in ipairs(fila) do | ||
| Línea 426: | Línea 415: | ||
function anadirSucesion(argumentosSucesion) | function anadirSucesion(argumentosSucesion) | ||
local | local filaGen = root.tag('tr') | ||
filaGen.css('font-size', '88%') | |||
filaGen.css('text-align', 'center') | |||
local celda | local celda | ||
| Línea 434: | Línea 423: | ||
width = '33%' | width = '33%' | ||
local celdaGen = filaGen.tag('td').attr('colspan', 3).css('padding', 0) | |||
local tablaSuc = celdaGen.tag('table') | |||
tablaSuc.css('width', '100%') | |||
local fila = tablaSuc.tag('tr') | |||
celda = fila.tag('td') | celda = fila.tag('td') | ||
| Línea 503: | Línea 497: | ||
end | end | ||
function hacerFilasTabla(tabla) | function hacerFilasTabla(tabla) | ||
local anadidoTituloSeccion = false | local anadidoTituloSeccion = false | ||
| Línea 510: | Línea 502: | ||
if tieneDatosFila(fila) then | if tieneDatosFila(fila) then | ||
if fila.tipo == 'sección' or fila.tipo == 'seccion' then | if fila.tipo == 'sección' or fila.tipo == 'seccion' then | ||
local tituloSeccion = depurarVacias(fila.titulo) or depurarVacias(fila['título']) | local tituloSeccion = depurarVacias(fila.titulo) or depurarVacias(fila['título']) | ||
if tituloSeccion then | if tituloSeccion then | ||
| Línea 519: | Línea 510: | ||
end | end | ||
hacerFilasTabla(fila) | hacerFilasTabla(fila) | ||
elseif fila.tipo == 'sección desplegable' or fila.tipo == 'seccion desplegable' then | elseif fila.tipo == 'sección desplegable' or fila.tipo == 'seccion desplegable' then | ||
elseif fila.tipo == 'sucesión'or fila.tipo == 'sucesion' then | elseif fila.tipo == 'sucesión'or fila.tipo == 'sucesion' then | ||
anadirSucesion({ | anadirSucesion({ | ||
| Línea 531: | Línea 522: | ||
['color'] = depurarVacias(fila['color']) | ['color'] = depurarVacias(fila['color']) | ||
}) | }) | ||
elseif fila.tipo == 'dos columnas' then | elseif fila.tipo == 'dos columnas' then | ||
elseif fila.tipo == 'tres columnas' then | elseif fila.tipo == 'tres columnas' then | ||
else | else | ||
anadirfila({ | anadirfila({ | ||
etiqueta = depurarVacias(fila[1]) or depurarVacias(fila['etiqueta']), | etiqueta = depurarVacias(fila[1]) or depurarVacias(fila['etiqueta']), | ||
| Línea 547: | Línea 538: | ||
end | end | ||
local function hacerBarraDeNavegacion() | local function hacerBarraDeNavegacion() | ||
if not args.nombre then return end | if not args.nombre then return end | ||
| Línea 561: | Línea 552: | ||
end | end | ||
local function hacerBarraWikidata() | |||
if not mw.wikibase then return end | |||
local enlacePagina = mw.title.getCurrentTitle().prefixedText | |||
local etiquetaPagina = mw.ustring.gsub(enlacePagina,'%s%(.*%)','') | |||
local entidad = args.entidad or mw.wikibase.getEntityIdForCurrentPage() | |||
local textoPie = "" | |||
if (args.child == 'si' or args.integrada == 'sí' or args.wikidata == 'no') or (mw.title.getCurrentTitle().namespace ~= 0 and mw.title.getCurrentTitle().namespace ~= 104 and not args.entidad) then | |||
textoPie = '' | |||
elseif entidad ~= "" and entidad ~= nil then | |||
textoPie = '<div class="plainlinks wikidata-link" style="font-size: 0.85em">[[[d:' .. tostring(entidad) .. '|editar datos en Wikidata]]]</div>' | |||
if (entidad ~= mw.wikibase.getEntityIdForCurrentPage()) and (mw.title.getCurrentTitle().namespace == 0 or mw.title.getCurrentTitle().namespace == 104) then | |||
textoPie = textoPie .. '[[Categoría:Artículos con fichas que utilizan acceso arbitrario]]' | |||
end | |||
else | |||
textoPie = "<small>'''Página no enlazada a [[Wikidata]]'''\n".. | |||
"* Si no existe en otras Wikipedias: [<span class=plainlinks>[//www.wikidata.org/w/index.php?title=Special:NewItem&site=eswiki&page="..mw.uri.encode(enlacePagina,WIKI) .."&label="..mw.uri.encode(etiquetaPagina,WIKI) .." crea nuevo ítem]]</span>\n".. | |||
"* Si existe en otras Wikipedias: [<span class=plainlinks>[[:d:Special:ItemByTitle|busca ítem para enlazar]]</span>]\n".. | |||
"y añade el enlace en español: ".. enlacePagina ..".</small>" | |||
end | |||
if textoPie ~= '' then | |||
root | |||
.tag('tr') | |||
.tag('td') | |||
.addClass('noprint') | |||
.attr('colspan', '3') | |||
.css('text-align', 'left') | |||
.wikitext(textoPie) | |||
end | |||
end | |||
local function hacerCategoriasSeguimiento() | local function hacerCategoriasSeguimiento() | ||
if args.decat ~= 'si' and #(getArgNums('datos')) == 0 and not args[1] and mw.title.getCurrentTitle().namespace == 0 then | if args.decat ~= 'si' and #(getArgNums('datos')) == 0 and not args[1] and mw.title.getCurrentTitle().namespace == 0 then | ||
root.wikitext('[[Categoría | root.wikitext('[[Categoría:Artículos que usan ficha sin datos en filas]]') | ||
end | end | ||
-- PARCHE: Se eliminó el llamado al Módulo:Categorización de buenos y destacados | |||
end | end | ||
| Línea 573: | Línea 595: | ||
root = HtmlBuilder.create('table') | root = HtmlBuilder.create('table') | ||
root | root | ||
.addClass('infobox') | .addClass('infobox') | ||
.addClass(args.clase) | .addClass(args.clase) | ||
.cssText('width:22.7em; line-height: 1.4em; text-align:left; padding:.23em') | .cssText('width:22.7em; line-height: 1.4em; text-align:left; padding:.23em') | ||
.cssText(args.estilo) | .cssText(args.estilo) | ||
if args.estilo and (mw.title.getCurrentTitle().namespace == 10) then | if args.estilo and (mw.title.getCurrentTitle().namespace == 10) then | ||
root.wikitext('[[Categoría:Fichas con el parámetro estilo]]') | |||
end | end | ||
| Línea 605: | Línea 627: | ||
hacerPieDeTabla() | hacerPieDeTabla() | ||
hacerBarraDeNavegacion() | hacerBarraDeNavegacion() | ||
hacerBarraWikidata() | |||
hacerCategoriasSeguimiento() | hacerCategoriasSeguimiento() | ||
return mw.getCurrentFrame():extensionTag{ name = 'templatestyles', args = { src = 'Plantilla:Ficha/imagelimit.css' } } .. tostring(root) | return mw.getCurrentFrame():extensionTag{ name = 'templatestyles', args = { src = 'Plantilla:Ficha/imagelimit.css' } } .. tostring(root) | ||
end | end | ||
local function touchParameters(prefixTable, origArgs, step) | local function touchParameters(prefixTable, origArgs, step) | ||
if type(prefixTable) ~= 'table' or type(origArgs) ~= 'table' then | if type(prefixTable) ~= 'table' or type(origArgs) ~= 'table' then | ||
error("Entrada no válida detectada para la función touchParameters. Ambos parámetros deben ser tablas.", 2) | error("Entrada no válida detectada para la función touchParameters. Ambos parámetros deben ser tablas.", 2) | ||
| Línea 619: | Línea 641: | ||
end | end | ||
step = step or 20 | step = step or 20 | ||
local temp | local temp | ||
local a = 1 | local a = 1 | ||
local moreArgumentsExist = true | local moreArgumentsExist = true | ||
for j,v in ipairs(prefixTable) do | for j,v in ipairs(prefixTable) do | ||
| Línea 642: | Línea 664: | ||
end | end | ||
end | end | ||
function p.infobox(frame) | function p.infobox(frame) | ||
local origArgs | local origArgs | ||
marco = frame | marco = frame | ||
if frame == mw.getCurrentFrame() then | if frame == mw.getCurrentFrame() then | ||
origArgs = frame:getParent().args | origArgs = frame:getParent().args | ||
| Línea 652: | Línea 673: | ||
origArgs = frame | origArgs = frame | ||
end | end | ||
local temp | local temp | ||
temp = origArgs.titulo | temp = origArgs.titulo | ||
| Línea 662: | Línea 681: | ||
temp = origArgs.piedetabla | temp = origArgs.piedetabla | ||
args = {} | args = {} | ||
for k, v in pairs(origArgs) do | for k, v in pairs(origArgs) do | ||
Revisión actual - 20:32 6 jul 2026
La documentación para este módulo puede ser creada en Módulo:Ficha/doc
--
-- Este módulo es para implementar en {{Ficha}}
--
local p = {}
local HtmlBuilder = require('Module:HtmlBuilder')
local marco = {}
local args
local root
local anchoImagen = '320px'
function union(t1, t2)
-- devuelve la unión de los valores de dos tablas, como una secuencia
local vals = {}
for k, v in pairs(t1) do
vals[v] = true
end
for k, v in pairs(t2) do
vals[v] = true
end
local ret = {}
for k, v in pairs(vals) do
table.insert(ret, k)
end
return ret
end
local function depurarVacias(contenido)
if contenido and contenido ~= '' then
return contenido
end
end
local function getArgNums(prefix)
local nums = {}
for k, v in pairs(args) do
local num = tostring(k):match('^' .. prefix .. '([1-9]%d*)$')
if num then table.insert(nums, tonumber(num)) end
end
table.sort(nums)
return nums
end
local function anadirfila(rowArgs)
if rowArgs.seccion then
root
.tag('tr')
.tag('th')
.attr('colspan', 3)
.addClass('section')
.addClass(rowArgs.clasefila)
.css('text-align', 'center')
.cssText(rowArgs.estiloseccion or args.estiloseccion)
.wikitext(rowArgs.seccion)
elseif rowArgs.datos then
local fila = root.tag('tr')
fila.addClass(rowArgs.clasefila)
if rowArgs.etiqueta then
fila
.tag('th')
.attr('scope', 'row')
.css('text-align', 'left')
.addClass('label')
.addClass(rowArgs.clasefila)
.cssText (rowArgs.estiloetiqueta or args.estiloetiqueta)
.wikitext(rowArgs.etiqueta)
.done()
end
local datosCelula = fila.tag('td')
if rowArgs.etiqueta then
datosCelula
.attr('colspan', 2)
else
datosCelula
.attr('colspan', 3)
.css('text-align', 'center')
end
datosCelula
.addClass(rowArgs.clase)
.cssText (rowArgs.estilodatos or args.estilodatos)
.wikitext('\n' .. rowArgs.datos)
end
end
local function hacerTitulo() -- Cabecera de la ficha
if not args.titulo then return end
local cabecera = {}
if args.media == 'si' and args.clasetitulo then
cabecera = 'media ' .. args['clasetitulo']
elseif args.media == 'si' then
cabecera = 'media '
elseif args.tipocabecera then
cabecera = 'cabecera ' .. args.tipocabecera
elseif args.clasetitulo then
cabecera = 'cabecera ' .. args.clasetitulo
else
cabecera = 'cabecera '
end
root
.tag('tr')
.tag('th')
.attr('colspan', 3)
.addClass(cabecera)
.css('text-align', 'center')
.cssText( (args.colorfondo or args.colorfondotitulo) and ('background-color:' .. (args.colorfondo or args.colorfondotitulo)) )
.cssText( (args.colortexto or args.colorfondo or args.colorfondotitulo) and ('color:' .. (args.colortexto or 'inherit')) )
.cssText(args.estilotitulo)
.wikitext(args.titulo)
end
local function hacerFilaArriba()
if not args.arriba and not args.titulo2 then return end
root
.tag('tr')
.tag('th')
.attr('colspan', 3)
.addClass(args.clasearribaor or args.clasetitulo2)
.css('text-align', 'center')
.css('font-size', '125%')
.css('font-weight', 'bold')
.cssText(args.estiloarriba or args.estilotitulo2)
.wikitext(args.arriba or args.titulo2)
end
local function hacerPieDeTabla()-- Pie de tabla, aparecerá abajo de la ficha
if not args.piedetabla then return end
root
.tag('tr')
.tag('td')
.attr('colspan', '3')
.addClass(args.clasepiedetabla)
.css('text-align', 'center')
.cssText(args.estilopiedetabla)
.wikitext(args.piedetabla)
end
local function hacerImagenInferior()-- Imagen que aparecerá en la parte inferior de la tabla
if not args.imageninferior then return end
imageninferior = {}
if args['tamañoimageninferior'] == nil or args['tamañoimageninferior'] == '' then
args['tamañoimageninferior'] = anchoImagen
end
if string.find(args.imageninferior, '[{[]') == nil then
imageninferior = ('[[Archivo:' .. args.imageninferior .. '|'.. args['tamañoimageninferior'] .. ']]' )
else
imageninferior = args.imageninferior
end
root
.tag('tr')
.tag('td')
.attr('colspan', '3')
.addClass('imagen ' .. (args.claseimageninferior or '') )
.css('text-align', 'center')
.cssText(args.estiloimageninferior)
.newline()
.wikitext(imageninferior)
.tag('br', {selfClosing = true})
.done()
.tag('div')
.css('display','inline')
.cssText(args.estilopieinferior)
.wikitext(args.pieinferior)
.done()
.newline()
end
local function hacerImagenSuperior()-- Imagen que aparecerá en la parte superior de la tabla
if not args.imagensuperior then return end
if args['tamañoimagensuperior'] == nil or args['tamañoimagensuperior'] == '' then
args['tamañoimagensuperior'] = anchoImagen
end
imagensuperior = {}
if string.find(args.imagensuperior, '[{[]') == nil then
imagensuperior = ('[[Archivo:' .. args.imagensuperior .. '|'.. args['tamañoimagensuperior'] .. ']]' )
else
imagensuperior = args.imagensuperior
end
root
.tag('tr')
.tag('td')
.attr('colspan', '3')
.addClass('imagen ' .. (args.claseimagensuperior or '') )
.css('text-align', 'center')
.cssText(args.estiloimagensuperior)
.newline()
.wikitext(imagensuperior)
.tag('br', {selfClosing = true})
.done()
.tag('div')
.css('display','inline')
.cssText(args.estilopiesuperior)
.wikitext(args.piesuperior)
.done()
.newline()
end
local function hacerSubtitulos()-- Subtítulos de la ficha
if args.subtitulo then
args.subtitulo1 = args.subtitulo
end
if args.clasesubtitulo then
args.clasesubtitulo1 = args.clasesubtitulo
end
local subtitulonumero = getArgNums('subtitulo')
for k, num in ipairs(subtitulonumero) do
anadirfila({
datos = args['subtitulo' .. num],
estilodatos = args['estilosubtitulo' .. num] or args.estilosubtitulo,
clase = args.clasesubtitulo,
clasefila = args['clasesubtitulo' .. num]
})
end
end
local function hacerfilassuperiores()-- filas encima de imagenes laterales
if args.datosup then
args.datosup1 = args.datosup
end
if args.clasedatosup then
args.clasedatosup1 = args.clasedatosup
end
if args.estilodatosup then
args.estilodatosup1 = args.estilodatosup
end
local datosupnumero = getArgNums('datosup')
for k, num in ipairs(datosupnumero) do
anadirfila({
datos = args['datosup' .. num],
estilodatos = args['estilodatosup' .. num],
clase = args.clasedatosup,
clasefila = args['clasedatosup' .. num]
})
end
end
local function hacerImageneslaterales()
-- Imagenes que apareceran arriba de forma geminada por ejemplo escudos y banderas
if args['tamañoimagenizquierda'] == "" or args['tamañoimagenizquierda'] == nil then
args['tamañoimagenizquierda'] = '100px'
end
if args['tamañoimagenderecha'] == "" or args['tamañoimagenderecha'] == nil then
args['tamañoimagenderecha'] = '100px'
end
if args.imagenderecha and args.imagenizquierda then
if args.pieizquierdo then brcondicionalizquierdo = 'br' end
if args.piederecho then brcondicionalderecho = 'br' end
root
.tag('tr')
.tag('td')
.attr('colspan', '3')
.css('align', 'center')
.tag('table')
.css('width', '100%')
.addClass('mergedrow')
.tag('tr')
.tag('td')
.css('text-align', 'center')
.addClass(args.claseimagenizquierda)
.css('align', 'center')
.css('text-align', 'center')
.css('vertical-align', 'middle')
.cssText(args.estiloimagenizquierda)
.wikitext('[[Archivo:' .. args.imagenizquierda .. '|' .. args['tamañoimagenizquierda'] .. ']]' )
.tag(brcondicionalizquierdo)
.tag('div')
.css('display','inline')
.cssText(args.estilopieizquierdo)
.wikitext(args.pieizquierdo)
.done()
.tag('td')
.css('text-align', 'center')
.css('align', 'center')
.css('vertical-align', 'middle')
.addClass(args.claseimagenderecha)
.cssText(args.estiloimagenderecha)
.wikitext('[[Archivo:' .. args.imagenderecha .. '|' .. args['tamañoimagenderecha'] .. ']]' )
.tag(brcondicionalderecho)
.tag('div')
.css('display','inline')
.cssText(args.estilopiederecho)
.wikitext(args.piederecho)
.done()
.newline()
elseif args.imagenderecha or args.imagenizquierda then
imagenL = {}
if args.imagenderecha ~= '' and args.imagenderecha ~= nil then
imagenL = 'imagenderecha'
elseif args.imagenizquierda ~= '' and args.imagenizquierda ~= nil then
imagenL = 'imagenizquierda'
end
pieL = {}
if args.imagenderecha then
pieL = 'piederecho'
elseif args.imagenizquierda then
pieL = 'pieizquierdo'
end
root
.tag('tr')
.tag('td')
.attr('colspan', '3')
.addClass(args['clase' .. imagenL])
.css('text-align', 'center')
.cssText(args['estilo' .. imagenL])
.newline()
.wikitext('[[Archivo:' .. args[imagenL] .. '|'.. args['tamaño'..imagenL] .. ']]' )
.tag('br')
.tag('div')
.css('display','inline')
.cssText(args['estilo' .. pieL])
.wikitext(args[pieL])
.done()
end
end
local function hacerImagenes()
if args.imagen then
args.imagen1 = args.imagen
end
if args['tamañoimagen'] then
args['tamañoimagen1'] = args['tamañoimagen']
end
if args['imagenmodooscuro'] then
args['imagenmodooscuro1'] = args['imagenmodooscuro']
end
if args.pie then
args.pie1 = args.pie
end
local imagenums = getArgNums('imagen')
for k, num in ipairs(imagenums) do
local pie = args['pie' .. num]
local flotante = args['imagenflotante' .. num] or false
if args['tamañoimagen'..num] == nil then
args['tamañoimagen'..num] = anchoImagen
end
local claseInversion = args['imagenmodooscuro' .. num] and 'class=skin-invert-image' or ''
imagen = {}
local cadenaBusqueda = mw.ustring.gsub(args['imagen'..num],'UNIQ','[')
if mw.ustring.find(cadenaBusqueda, '[{[|]') == nil then
imagen = ('[[Archivo:' .. args['imagen' .. num] .. '|'.. args['tamañoimagen' ..num] .. '|' .. claseInversion .. ']]' )
else
imagen = args['imagen'..num]
end
local datos = HtmlBuilder.create().wikitext(imagen)
if pie and not flotante then
datos
.tag('br', {selfClosing = true})
.done()
end
if pie then
datos
.tag('div')
.css('display','inline')
.cssText(args.estilopie)
.wikitext(pie)
.done()
end
anadirfila({
datos = tostring(datos),
estilodatos = args.estiloimagen,
clase = 'imagen ' .. (args.claseimagen or ''),
clasefila = args['claseimagen' .. num]
})
end
end
local function hacerFilas()
local filanum = union(getArgNums('seccion'), getArgNums('datos'))
table.sort(filanum)
for k, num in ipairs(filanum) do
anadirfila({
estilosubtitulo = depurarVacias(args['estilosubtitulo' .. num]),
seccion = depurarVacias(args['seccion' .. num]),
estiloseccion = depurarVacias(args['estilosección' .. num]),
etiqueta = depurarVacias(args['etiqueta' .. num]),
datos = depurarVacias(args['datos' .. num]),
estiloetiqueta = depurarVacias(args['estiloetiqueta' .. num]),
estilodatos = depurarVacias(args['estilodatos' .. num]),
clase = depurarVacias(args['clase' .. num]),
clasefila = depurarVacias(args['clasefila' .. num])
})
end
end
function tieneDatosFila(fila)
if fila.tipo == 'sección' or fila.tipo == 'seccion' then
for k, filaSeccion in ipairs(fila) do
if tieneDatosFila(filaSeccion) then
return true
end
end
elseif fila.tipo == 'sucesión' or fila.tipo == 'sucesion' then
if depurarVacias(fila[1]) or depurarVacias(fila['anterior']) or
depurarVacias(fila[3]) or depurarVacias(fila['siguiente']) then
return true
end
else
if depurarVacias(fila[2]) or depurarVacias(fila['datos']) then
return true
end
end
return false
end
function anadirSucesion(argumentosSucesion)
local filaGen = root.tag('tr')
filaGen.css('font-size', '88%')
filaGen.css('text-align', 'center')
local celda
local width
width = '33%'
local celdaGen = filaGen.tag('td').attr('colspan', 3).css('padding', 0)
local tablaSuc = celdaGen.tag('table')
tablaSuc.css('width', '100%')
local fila = tablaSuc.tag('tr')
celda = fila.tag('td')
celda
.css('width', width)
.css('padding', '0.2em 0.1em 0.2em 0')
.css('vertical-align', 'middle')
if argumentosSucesion['estilo fuente'] then
celda
.tag('div')
.css('display','inline')
.css('font-style', argumentosSucesion['estilo fuente'])
.wikitext(argumentosSucesion.anterior)
.done()
else
celda.wikitext(argumentosSucesion.anterior)
end
if argumentosSucesion['año anterior'] then
celda
.tag('br')
.wikitext('(' .. argumentosSucesion['año anterior'] .. ')')
end
celda = fila.tag('td')
celda
.css('width', width)
.css('padding', '0.2em 0.1em')
.css('vertical-align', 'middle')
.css('background-color', argumentosSucesion.color or '#E6E8FA')
celda
.tag('div')
.css('display','inline')
.css('font-weight', 'bold')
.css('font-style', argumentosSucesion['estilo fuente'] or '')
.wikitext(argumentosSucesion.actual or args.titulo)
.done()
if argumentosSucesion['año'] then
celda
.tag('br')
.wikitext('(' .. argumentosSucesion['año'] .. ')')
end
celda = fila.tag('td')
celda
.css('width', width)
.css('padding', '0.2em 0 0.2em 0.1em')
.css('vertical-align', 'middle')
if argumentosSucesion['estilo fuente'] then
celda
.tag('div')
.css('display','inline')
.css('font-style', argumentosSucesion['estilo fuente'])
.wikitext(argumentosSucesion.siguiente)
.done()
else
celda.wikitext(argumentosSucesion.siguiente)
end
if argumentosSucesion['año siguiente'] then
celda
.tag('br')
.wikitext('(' .. argumentosSucesion['año siguiente'] .. ')')
end
end
function hacerFilasTabla(tabla)
local anadidoTituloSeccion = false
for k, fila in ipairs(tabla) do
if tieneDatosFila(fila) then
if fila.tipo == 'sección' or fila.tipo == 'seccion' then
local tituloSeccion = depurarVacias(fila.titulo) or depurarVacias(fila['título'])
if tituloSeccion then
anadirfila({
estiloseccion = fila['estilotitulo'] or fila['estilotítulo'],
seccion = tituloSeccion
})
end
hacerFilasTabla(fila)
elseif fila.tipo == 'sección desplegable' or fila.tipo == 'seccion desplegable' then
elseif fila.tipo == 'sucesión'or fila.tipo == 'sucesion' then
anadirSucesion({
['anterior'] = depurarVacias(fila[1]) or depurarVacias(fila['anterior']),
['actual'] = depurarVacias(fila['actual']),
['siguiente'] = depurarVacias(fila[3]) or depurarVacias(fila['siguiente']),
['año anterior'] = depurarVacias(fila['año anterior']),
['año'] = depurarVacias(fila['año']),
['año siguiente'] = depurarVacias(fila['año siguiente']),
['estilo fuente'] = depurarVacias(fila['estilo fuente']),
['color'] = depurarVacias(fila['color'])
})
elseif fila.tipo == 'dos columnas' then
elseif fila.tipo == 'tres columnas' then
else
anadirfila({
etiqueta = depurarVacias(fila[1]) or depurarVacias(fila['etiqueta']),
datos = depurarVacias(fila[2]) or depurarVacias(fila['datos']),
estiloetiqueta = fila['estiloetiqueta'] or tabla['estiloetiqueta'],
estilodatos = fila['estilodatos'] or tabla['estilodatos'],
clase = fila['clase'] or tabla['clase'],
clasefila = fila['clasefila'] or tabla['clasefila']
})
end
end
end
end
local function hacerBarraDeNavegacion()
if not args.nombre then return end
root
.tag('tr')
.tag('td')
.attr('colspan', '3')
.css('text-align', 'right')
.wikitext(mw.getCurrentFrame():expandTemplate({
title = 'navbar',
args = { args.nombre, mini = 1 }
}))
end
local function hacerBarraWikidata()
if not mw.wikibase then return end
local enlacePagina = mw.title.getCurrentTitle().prefixedText
local etiquetaPagina = mw.ustring.gsub(enlacePagina,'%s%(.*%)','')
local entidad = args.entidad or mw.wikibase.getEntityIdForCurrentPage()
local textoPie = ""
if (args.child == 'si' or args.integrada == 'sí' or args.wikidata == 'no') or (mw.title.getCurrentTitle().namespace ~= 0 and mw.title.getCurrentTitle().namespace ~= 104 and not args.entidad) then
textoPie = ''
elseif entidad ~= "" and entidad ~= nil then
textoPie = '<div class="plainlinks wikidata-link" style="font-size: 0.85em">[[[d:' .. tostring(entidad) .. '|editar datos en Wikidata]]]</div>'
if (entidad ~= mw.wikibase.getEntityIdForCurrentPage()) and (mw.title.getCurrentTitle().namespace == 0 or mw.title.getCurrentTitle().namespace == 104) then
textoPie = textoPie .. '[[Categoría:Artículos con fichas que utilizan acceso arbitrario]]'
end
else
textoPie = "<small>'''Página no enlazada a [[Wikidata]]'''\n"..
"* Si no existe en otras Wikipedias: [<span class=plainlinks>[//www.wikidata.org/w/index.php?title=Special:NewItem&site=eswiki&page="..mw.uri.encode(enlacePagina,WIKI) .."&label="..mw.uri.encode(etiquetaPagina,WIKI) .." crea nuevo ítem]]</span>\n"..
"* Si existe en otras Wikipedias: [<span class=plainlinks>[[:d:Special:ItemByTitle|busca ítem para enlazar]]</span>]\n"..
"y añade el enlace en español: ".. enlacePagina ..".</small>"
end
if textoPie ~= '' then
root
.tag('tr')
.tag('td')
.addClass('noprint')
.attr('colspan', '3')
.css('text-align', 'left')
.wikitext(textoPie)
end
end
local function hacerCategoriasSeguimiento()
if args.decat ~= 'si' and #(getArgNums('datos')) == 0 and not args[1] and mw.title.getCurrentTitle().namespace == 0 then
root.wikitext('[[Categoría:Artículos que usan ficha sin datos en filas]]')
end
-- PARCHE: Se eliminó el llamado al Módulo:Categorización de buenos y destacados
end
function _infobox()
if args.child ~= 'si' and args.integrada ~= 'sí' then
root = HtmlBuilder.create('table')
root
.addClass('infobox')
.addClass(args.clase)
.cssText('width:22.7em; line-height: 1.4em; text-align:left; padding:.23em')
.cssText(args.estilo)
if args.estilo and (mw.title.getCurrentTitle().namespace == 10) then
root.wikitext('[[Categoría:Fichas con el parámetro estilo]]')
end
hacerTitulo()
hacerFilaArriba()
else
root = HtmlBuilder.create()
if args.titulo then
root.wikitext("'''" .. args.titulo .. "'''")
end
end
hacerSubtitulos()
hacerImagenSuperior()
hacerImageneslaterales()
hacerfilassuperiores()
hacerImagenes()
if not args[1] then
hacerFilas()
else
hacerFilasTabla(args)
end
hacerImagenInferior()
hacerPieDeTabla()
hacerBarraDeNavegacion()
hacerBarraWikidata()
hacerCategoriasSeguimiento()
return mw.getCurrentFrame():extensionTag{ name = 'templatestyles', args = { src = 'Plantilla:Ficha/imagelimit.css' } } .. tostring(root)
end
local function touchParameters(prefixTable, origArgs, step)
if type(prefixTable) ~= 'table' or type(origArgs) ~= 'table' then
error("Entrada no válida detectada para la función touchParameters. Ambos parámetros deben ser tablas.", 2)
end
if step and type(step) ~= 'number' then
error("Detectado valor no numérico en step.", 2)
end
step = step or 20
local temp
local a = 1
local moreArgumentsExist = true
for j,v in ipairs(prefixTable) do
if not type(v) == "string" then
error("Detectado un valor que no es string en el prefijo de la tabla por la función touchParameters.", 2)
end
temp = origArgs[v]
end
while moreArgumentsExist == true do
moreArgumentsExist = false
for i = a, a + step - 1 do
for j,v in ipairs(prefixTable) do
temp = origArgs[v .. tostring(i)]
if temp then
moreArgumentsExist = true
end
end
end
a = a + step
end
end
function p.infobox(frame)
local origArgs
marco = frame
if frame == mw.getCurrentFrame() then
origArgs = frame:getParent().args
else
origArgs = frame
end
local temp
temp = origArgs.titulo
temp = origArgs.arriba
touchParameters({'subtitulo'}, origArgs, 5)
touchParameters({'imagen', 'pie'}, origArgs, 5)
touchParameters({'seccion', 'etiqueta', 'datos'}, origArgs, 20)
temp = origArgs.piedetabla
args = {}
for k, v in pairs(origArgs) do
if v ~= '' then
args[k] = v
end
end
return _infobox()
end
return p
