Abrir menú principal

Cambios

usar paréntesis
local p = {}

local separadosPorComa = require('Módulo:Formato texto').separadosPorComa
local moduloTablas = require('Módulo:Tablas')
local elementoTabla = moduloTablas.elemento
local moduloWikidataFormatos = require('Módulo:Wikidata/Formatos')
local enlazar = moduloWikidataFormatos.enlazar
local obtenerDatos = moduloWikidataFormatos.obtenerDatos

function p.formatoLugar(valor, opciones, frame, calificativos)
-- Función que devuelve algo de la forma Lugar, entidad territorial administrativa, país

function obtenerOcurrenciaAFecha(tabla, fecha)
if not tabla or not fecha then
return
end

local fechaInicio, fechaFin

--if true then return require('Módulo:Tablas').tostring(tabla) end
--
for k,v in pairs(tabla) do
fechaInicio = elementoTabla(v,'qualifiers','P580',1,'datavalue','value','time')
fechaFin = elementoTabla(v,'qualifiers','P582',1,'datavalue','value','time')

if fechaInicio and fechaFin then
if fecha >= fechaInicio and
fecha <= fechaFin then
return k
end
elseif fechaInicio then
if fecha >= fechaInicio then
return k
end
elseif fechaFin then
if fecha <= fechaFin then
return k
end
end
end

end

function obtenerOcurrenciaRangoPreferente(tabla)
if not tabla then
return
end
for k,v in pairs(tabla) do
if v.rank == 'preferred' then
return k
end
end
end

local idLugar, enlaceLugar, etiquetaLugar, lugarEnlazado
local entidadTerritorialAdministrativaEnlazada
local idPais, enlacePais, etiquetaPais, paisEnlazado
local fecha

-- Validar que está informado el id del lugar.
if not valor or not valor['numeric-id'] then
return
end

if opciones then
fecha = opciones.fecha
end

-- Obtener primero la entidad territorial administrativa y el país de los calificativos si es posible
-- No se obtiene primero el lugar, que sería lo más lógico, porque se obtendrá de forma diferente según
-- estén o no informados los calificativos

if calificativos then
entidadTerritorialAdministrativaEnlazada = enlazar(obtenerDatos(elementoTabla(calificativos,'P131',1,'datavalue','value')))
enlacePais, etiquetaPais, idPais = obtenerDatos(elementoTabla(calificativos,'P17',1,'datavalue','value'))
paisEnlazado = enlazar(enlacePais, etiquetaPais, idPais)
end

if paisEnlazado then
enlaceLugar, etiquetaLugar, idLugar = obtenerDatos(valor)
lugarEnlazado = enlazar(enlaceLugar, etiquetaLugar, idLugar)
else
-- Si el lugar no tiene el calificativo de país obtenerlo de la propiedad país de la
-- entidad de Wikidata del lugar.

-- De momento no se obtiene la entidad administrativa (tiene unas barbaridades...)
local entidad

idLugar = 'Q' .. valor['numeric-id']
entidad = mw.wikibase.getEntityObject(idLugar)

if not entidad then
return
end

enlaceLugar = elementoTabla(entidad,'sitelinks','eswiki','title')
etiquetaLugar = elementoTabla(entidad,'labels','es','value')
lugarEnlazado = enlazar(enlaceLugar, etiquetaLugar, idLugar, opciones)
--
-- Obtener el país del lugar.
--
local paisesLugar = elementoTabla(entidad,'claims','P17')

if paisesLugar then
-- Primero se intenta con el país en la fecha de las opciones, luego
-- el país con rango máximo (el actual) y luego el primer país.
local ocurrenciaPais = obtenerOcurrenciaAFecha(paisesLugar, fecha) or
obtenerOcurrenciaRangoPreferente(paisesLugar) or
1

enlacePais, etiquetaPais, idPais = obtenerDatos(elementoTabla(paisesLugar,ocurrenciaPais,'mainsnak','datavalue','value'))
paisEnlazado = enlazar(enlacePais, etiquetaPais, idPais)
end
end

if idLugar == idPais then -- Si el lugar es un país, por ejemplo, estados Unidos, en Wikidata tiene la propiedad país informada con Estados Unidos.
return lugarEnlazado
elseif lugarEnlazado and entidadTerritorialAdministrativaEnlazada and paisEnlazado then
return lugarEnlazado .. ' (' .. entidadTerritorialAdministrativaEnlazada .. ', ' .. paisEnlazado .. ')'
elseif lugarEnlazado and entidadTerritorialAdministrativaEnlazada then
return lugarEnlazado .. ' (' .. entidadTerritorialAdministrativaEnlazada .. ')'
elseif lugarEnlazado and paisEnlazado then
return lugarEnlazado .. ' (' .. paisEnlazado .. ')'
elseif entidadTerritorialAdministrativaEnlazada and paisEnlazado then
return entidadTerritorialAdministrativaEnlazada .. ' (' .. paisEnlazado .. ')'
else
return lugarEnlazado or entidadTerritorialAdministrativaEnlazada or paisEnlazado
end
end

--*****************************************************************************
-- Alias de formatos para utilizar en la plantilla propiedad
--*****************************************************************************
p['lugar'] = p['formatoLugar']

return p
Usuario anónimo