Diferencia entre revisiones de «Módulo:Wikidata/Formato lugar»

De Hispanopedia
Página creada con «local p = {} function p.formatoLugar(valor, opciones, frame, calificativos) -- Función que devuelve algo de la forma Lugar, entidad territorial administrativa, país…»
 
mejor usar la frame en vez de las opciones
Línea 13: Línea 13:
end
end
if not opciones then
if not frame then
return require(pModulo)[pFuncion]
return require(pModulo)[pFuncion]
end
end
modulos = opciones['módulos']
modulos = frame['módulos']
if not modulos then
if not modulos then
modulos = {}
modulos = {}
opciones['módulos'] = modulos
frame['módulos'] = modulos
end
end
Línea 28: Línea 28:
modulo = require(pModulo)
modulo = require(pModulo)
modulos[pModulo] = modulo
modulos[pModulo] = modulo
end
end
return modulo[pFuncion]
return modulo[pFuncion]

Revisión del 20:38 5 mar 2018

La documentación para este módulo puede ser creada en Módulo:Wikidata/Formato lugar/doc

local p = {}

function p.formatoLugar(valor, opciones, frame, calificativos)
	-- Función que devuelve algo de la forma Lugar, entidad territorial administrativa, país
	
	-- Guardamos en las opciones una tabla con los módulos utilizados para hacer menos accesos.
	--
	function funcion(pModulo, pFuncion)
		local modulos, modulo
		
		if not pModulo or not pFuncion then
			return
		end
		
		if not frame then
			return require(pModulo)[pFuncion]
		end
		
		modulos = frame['módulos']
		if not modulos then
			modulos = {}
			frame['módulos'] = modulos
		end
		
		modulo = modulos[pModulo]
			
		if not modulo then
			modulo = require(pModulo)
			modulos[pModulo] = modulo
		end
		
		return modulo[pFuncion]
	end
	
	local idLugar, enlaceLugar, etiquetaLugar, lugarEnlazado
	local entidadTerritorialAdministrativaEnlazada	
	local idPais, enlacePais, etiquetaPais, paisEnlazado
	
	-- Validar que está informado el id del lugar.
	if not valor or not valor['numeric-id'] then 
		return
	end
	
	local elementoTabla = funcion('Módulo:Tablas'			, 'elemento')
	local enlazar       = funcion('Módulo:Wikidata/Formatos', 'enlazar')
	local obtenerDatos  = funcion('Módulo:Wikidata/Formatos', 'obtenerDatos')
	
	-- 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)
		enlacePais, etiquetaPais, idPais = obtenerDatos(elementoTabla(entidad,'claims','P17',1,'mainsnak','datavalue','value'))
		paisEnlazado  = enlazar(enlacePais, etiquetaPais, idPais)
	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
	else
		local separadosPorComa = funcion('Módulo:Formato texto', 'separadosPorComa')
		return separadosPorComa({lugarEnlazado, entidadTerritorialAdministrativaEnlazada, paisEnlazado})
	end
end

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