Snowflake SVG animation.svg
¡Vikidia te desea una Feliz Navidad y Próspero Año Nuevo 2020!

¡Anímate a colaborar en Vikidia! Créate una cuenta y disfruta de múltiples beneficios.

Xmas tree.svg

Módulo:Ficha

De Vikidia
Saltar a: navegación, buscar
[editar] [purgar]Template-info.svg Documentación de plantilla

Este módulo permite crear fichas, ya sea desde otro módulo, o mediante la plantilla {{Ficha}}.

Uso

El módulo puede ser invocado en dos formas distintas. La forma más fácil de crear una ficha es usando la plantilla homónima (véase la documentación en Plantilla:Ficha/pruebas). La segunda, es importando el módulo desde otro módulo, lo que es algo más complicado, pero permite realizar algunas acciones que no serían posibles, o lo serían de una manera muy complicada, usando sólo wikitexto, como el uso de bucles, o llamadas a Wikidata.

Para crear un módulo que cree una ficha, puede usarse el siguiente modelo:

local z = {}

-- Módulos y funciones externas
local modUtilidades = require('Módulo:Utilidades')
local modFicha = require('Módulo:Ficha')
--Obtener una copia de los argumentos eliminando los argumentos sin valor
local argumentos = modUtilidades.eliminarArgSinValor(mw.getCurrentFrame():getParent().args)

function z.Ficha(frame)
    local ficha = {
        titulo  = argumentos.nombre or frame:getParent():getTitle(),
        resto de parámetros
        ...
    }
    return modFicha.Ficha(ficha)
end

return z

Funciones

Pendiente

Tareas pendientes en el módulo. Si alguien se anima a añadir las funciones necesarias, es bienvenido a hacerlo:

  • Integrar más tipos de filas especializados, de modo que ya no haga falta usar una sección genérica para ciertos tipos de contenido. Por ejemplo:
    • Mapa de localización (adaptando Módulo:Mapa) Sí Hecho
    • Celdas tabuladas (para insertar datos tabulares en una celda)
  • Integrar importación de datos Wikidata (hace falta alguna de estas extensiones mw:Extension:LinkedWiki o mw:Extension:Wikibase)
Para sugerir una mejora al módulo, puedes comentarlo en la discusión del módulo.
Esta documentación está transcluida desde Módulo:Ficha/doc.

Los editores pueden experimentar en la zona de pruebas de la plantilla.

Por favor, añade las categorías e interwikis en la subpágina de documentación. Subpáginas de esta plantilla.
local z = {}
local modUtilidades = require('Módulo:Utilidades')
local modMapa = false

z.categorias = {}
z.tieneDatos = false

function z.Dato(params)
  local linea
  if params[2] and params[2] ~= '' then
    z.tieneDatos = true
    linea = mw.html.create('tr')
    linea:addClass('dato')
    if params[1] and params[1] ~= '' then
      linea:wikitext('<th>' .. params[1] .. '</th><td>' .. params[2] .. '</td>')
    else
      linea:wikitext('<td colspan="2">' .. params[2] .. '</td>')
    end
  end
  return linea
end
function z.Imagen(params)
  local linea
  if params[1] and params[1] ~= '' then
    z.tieneDatos = true
    linea = mw.html.create('tr')
    linea:addClass('imagen')
    if params[2] and params[2] ~= '' then
      linea:wikitext('<td colspan="2"><div>[[Archivo:' .. params[1] .. '|'.. params[3] .. 'px]]<span>' .. params[2] .. '</span></div></td>')
    else
      linea:wikitext('<td colspan="2"><div>[[Archivo:' .. params[1] .. '|'.. params[3] .. 'px]]</div></td>')
    end
  end
  return linea
end
function z.ImagenDoble(params)
  local linea = mw.html.create('tr')
  linea:addClass('imagen')
  local hayimagen
  local celda
  for i = 0, 1 do
    celda = linea:tag('td')
    if params[3*i + 1] and params[3*i + 1] ~= '' then
      z.tieneDatos = true
      hayimagen = true
      if params[3*i + 2] and params[3*i + 2] ~= '' then
        celda:wikitext('<div>[[Archivo:' .. params[3*i + 1] .. '|'.. params[3*i + 3] .. 'px]]<span>' .. params[3*i + 2] .. '</span></div>')
      else
        celda:wikitext('<div>[[Archivo:' .. params[3*i + 1] .. '|'.. params[3*i + 3] .. 'px]]</div>')
      end
    end
  end
  if hayimagen then return linea end
end
function z.Mapa(params)
  local linea
  if modMapa == false then
    modMapa = require('Módulo:Mapa')
  end
  if params.latitud and params.longitud and params.zoom ~= '' then
    z.tieneDatos = true
    linea = mw.html.create('tr')
    linea
      :addClass('mapa')
      :wikitext('<td colspan="2">' .. modMapa.Mapa({
        ['tipo'] = 'mapframe',
        ['latitud'] = params.latitud,
        ['longitud'] = params.longitud,
        ['zoom'] = params.zoom,
        ['sinmarco'] = true,
        ['altura']  = 300,
        ['anchura'] = 274
      }, {}) ..'</td>')
  end
  return linea
end
function z.Pestana(params)
  local linea = mw.html.create('tr')
  linea:addClass('pestana')
  local td = linea:tag('td')
  td:attr('colspan','2')
  local tabs = td:tag('ul')
  local tab
  local dat
  for i, v in ipairs(params) do
    if v[1] and v[1] ~= '' then
      tab = tabs:tag('li')
      tab:wikitext(v[1])
      dat = td:tag('div')
      dat:wikitext(v[2])
      if i==1 then
        tab:addClass('pestana-activa')
        dat:addClass('pestana-activa')
      end
    end
  end
  if tab or dat then
    return linea
  end
end
function z.Seccion(params)
  local linea
  if params[1] and params[1] ~= '' then
    z.tieneDatos = true
    linea = mw.html.create('tr')
    linea
      :attr('data-desplegable', params['desplegable'])
      :addClass('seccion')
      :wikitext('<th colspan="2">' .. params[1] .. '</th>')
  end
  return linea
end
function z.Sucesion(params)
  local linea = mw.html.create('tr')
  linea:addClass('sucesion')
  local td = linea:tag('td')
  td:attr('colspan','2')
  local div = td:tag('div')
  local p
  for i = 1, 3 do
    if params[i] and params[i] ~= '' then
      p = div:tag('div')
      if i == 2 then p:addClass('sucesionActual') end
      p:wikitext(params[i])
    end
  end
  if #params > 0 then
    z.tieneDatos = true
    return linea
  end
end

function z.Ficha(args)
  local ficha = mw.html.create('table')
  ficha:css('--bg', args.estilo .. '70')
  ficha:addClass('ficha')
  local fCapt = ficha:tag('caption')
  fCapt:wikitext('<div>' .. args['título'] ..'</div>')
  if args['subtítulo'] then
    fSub = ficha:tag('tr')
    fSub
      :addClass('subtitulo')
      :wikitext('<td colspan="2">' .. args['subtítulo'] .. '</td>')
  end
  for i, v in ipairs(args) do
    if args[i].tipo == 'imagen' then
      ficha:node(z.Imagen(args[i]))
    elseif args[i].tipo == 'imagendoble' then
      ficha:node(z.ImagenDoble(args[i]))
    elseif args[i].tipo == 'mapa' then
      ficha:node(z.Mapa(args[i]))
    elseif args[i].tipo == 'pestaña' then
      ficha:node(z.Pestana(args[i]))
    elseif args[i].tipo == 'sección' then
      ficha:node(z.Seccion(args[i]))
    elseif args[i].tipo == 'sucesión' then
      ficha:node(z.Sucesion(args[i]))
    else
      ficha:node(z.Dato(args[i]))
    end
  end
  if args['pie'] then
    fPie = ficha:tag('tr')
    fPie
      :addClass('pie')
      :wikitext('<td colspan="2">' .. args['pie'] .. '</td>')
  end
  if not z.tieneDatos then table.insert(z.categorias, 'Vikidia:Artículos que usan fichas sin datos') end

  local cats = ''
  for i, v in ipairs(z.categorias) do
    cats = cats .. '[[Categoría:'..v..']]'
  end
  return tostring(ficha) .. cats
end

function z._Ficha(frame)
  local argumentos = modUtilidades.eliminarArgSinValor(mw.getCurrentFrame():getParent().args)
  local obj = {
    ['título'] = argumentos['título'],
    ['estilo'] = modUtilidades.esquemasColores[argumentos['estilo'] or 'indigo'][1],
    ['subtítulo'] = argumentos['subtítulo'],
    ['pie'] = argumentos.pie,
  }
  local pos
  for k, v in pairs(argumentos) do
    if string.find(k,'^imagen%d+$') then
      pos = string.match(k,'%d+$')
      table.insert(obj, {
        ['tipo'] = 'imagen',
        ['pos'] = tonumber(pos),
        argumentos['imagen'..pos],
        argumentos['pieimagen'..pos],
        argumentos['tamañoimagen'..pos]
      })
    elseif string.find(k,'^imagenizquierda%d+$') or string.find(k,'^imagenderecha%d+$') then
      pos = string.match(k,'%d+$')
      table.insert(obj, {
        ['tipo'] = 'imagendoble',
        ['pos'] = tonumber(pos),
        argumentos['imagenizquierda'..pos],
        argumentos['pieimagenizquierda'..pos],
        argumentos['tamañoimagenizquierda'..pos],
        argumentos['imagenderecha'..pos],
        argumentos['pieimagenderecha'..pos],
        argumentos['tamañoimagenderecha'..pos]
      })
      argumentos['imagenizquierda'..pos] = nil
      argumentos['imagenderecha'..pos] = nil
    elseif string.find(k,'^latitud%d+$') then
      pos = string.match(k,'%d+$')
      table.insert(obj, {
        ['tipo'] = 'mapa',
        ['pos'] = tonumber(pos),
        ['latitud'] = argumentos['latitud'..pos],
        ['longitud'] = argumentos['longitud'..pos],
        ['zoom'] = argumentos['zoom'..pos]
      })
      argumentos['longitud'..pos] = nil
      argumentos['zoom'..pos] = nil
    elseif string.find(k,'^pestaña%d+%-%d+$') then
      pos = string.match(k,'%d+$')
      local pest = {
        ['tipo'] = 'pestaña',
        ['pos'] = tonumber(pos),
      }
      local i = 0
      for i = 1,4 do
        if argumentos['pestaña'..tostring(i)..'-'..pos] then
          table.insert(pest, {argumentos['pestaña'..tostring(i)..'-'..pos], argumentos['pestañadatos'..tostring(i)..'-'..pos]})
        end
      end
      table.insert(obj, pest)
      for j = 1,4 do argumentos['pestaña'..tostring(j)..'-'..pos] = nil end
    elseif string.find(k,'^sección%d+$') then
      pos = string.match(k,'%d+$')
      table.insert(obj, {
        ['tipo'] = 'sección',
        ['pos'] = tonumber(pos),
        argumentos['sección'..pos],
        ['desplegable'] = argumentos['desplegable'..pos]
      })
    elseif string.find(k,'^actual%d+$') then
      pos = string.match(k,'%d+$')
      table.insert(obj, {
        ['tipo'] = 'sucesión',
        ['pos'] = tonumber(pos),
        argumentos['predecesor'..pos],
        argumentos['actual'..pos],
        argumentos['sucesor'..pos]
      })
    elseif string.find(k,'^datos%d+$') then
      pos = string.match(k,'%d+$')
       table.insert(obj, {
        ['pos'] = tonumber(pos),
        argumentos['etiqueta'..pos],
        argumentos['datos'..pos]
      })
    end
  end
  table.sort(obj, function(a,b) return a['pos'] < b['pos'] end)
  return z.Ficha(obj)
end

return z