Esti módulu ye pa crear una ficha xenérica pa que la puedan usar otros módulos o plantíes pa crear fiches específiques. Los argumentos d'esti módulu tán traducíos al asturianu colos mesmos nomes que na plantía:Ficha de manera que pueden usase direutamente como parámetros.

Pa invocalu nes plantíes {{#invoke:Ficha|Infobox}}

Parámetros

editar

Notes:

  • Los parámetros qu'incluyan <númberu>, indiquen que tien d'escribise al final del parámetru un númberu del 1 al ∞. Por exemplu, el códigu «|estilusección65 = font-style: italic;» establecería l'estilu tipográficu de la sección 65 como cursiva.
  • Si se define una sección, nun tien d'usase'l mesmu númberu de la sección nos campos d'etiquetes o datos; si se fai, nun s'amosará'l conteníu d'estos campos.

Títulu y subtítulos

editar

Recomiéndase siempre dar un títulu a la ficha. Tamién pueden ponese subtítulos a la ficha.

  • titulu: Títulu qu'apaecerá na cabecera.
  • subtitulu<número>: Subtítulos de la ficha.
  • arriba: Fila de la parte superior.
Configuración
  • colorfondu: Color del fondu de la cabecera.
  • colortestu: Color del testu de la cabecera.
  • tipucabecera: Tipu d'imaxe qu'apaecerá de fondu na cabecera.

Imáxenes

editar

Toles imáxenes céntrense de manera predeterminada. Solo tien d'especificase'l nome de les imáxenes. Por exemplu: «example.png». Si'l valor nun coincide con una imaxe esistente; por exemplu, si s'emplega una plantía amosaráse solo el valor lliteral.

  • imaxe<númberu>: Imáxenes de la ficha. Tien un númberu sin llende; se comprueba si la imaxe existe y, de lo contrario, devuelve el valor lliteral (pensao para puedan usase plantíes).
  • imaxeizquierda/imaxederecha: Apaecerán una xunto a la otra centráu el conxuntu dambes si se dan les dos, o centrada una sola imaxe si se da solo una.
  • imaxeinferior: Imaxe qu'apaecerá al pie de la ficha.
Toos tien los siguiente parámetros adicionales
  • tamañuimaxe<numberu>: Tamañu de la imaxe. (Si se pon númberu solo afeutará a esa imaxe)
  • tamañuimaxeizquierda: Tamañu de la imaxe izquierda.
  • tamañuimaxederecha: Tamañu de la imaxe derecha.
  • tamañuimaxeinferior: Tamañu de la imaxe de pie de tabla.
  • pie<númberu>: Pie de imaxe (si se pon númberu solo afeutará a esa imaxe).
  • piederechu: Pie de la imaxe derecha.
  • pieizquierdu: Pie de la imaxe izquierda. (si se pon númberu solo afeutará a esa imaxe)
  • pieimaxeinferior: Pie de la imaxe de pie de tabla.

Estilos CSS

editar

Estos parámetros úsense p'amestar códigu CSS nel atributu «style» de los elementos de la plantía; son los que permiten cambiar l'aspeutu d'estos elementos. Poro, tendrán d'usase con procuru para mantener un aspectu xeneral estéticu y atrayente.

  • clas: Clas (class) de tola ficha.
  • estilu: Estilu de tola ficha
  • clasfila<númberu>: Sin númberu, clas de toles files; con númberu, clas d'esa fila.
  • clastitulu: Clas de la cabecera. Establez la imaxe de la cabecera. Pa usar cabecera mediana añadir Media=si.
  • estilutitulu:
  • classubtitulu<número>
  • estilusubtitulu<número>
  • clasimaxe
  • estiluimaxe
  • estiluetiqueta<númberu>
  • estiludatos<númberu>

Campos

editar

Una fila con etiqueta pero sin campu de datos nun s'amuesa. Esto facilita la creación de files opcionales. Pa facer una fila opcional tien qu'incluise un parámetru que predetermine'l conteníu de la fila a una cadena vacia:

  • datosup<númberu>: Files qu'apaecerán ente Imaxeizquierda/derecha ya imaxe.
  • seccion<númberu>
  • etiqueta<númberu>
  • datos<númberu>

Otros campos

editar
  • piedetabla: Pie de la ficha. De vezu esti espaciu acútase pa notes.
  • nome: Nome de la plantía qu'enllazará na barra de navegación.

--
-- Esti módulu ye pa implementar en {{Ficha}}
--
 
local p = {}
 
local HtmlBuilder = require('Módulu:HtmlBuilder')
local CategorizacionAByAD = require('Módulu:Categorización de bonos y destacaos')
local marco = {} 
local args
local root
local anchoImagen = '245px' 
function union(t1, t2)
    -- devuelve la xuntanza de los valores de dos tables, 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)

        -- Amiéstase un saltu de llinia porque si nun se fai d'esta miente y por exemplu nos
        -- datos hai una llista con asteriscos nel primer elementu amuésase
        -- un asteriscu. 
        -- Ye un fallu que yá asocede con tables normales ensin LUA. Por exemplu
        -- {|
        -- | * elementu1
        -- * elementu2
        -- |}
        -- El saltu de llinia yá se producía na plantía Ficha/filera
            .wikitext('\n' .. rowArgs.datos)
            --.newline()	
    end
end

local function hacerTitulo() -- Testera 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á embaxo 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()-- Imaxe qu'aparecerá na 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 = ('[[Archivu:' .. args.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('span')
                    .cssText(args.estilopieinferior)
                    .wikitext(args.pieinferior)
                    .newline()
end

local function hacerImagenSuperior()-- Imaxe qu'aparecerá na 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 = ('[[Archivu:' .. args.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('span')
                    .cssText(args.estilopiesuperior)
                    .wikitext(args.piesuperior)
                    .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()-- fileres enriba d'imáxenes llaterales 
    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()
-- Imáxenes qu'aparecerán arriba de forma xeminada por exemplu escudos y banderes
   
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
      
      root
        .tag('tr')
        .tag('td')
        --.attr('cellspacing', '0em')
        --.attr('padding','0em')
        .attr('colspan', '3')
        .css('align', 'center')
        .tag('table') -- tien que dir dientro d'una tabla pa que les fileres nun lu deformen
        .css('width', '100%')
        .addClass('mergedrow')
        .tag('tr')
            .tag('td')
            .css('text-align', 'center')
                .css('background-color', 'transparent')
                .addClass(args.claseimagenizquierda)
                .css('align', 'center')-- Allíniase nel centru horizontal
                .css('text-align', 'center') -- Allíniase nel centru horizontal
                .css('vertical-align', 'middle')-- Allíniase nel centru vertical 
                .cssText(args.estiloimagenizquierda)
                .wikitext('[[Archivu:' .. args.imagenizquierda .. '|' .. args['tamañoimagenizquierda'] .. ']]' )
                .tag('br')
                .tag('span')
                .cssText(args.estilopieizquierdo)
                .wikitext(args.pieizquierdo)
            .tag('td')
                .css('text-align', 'center')-- Allíniase nel centru horizontal
                .css('align', 'center')-- Allíniase nel centru horizontal
                .css('vertical-align', 'middle')-- Allíniase nel centru vertical
                .css('background-color', 'transparent')
                .addClass(args.claseimagenderecha)
                .cssText(args.estiloimagenderecha)       
                .wikitext('[[Archivu:' .. args.imagenderecha .. '|' .. args['tamañoimagenderecha'] .. ']]' )
                .tag('br')
                .tag('span')
                .cssText(args.estilopiederecho)
                .wikitext(args.piederecho)
                .newline()
     elseif args.imagenderecha or args.imagenizquierda then 
-- Si solo una de les dos, la imaxe qu'apareza tará nel centru
         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('[[Archivu:' ..  args[imagenL] .. '|'.. args['tamaño'..imagenL] .. ']]' )
                .tag('br')
                .tag('span')
                .cssText(args['estilo' .. pieL])
                .wikitext(args[pieL])
    end
    end
            
local function hacerImagenes() -- Pue crear un númberu infinitu d'imáxenes 
    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','[') -- Pa que nun dea problemes con delles plantíes
            if mw.ustring.find(cadenaBusqueda, '[{[|]') == nil then -- Comprueba si hiy [ o { pa nun amestar prefixu
            imagen = ('[[Archivu:' .. 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('span')
                    .cssText(args.estilopie)
                    .wikitext(pie)
        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 filera o grupu de fileres (nel casu de
    -- seiciones) tien 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('span')
                    .css('font-style', argumentosSucesion['estilo fuente'])
                    .wikitext(argumentosSucesion.anterior)
    else 
        celda.wikitext(argumentosSucesion.anterior)
    end
        
    if argumentosSucesion['añu anterior'] then
        celda
            .tag('br')
            .wikitext('(' .. argumentosSucesion['añu 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('span')
              .css('font-weight', 'bold')
              .css('font-style', argumentosSucesion['estilo fuente'] or '')
              .wikitext(argumentosSucesion.actual or args.titulo)
              
    if argumentosSucesion['añu'] then
        celda
            .tag('br')
            .wikitext('(' .. argumentosSucesion['añu'] .. ')')
    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('span')
                    .css('font-style', argumentosSucesion['estilo fuente'])
                    .wikitext(argumentosSucesion.siguiente)
    else 
        celda.wikitext(argumentosSucesion.siguiente)
    end
        
    if argumentosSucesion['añu siguiente'] then
        celda
            .tag('br')
            .wikitext('(' .. argumentosSucesion['añu siguiente'] .. ')')
    end
end
function hacerFilasTabla(tabla)
    -- Función que compón les fileres d'una tabla bien la ficha o bien una seición de la mesma.
    
    local anadidoTituloSeccion = false
    
    for k, fila in ipairs(tabla) do
        if tieneDatosFila(fila) then
            if fila.tipo == 'sección' or fila.tipo == 'seccion' then
                -- Amestar el títulu de la seición (si ta informáu)
                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ñu anterior']  = depurarVacias(fila['añu anterior']),
                    ['añu']           = depurarVacias(fila['añu']),
                    ['añu siguiente'] = depurarVacias(fila['añu 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 na parte inferior un enllaz a la plantía que se dea con nome
    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 na parte inferior un enllaz al ítem de Wikidata
    local wikibase = require('Módulu:Wikibase')
    local enlacePagina = mw.title.getCurrentTitle().text 
    local etiquetaPagina = mw.ustring.gsub(enlacePagina,'%s%(.*%)','') 
    local entidad = args.entidad or wikibase.id()
    local textoPie = "editar datos en Wikidata"
    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 = '<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 fiches qu\'usen accesu arbitrariu]]'
        end
    else
        textoPie = "<small><center>'''Páxina non enllazada a [[Wikidata]]'''\n"..
"* Si nun esiste n'otres Wikipedies: [<span class=plainlinks>[//www.wikidata.org/w/index.php?title=Special:NewItem&site=astwiki&page="..mw.uri.encode(enlacePagina,WIKI) .."&label="..mw.uri.encode(etiquetaPagina,WIKI) .." crea&nbsp;nuevo&nbsp;ítem]]</span>\n"..
"* Si esiste n'otres Wikipedies: [<span class=plainlinks>[[:d:Special:ItemByTitle|busca&nbsp;ítem&nbsp;pa&nbsp;enllazar]]</span>]\n"..
"y amiesta l'enllaz n'asturianu: ".. enlacePagina ..".</center></small>"
    end
    if textoPie ~= '' then
    	root
        	.tag('tr')
	            .tag('td')
                	.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 qu\'usen ficha ensin datos en fileres]]')
    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   -- Estilu de tola ficha         
            .addClass('infobox')
            .addClass(args.clase)
            .cssText('width:22.7em; line-height: 1.4em; text-align:left; padding:.23em') -- Lo mesmo que la plantía:Ficha
            .cssText(args.estilo)
        if args.estilo and (mw.title.getCurrentTitle().namespace == 10) then -- Pa que solo lo amieste nel espaciu de nomes plantía
        	root.wikitext('[[Categoría:Wikipedia:Fiches col parámetru estilu]]')
        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 tostring(root)
end
local function touchParameters(prefixTable, origArgs, step)
    -- Analiza los parámetros colos prefixos daos, n'orde por lotes y col tamañu especificáu a step. 
    -- Esto ye para evitar referencies etc apaeza nel orde enquivocáu.
    if type(prefixTable) ~= 'table' or type(origArgs) ~= 'table' then
        error("Entrada non válida detectada pa la función touchParameters. Dambos parámetros han ser tables.", 2)
    end
    if step and type(step) ~= 'number' then
        error("Detectáu valor non numbéricu en step.", 2)
    end
 
    step = step or 20 -- Si nun se-y da'l tamañu a step, el valor predetermináu ye 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("Detectáu un valor que nun ye string nel prefixu de la tabla pola 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 al través de #invoke, utiliza los argumentos pasaos a la plantía d'invocación.
    -- De lo contrario, pa fines de prueba, asume args que se pasen directamente como parámetros.
    if frame == mw.getCurrentFrame() then
        origArgs = frame:getParent().args
    else
        origArgs = frame
    end
 -- Analizar los parámetros de datos nel mesmu orde que la plantía {{ficha}} lo fai, polo que
 -- referencies etc. amosaránse nos llugares 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

    -- L'analizador de funciones considera qu'una cadena vacía ye falsa, polo que para caltener el comportamientu
    -- anterior de {{Ficha}}, debe camudar los argumentos vacíos a cero, polo que LUA considerarálos
    -- que tamién son falsos (sacante parámetros 'title cursiva', qu'especifica un comportamientu diferente
    -- según tea ausente o vacíu)
    args = {}
    for k, v in pairs(origArgs) do
        if v ~= ''  then
            args[k] = v
        end
    end
 
    return _infobox()
end

return p