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 ModuloWikidataFormatos = require('Módulo:Wikidata/Formatos')
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 Lema = argumentos['lema'] or propiedad('P1546')
local ObraCreador
local Obra = argumentos['obra'] or propiedad('P1441')
local Creador = argumentos['autor'] or argumentos['creador'] or propiedad('P170')
if Obra then
if Creador then
ObraCreador = "''" .. Obra .. "''" .. ' de ' .. Creador
else
ObraCreador = "''" .. Obra .. "''"
end
else
if Creador then
ObraCreador = 'De las obras de ' .. Creador
else
ObraCreador = ''
end
end
local Bandera = argumentos['bandera'] or argumentos['Bandera'] or obtenerImagenWikidata('P41')
local PieBandera
if Bandera then
PieBandera = 'Bandera'
end
local Escudo = argumentos['escudo'] or obtenerImagenWikidata('P94')
local PieEscudo
if Escudo then
PieEscudo = 'Escudo'
end
local Imagen = argumentos['imagen'] or obtenerImagenWikidata('P18')
if Imagen then
Pie = argumentos['pie de imagen'] or argumentos['pie imagen'] or argumentos['pie'] or '' propiedad('P18', {['calificativo']='P2096'})
end
local Mapa = argumentos['mapa']
local PieMapa
if Mapa then
PieMapa = argumentos['pie de mapa'] or argumentos['pie mapa'] or ''
else
if obtenerImagenWikidata('P242') then
PieMapa = 'Localización de ' .. Titulo
elseif obtenerImagenWikidata('P1621') then
PieMapa = 'Mapa detallado de ' .. Titulo
elseif obtenerImagenWikidata('P1943') then
PieMapa = 'Mapa de situación de ' .. Titulo
end
Mapa = obtenerImagenWikidata('P242') or obtenerImagenWikidata('P1621') or obtenerImagenWikidata('P1943')
end
local Tamano = argumentos['tamaño de imagen'] or argumentos['tamaño_imagen'] or '280px'
local Tipo
local Episodio = argumentos['episodio'] or ''
local Endonimo = argumentos['nombre original'] or propiedad('P1705') or ''
local Seudonimo = argumentos['otros nombres'] or propiedad('P742') or ''
local Significado = argumentos['significado del nombre'] or propiedad('P138') or ''
local Localizacion = argumentos['localización'] or propiedad('P131') or propiedad('P706') or ''
local Campo1N = argumentos['campo1_nombre'] or ''
local Campo2N = argumentos['campo2_nombre'] or ''
local Campo3N = argumentos['campo3_nombre'] or ''
local Campo4N = argumentos['campo4_nombre'] or ''
local Campo5N = argumentos['campo5_nombre'] or ''
local Campo1 = argumentos['campo1'] or ''
local Campo2 = argumentos['campo2'] or ''
local Campo3 = argumentos['campo3'] or ''
local Campo4 = argumentos['campo4'] or ''
local Campo5 = argumentos['campo5'] or ''
local Nacimiento = argumentos['nacimiento'] or propiedad('P885') or ''
local Desembocadura = argumentos['desembocadura'] or propiedad('P403') or ''
local Capital = argumentos['familia'] or propiedad('P36') or ''
local Superficie = argumentos['superficie'] or propiedad('P2046', {['valor-función'] = ModuloWikidataFormatos.formatoArea, ['linkback']='sí'}) or ''
local Fundacion = argumentos['fundación'] or propiedad('P571', {enlace='no'}) or ''
local Gobernante = argumentos['gobernante'] or propiedad('P6') or ''
local Poblacion = argumentos['población'] or propiedad('P1082') or ''
local Residentes = argumentos['residentes'] or ''
local Lengua = argumentos['lengua'] or propiedad('P2936') or ''
local Divisa = argumentos['moneda'] or propiedad('P38') or ''
local Huso = argumentos['horario'] or propiedad('P421') or ''
local Fronteras = argumentos['fronteras'] or propiedad('P47') or ''
local Densidad
if argumentos['densidad'] then
Densidad = argumentos['densidad']
elseif tonumber(Superficie) ~= nil and tonumber(Poblacion) ~= nil then
Densidad = Poblacion/Superficie
else
Densidad = ''
end
if argumentos['tipo'] then
Tipo = argumentos['tipo']
elseif esUnValor(Entidad,'P31','Q1145276') then
Tipo = 'País'
elseif esUnValor(Entidad,'P31','Q1964689') then
Tipo = 'Ciudad'
elseif esUnValor(Entidad,'P31','Q6619693') then
Tipo = 'Isla'
elseif esUnValor(Entidad,'P31','Q7180622') then
Tipo = 'Asentamiento fantasma'
elseif esUnValor(Entidad,'P31','Q15720793') then
Tipo = 'Edificio'
elseif esUnValor(Entidad,'P31','Q3087542') then
Tipo = 'Sietch'
elseif esUnValor(Entidad,'P31','Q16363493') then
Tipo = 'Bosque'
elseif esUnValor(Entidad,'P31','Q16515166') then
Tipo = 'Manantial'
elseif esUnValor(Entidad,'P31','Q17199338') then
Tipo = 'Continente'
elseif esUnValor(Entidad,'P31','Q18948595') then
Tipo = 'Calle'
elseif esUnValor(Entidad,'P31','Q19595246') then
Tipo = 'Imperio'
elseif esUnValor(Entidad,'P31','Q19838114') then
Tipo = 'Montaña'
elseif esUnValor(Entidad,'P31','Q19838115') then
Tipo = 'Paso de montaña'
elseif esUnValor(Entidad,'P31','Q20080483') then
Tipo = 'Cueva'
elseif esUnValor(Entidad,'P31','Q20750954') then
Tipo = 'Región'
elseif esUnValor(Entidad,'P31','Q27055917') then
Tipo = 'Archipiélago'
elseif esUnValor(Entidad,'P31','Q29587254') then
Tipo = 'Habitación'
elseif esUnValor(Entidad,'P31','Q30106090') then
Tipo = 'Establecimiento de bebidas'
elseif esUnValor(Entidad,'P31','Q30322563') then
Tipo = 'Llanura'
elseif esUnValor(Entidad,'P31','Q32860792') then
Tipo = 'Lugar de Pokémon'
elseif esUnValor(Entidad,'P31','Q15709969') then
Tipo = 'Lago'
elseif esUnValor(Entidad,'P31','Q16338046') then
Tipo = 'Río'
elseif esUnValor(Entidad,'P31','Q16363579') then
Tipo = 'Mar'
elseif esUnValor(Entidad,'P31','Q727596') then
Tipo = 'Cuadrante galáctico'
elseif esUnValor(Entidad,'P31','Q2775969') then
Tipo = 'Planeta'
elseif esUnValor(Entidad,'P31','Q3972970') then
Tipo = 'Sistema solar'
elseif esUnValor(Entidad,'P31','Q17424291') then
Tipo = 'Estrella'
elseif esUnValor(Entidad,'P31','Q17424312') then
Tipo = 'Sistema solar'
elseif esUnValor(Entidad,'P31','Q17480853') then
Tipo = 'Luna'
elseif esUnValor(Entidad,'P31','Q17480908') then
Tipo = 'Cinturón de asteroides'
elseif esUnValor(Entidad,'P31','Q18011146') then
Tipo = 'Constelación'
elseif esUnValor(Entidad,'P31','Q19595266') then
Tipo = 'Galaxia'
else
Tipo = ""
end
local TablaFicha = {
entidad = argumentos.id,
titulo = capitalizar(Titulo),
subtitulo = Lema,
subtitulo2 = ObraCreador,
clasetitulo = 'mapa',
estilotitulo = 'background-color: rgba(128,128,128,.6); color:#000;',
estilosubtitulo = 'background-color: rgba(128,128,128,.6); color:#000;',
estiloseccion = 'background-color: rgba(128,128,128,.6); color:#000;',
estiloetiqueta = 'background-color: rgba(128,128,128,.4); width:35%',
estilodatos = 'width:65%',
imagen = Imagen,
['tamañoimagen'] = Tamano,
pie = Pie,
imagen2 = Mapa,
['tamañoimagen'] = Tamano,
pie2 = PieMapa,
imagenizquierda = Bandera,
['tamañoimagenizquierda'] = '100px',
pieizquierdo = PieBandera,
imagenderecha = Escudo,
['tamañoimagenderecha'] = '100px',
piederecho = PieEscudo,
estilopie = 'font-size:88%',
{tipo='sección',
titulo = "Información",
{'Tipo', Tipo},
{'Episodio', Episodio},
{'Nombre original', Endonimo},
{'Otros nombres', Seudonimo},
{'Significado del nombre', Significado},
{'Localización', Localizacion},
{'Nacimiento', Nacimiento},
{'Desembocadura', Desembocadura},
{'Capital', Capital},
{'Superficie', Superficie},
{'Fundación', Fundacion},
{'Gobernante', Gobernante},
{'Población', Poblacion},
{'Residentes', Residentes},
{'[[Divisa|Moneda]]', Divisa},
{'Lengua', Lengua},
{'[[Huso horario|Horario]]', Huso},
{'Fronteras', Fronteras},
{Campo1N, Campo1},
{Campo2N, Campo2},
{Campo3N, Campo3},
{Campo4N, Campo4},
{Campo5N, Campo5},
}
}
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(idPropiedad)
local imagen, valorImagen
if not Entidad then
return
end
-- Obtener la primera imagen en Wikidata de la persona
local imagen = elementoTabla(Entidad, 'claims', idPropiedad, 1)
if not imagen then
return
end
valorImagen = elementoTabla(imagen, 'mainsnak','datavalue','value')
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