Módulo:Wikidata/Formatos país

La documentación para este módulo puede ser creada en Módulo:Wikidata/Formatos país/doc

local p={}

local moduloTablas = require('Módulo:Tablas')
local	elementoTabla = moduloTablas.elemento
local	agruparTabla  = moduloTablas.agrupar
local	ordenarTabla  = moduloTablas.ordenar
local moduloWikidata  = require('Módulo:Wikidata')
local   formatoLista         = moduloWikidata.formatoLista
local moduloWikidataFormatos = require('Módulo:Wikidata/Formatos')
local	enlazar              = moduloWikidataFormatos.enlazar
local   formatoPeriodo       = moduloWikidataFormatos.formatoPeriodo
local obtenerDatos           = moduloWikidataFormatos.obtenerDatos


local paises = mw.loadData('Módulo:Wikidata/Formatos_país/datos')

function p.pruebas(frame)
	--local entidad
	local nacionalidad
	
	for k,v in pairs(paises) do
		if not v.etiqueta then
			--entidad   = mw.wikibase.getEntityObject(k) or {}
			--v.etiqueta = require('Módulo:Tablas').elemento(entidad,'labels', 'es', 'value')
			v.etiqueta = mw.wikibase.getLabel(k)
		end
		if not v.enlace then
			v.enlace = mw.wikibase.getSitelink(k)
		end			
		if v.etiqueta and not v.nacionalidad then
			nacionalidad = frame:preprocess('{{gentilicio|'.. v.etiqueta .. '|fs}}')
			
			if nacionalidad and nacionalidad~= '' then
				v.nacionalidad = nacionalidad
			end
		end
    end	
	return require('Módulo:Tablas').tostringordered(paises)
end

function p.formatoNacionalidad(claim, opciones)
	if not claim then
		return
	end
	local tabla_nacionalidades={}
	local idPais
	local pais
	
	--if true then return require('Módulo:Tablas').tostring(claim) end
	for k, v in ipairs(claim) do
		idPais = elementoTabla(v,'mainsnak','datavalue','value','id')
		if idPais then
			pais = paises[idPais] or {}
			-- falta saltarse los paises sin nacionalidad
			if pais.nacionalidad then
				table.insert(
					tabla_nacionalidades, 
					{
						['nacionalidad'] = pais.nacionalidad,
						['datos'] = {
							['idPais']		  = idPais,
							['etiquetaPais']  = pais.etiqueta,
							['enlacePais']	  = pais.enlace,
							['periodo']	      = formatoPeriodo(v.qualifiers)				
						},
						['fecha']	      = elementoTabla(v,'qualifiers','P585',1,'datavalue','value','time'),
						['fechaCreacion'] = elementoTabla(v,'qualifiers','P571',1,'datavalue','value','time'),
						['fechaInicio']	  = elementoTabla(v,'qualifiers','P580',1,'datavalue','value','time'),
						['fechaFin']	  = elementoTabla(v,'qualifiers','P582',1,'datavalue','value','time')	
					}
				)
			end
		elseif elementoTabla(v,'mainsnak','snaktype') == 'novalue' then
			if  elementoTabla(v,'qualifiers','P805',1,'datavalue','value','id') == 'Q223050' then
				table.insert(
					tabla_nacionalidades, 
					{
						['nacionalidad'] = 'apátrida',
						['datos'] = {
							['periodo']	     = formatoPeriodo(v.qualifiers)
						},
						['fecha']	      = elementoTabla(v,'qualifiers','P585',1,'datavalue','value','time'),
						['fechaCreacion'] = elementoTabla(v,'qualifiers','P571',1,'datavalue','value','time'),
						['fechaInicio']	  = elementoTabla(v,'qualifiers','P580',1,'datavalue','value','time'),
						['fechaFin']	  = elementoTabla(v,'qualifiers','P582',1,'datavalue','value','time')
					}
				)				
			else
				table.insert(
					tabla_nacionalidades, 
					{
						['nacionalidad'] = 'sin nacionalidad',
						['datos'] = {
							['periodo']	     = formatoPeriodo(v.qualifiers)
						},
						['fecha']	      = elementoTabla(v,'qualifiers','P585',1,'datavalue','value','time'),
						['fechaCreacion'] = elementoTabla(v,'qualifiers','P571',1,'datavalue','value','time'),
						['fechaInicio']	  = elementoTabla(v,'qualifiers','P580',1,'datavalue','value','time'),
						['fechaFin']	  = elementoTabla(v,'qualifiers','P582',1,'datavalue','value','time')
					}
				)
			end
		end
	end
	
	ordenarTabla(tabla_nacionalidades, {'nacionalidad', 'fechaInicio', 'fechaFin'})
	tabla_nacionalidades = agruparTabla(tabla_nacionalidades, 'nacionalidad', 'datos')
	--if true then return require('Módulo:Tablas').tostring(tabla_nacionalidades) end	
	ordenarTabla(tabla_nacionalidades, {'fechaInicio', 'fechaFin'})
	--tabla_nacionalidades = agruparTabla(tabla_nacionalidades, 'nacionalidad', 'datos')
	--if true then return require('Módulo:Tablas').tostring(tabla_nacionalidades) end
	
	local nacionalidades = {}
	local tabla_periodos
	local nacionalidad
	local periodos
	
	for k,v in ipairs(tabla_nacionalidades) do
		tabla_periodos = {}
		if v.datos[2] then
			nacionalidad = v.nacionalidad
			
			if opciones['formatoTexto'] and mw.ustring.find(opciones['formatoTexto'],'mayúscula', plain ) and k == 1 then
				nacionalidad = mw.language.new('es'):ucfirst(nacionalidad)			
			end
			
			-- Comprobar si están informados todos los periodos. Si no es así no se pondrán entre paréntesis
			-- Por ejemplo William Wordsworth que en Wikidata tiene como país de 
			-- nacionalidad Reino Unido de Gran Bretaña e Irlanda sin fechas de 
			-- inicio o de fin y Reino de Gran Bretaña con fecha de fin 1 ene 1801.
			-- Se devolverá como nacionalidad solo "Británica".
			local wpaisSinPeriodo
			for k2,v2 in ipairs(v.datos) do
				if not v2.periodo then
					wpaisSinPeriodo = true
				end
			end
			
			if not wpaisSinPeriodo then
				for k2,v2 in ipairs(v.datos) do
					table.insert(tabla_periodos, enlazar(v2.enlacePais, v2.periodo, v2.idPais))
				end
				
				periodos = table.concat(tabla_periodos,', ')				
			end	
			--if true then return require('Módulo:Tablas').tostring(tabla_periodos) end
		else
			if opciones['formatoTexto'] and mw.ustring.find(opciones['formatoTexto'],'mayúscula', plain ) and k == 1 then
				opciones['mayúscula'] = 'sí'
			else
				opciones['mayúscula'] = 'no'
			end
			nacionalidad = enlazar(v.datos[1].enlacePais, v.nacionalidad, v.datos[1].idPais, opciones)
			periodos = v.datos[1].periodo
		end
		
		if periodos and periodos ~= '' then
			nacionalidad = nacionalidad .. '&nbsp;<small>(' .. periodos .. ')</small>'
		end
		table.insert(nacionalidades, nacionalidad)
	end
	
	return formatoLista(nacionalidades, opciones)
	--return require('Módulo:Tablas').tostring(nacionalidades)
end

function p._nacionalidad(frame)
	local args    = frame.args
	
	--if true then return require('Módulo:Tablas').tostring(frame.args) end
	local claim = mw.wikibase.getAllStatements(args.entityId or args.id,'P27')
	
	if not claim then
		return
	end
	
	opciones={}
	opciones.propiedad    = 'P27'
	opciones.entityId     = args.entityId or args.id,'P27'
	opciones.linkback     = args.linkback
	opciones.formatoTexto = args.formatoTexto
	opciones.enlace       = args.enlace
	
	return p.formatoNacionalidad(claim, opciones)
end

function p.formatoBandera(valor, opciones, frame)
	if not valor then
		return
	end

	local enlace, etiqueta, id = obtenerDatos(valor)	
    
    if not etiqueta then 
    	return
    elseif mw.title.new('Plantilla:Geodatos '.. etiqueta ).exists  then
        return frame:preprocess('{{bandera2|' .. etiqueta ..  '}}')
    else
    	return enlazar(enlace, etiqueta, id, opciones)
    end
end

-- Alias para simplificar el uso desde la plantilla propiedad
--
p['bandera'] 		= p.formatoBandera
p['nacionalidad'] 	= p.formatoNacionalidad

return p