Módulo:Ficha de sitio web
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('Módulo:Wikidata')
local ModuloPaginas = require('Módulo:Páginas')
local elementoTabla = require('Módulo:Tablas').elemento
--local FormatNum = require('Módulo:Formatnum')
local argumentos
local Entidadale
function p.Ficha(frame)
-- :: Inicializador
argumentos = ModuloArgumentos.obtenerArgumentosConValor(frame)
Entidad = mw.wikibase.getEntity(argumentos.entidad) or mw.wikibase.getEntity(argumentos.id) or {}
-- :: Cabecera
local Titulo = argumentos['nombre'] or obtenerEtiquetaWikidata() or ModuloPaginas.nombrePagina({desambiguar='sí'})
local Captura = argumentos['captura']
local Pie
if Captura then
Pie = argumentos['pie'] or ''
else
Captura, Pie = obtenerImagenWikidata('P18')
end
if Pie then
Pie = '<span style="font-size:smaller">' .. Pie .. '</span>'
end
local Tamano = argumentos['tamaño'] or '250px'
local Logo = argumentos['logo'] or obtenerImagenWikidata('P154') or ''
local TamanoLogo = argumentos['tamaño logo'] or argumentos['tamaño_logo'] or '150px'
-- :: Datos generales
local URL = argumentos['url'] or propiedad('P856',{['enlace']='no', uno='sí'})
local Eslogan = argumentos['eslogan'] or propiedad('P6291',{['lista'] = 'nobullet'}) or ''
local Tipo = argumentos['tipo'] or propiedad('P31', {['uno'] = 'sí'}) or ''
local Creador = argumentos['creador'] or argumentos['autor'] or propiedad('P170', {['uno'] = 'sí'}) or ''
local Propietario = argumentos['propietario'] or propiedad('P127', {['uno'] = 'sí'}) or ''
local Operador = argumentos['adoptada por'] or propiedad('P137', {['uno'] = 'sí'}) or ''
local Pais = argumentos['país'] or propiedad('P495', {['uno'] = 'sí'}) or ''
local Licencia = argumentos['licencia'] or propiedad('P275', {['lista'] = 'nobullet'}) or ''
local Plataforma = argumentos['plataforma'] or propiedad('P400', {['lista'] = 'nobullet'}) or ''
local Dominio
if URL then
Dominio = '<span class="plainlinks">[' .. URL .. ' ' .. URL:match('^%w+://([^/]+)') .. ']</span>'
end
local Comercial = argumentos['comercial']
if Comercial then
if Comercial == 'No' or Comercial == 'no' or Comercial == '{{No}}' or Comercial == '{{no}}' then
Comercial = frame:preprocess('{{no}}')
else
Comercial = frame:preprocess('{{sí}}')
end
end
local Registro = argumentos['registro']
if Registro then
if Registro == 'No' or Comercial == 'no' or Comercial == '{{No}}' or Comercial == '{{no}}' then
Registro = frame:preprocess('{{no}}')
else
Registro = frame:preprocess('{{sí}}')
end
end
-- :: Idiomas
local Idiomas = argumentos['idiomas'] or argumentos['idioma'] or propiedad('P407', {['lista'] = 'nobullet'}) or ''
if string.len(Idiomas) > 200 then
Idiomas = seccionDesplegable('[[Multilingüe]]', Idiomas, frame)
end
local Espanol = argumentos['español'] or argumentos['castellano'] or esUnValor(Entidad, 'P407', 'Q1321')
if Espanol then
Espanol = frame:preprocess('{{sí}}')
else
Espanol = frame:preprocess('{{no}}')
end
-- :: Estadísticas
local Usuarios = argumentos['usuarios'] or propiedad('P1833', {['lista'] = 'nobullet'}) or ''
local Ingresos = argumentos['ingresos'] or propiedad('P2139', {['lista'] = 'nobullet'}) or ''
local Alexa = argumentos['alexa'] or propiedad('P1661', {['lista'] = 'nobullet'})
--if Alexa then
-- Alexa = FormatNum.FormatNum(Alexa)
--end
local Estado = argumentos['estado actual'] or argumentos['estado_actual'] or argumentos['estadoactual']
if Estado == 'activo' then
Estado = '{{Sí|Activo}}'
elseif Estado == 'inactivo' then
Estado = '{{No|Inactivo}}'
end
-- :: Fechas
local Lanzamiento = argumentos['fecha_de_lanzamiento'] or argumentos['fecha lanzamiento'] or argumentos['fechalanzamiento'] or argumentos['lanzamiento'] or propiedad('P571', {['linkback'] = 'no'}) or ''
local Relanzamiento = argumentos['relanzamiento'] or argumentos['ffecharelanzamiento'] or ''
local Cierre = argumentos['cierre'] or argumentos['fechacierre'] or propiedad('P2669', {['linkback'] = 'no'}) or ''
-- :: La ficha
local TablaFicha = {
entidad = argumentos.id,
titulo = Titulo,
clasetitulo = 'comunicación',
estilotitulo = 'background-color: #DCEAEC; color:#000;',
estiloseccion = 'background-color: #DCEAEC; color:#000;',
estiloetiqueta = 'background-color: #DCEAEC; width:35%',
estilodatos = 'width:65%',
imagen = Logo,
['tamañoimagen'] = TamanoLogo,
imagen2 = Captura,
['tamañoimagen2'] = Tamano,
pie2 = Pie,
estilopie2 = 'font-size:88%',
{tipo='sección',
titulo = 'Información general',
{'[[Dominio de Internet|Dominio]]', Dominio},
{'Tipo', Tipo},
{'[[Desarrollador de software|Desarrollador]]', Creador},
{'Propietario', Propietario},
{'Operador', Operador},
{'País de origen', Pais},
{'¿Comercial?', Comercial},
{'¿Requiere registro?', Registro},
{'Idiomas disponibles', Idiomas},
{'¿En español?', Espanol},
},
{tipo='sección',
estilodatos = 'text-align:left',
titulo = 'Datos técnicos',
{'Software utilizado', Software},
{'Plataforma', Plataforma},
{'Licencia', Licencia},
},
{tipo='sección',
estilodatos = 'text-align:left',
titulo = 'Datos históricos',
{'Estado actual', Estado},
{'Lanzamiento', Lanzamiento},
{'Relanzamiento', Relanzamiento},
{'Cierre', Cierre},
},
{tipo='sección',
estilodatos = 'text-align:left',
titulo = 'Estadísticas',
{'Usuarios registrados', Registrados},
{'Ranking [[Alexa Internet|Alexa]]', Alexa},
{'Ingresos', Ingresos},
},
{tipo='sección',
titulo = 'Artículos relacionados',
{'', OtrosArticulos}
},
}
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(propiedad)
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', propiedad,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 false
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 listaDesplegable(titulo, lista, frame)
if not lista then
return
end
return frame:preprocess('{{Lista desplegable|align=left|título='..titulo .. '|1='..lista..'}}')
end
function seccionDesplegable(titulo, lista, frame)
if not lista then
return
end
return frame:preprocess('{{Sección desplegable|align=left|título=' .. titulo .. '|datos='.. lista .. '}}')
end
function capitalizar(cad)
return string.upper(string.sub(cad,1,1)) .. string.sub(cad,2)
end
function obtenerEnumCalculado(entidad)
local valc
for k,v in ipairs(clasificacionValores) do
valc = esUnValor(entidad, v[0], v[1])
if valc then
return v[2]
end
end
end
function obtenerValor(entidad, idPropiedad, idValor)
local valor = {}
if not entidad or not idPropiedad or not idValor then
return valor
end
local declaracion = elementoTabla(entidad, 'claims', idPropiedad)
if declaracion then
for k, v in pairs(declaracion) do
local propBuscado = elementoTabla(v, 'mainsnak', 'datavalue', 'value', 'id')
if propBuscado == idValor then
table.insert(valor, v)
end
end
end
return valor
end
return p