Ir al contenido

Diferencia entre revisiones de «Wikipedia:Zona de pruebas/10»

De Wikipedia, la enciclopedia libre
Contenido eliminado Contenido añadido
https://es.wikipedia.org/w/index.php?title=M%C3%B3dulo:Ficha&oldid=124132341
Etiqueta: Revertido
https://es.wikipedia.org/w/index.php?title=M%C3%B3dulo:Ficha_animanga&oldid=130157046
Etiqueta: Revertido
Línea 1: Línea 1:
--
-- Este módulo es para implementar en {{Ficha}}
--
local p = {}
local p = {}

local HtmlBuilder = require('Module:HtmlBuilder')
local HtmlBuilder = require('Module:HtmlBuilder')
local CategorizacionAByAD = require('Módulo:Categorización de buenos y destacados')
local CategorizacionAByAD = require('Módulo:Categorización de buenos y destacados')
local marco = {}
local marco = {}
local args
local args
local root
local root
local anchoImagen = '245px'
local anchoImagen = '245px'

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
function union(t1, t2)
local vals = {}
local vals = {}
for k, v in pairs(t1) do
for k, v in pairs(t1) do
vals[v] = true
vals[v] = true
end
end
for k, v in pairs(t2) do
for k, v in pairs(t2) do
vals[v] = true
vals[v] = true
end
end
local ret = {}
local ret = {}
for k, v in pairs(vals) do
for k, v in pairs(vals) do
table.insert(ret, k)
table.insert(ret, k)
end
end
return ret
return ret
end
end


local function depurarVacias(contenido)
local function depurarVacias(contenido)
if contenido and contenido ~= '' then
if contenido and contenido ~= '' then
return contenido
return contenido
end
end
end
end


local function getArgNums(prefix)
local function getArgNums(prefix)
local nums = {}
local nums = {}
for k, v in pairs(args) do
for k, v in pairs(args) do
local num = tostring(k):match('^' .. prefix .. '([1-9]%d*)$')
local num = tostring(k):match('^' .. prefix .. '([1-9]%d*)$')
if num then table.insert(nums, tonumber(num)) end
if num then table.insert(nums, tonumber(num)) end
end
end
table.sort(nums)
table.sort(nums)
return nums
return nums
end

local function detectaTablas(texto)
if mw.ustring.find(texto,'{|', plain ) or mw.ustring.find(texto,'{{{!}}', plain ) or mw.ustring.find(texto,'*', plain ) or mw.ustring.find(texto,'#', plain )then
return ' \n'..texto
else
return texto
end
end
end


local function anadirfila(rowArgs)
local function anadirfila(rowArgs)
if rowArgs.seccion then
if rowArgs.seccion then
root
root
.tag('tr')
.tag('tr')
.tag('th')
.tag('th')
.attr('colspan', 3)
.attr('colspan', 3)
.addClass(rowArgs.clasefila)
.addClass(rowArgs.clasefila)
.css('text-align', 'center')
.css('text-align', 'center')
.cssText(rowArgs.estiloseccion or args.estiloseccion)
.cssText(rowArgs.estiloseccion or args.estiloseccion)
.wikitext(rowArgs.seccion)
.wikitext(rowArgs.seccion)
elseif rowArgs.datos then
elseif rowArgs.datos then
local fila = root.tag('tr')
local fila = root.tag('tr')
fila.addClass(rowArgs.clasefila)
fila.addClass(rowArgs.clasefila)
if rowArgs.etiqueta then
if rowArgs.etiqueta then
fila
fila
.tag('th')
.tag('th')
.attr('scope', 'row')
.attr('scope', 'row')
.css('text-align', 'left')
.css('text-align', 'left')
.addClass(rowArgs.clasefila)
.addClass(rowArgs.clasefila)
.cssText (rowArgs.estiloetiqueta or args.estiloetiqueta)
.cssText (rowArgs.estiloetiqueta or args.estiloetiqueta)
.wikitext(rowArgs.etiqueta)
.wikitext(rowArgs.etiqueta)
.done()
.done()
end
end
local datosCelula = fila.tag('td')


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)


if rowArgs.etiqueta then
-- Se añade un salto de línea porque si no se hace así y por ejemplo en los
datosCelula
-- datos hay una lista con asteriscos en el primer elemento se muestra
.attr('colspan', 2)
-- un asterisco.
else
-- Se trata de un error que ya ocurre con tablas normales sin LUA. Por ejemplo
datosCelula
-- {|
.attr('colspan', 3)
-- | * elemento1
.css('text-align', 'center')
-- * elemento2
end
-- |}
datosCelula
-- El salto de línea ya se producía en la plantilla Ficha/fila
.wikitext('\n' .. rowArgs.datos)
.addClass(rowArgs.clase)
.cssText (rowArgs.estilodatos or args.estilodatos)
--.newline()
.wikitext(detectaTablas(rowArgs.datos))
end
end
end
end


local function hacerTitulo() -- Cabecera de la ficha
local function hacerTitulo() -- Cabecera de la ficha
if not args.titulo then return end
if not args.titulo then return end
local cabecera = {}
local cabecera = {}
if args.media == 'si' and args.clasetitulo then
if args.media == 'si' and args.clasetitulo then
cabecera = 'media ' .. args['clasetitulo']
cabecera = 'media ' .. args['clasetitulo']
elseif args.media == 'si' then
elseif args.media == 'si' then
cabecera = 'media '
cabecera = 'media '
elseif args.tipocabecera then
elseif args.tipocabecera then
cabecera = 'cabecera ' .. args.tipocabecera
cabecera = 'cabecera ' .. args.tipocabecera
elseif args.clasetitulo then
elseif args.clasetitulo then
cabecera = 'cabecera ' .. args.clasetitulo
cabecera = 'cabecera ' .. args.clasetitulo
else
else
cabecera = 'cabecera '
cabecera = 'cabecera '
end
end
root
root
.tag('tr')
.tag('tr')
.tag('th')
.tag('th')
.attr('colspan', 3)
.attr('colspan', 3)
.addClass(cabecera)
.addClass(cabecera)
.css('text-align', 'center')
.css('text-align', 'center')
.css('background-color', args.colorfondo or args.colorfondotitulo or 'transparent')
.css('background-color', args.colorfondo or args.colorfondotitulo or 'transparent')
.css('color', args.colortexto or 'black')
.css('color', args.colortexto or 'black')
.cssText(args.estilotitulo)
.cssText(args.estilotitulo)
.wikitext(args.titulo)
.wikitext(args.titulo)
end
end

local function hacerFilaArriba()
local function hacerFilaArriba()
if not args.arriba and not args.titulo2 then return end
if not args.arriba and not args.titulo2 then return end

root
root
.tag('tr')
.tag('tr')
.tag('th')
.tag('th')
.attr('colspan', 3)
.attr('colspan', 3)
.addClass(args.clasearribaor or args.clasetitulo2)
.addClass(args.clasearribaor or args.clasetitulo2)
.css('text-align', 'center')
.css('text-align', 'center')
.css('font-size', '125%')
.css('font-size', '125%')
.css('font-weight', 'bold')
.css('font-weight', 'bold')
.cssText(args.estiloarriba or args.estilotitulo2)
.cssText(args.estiloarriba or args.estilotitulo2)
.wikitext(args.arriba or args.titulo2)
.wikitext(args.arriba or args.titulo2)
end
end


local function hacerPieDeTabla()-- Pie de tabla, aparecerá abajo de la ficha
local function hacerPieDeTabla()-- Pie de tabla, aparecerá abajo de la ficha
if not args.piedetabla then return end
if not args.piedetabla then return end

root
root
.tag('tr')
.tag('tr')
.tag('td')
.tag('td')
.attr('colspan', '3')
.attr('colspan', '3')
.addClass(args.clasepiedetabla)
.addClass(args.clasepiedetabla)
.css('text-align', 'center')
.css('text-align', 'center')
.cssText(args.estilopiedetabla)
.cssText(args.estilopiedetabla)
.wikitext(args.piedetabla)
.wikitext(args.piedetabla)
end
end

local function hacerImagenInferior()-- Imagen que aparecerá en la parte inferior de la tabla
local function hacerImagenInferior()-- Imagen que aparecerá en la parte inferior de la tabla
if not args.imageninferior then return end
if not args.imageninferior then return end
imageninferior = {}
imageninferior = {}
if args['tamañoimageninferior'] == nil or args['tamañoimageninferior'] == '' then
if args['tamañoimageninferior'] == nil or args['tamañoimageninferior'] == ''then
args['tamañoimageninferior'] = anchoImagen
args['tamañoimageninferior'] = anchoImagen
end
end
if string.find(args.imageninferior, '[{[]') == nil then
if string.find(args.imageninferior, '[{[]') == nil then
imageninferior = ('[[Archivo:' .. args.imageninferior .. '|'.. args['tamañoimageninferior'] .. ']]' )
imageninferior = ('[[Archivo:' .. args.imageninferior .. '|'.. args['tamañoimageninferior'] .. ']]' )
else
else
imageninferior = args.imageninferior
imageninferior = args.imageninferior
end
end

root
root
.tag('tr')
.tag('tr')
.tag('td')
.tag('td')
.attr('colspan', '3')
.attr('colspan', '3')
.addClass(args.claseimageninferior)
.addClass(args.claseimageninferior)
.css('text-align', 'center')
.css('text-align', 'center')
.cssText(args.estiloimageninferior)
.cssText(args.estiloimageninferior)
.newline()
.newline()
.wikitext(imageninferior)
.wikitext(imageninferior)
.tag('br', {selfClosing = true})
.tag('br', {selfClosing = true})
.done()
.done()
.tag('div')
.tag('div')
.css('display','inline')
.css('display','inline')
.cssText(args.estilopieinferior)
.cssText(args.estilopieinferior)
.wikitext(args.pieinferior)
.wikitext(args.pieinferior)
.done()
.done()
.newline()
.newline()
end
end


local function hacerImagenSuperior()-- Imagen que aparecerá en la parte superior de la tabla
local function hacerImagenSuperior()-- Imagen que aparecerá en la parte superior de la tabla
if not args.imagensuperior then return end
if not args.imagensuperior then return end
if args['tamañoimagensuperior'] == nil or args['tamañoimagensuperior'] == '' then
if args['tamañoimagensuperior'] == nil or args['tamañoimagensuperior'] == '' then
args['tamañoimagensuperior'] = anchoImagen
args['tamañoimagensuperior'] = anchoImagen
end
end
imagensuperior = {}
imagensuperior = {}
if string.find(args.imagensuperior, '[{[]') == nil then
if string.find(args.imagensuperior, '[{[]') == nil then
imagensuperior = ('[[Archivo:' .. args.imagensuperior .. '|'.. args['tamañoimagensuperior'] .. ']]' )
imagensuperior = ('[[Archivo:' .. args.imagensuperior .. '|'.. args['tamañoimagensuperior'] .. ']]' )
else
else
imagensuperior = args.imagensuperior
imagensuperior = args.imagensuperior
end
end

root
root
.tag('tr')
.tag('tr')
.tag('td')
.tag('td')
.attr('colspan', '3')
.attr('colspan', '3')
.addClass(args.claseimagensuperior)
.addClass(args.claseimagensuperior)
.css('text-align', 'center')
.css('text-align', 'center')
.cssText(args.estiloimagensuperior)
.cssText(args.estiloimagensuperior)
.newline()
.newline()
.wikitext(imagensuperior)
.wikitext(imagensuperior)
.tag('br', {selfClosing = true})
.tag('br', {selfClosing = true})
.done()
.done()
.tag('div')
.tag('div')
.css('display','inline')
.css('display','inline')
.cssText(args.estilopiesuperior)
.cssText(args.estilopiesuperior)
.wikitext(args.piesuperior)
.wikitext(args.piesuperior)
.done()
.done()
.newline()
.newline()
end
end


local function hacerSubtitulos()-- Subtítulos de la ficha
local function hacerSubtitulos()-- Subtítulos de la ficha
if args.subtitulo then
if args.subtitulo then
args.subtitulo1 = args.subtitulo
args.subtitulo1 = args.subtitulo
end
end
if args.clasesubtitulo then
if args.clasesubtitulo then
args.clasesubtitulo1 = args.clasesubtitulo
args.clasesubtitulo1 = args.clasesubtitulo
end
end
local subtitulonumero = getArgNums('subtitulo')
local subtitulonumero = getArgNums('subtitulo')
for k, num in ipairs(subtitulonumero) do
for k, num in ipairs(subtitulonumero) do
anadirfila({
anadirfila({
datos = args['subtitulo' .. num],
datos = args['subtitulo' .. num],
estilodatos = args['estilosubtitulo' .. num] or args.estilosubtitulo,
estilodatos = args['estilosubtitulo' .. num] or args.estilosubtitulo,
clase = args.clasesubtitulo,
clase = args.clasesubtitulo,
clasefila = args['clasesubtitulo' .. num]
clasefila = args['clasesubtitulo' .. num]
})
})
end
end
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


local function hacerfilassuperiores()-- filas encima de imágenes laterales
if args.estilodatosup then
if args.datosup then
args.estilodatosup1 = args.estilodatosup
args.datosup1 = args.datosup
end
end
local datosupnumero = getArgNums('datosup')
if args.clasedatosup then
for k, num in ipairs(datosupnumero) do
args.clasedatosup1 = args.clasedatosup
anadirfila({
end
datos = args['datosup' .. num],

estilodatos = args['estilodatosup' .. num],
if args.estilodatosup then
clase = args.clasedatosup,
args.estilodatosup1 = args.estilodatosup
clasefila = args['clasedatosup' .. num]
end
})
local datosupnumero = getArgNums('datosup')
end
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
end

-- Imágenes que apareceran arriba de forma geminada por ejemplo escudos y banderas
local function hacerImageneslaterales()
local function hacerImageneslaterales()
if args['tamañoimagenizquierda'] == "" or args['tamañoimagenizquierda'] == nil then
-- Imagenes que apareceran arriba de forma geminada por ejemplo escudos y banderas
args['tamañoimagenizquierda'] = '100px'
end
if args['tamañoimagenizquierda'] == "" or args['tamañoimagenizquierda'] == nil then
if args['tamañoimagenderecha'] == "" or args['tamañoimagenderecha'] == nil then
args['tamañoimagenizquierda'] = '100px'
args['tamañoimagenderecha'] = '100px'
end
end
if args['tamañoimagenderecha'] == "" or args['tamañoimagenderecha'] == nil then
if args.imagenderecha and args.imagenizquierda then
args['tamañoimagenderecha'] = '100px'
if args.pieizquierdo then brcondicionalizquierdo = 'br' end
end
if args.piederecho then brcondicionalderecho = 'br' 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('cellspacing', '0em')
--.attr('padding','0em')
.attr('colspan', '3')
.css('align', 'center')
.tag('table') -- tiene que ir dentro de una tabla para que las filas no lo deformen
.css('width', '100%')
.addClass('mergedrow')
.tag('tr')
.tag('td')
.css('text-align', 'center')
.css('background-color', 'transparent')
.addClass(args.claseimagenizquierda)
.css('align', 'center')-- Se alinea en el centro horizontal
.css('text-align', 'center') -- Se alinea en el centro horizontal
.css('vertical-align', 'middle')-- Se alinea en el centro vertical
.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')-- Se alinea en el centro horizontal
.css('align', 'center')-- Se alinea en el centro horizontal
.css('vertical-align', 'middle')-- Se alinea en el centro vertical
.css('background-color', 'transparent')
.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
-- Si solo una de las dos, la imagen que aparezca estará en el centro
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() -- Puede crear un número infinito de imágenes
if args.imagen then
args.imagen1 = args.imagen
end
if args['tamañoimagen'] then
args['tamañoimagen1'] = args['tamañoimagen']
end


root
if args.pie then
.tag('tr')
args.pie1 = args.pie
.tag('td')
end
--.attr('cellspacing', '0em')
local imagenums = getArgNums('imagen')
--.attr('padding','0em')
.attr('colspan', '3')
.css('align', 'center')
.tag('table') -- tiene que ir dentro de una tabla para que las filas no lo deformen
.css('width', '100%')
.addClass('mergedrow')
.tag('tr')
.tag('td')
.css('text-align', 'center')
.css('background-color', 'transparent')
.addClass(args.claseimagenizquierda)
.css('align', 'center')-- Se alinea en el centro horizontal
.css('text-align', 'center') -- Se alinea en el centro horizontal
.css('vertical-align', 'middle')-- Se alinea en el centro vertical
.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')-- Se alinea en el centro horizontal
.css('align', 'center')-- Se alinea en el centro horizontal
.css('vertical-align', 'middle')-- Se alinea en el centro vertical
.css('background-color', 'transparent')
.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
-- Si solo una de las dos, la imagen que aparezca estará en el centro
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
for k, num in ipairs(imagenums) do
end
local pie = args['pie' .. num]

local flotante = args['imagenflotante' .. num] or false
local function hacerImagenes() -- Puede crear un número infinito de imágenes
if args['tamañoimagen'..num] == nil then
if args.imagen then
args['tamañoimagen'..num] = anchoImagen
args.imagen1 = args.imagen
end
end
imagen = {}
if args['tamañoimagen'] then
local cadenaBusqueda = mw.ustring.gsub(args['imagen'..num],'UNIQ','[') -- Para que no de problemas con ciertas plantillas
args['tamañoimagen1'] = args['tamañoimagen']
if mw.ustring.find(cadenaBusqueda, '[{[|]') == nil then -- Comprueba si hay [ o { para no añadir prefijo
end
imagen = ('[[Archivo:' .. args['imagen' .. num] .. '|'.. args['tamañoimagen' ..num] .. ']]' )

else
if args.pie then
imagen = args['imagen'..num]
args.pie1 = args.pie
end
end
local datos = HtmlBuilder.create().wikitext(imagen)
local imagenums = getArgNums('imagen')
if pie and not flotante then

datos
for k, num in ipairs(imagenums) do
.tag('br', {selfClosing = true})
local pie = args['pie' .. num]
.done()
local flotante = args['imagenflotante' .. num] or false
end
if args['tamañoimagen'..num] == nil then
if pie then
args['tamañoimagen'..num] = anchoImagen
datos
end
.tag('div')
imagen = {}
.css('display','inline')
local cadenaBusqueda = mw.ustring.gsub(args['imagen'..num],'UNIQ','[') -- Para que no de problemas con ciertas plantillas
.cssText(args.estilopie)
if mw.ustring.find(cadenaBusqueda, '[{[|]') == nil then -- Comprueba si hay [ o { para no añadir prefijo
.wikitext(pie)
imagen = ('[[Archivo:' .. args['imagen' .. num] .. '|'.. args['tamañoimagen' ..num] .. ']]' )
.done()
else
end
imagen = args['imagen'..num]
anadirfila({
end
datos = tostring(datos),
local datos = HtmlBuilder.create().wikitext(imagen)
estilodatos = args.estiloimagen,
if pie and not flotante then
clase = args.claseimagen,
datos
clasefila = args['claseimagen' .. num]
.tag('br', {selfClosing = true})
})
.done()
end
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 = args.claseimagen,
clasefila = args['claseimagen' .. num]
})
end
end
end


local function hacerFilas()
local function hacerFilas()
local filanum = union(getArgNums('seccion'), getArgNums('datos'))
local filanum = union(getArgNums('seccion'), getArgNums('datos'))
table.sort(filanum)
table.sort(filanum)
for k, num in ipairs(filanum) do
for k, num in ipairs(filanum) do
anadirfila({
anadirfila({
estilosubtitulo = depurarVacias(args['estilosubtitulo' .. num]),
estilosubtitulo = depurarVacias(args['estilosubtitulo' .. num]),
seccion = depurarVacias(args['seccion' .. num]),
seccion = depurarVacias(args['seccion' .. num]),
estiloseccion = depurarVacias(args['estilosección' .. num]),
estiloseccion = depurarVacias(args['estilosección' .. num]),
etiqueta = depurarVacias(args['etiqueta' .. num]),
etiqueta = depurarVacias(args['etiqueta' .. num]),
datos = depurarVacias(args['datos' .. num]),
datos = depurarVacias(args['datos' .. num]),
estiloetiqueta = depurarVacias(args['estiloetiqueta' .. num]),
estiloetiqueta = depurarVacias(args['estiloetiqueta' .. num]),
estilodatos = depurarVacias(args['estilodatos' .. num]),
estilodatos = depurarVacias(args['estilodatos' .. num]),
clase = depurarVacias(args['clase' .. num]),
clase = depurarVacias(args['clase' .. num]),
clasefila = depurarVacias(args['clasefila' .. num])
clasefila = depurarVacias(args['clasefila' .. num])
})
})
end
end
end
end


function tieneDatosFila(fila)
function tieneDatosFila(fila)
-- Función que devuelve true si la fila o grupo de filas (en el caso de
-- Función que devuelve true si la fila o grupo de filas (en el caso de
-- secciones) tiene datos.
-- secciones) tiene datos.

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
if tieneDatosFila(filaSeccion) then
if tieneDatosFila(filaSeccion) then
return true
return true
end
end
end
end
elseif fila.tipo == 'sucesión' or fila.tipo == 'sucesion' then
elseif fila.tipo == 'sucesión' or fila.tipo == 'sucesion' then
if depurarVacias(fila[1]) or depurarVacias(fila['anterior']) or
if depurarVacias(fila[1]) or depurarVacias(fila['anterior']) or
depurarVacias(fila[3]) or depurarVacias(fila['siguiente']) then
depurarVacias(fila[3]) or depurarVacias(fila['siguiente']) then
return true
return true
end
end
else
else
if depurarVacias(fila[2]) or depurarVacias(fila['datos']) then
if depurarVacias(fila[2]) or depurarVacias(fila['datos']) then
return true
return true
end
end
end
end

return false
return false
end
end


function anadirSucesion(argumentosSucesion)
function anadirSucesion(argumentosSucesion)
local fila = root.tag('tr')
local fila = root.tag('tr')
fila.css('font-size', '88%')
fila.css('font-size', '88%')
fila.css('text-align', 'center')
fila.css('text-align', 'center')
local celda
local width
width = '33%'
celda = fila.tag('td')
celda
.css('width', width)
.css('padding', '0.2em 0.1em 0.2em 0')
.css('vertical-align', 'middle')


local celda
if argumentosSucesion['estilo fuente'] then
local width
celda

.tag('div')
width = '33%'
.css('display','inline')

.css('font-style', argumentosSucesion['estilo fuente'])
celda = fila.tag('td')
.wikitext(argumentosSucesion.anterior)
celda
.done()
.css('width', width)
else
.css('padding', '0.2em 0.1em 0.2em 0')
celda.wikitext(argumentosSucesion.anterior)
.css('vertical-align', 'middle')
end

if argumentosSucesion['año anterior'] then
if argumentosSucesion['estilo fuente'] then
celda
celda
.tag('br')
.tag('div')
.css('display','inline')
.wikitext('(' .. argumentosSucesion['año anterior'] .. ')')
.css('font-style', argumentosSucesion['estilo fuente'])
end
.wikitext(argumentosSucesion.anterior)
.done()
celda = fila.tag('td')
else
celda
celda.wikitext(argumentosSucesion.anterior)
.css('width', width)
end
.css('padding', '0.2em 0.1em')

.css('vertical-align', 'middle')
if argumentosSucesion['año anterior'] then
.css('background-color', argumentosSucesion.color or '#E6E8FA')
celda
.tag('br')
celda
.wikitext('(' .. argumentosSucesion['año anterior'] .. ')')
.tag('div')
end
.css('display','inline')

.css('font-weight', 'bold')
celda = fila.tag('td')
.css('font-style', argumentosSucesion['estilo fuente'] or '')
celda
.wikitext(argumentosSucesion.actual or args.titulo)
.css('width', width)
.done()
.css('padding', '0.2em 0.1em')
.css('vertical-align', 'middle')
if argumentosSucesion['año'] then
.css('background-color', argumentosSucesion.color or '#E6E8FA')
celda

.tag('br')
celda
.wikitext('(' .. argumentosSucesion['año'] .. ')')
.tag('div')
end
.css('display','inline')
.css('font-weight', 'bold')
celda = fila.tag('td')
.css('font-style', argumentosSucesion['estilo fuente'] or '')
celda
.wikitext(argumentosSucesion.actual or args.titulo)
.css('width', width)
.done()
.css('padding', '0.2em 0 0.2em 0.1em')

.css('vertical-align', 'middle')
if argumentosSucesion['año'] then
celda
if argumentosSucesion['estilo fuente'] then
.tag('br')
celda
.wikitext('(' .. argumentosSucesion['año'] .. ')')
.tag('div')
end
.css('display','inline')

.css('font-style', argumentosSucesion['estilo fuente'])
celda = fila.tag('td')
.wikitext(argumentosSucesion.siguiente)
celda
.done()
.css('width', width)
else
.css('padding', '0.2em 0 0.2em 0.1em')
celda.wikitext(argumentosSucesion.siguiente)
.css('vertical-align', 'middle')
end

if argumentosSucesion['año siguiente'] then
if argumentosSucesion['estilo fuente'] then
celda
celda
.tag('br')
.tag('div')
.css('display','inline')
.wikitext('(' .. argumentosSucesion['año siguiente'] .. ')')
.css('font-style', argumentosSucesion['estilo fuente'])
end
.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
end

-- Función que compone las filas de una tabla bien la ficha o bien una sección de la misma.
function hacerFilasTabla(tabla)
function hacerFilasTabla(tabla)
local anadidoTituloSeccion = false
-- Función que compone las filas de una tabla bien la ficha o bien una sección de la misma.

for k, fila in ipairs(tabla) do
local anadidoTituloSeccion = false
if tieneDatosFila(fila) then
if fila.tipo == 'sección' or fila.tipo == 'seccion' then
for k, fila in ipairs(tabla) do
-- Añadir el título de la sección (si está informado)
if tieneDatosFila(fila) then
local tituloSeccion = depurarVacias(fila.titulo) or depurarVacias(fila['título'])
if fila.tipo == 'sección' or fila.tipo == 'seccion' then
if tituloSeccion then
-- Añadir el título de la sección (si está informado)
anadirfila({
local tituloSeccion = depurarVacias(fila.titulo) or depurarVacias(fila['título'])
estiloseccion = fila['estilotitulo'] or fila['estilotítulo'],
if tituloSeccion then
seccion = tituloSeccion
anadirfila({
})
estiloseccion = fila['estilotitulo'] or fila['estilotítulo'],
end
seccion = tituloSeccion
hacerFilasTabla(fila)
})
elseif fila.tipo == 'sección desplegable' or fila.tipo == 'seccion desplegable' then -- FALTA
end
elseif fila.tipo == 'sucesión'or fila.tipo == 'sucesion' then
hacerFilasTabla(fila)
anadirSucesion({
elseif fila.tipo == 'sección desplegable' or fila.tipo == 'seccion desplegable' then -- FALTA
['anterior'] = depurarVacias(fila[1]) or depurarVacias(fila['anterior']),
elseif fila.tipo == 'sucesión'or fila.tipo == 'sucesion' then
['actual'] = depurarVacias(fila['actual']),
anadirSucesion({
['anterior'] = depurarVacias(fila[1]) or depurarVacias(fila['anterior']),
['siguiente'] = depurarVacias(fila[3]) or depurarVacias(fila['siguiente']),
['actual'] = depurarVacias(fila['actual']),
['año anterior'] = depurarVacias(fila['año anterior']),
['siguiente'] = depurarVacias(fila[3]) or depurarVacias(fila['siguiente']),
['año'] = depurarVacias(fila['año']),
['año anterior'] = depurarVacias(fila['año anterior']),
['año siguiente'] = depurarVacias(fila['año siguiente']),
['año'] = depurarVacias(fila['año']),
['estilo fuente'] = depurarVacias(fila['estilo fuente']),
['año siguiente'] = depurarVacias(fila['año siguiente']),
['color'] = depurarVacias(fila['color'])
})
['estilo fuente'] = depurarVacias(fila['estilo fuente']),
elseif fila.tipo == 'dos columnas' then -- FALTA
['color'] = depurarVacias(fila['color'])
elseif fila.tipo == 'tres columnas' then -- FALTA
})
else -- Etiqueta + Datos o solo Datos
elseif fila.tipo == 'dos columnas' then -- FALTA
anadirfila({
elseif fila.tipo == 'tres columnas' then -- FALTA
etiqueta = depurarVacias(fila[1]) or depurarVacias(fila['etiqueta']),
else -- Etiqueta + Datos o solo Datos
datos = depurarVacias(fila[2]) or depurarVacias(fila['datos']),
anadirfila({
estiloetiqueta = fila['estiloetiqueta'] or tabla['estiloetiqueta'],
etiqueta = depurarVacias(fila[1]) or depurarVacias(fila['etiqueta']),
estilodatos = fila['estilodatos'] or tabla['estilodatos'],
datos = depurarVacias(fila[2]) or depurarVacias(fila['datos']),
estiloetiqueta = fila['estiloetiqueta'] or tabla['estiloetiqueta'],
clase = fila['clase'] or tabla['clase'],
estilodatos = fila['estilodatos'] or tabla['estilodatos'],
clasefila = fila['clasefila'] or tabla['clasefila']
})
clase = fila['clase'] or tabla['clase'],
end
clasefila = fila['clasefila'] or tabla['clasefila']
end
})
end
end
end
end
end
end


local function hacerBarraDeNavegacion()-- Crea en la parte inferior un enlace a la plantilla que se de con nombre
local function hacerBarraDeNavegacion()-- Crea en la parte inferior un enlace a la plantilla que se de con nombre
if not args.nombre then return end
if not args.nombre then return end

root
root
.tag('tr')
.tag('tr')
.tag('td')
.tag('td')
.attr('colspan', '3')
.attr('colspan', '3')
.css('text-align', 'right')
.css('text-align', 'right')
.wikitext(mw.getCurrentFrame():expandTemplate({
.wikitext(mw.getCurrentFrame():expandTemplate({
title = 'navbar',
title = 'navbar',
args = { args.nombre, mini = 1 }
args = { args.nombre, mini = 1 }
}))
}))
end
end


local function hacerBarraWikidata()-- Crea en la parte inferior un enlace al ítem de Wikidata
local function hacerBarraWikidata()-- Crea en la parte inferior un enlace al ítem de Wikidata
local wikibase = require('Módulo:Wikibase')
local wikibase = require('Módulo:Wikibase')
local enlacePagina = mw.title.getCurrentTitle().text
local enlacePagina = mw.title.getCurrentTitle().text
local etiquetaPagina = mw.ustring.gsub(enlacePagina,'%s%(.*%)','')
local etiquetaPagina = mw.ustring.gsub(enlacePagina,'%s%(.*%)','')
local entidad = args.entidad or wikibase.id()
local entidad = args.entidad or wikibase.id()
local textoPie = ""
local textoPie = ""
local finalFicha = "</table>"
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
if (args.child == 'si' or args.integrada == 'sí' or args.uni == 'si' or args.uni == 'sí' or args.wikidata == 'no') or (mw.title.getCurrentTitle().namespace ~= 0 and mw.title.getCurrentTitle().namespace ~= 104 and not args.entidad) then
textoPie = ''
if args.tipo == 'cierre' then
elseif entidad ~= "" and entidad ~= nil then
if args.wikidata == 'no' then
textoPie = '<div class="plainlinks wikidata-link" style="font-size: 0.85em">&#x5B;[[d:' .. tostring(entidad) .. '|editar datos en Wikidata]]&#x5D;</div>'
textoPie = ''
if args.entidad and (mw.title.getCurrentTitle().namespace == 0 or mw.title.getCurrentTitle().namespace == 104) then
else
textoPie = textoPie .. '[[Categoría:Wikipedia:Artículos con fichas que utilizan acceso arbitrario]]'
if entidad ~= '' and entidad ~= nil then
end
textoPie = '<div class="plainlinks wikidata-link" style="font-size: 0.85em">&#x5B;[[d:' .. tostring(entidad) .. '|editar datos en Wikidata]]&#x5D;</div>'
else
if args.entidad and (mw.title.getCurrentTitle().namespace == 0 or mw.title.getCurrentTitle().namespace == 104) then textoPie = textoPie .. '[[Categoría:Wikipedia:Artículos con fichas que utilizan acceso arbitrario]]' end
textoPie = "<small>'''Página no enlazada a [[Wikidata]]'''\n"..
else
textoPie = "<small>'''Página no enlazada a [[Wikidata]]'''\n"..
"* Si no existe en otras Wikipedias: [<span class= plainlinks>[https://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
end
end
elseif entidad ~= "" and entidad ~= nil then
textoPie = '<small>[<span class= plainlinks>[[d:' .. tostring(entidad) .. '|editar datos en Wikidata]]</span>]</small>'
if args.entidad and (mw.title.getCurrentTitle().namespace == 0 or mw.title.getCurrentTitle().namespace == 104) then textoPie = textoPie .. '[[Categoría:Wikipedia: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&nbsp;nuevo&nbsp;ítem]]</span>\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&nbsp;nuevo&nbsp;ítem]]</span>\n"..
"* Si existe en otras Wikipedias: [<span class=plainlinks>[[:d:Special:ItemByTitle|busca&nbsp;ítem&nbsp;para&nbsp;enlazar]]</span>]\n"..
"* Si existe en otras Wikipedias: [<span class=plainlinks>[[:d:Special:ItemByTitle|busca&nbsp;ítem&nbsp;para&nbsp;enlazar]]</span>]\n"..
"y añade el enlace en español: ".. enlacePagina ..".</small>"
"y añade el enlace en español: ".. enlacePagina ..".</small>"
end
end
if textoPie ~= '' then
if textoPie ~= '' then
root
root
.tag('tr')
.tag('tr')
.tag('td')
.tag('td')
.addClass('noprint')
.addClass('noprint')
.attr('colspan', '3')
.attr('colspan', '3')
.css('text-align', 'left')
.css('text-align', 'left')
.wikitext(textoPie)
.wikitext(textoPie)
if args.tipo == 'cierre' then
end
root
.wikitext(finalFicha)
end
end
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:Wikipedia:Artículos que usan ficha sin datos en filas]]')
root.wikitext('[[Categoría:Wikipedia:Artículos que usan ficha sin datos en filas]]')
end
end

if CategorizacionAByAD.hasAnyBadge() == '1' then
if CategorizacionAByAD.hasAnyBadge() == '1' then
root.wikitext(CategorizacionAByAD.badgesCategories())
root.wikitext(CategorizacionAByAD.badgesCategories())
end
end
end
end


function _infobox()
function _infobox()
if args.child ~= 'si' and args.integrada ~= 'sí' then
if args.child ~= 'si' and args.integrada ~= 'sí' and args.uni ~= 'si' and args.uni ~= 'sí' then
root = HtmlBuilder.create('table')
root = HtmlBuilder.create('table')
root -- Estilo de toda la ficha
.addClass('infobox infobox_v2')
root -- Estilo de toda la ficha
.addClass('infobox')
.addClass(args.clase)
.cssText('width:22.7em; line-height: 1.4em; text-align:left; padding:.23em') -- Lo mismo que la plantilla:Ficha
.addClass(args.clase)
.cssText(args.estilo)
.cssText('width:22.7em; line-height: 1.4em; text-align:left; padding:.23em') -- Lo mismo que la plantilla:Ficha
if args.estilo and (mw.title.getCurrentTitle().namespace == 10) then -- Para que sólo lo añada en el espacio de nombres plantilla
.cssText(args.estilo)
root.wikitext('[[Categoría:Wikipedia:Fichas con el parámetro estilo]]')
if args.estilo and (mw.title.getCurrentTitle().namespace == 10) then -- Para que sólo lo añada en el espacio de nombres plantilla
end
root.wikitext('[[Categoría:Wikipedia:Fichas con el parámetro estilo]]')
end
hacerTitulo()
hacerFilaArriba()
else
root = HtmlBuilder.create()
if args.titulo then
root.wikitext("'''" .. args.titulo .. "'''")
end
end


hacerTitulo()
hacerSubtitulos()
hacerFilaArriba()
hacerImagenSuperior()
else
hacerImageneslaterales()
root = HtmlBuilder.create()
hacerfilassuperiores()

hacerImagenes()
if not args[1] then
if args.tipo == 'cabecera' then
root
hacerFilas()
.wikitext('<table class="infobox infobox_v2')
else
.wikitext(args.clase)
hacerFilasTabla(args)
.wikitext('" style="width:22.7em; line-height: 1.4em; text-align:left; padding:.23em; ')
end
.wikitext(args.estilo)
hacerImagenInferior()
.wikitext('">')
hacerPieDeTabla()
hacerTitulo()
hacerBarraDeNavegacion()
hacerFilaArriba()
hacerBarraWikidata()
end
hacerCategoriasSeguimiento()
end

return tostring(root)
hacerSubtitulos()
hacerImagenSuperior()
hacerImageneslaterales()
hacerfilassuperiores()
hacerImagenes()
if not args[1] then
hacerFilas()
else
hacerFilasTabla(args)
end
hacerImagenInferior()
hacerPieDeTabla()
hacerBarraDeNavegacion()
hacerBarraWikidata()
hacerCategoriasSeguimiento()

return tostring(root)
end
end

local function touchParameters(prefixTable, origArgs, step)
local function touchParameters(prefixTable, origArgs, step)
-- Analiza los parámetros con los prefijos dados, en orden por lotes lotes y con el tamaño especificado a step.
-- Analiza los parámetros con los prefijos dados, en orden por lotes lotes y con el tamaño especificado a step.
-- Esto es para evitar referencias etc aparezca en el orden equivocado.
-- Esto es para evitar referencias etc aparezca en el orden equivocado.
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)
end
end
if step and type(step) ~= 'number' then
if step and type(step) ~= 'number' then
error("Detectado valor no numérico en step.", 2)
error("Detectado valor no numérico en step.", 2)
end
end

step = step or 20 -- Si no se le da el tamaño a step, el valor predeterminado es 20.
step = step or 20 -- Si no se le da el tamaño a step, el valor predeterminado es 20.
local temp
local temp
local a = 1 -- variable de contador.
local a = 1 -- variable de contador.
local moreArgumentsExist = true
local moreArgumentsExist = true
for j,v in ipairs(prefixTable) do
for j,v in ipairs(prefixTable) do
if not type(v) == "string" then
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)
error("Detectado un valor que no es string en el prefijo de la tabla por la función touchParameters.", 2)
end
end
temp = origArgs[v]
temp = origArgs[v]
end
end
while moreArgumentsExist == true do
while moreArgumentsExist == true do
moreArgumentsExist = false
moreArgumentsExist = false
for i = a, a + step - 1 do
for i = a, a + step - 1 do
for j,v in ipairs(prefixTable) do
for j,v in ipairs(prefixTable) do
temp = origArgs[v .. tostring(i)]
temp = origArgs[v .. tostring(i)]
if temp then
if temp then
moreArgumentsExist = true
moreArgumentsExist = true
end
end
end
end
end
end
a = a + step
a = a + step
end
end
end
end

function p.infobox(frame)
function p.infobox(frame)
local origArgs
local origArgs
marco = frame
marco = frame
-- Si se llama a través de #invoke, utilice los argumentos pasados ​​a la plantilla de invocación.
-- Si se llama a través de #invoke, utilice los argumentos pasados ​​a la plantilla de invocación.
-- De lo contrario, para fines de prueba, asume args que se pasan directamente como parámetros.
-- De lo contrario, para fines de prueba, asume args que se pasan directamente como parámetros.
if frame == mw.getCurrentFrame() then
if frame == mw.getCurrentFrame() then
origArgs = frame:getParent().args
origArgs = frame:getParent().args
else
else
origArgs = frame
origArgs = frame
end
end
-- Analizar los parámetros de datos en el mismo orden que la plantilla {{ficha}} lo hace, por lo que
-- Analizar los parámetros de datos en el mismo orden que la plantilla {{ficha}} lo hace, por lo que
-- referencias etc. se mostrarán en los lugares previstos.
-- referencias etc. se mostrarán en los lugares previstos.
local temp
local temp
temp = origArgs.titulo
temp = origArgs.titulo
temp = origArgs.arriba
temp = origArgs.arriba
touchParameters({'subtitulo'}, origArgs, 5)
touchParameters({'subtitulo'}, origArgs, 5)
touchParameters({'imagen', 'pie'}, origArgs, 5)
touchParameters({'imagen', 'pie'}, origArgs, 5)
touchParameters({'seccion', 'etiqueta', 'datos'}, origArgs, 20)
touchParameters({'seccion', 'etiqueta', 'datos'}, origArgs, 20)
temp = origArgs.piedetabla
temp = origArgs.piedetabla

-- El analizador de funciones considera que una cadena vacía es falsa, por lo que para preservar el anterior
-- comportamiento de {{Ficha}}, debe cambiar los argumentos vacíos a cero, por lo que Lua los considerará
-- que son falsos también (excepto parámetros 'title cursiva', que especifica un comportamiento diferente
-- dependiendo de si está ausente o vacío)
args = {}
for k, v in pairs(origArgs) do
if v ~= '' then
args[k] = v
end
end


return _infobox()
-- El analizador de funciones considera que una cadena vacía es falsa, por lo que para preservar el anterior
-- comportamiento de {{Ficha}}, debe cambiar los argumentos vacíos a cero, por lo que Lua los considerará
-- que son falsos también (excepto parámetros 'title cursiva', que especifica un comportamiento diferente
-- dependiendo de si está ausente o vacío)
args = {}
for k, v in pairs(origArgs) do
if v ~= '' then
args[k] = v
end
end
return _infobox()
end
end



Revisión del 13:04 18 oct 2020

local p = {}

local HtmlBuilder = require('Module:HtmlBuilder') local CategorizacionAByAD = require('Módulo:Categorización de buenos y destacados') local marco = {} local args local root local anchoImagen = '245px'

-- devuelve la unión de los valores de dos tablas, como una secuencia function union(t1, t2) 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 detectaTablas(texto) if mw.ustring.find(texto,'{|', plain ) or mw.ustring.find(texto,'{|', plain ) or mw.ustring.find(texto,'*', plain ) or mw.ustring.find(texto,'#', plain )then return ' \n'..texto else return texto end end

local function anadirfila(rowArgs) if rowArgs.seccion then root .tag('tr') .tag('th') .attr('colspan', 3) .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(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(detectaTablas(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') .css('background-color', args.colorfondo or args.colorfondotitulo or 'transparent') .css('color', args.colortexto or 'black') .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 = (''.. args['tamañoimageninferior'] .. '' ) else imageninferior = args.imageninferior end

root .tag('tr') .tag('td') .attr('colspan', '3') .addClass(args.claseimageninferior) .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 = (''.. args['tamañoimagensuperior'] .. '' ) else imagensuperior = args.imagensuperior end

root .tag('tr') .tag('td') .attr('colspan', '3') .addClass(args.claseimagensuperior) .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 imágenes 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

-- Imágenes que apareceran arriba de forma geminada por ejemplo escudos y banderas local function hacerImageneslaterales() 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('cellspacing', '0em') --.attr('padding','0em') .attr('colspan', '3') .css('align', 'center') .tag('table') -- tiene que ir dentro de una tabla para que las filas no lo deformen .css('width', '100%') .addClass('mergedrow') .tag('tr') .tag('td') .css('text-align', 'center') .css('background-color', 'transparent') .addClass(args.claseimagenizquierda) .css('align', 'center')-- Se alinea en el centro horizontal .css('text-align', 'center') -- Se alinea en el centro horizontal .css('vertical-align', 'middle')-- Se alinea en el centro vertical .cssText(args.estiloimagenizquierda) .wikitext('' .. args['tamañoimagenizquierda'] .. '' ) .tag(brcondicionalizquierdo) .tag('div') .css('display','inline') .cssText(args.estilopieizquierdo) .wikitext(args.pieizquierdo) .done() .tag('td') .css('text-align', 'center')-- Se alinea en el centro horizontal .css('align', 'center')-- Se alinea en el centro horizontal .css('vertical-align', 'middle')-- Se alinea en el centro vertical .css('background-color', 'transparent') .addClass(args.claseimagenderecha) .cssText(args.estiloimagenderecha) .wikitext('' .. 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 -- Si solo una de las dos, la imagen que aparezca estará en el centro 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() -- Puede crear un número infinito de imágenes if args.imagen then args.imagen1 = args.imagen end if args['tamañoimagen'] then args['tamañoimagen1'] = args['tamañoimagen'] 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 imagen = {} local cadenaBusqueda = mw.ustring.gsub(args['imagen'..num],'UNIQ','[') -- Para que no de problemas con ciertas plantillas if mw.ustring.find(cadenaBusqueda, '[{[|]') == nil then -- Comprueba si hay [ o { para no añadir prefijo imagen = ('[[Archivo:' .. args['imagen' .. num] .. '|'.. args['tamañoimagen' ..num] .. ']]' ) 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 = args.claseimagen, 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) -- Función que devuelve true si la fila o grupo de filas (en el caso de -- secciones) tiene datos.

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 fila = root.tag('tr') fila.css('font-size', '88%') fila.css('text-align', 'center')

local celda local width

width = '33%'

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

-- Función que compone las filas de una tabla bien la ficha o bien una sección de la misma. 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 -- Añadir el título de la sección (si está informado) 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 -- FALTA 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 -- FALTA elseif fila.tipo == 'tres columnas' then -- FALTA else -- Etiqueta + Datos o solo Datos 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()-- Crea en la parte inferior un enlace a la plantilla que se de con nombre 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()-- Crea en la parte inferior un enlace al ítem de Wikidata local wikibase = require('Módulo:Wikibase') local enlacePagina = mw.title.getCurrentTitle().text local etiquetaPagina = mw.ustring.gsub(enlacePagina,'%s%(.*%)',) local entidad = args.entidad or wikibase.id() local textoPie = ""

local finalFicha = ""

if (args.child == 'si' or args.integrada == 'sí' or args.uni == 'si' or args.uni == 'sí' or args.wikidata == 'no') or (mw.title.getCurrentTitle().namespace ~= 0 and mw.title.getCurrentTitle().namespace ~= 104 and not args.entidad) then if args.tipo == 'cierre' then if args.wikidata == 'no' then textoPie = else if entidad ~= and entidad ~= nil then

textoPie = '

'

if args.entidad and (mw.title.getCurrentTitle().namespace == 0 or mw.title.getCurrentTitle().namespace == 104) then textoPie = textoPie .. end else textoPie = "Página no enlazada a Wikidata\n".. "* Si no existe en otras Wikipedias: ["..mw.uri.encode(enlacePagina,WIKI) .."&label="..mw.uri.encode(etiquetaPagina,WIKI) .." Crea nuevo ítem]\n".. "* Si existe en otras Wikipedias: [Busca ítem para enlazar]\n".. "y añade el enlace en español: ".. enlacePagina .."." end end end elseif entidad ~= "" and entidad ~= nil then textoPie = '[editar datos en Wikidata]' if args.entidad and (mw.title.getCurrentTitle().namespace == 0 or mw.title.getCurrentTitle().namespace == 104) then textoPie = textoPie .. end else textoPie = "Página no enlazada a Wikidata\n".. "* Si no existe en otras Wikipedias: ["..mw.uri.encode(enlacePagina,WIKI) .."&label="..mw.uri.encode(etiquetaPagina,WIKI) .." crea nuevo ítem]\n".. "* Si existe en otras Wikipedias: [busca ítem para enlazar]\n".. "y añade el enlace en español: ".. enlacePagina .."." end if textoPie ~= then root .tag('tr') .tag('td') .addClass('noprint') .attr('colspan', '3') .css('text-align', 'left') .wikitext(textoPie) if args.tipo == 'cierre' then root .wikitext(finalFicha) end 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() end

if CategorizacionAByAD.hasAnyBadge() == '1' then root.wikitext(CategorizacionAByAD.badgesCategories()) end end

function _infobox() if args.child ~= 'si' and args.integrada ~= 'sí' and args.uni ~= 'si' and args.uni ~= 'sí' then root = HtmlBuilder.create('table') root -- Estilo de toda la ficha .addClass('infobox infobox_v2') .addClass(args.clase) .cssText('width:22.7em; line-height: 1.4em; text-align:left; padding:.23em') -- Lo mismo que la plantilla:Ficha .cssText(args.estilo) if args.estilo and (mw.title.getCurrentTitle().namespace == 10) then -- Para que sólo lo añada en el espacio de nombres plantilla root.wikitext() end

hacerTitulo() hacerFilaArriba() else root = HtmlBuilder.create()

if args.tipo == 'cabecera' then root

.wikitext('

') hacerTitulo() hacerFilaArriba() end end hacerSubtitulos() hacerImagenSuperior() hacerImageneslaterales() hacerfilassuperiores() hacerImagenes() if not args[1] then hacerFilas() else hacerFilasTabla(args) end hacerImagenInferior() hacerPieDeTabla() hacerBarraDeNavegacion() hacerBarraWikidata() hacerCategoriasSeguimiento() return tostring(root) end local function touchParameters(prefixTable, origArgs, step) -- Analiza los parámetros con los prefijos dados, en orden por lotes lotes y con el tamaño especificado a step. -- Esto es para evitar referencias etc aparezca en el orden equivocado. 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 -- Si no se le da el tamaño a step, el valor predeterminado es 20. local temp local a = 1 -- variable de contador. 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 -- Si se llama a través de #invoke, utilice los argumentos pasados ​​a la plantilla de invocación. -- De lo contrario, para fines de prueba, asume args que se pasan directamente como parámetros. if frame == mw.getCurrentFrame() then origArgs = frame:getParent().args else origArgs = frame end -- Analizar los parámetros de datos en el mismo orden que la plantilla

lo hace, por lo que

-- referencias etc. se mostrarán en los lugares previstos.

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

-- El analizador de funciones considera que una cadena vacía es falsa, por lo que para preservar el anterior

-- comportamiento de

, debe cambiar los argumentos vacíos a cero, por lo que Lua los considerará

-- que son falsos también (excepto parámetros 'title cursiva', que especifica un comportamiento diferente -- dependiendo de si está ausente o vacío) args = {} for k, v in pairs(origArgs) do if v ~= then args[k] = v end end

return _infobox() end

return p