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