Módulo:Wikidata/Formato puesto
Apariencia
La documentación para este módulo puede ser creada en Módulo:Wikidata/Formato puesto/doc
local p = {}
local deseparausPorComa = require('Módulo:Formato texto').deseparausPorComa
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
local Date = require('Módulo:Date')._Date
function p.formatoPuesto(valor, opcions, frame, calificativos)
-- Función que torna bella cosa d\'a forma puesto, entidat territorial administrativa, país
function obtenerOcurrenciaACalendata(tabla, calendata)
if not tabla or not calendata then
return
end
local calendataInicio, calendataFin
calendata = Date(calendata)
--if true then return require('Módulo:Tablas').tostring(tabla) end
--
for k,v in pairs(tabla) do
calendataInicio = elementoTabla(v,'qualifiers','P580',1,'datavalue','value','time')
calendataFin = elementoTabla(v,'qualifiers','P582',1,'datavalue','value','time')
calendataInicio = Date(calendataInicio)
calendataFin = Date(calendataFin)
if calendataInicio and calendataFin then
if calendata >= calendataInicio and
calendata <= calendataFin then
return k
end
elseif calendataInicio then
if calendata >= calendataInicio then
return k
end
elseif calendataFin then
if calendata <= calendataFin 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 idPuesto, enlacePuesto, etiquetaPuesto, puestoEnlazau
local entidatTerritorialAdministrativaEnlazada
local idPais, enlacePais, etiquetaPais, paisEnlazau
local calendata
-- Validar que ye informau l'id d\'o puesto.
if not valor or not valor['numeric-id'] then
return
end
if opcions then
calendata = opcions.calendata
end
-- Obtener primero a entidat territorial administrativa y o país d'os calificativos si ye posible
-- No s'obtiene primero o puesto, que sería lo más lochico, porque s'obtendrá de forma diferent seguntes
-- sigan u no informaus os calificativos
if calificativos then
entidatTerritorialAdministrativaEnlazada = enlazar(obtenerDatos(elementoTabla(calificativos,'P131',1,'datavalue','value')))
enlacePais, etiquetaPais, idPais = obtenerDatos(elementoTabla(calificativos,'P17',1,'datavalue','value'))
paisEnlazau = enlazar(enlacePais, etiquetaPais, idPais)
end
if paisEnlazau then
enlacePuesto, etiquetaPuesto, idPuesto = obtenerDatos(valor)
puestoEnlazau = enlazar(enlacePuesto, etiquetaPuesto, idPuesto)
else
-- Si o puesto no tien o calificativo de país obtener-lo d\'a propiedat país d\'a
-- entidat de Wikidata d\'o puesto.
-- Por agora no s'obtiene a entidat administrativa
local entidat
idPuesto = 'Q' .. valor['numeric-id']
entidat = mw.wikibase.getEntityObject(idPuesto)
if not entidat then
return
end
enlacePuesto = elementoTabla(entidat,'sitelinks','eswiki','title')
etiquetaPuesto = elementoTabla(entidat,'labels','es','value')
puestoEnlazau = enlazar(enlacePuesto, etiquetaPuesto, idPuesto, opcions)
--
-- Obtener o país d\'o puesto.
--
local paisesPuesto = elementoTabla(entidat,'claims','P17')
if paisesPuesto then
-- Primero s'intenta con o país en a calendata d'as opcions, dimpués
-- o país con rango maximo (l'actual) y dimpués o primer país.
local ocurrenciaPais = obtenerOcurrenciaACalendata(paisesPuesto, calendata) or
obtenerOcurrenciaRangoPreferente(paisesPuesto) or
1
enlacePais, etiquetaPais, idPais = obtenerDatos(elementoTabla(paisesPuesto,ocurrenciaPais,'mainsnak','datavalue','value'))
paisEnlazau = enlazar(enlacePais, etiquetaPais, idPais)
end
end
if idPuesto == idPais then -- Si o puesto ye un país, por eixemplo, Estaus Unius, en Wikidata tien a propiedat país informada con Estaus Unius.
return puestoEnlazau
elseif puestoEnlazau and entidatTerritorialAdministrativaEnlazada and paisEnlazau then
return puestoEnlazau .. ' (' .. entidatTerritorialAdministrativaEnlazada .. ', ' .. paisEnlazau .. ')'
elseif puestoEnlazau and entidatTerritorialAdministrativaEnlazada then
return puestoEnlazau .. ' (' .. entidatTerritorialAdministrativaEnlazada .. ')'
elseif puestoEnlazau and paisEnlazau then
return puestoEnlazau .. ' (' .. paisEnlazau .. ')'
elseif entidatTerritorialAdministrativaEnlazada and paisEnlazau then
return entidatTerritorialAdministrativaEnlazada .. ' (' .. paisEnlazau .. ')'
else
return puestoEnlazau or entidatTerritorialAdministrativaEnlazada or paisEnlazau
end
end
--*****************************************************************************
-- Alias de formatos pa utilizar en a plantilla propiedat
--*****************************************************************************
p['puesto'] = p['formatoPuesto']
return p