Módulo:Ficha de licencia de software

Uso


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í'})
    -- Propiedades
    local Imagen = argumentos['imagen']
    local Pie
    if Imagen then
        Pie = argumentos['pie de foto']
    else
        Imagen, Pie = obtenerImagenWikidata()
    end
    local Tamano = argumentos['tamaño'] or "250px"
    local Autor = argumentos['autor'] or propiedad('P50', {['enlace']='sí', ['linkback']='sí'}) or ""
    local Version = argumentos['version'] or propiedad('P348', {['linkback']='sí'}) or ""
    local Editorial = argumentos['publicado'] or propiedad('P123', {['linkback']='sí'}) or ""
    local Fecha = argumentos['fecha'] or propiedad('P577', {['enlace']='no', ['linkback']='sí'}) or ""
    local AprobadoDebian
    local AprobadoFSF
    local SoftwareLibre
    local AprobadoOSI
    local Copyleft
    if argumentos['aprobado Debian'] then
        AprobadoDebian = argumentos['aprobado Debian']
    elseif esUnValor(Entidad,'P790','Q903054') then
        AprobadoDebian = frame:preprocess('{{sí}}')
    else
        AprobadoDebian = ""
    end
    if argumentos['aprobado FSF'] then
        AprobadoFSF = argumentos['aprobado FSF']
    elseif esUnValor(Entidad,'P790','Q48413') then
        AprobadoFSF = frame:preprocess('{{sí}}')
    else
        AprobadoFSF = ""
    end
    if argumentos['software libre'] then
        SoftwareLibre = argumentos['software libre']
    elseif esUnValor(Entidad,'P31','Q3943414') or esUnValor(Entidad,'P31','Q1437937') or esUnValor(Entidad,'P31','Q5975031') then
        SoftwareLibre = frame:preprocess('{{sí}}')
    else
        SoftwareLibre = ""
    end
    if argumentos['código abierto'] then
        AprobadoOSI = argumentos['código abierto']
    elseif esUnValor(Entidad,'P790','Q845918') then
        AprobadoOSI = frame:preprocess('{{sí}}')
    else
        AprobadoOSI = ""
    end
    local CompatibleGPL = argumentos['compatible GPL'] or "" -- Pendiente proponer propiedad "compatible con"
    if argumentos['copyleft'] then
        Copyleft = argumentos['copyleft']
    elseif esUnValor(Entidad,'P31','Q5975031') then
        Copyleft = frame:preprocess('{{sí}}')
    else
        Copyleft = ""
    end
    local UsoOtrasLicencias = argumentos['compatible GNU'] or "" -- Pendiente proponer propiedad "compatible con"
    local SitioWeb = argumentos['sitio web'] or propiedad('P856', {['linkback']='sí'}) or ""
    local TablaFicha = {
        entidad = argumentos.id,
        titulo  = capitalizar(Titulo),
        clasetitulo = 'informática',
        estilotitulo = 'background-color: #ccccff; color:#000;',
        estiloseccion = 'background-color: #ccccff; color:#000;',
        estiloetiqueta = 'background-color: #ddddff; width:35%',
        estilodatos = 'width:65%',
        imagen = Imagen,
        ['tamañoimagen'] = Tamano,
        pie = Pie,
        estilopie = 'font-size:88%',
        {tipo='sección',
            titulo = "Información",
            {'Autor', Autor},
            {'[[Versión de software|Versión]]', Version},
            {'Edición', Editorial},
            {'Fecha', Fecha},
            {'Compatible con [[Directrices de software libre de Debian|DFSG]]', AprobadoDebian},
            {'Aprobado por la [[Free Software Foundation|FSF]]', AprobadoFSF},
            {'[[Software libre]]', SoftwareLibre},
            {'Aprobado por la [[Open Source Initiative|OSI]]', AprobadoOSI},
            {'Compatible con la [[GNU General Public License|GPL]]', CompatibleGPL},
            {'[[Copyleft]]', Copyleft},
            {'Utilizable junto con otras licencias', UsoOtrasLicencias},
            {'Sitio web', SitioWeb},
        }
    }
    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

function capitalizar(cad)
    return string.upper(string.sub(cad,1,1)) .. string.sub(cad,2)
end

return p