Módulo:Ficha
Uso
Este módulo permite crear fichas específicas como, por ejemplo, las {{ficha de persona}}
o la {{ficha de embalse}}
.
Para ello, el módulo puede llamarse desde una ficha que utilice la plantilla {{ficha}}
, la cual llama a este módulo, por ejemplo:
{{Ficha |titulo = }}
, la cual a su vez hace:
{{#invoke:Ficha|infobox}}
o que llame a otro módulo Lua, por ejemplo, el módulo:ficha de persona que llame a su vez a este módulo. Para ello en la ficha de persona:
{{#invoke:Ficha de persona|Ficha}}
Después en el módulo correspondiente hay que escribir algo de la forma:
local z = {}
-- Módulos y funciones externas
local moduloArgumentos = require('Módulo:Argumentos')
local moduloFicha = require('Módulo:Ficha')
function z.Ficha(frame)
--Obtener una copia de los argumentos eliminando los argumentos sin valor
local args = moduloArgumentos.obtenerArgumentosConValor(frame)
local fichaXXX = {
titulo = args.titulo,
resto de parámetros
...
}
return moduloFicha.infobox(fichaXXX)
end
return z
Parámetros
Lo que sigue es una descripción de los parámetros utilizados cuando se llama al módulo directamente desde otro módulo utilizando las ventajas que dan las tablas de Lua. Para los parámetros cuando se llama al módulo desde una plantilla que utiliza la plantilla de Ficha véase {{ficha}}
.
Título y subtítulos
Se recomienda siempre establecer título a la ficha. También se pueden establecer subtítulos a la ficha.
titulo
: Título que aparecerá en la cabecera.subtitulo<número>
: Subtítulos de la ficha.arriba
: Fila de la parte superior.
- Configuración
-
colorfondo
: Color del fondo de la cabecera.colortexto
: Color del texto de la cabecera.tipocabecera
: Tipo de imagen que aparecerá de fondo en la cabecera.
Imágenes
Todas las imágenes son centradas de manera predeterminada. Solo debe especificarse el nombre de las imágenes. Por ejemplo: «example.png». Si el valor no coincide con una imagen existente por ejemplo si se emplea una plantilla se mostrará solo el valor literal.
imagen<número>
: Imágenes de la ficha. Tiene número ilimitado y se comprueba si la imagen existe y de lo contrario devuelve el valor literal (pensado para se puedan usar plantillas).imagenmodooscuro<número>
: En la imagen principal de la ficha, añadirá la claseskin-invert-image
, que invierte los colores de la imagen en modo oscuro si se aplicaimagenizquierda
/imagenderecha
: Aprecerán una junto a la otra centrado el conjunto de ambas si se dan las dos o centrada una sola imagen si se da solo una.imageninferior
: Imagen que apaecerá al pie de la ficha.
- Todos tiene los siguiente parámetros adicionales
-
tamañoimagen<numero>
: Tamaño de imagen. (si se pone número solo afectará a esa imagen)tamañoimagenizquierda
: Tamaño de la imagen izquierda.tamañoimagenderecha
: Tamaño de la imagen derecha.tamañoimageninferior
: Tamaño de la imagen de pie de tabla.pie<número>
: Pie de imagen (si se pone número solo afectará a esa imagen).piederecho
: Pie de la imagen derecha.pieizquierdo
: Pie de la imagen izquierda. (si se pone número solo afectará a esa imagen)pieimageninferior
: Pie de la imagen de pie de tabla.
Estilos CSS
Estos parámetros son usados para agregar código CSS en el atributo «style» de los elementos de la plantilla; son los que permiten cambiar la apariencia de estos elementos. Por lo tanto, deberán ser usados con sutileza para mantener un aspecto general estético y atractivo.
clase
: Clase (class) de toda la ficha.estilo
: Estilo de toda la fichaclasefila
: Clase de todas las filasclasetitulo
: Clase de la cabecera. Establece la imagen de la cabecera. Para usar cabecera mediana añadirMedia=si
.estilotitulo
:clasesubtitulo<número>
estilosubtitulo<número>
claseimagen
estiloimagen
Filas
Para añadir una fila basta añadir una tabla de la forma:
{..., ..., estiloetiqueta=..., estilodatos=..., clase=..., clasefila=...},
donde el primer parámetro es la etiqueta y el segundo parámetro son los datos. La fila solo se mostrará si está informado el parámetro para los datos. Por ejemplo:
{'Residencia', arg['residencia'], estiloetiqueta='width:33%;', clase='plainlist'},
Secciones
Para incluir una sección basta incluir una tabla Lua del tipo "sección":
{tipo='sección', titulo=..., estilotitulo=..., lista de filas separadas por coma},
donde:
titulo
: título de la sección. La sección solo se mostrará si alguna de las filas se muestra no debiendo a diferencia de lo que ocurre cuando se utiliza la plantilla Ficha de validarlo espresamente.estilotitulo
: estilo CSS del título de la sección
Sucesiones
Para añadir una sucesión habrá que añadir una table del tipo "sucesión":
{tipo='sucesión', anterior=..., ...},
La lista completa de los parámetros son:
anterior
:actual
:siguiente
:año anterior
:año
:año siguiente
:estilo fuente
:color
:
Otros campos
piedetabla
: Pie de la ficha. Generalmente este espacio se reserva para notas.nombre
: Nombre de la plantilla que enlazará en la barra de navegación.
Ejemplo
local z = {}
-- Módulos y funciones externas
local moduloArgumentos = require('Módulo:Argumentos')
local moduloFicha = require('Módulo:Ficha')
function z.Ficha(frame)
--Obtener una copia de los argumentos eliminando los argumentos sin valor
local args = moduloArgumentos.obtenerArgumentosConValor(frame)
local fichaEjemplo = {
titulo = 'Título de prueba',
estilo = 'background-color:#e0ffff; width:20em;',
tipocabecera = 'comunicación',
colorfondotitulo = '#ff0000',
estiloetiqueta = 'width:33%;',
{'Etiqueta1', 'Datos1'},
{'Etiqueta2', 'Datos2'},
{'', 'Datos3'},
{tipo='sección',
titulo='Sección de prueba',
{'Etiqueta4', 'Datos4'},
},
{tipo='sección',
titulo = 'Cronología de [[J. R. R. Tolkien]]',
estilotitulo = 'background-color:#ff0000;',
{tipo='sucesión',
['anterior'] = '[[Egidio, el granjero de Ham]]',
['año anterior'] = '1949',
['actual'] = '[[El Señor de los Anillos]]',
['año'] = '1954',
['siguiente'] = '[[Las aventuras de Tom Bombadil y otros poemas de El Libro Rojo]]',
['año siguiente'] = '1962',
['estilo fuente'] = 'italic',
},
},
piedetabla = 'Pie de tabla',
}
return moduloFicha.infobox(fichaEjemplo)
end
return z
debería producir:
Título de prueba | |||||
---|---|---|---|---|---|
Etiqueta 1 | Datos 1 | ||||
Etiqueta 2 | Datos 2 | ||||
Datos 3 | |||||
Sección de prueba | |||||
Etiqueta 4 | Datos 4 | ||||
Cronología de J. R. R. Tolkien
| |||||
Pie de tabla |
--
-- Este módulo es para implementar en {{Ficha}}
--
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 = '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(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)
-- Se añade un salto de línea porque si no se hace así y por ejemplo en los
-- datos hay una lista con asteriscos en el primer elemento se muestra
-- un asterisco.
-- Se trata de un error que ya ocurre con tablas normales sin LUA. Por ejemplo
-- {|
-- | * elemento1
-- * elemento2
-- |}
-- El salto de línea ya se producía en la plantilla Ficha/fila
.wikitext('\n' .. rowArgs.datos)
--.newline()
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 '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('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
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
-- Comprobamos si se ha activado el argumento imagenmodooscuro para esta imagen
local claseInversion = args['imagenmodooscuro' .. num] and 'class=skin-invert-image' or ''
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] .. '|' .. 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)
-- 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
function hacerFilasTabla(tabla)
-- Función que compone las filas de una tabla bien la ficha o bien una sección de la misma.
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 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: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 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:Wikipedia:Artículos que usan ficha sin datos en filas]]')
end
if CategorizacionAByAD.hasAnyBadge() == '1' then
root.wikitext(CategorizacionAByAD.badgesCategories())
end
end
function _infobox()
if args.child ~= 'si' and args.integrada ~= 'sí' then
root = HtmlBuilder.create('table')
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
.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('[[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
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)
-- 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 {{ficha}} 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 {{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
return p