Módulo:Ficha
De MundoConan Wiki
Más acciones
La documentación para este módulo puede ser creada en Módulo:Ficha/doc
-- Módulo:Ficha — fichas (infobox) de MundoConan Wiki.
-- Las definiciones de cada tipo están en Módulo:Ficha/datos.
-- Uso desde una plantilla: {{#invoke:Ficha|ficha|tipo=personaje}}
local p = {}
local datos = mw.loadData('Módulo:Ficha/datos')
local COLORES = {
azul = true, rojo = true, negro = true, dorado = true, verde = true, morado = true,
}
local function limpio(v)
if v == nil then
return nil
end
v = mw.text.trim(v)
if v == '' then
return nil
end
return v
end
-- Acepta «Conan.png», «Archivo:Conan.png», «File:Conan.png» o un [[...]] / <tabber> ya formado
local function imagen(valor, ancho)
if valor:find('[[', 1, true) or valor:find('<', 1, true) then
return valor
end
valor = valor:gsub('^[Aa]rchivo:', ''):gsub('^[Ff]ile:', ''):gsub('^[Ii]magen:', '')
return '[[Archivo:' .. valor .. '|' .. ancho .. 'px|link=]]'
end
function p.ficha(frame)
local tipo = frame.args.tipo or 'personaje'
local def = datos[tipo]
if not def then
return '<strong class="error">Módulo:Ficha: tipo de ficha desconocido «' .. tipo .. '».</strong>'
end
local args = {}
for k, v in pairs(frame:getParent().args) do
args[k] = limpio(v)
end
local titulo = mw.title.getCurrentTitle()
local color = args.color and COLORES[mw.ustring.lower(args.color)] and mw.ustring.lower(args.color) or def.color
local caja = mw.html.create('aside')
:addClass('mc-ficha')
:addClass('mc-ficha--' .. color)
:attr('role', 'complementary')
:attr('aria-label', 'Ficha')
local cab = caja:tag('div'):addClass('mc-ficha__titulo')
cab:tag('div'):addClass('mc-ficha__nombre'):wikitext(args.nombre or titulo.text)
if args['japonés'] then
cab:tag('div'):addClass('mc-ficha__japones'):wikitext(args['japonés'])
end
if args.imagen then
local img = caja:tag('div'):addClass('mc-ficha__imagen')
img:wikitext(imagen(args.imagen, 270))
if args.pie then
img:tag('div'):addClass('mc-ficha__pie'):wikitext(args.pie)
end
end
local hayFilas = false
for _, sec in ipairs(def.secciones) do
local filas = {}
for _, campo in ipairs(sec.campos) do
local valor = args[campo[1]]
if valor then
table.insert(filas, { campo[2], valor, campo.oculto })
end
end
if #filas > 0 then
hayFilas = true
if sec.titulo then
caja:tag('div'):addClass('mc-ficha__seccion'):wikitext(sec.titulo)
end
local dl = caja:tag('dl'):addClass('mc-ficha__datos')
for _, f in ipairs(filas) do
local fila = dl:tag('div'):addClass('mc-ficha__fila')
fila:tag('dt'):wikitext(f[1])
local dd = fila:tag('dd')
if f[3] then
-- Spoiler: oculto hasta que se pulsa (mw-collapsible, funciona sin JS de sitio)
dd:tag('div')
:addClass('mw-collapsible mw-collapsed mc-ficha__oculto')
:attr('data-expandtext', 'mostrar')
:attr('data-collapsetext', 'ocultar')
:tag('div'):addClass('mw-collapsible-content'):newline():wikitext(f[2])
else
dd:newline():wikitext(f[2])
end
end
end
end
if not hayFilas and not args.imagen then
caja:tag('div'):addClass('mc-ficha__vacia'):wikitext('Ficha vacía: rellena sus campos editando la página.')
end
local salida = frame:extensionTag('templatestyles', '', { src = 'Plantilla:Ficha/styles.css' }) .. tostring(caja)
-- Categoría automática solo en artículos
if titulo.namespace == 0 and def.categoria then
salida = salida .. '[[Categoría:' .. def.categoria .. ']]'
end
return salida
end
return p