Módulo:Wikidata/Formatos país

De Biquipedia

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 entidat
	local nacionalidat
	
	for k,v in pairs(paises) do
		if not v.etiqueta then
			--entidat   = mw.wikibase.getEntityObject(k) or {}
			--v.etiqueta = require('Módulo:Tablas').elemento(entidat,'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.nacionalidat then
			nacionalidat = frame:preprocess('{{chentilicio|'.. v.etiqueta .. '|fs}}')
			
			if nacionalidat and nacionalidat~= '' then
				v.nacionalidat = nacionalidat
			end
		end
    end	
	return require('Módulo:Tablas').tostringordered(paises)
end

function p.formatoNacionalidat(claim, opcions)
	if not claim then
		return
	end
	local tabla_nacionalidatz={}
	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 {}
			-- manca blincar os paises sin de nacionalidat
			if pais.nacionalidat then
				table.insert(
					tabla_nacionalidatz, 
					{
						['nacionalidat'] = pais.nacionalidat,
						['datos'] = {
							['idPais']		  = idPais,
							['etiquetaPais']  = pais.etiqueta,
							['enlacePais']	  = pais.enlace,
							['periodo']	      = formatoPeriodo(v.qualifiers)				
						},
						['calendata']	      = elementoTabla(v,'qualifiers','P585',1,'datavalue','value','time'),
						['calendataCreyacion'] = elementoTabla(v,'qualifiers','P571',1,'datavalue','value','time'),
						['calendataInicio']	  = elementoTabla(v,'qualifiers','P580',1,'datavalue','value','time'),
						['calendataFin']	  = 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_nacionalidatz, 
					{
						['nacionalidat'] = 'apatrida',
						['datos'] = {
							['periodo']	     = formatoPeriodo(v.qualifiers)
						},
						['calendata']	      = elementoTabla(v,'qualifiers','P585',1,'datavalue','value','time'),
						['calendataCreyacion'] = elementoTabla(v,'qualifiers','P571',1,'datavalue','value','time'),
						['calendataInicio']	  = elementoTabla(v,'qualifiers','P580',1,'datavalue','value','time'),
						['calendataFin']	  = elementoTabla(v,'qualifiers','P582',1,'datavalue','value','time')
					}
				)				
			else
				table.insert(
					tabla_nacionalidatz, 
					{
						['nacionalidat'] = 'sin de nacionalidat',
						['datos'] = {
							['periodo']	     = formatoPeriodo(v.qualifiers)
						},
						['calendata']	      = elementoTabla(v,'qualifiers','P585',1,'datavalue','value','time'),
						['calendataCreyacion'] = elementoTabla(v,'qualifiers','P571',1,'datavalue','value','time'),
						['calendataInicio']	  = elementoTabla(v,'qualifiers','P580',1,'datavalue','value','time'),
						['calendataFin']	  = elementoTabla(v,'qualifiers','P582',1,'datavalue','value','time')
					}
				)
			end
		end
	end
	
	ordenarTabla(tabla_nacionalidatz, {'nacionalidat', 'calendataInicio', 'calendataFin'})
	tabla_nacionalidatz = agruparTabla(tabla_nacionalidatz, 'nacionalidat', 'datos')
	--if true then return require('Módulo:Tablas').tostring(tabla_nacionalidatz) end	
	ordenarTabla(tabla_nacionalidatz, {'calendataInicio', 'calendataFin'})
	--tabla_nacionalidatz = agruparTabla(tabla_nacionalidatz, 'nacionalidat', 'datos')
	--if true then return require('Módulo:Tablas').tostring(tabla_nacionalidatz) end
	
	local nacionalidatz = {}
	local tabla_periodos
	local nacionalidat
	local periodos
	
	for k,v in ipairs(tabla_nacionalidatz) do
		tabla_periodos = {}
		if v.datos[2] then
			nacionalidat = v.nacionalidat
			
			if opcions['formatoTexto'] and mw.ustring.find(opcions['formatoTexto'],'mayúscla', plain ) and k == 1 then
				nacionalidat = mw.language.new('an'):ucfirst(nacionalidat)			
			end
			
			-- Comprobar si son informaus totz os periodos. Si no ye asinas no se meterán entre parentesi
			-- Por eixemplo William Wordsworth que en Wikidata tien como país de 
			-- nacionalidat Reino Uniu de Gran Bretanya y Irlanda sin calendats  
			-- d'inicio u de fin y Reino de Gran Bretanya con calendata de fin 1 chi 1801.
			-- Se tornará como nacionalidat nomás "Britanica".
			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 opcions['formatoTexto'] and mw.ustring.find(opcions['formatoTexto'],'mayúscla', plain ) and k == 1 then
				opcions['mayúscla'] = 'sí'
			else
				opcions['mayúscla'] = 'no'
			end
			nacionalidat = enlazar(v.datos[1].enlacePais, v.nacionalidat, v.datos[1].idPais, opcions)
			periodos = v.datos[1].periodo
		end
		
		if periodos and periodos ~= '' then
			nacionalidat = nacionalidat .. '&nbsp;<small>(' .. periodos .. ')</small>'
		end
		table.insert(nacionalidatz, nacionalidat)
	end
	
	return formatoLista(nacionalidatz, opcions)
	--return require('Módulo:Tablas').tostring(nacionalidatz)
end

function p._nacionalidat(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
	
	opcions={}
	opcions.propiedat    = 'P27'
	opcions.entityId     = args.entityId or args.id,'P27'
	opcions.linkback     = args.linkback
	opcions.formatoTexto = args.formatoTexto
	opcions.enlace       = args.enlace
	
	return p.formatoNacionalidat(claim, opcions)
end

function p.formatoBandera(valor, opcions, 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, opcions)
    end
end

-- Alias pa simplificar l'uso dende a plantilla propiedat
--
p['bandera'] 		= p.formatoBandera
p['nacionalidat'] 	= p.formatoNacionalidat

return p