Módulo:Zona de pruebas/Giovanni Alfredo Garciliano Diaz/Ficha de personaje

Este módulo no tiene página de documentación[crear]
local p = {}
local ModuloArgumentos = require('Módulo:Argumentos')
local ModuloFicha = require('Módulo:Ficha')    
local ModuloWikidata = require('Module:Wikidata')
local ModuloPaginas = require('Módulo:Páginas')
local elementoTabla = require('Módulo:Tablas').elemento
local argumentos
local Entidad

function p.Ficha(frame)
    argumentos = ModuloArgumentos.obtenerArgumentosConValor(frame)
    Entidad = mw.wikibase.getEntity(argumentos.id) or {}
    local Titulo = argumentos['título'] or obtenerEtiquetaWikidata() or ModuloPaginas.nombrePagina({desambiguar='sí'})
    local ColorFondo = argumentos['colorfondo'] or '#ccf'
    local Subtitulo
    local Obra = argumentos['obra'] or propiedad('P1441')
    if Obra then
        Subtitulo = "Personaje de ''" .. Obra .. "''"
    else
        Subtitulo = ''
    end
    local Imagen = argumentos['imagen'] or argumentos['image'] or argumentos['Imagen']
    local Tamano = argumentos['tamañoimagen'] or '220px'
    local Pie
    if Imagen then
        Pie = argumentos['pie'] or argumentos['pie_imagen'] or argumentos['pie imagen'] or argumentos['subtítulo']
    else
        Imagen, Pie = obtenerImagenWikidata()
    end
    local PrimeraAparicion = argumentos['primera_aparición'] or argumentos['primera'] or argumentos['debut'] or argumentos['publicado'] or ''
    local UltimaAparicion = argumentos['última_aparición'] or argumentos['última'] or argumentos['ultima']
    local UltimaAparicionCausa = argumentos['última_aparición_causa'] or argumentos['causa']
    if UltimaAparicion then
        if UltimaAparicionCausa then
            UltimaAparicion = UltimaAparicion .. '(' .. UltimaAparicionCausa .. ')'
        else
            UltimaAparicion = ''
        end
    end
    local Creadores = argumentos['creador'] or argumentos['autor'] or propiedad('P170',{['linkback'] = 'sí', ['lista'] = 'no ordenada'}) or ''
    local Dibujantes = argumentos['dibujante'] or ''
    local Interpretes = argumentos['actor'] or propiedad('P175',{['linkback'] = 'sí', ['lista'] = 'no ordenada'}) or ''
    local TablaFicha = {
        entidad = argumentos.id,
        titulo = Titulo,
        colorfondo = ColorFondo,
        tipocabecera = 'humano fn',
        estiloseccion = 'background: #cce',
        estiloetiqueta = 'background: #ddf',
        subtitulo = Subtitulo,
        imagen = Imagen,
        ['tamañoimagen'] = Tamano,
        {tipo='sección',
            titulo = 'Personaje',
            {'Primera aparición', PrimeraAparicion},
            {'Última aparición', UltimaAparicion},
            {'Creador(es)', Creadores},
            {'Dibujante(s)', Dibujantes},
            {'Interpretado por', Interpretes},
        }
    }
    return ModuloFicha.infobox(TablaFicha)
end

function obtenerEtiquetaWikidata()
    if Entidad and Entidad.labels and Entidad.labels.es then
        return Entidad.labels.es.value
    end
end

function obtenerImagenWikidata()
    local imagen, valorImagen, piesDeImagen, k, pieDeImagen
    if not Entidad then
        return
    end
    --  Obtener la primera imagen en Wikidata de la persona
    local imagen = elementoTabla(Entidad, 'claims','P154',1)
    if not imagen then
        return
    end
    valorImagen =  elementoTabla(imagen, 'mainsnak','datavalue','value')
    piesDeImagen =  elementoTabla(imagen, 'qualifiers','P2096')
    -- Encontrar el pie en español
    if piesDeImagen then
        for k,pieDeImagen in pairs(piesDeImagen) do
            if pieDeImagen.datavalue.value.language == 'es' then
                return valorImagen, pieDeImagen.datavalue.value.text
            end
        end
    end
    -- Si no hay pie de imagen en español comprueba si hay fecha especificada para la imagen
    piesDeImagen = elementoTabla(imagen, 'qualifiers', 'P585')
    if piesDeImagen and piesDeImagen[1] then
        return valorImagen, nombre .. ' en ' .. require('Módulo:Wikidata/Fecha').FormateaFechaHora(piesDeImagen[1].datavalue.value, {['formatoFecha']='año',['enlace']='no'})
    end
    -- Sin pie de imagen en español
    return valorImagen
end

function propiedad(idPropiedad,opciones)
    if Entidad and Entidad.claims and Entidad.claims[idPropiedad] then
        if not opciones then
            opciones = {['linkback']='sí'}
        end
        opciones.entityId  = Entidad.id
        opciones.propiedad = idPropiedad
        valorPropiedad = ModuloWikidata.getPropiedad(opciones,Entidad.claims[idPropiedad])
        return valorPropiedad
    end
end

function esUnValor(entidad, idPropiedad, idaBuscar)
    if not entidad or not idPropiedad then
        return
    end
    local declaracion = elementoTabla(entidad, 'claims', idPropiedad)
    local idBuscado
    if not declaracion then
        return false
    end
    for k,v in pairs(declaracion) do
        idBuscado = elementoTabla(v,'mainsnak','datavalue','value','id')
        if idBuscado == idaBuscar then
            return true
        end
    end
    return false
end

return pu