Modulo:WikidataLoĝantaro

El Vikipedio, la libera enciklopedio
Jump to navigation Jump to search
Dokumentado Dokumentado

La modulo ebligas uzi la loĝantaron (p1082) por la lasta dato (p585) el wikidatumoj. Ĝi proponas la funkcioj nombro kaj dato kaj por labori ekster la artikolo oni povas ankaŭ uzi nombroQ kaj datoQ, kiuj estas eviteblaj, ĉar ili kostas multa da tempo de kalkulo.


Se vi havas demandon pri ĉi tiu Lua-modulo, tiam vi povas demandi en la diskutejo pri Lua-moduloj. La Intervikiaj ligiloj estu metataj al Vikidatumoj. (Vidu Helpopaĝon pri tio.)
local p = {}

lang = 'eo'


-- aranĝas zorgigan kategorion nur en la artikola nomspaco
		local kategorio = ""
        currentTitle = mw.title.getCurrentTitle()
        local ns   = currentTitle.namespace
        if ns == 0 then kategorio = "[[Kategorio:Artikoloj kun loĝantaro el Vikidatumoj sen dato]]"
        end

function p.dump()
	return mw.dumpObject(mw.wikibase.getEntityObject())
end

function p.nombro()
	local entity = mw.wikibase.getEntity()
	if not entity then
		return '<span class="error">La artikolo ne estas ankaŭ ligata kun vikidatumoj</span>'
	end
	local pop = entity:getBestStatements( 'P1082' )
	if (#pop == 0) or (pop[1].mainsnak.snaktype ~= "value") then
		return nil
	end
	local x = pop[1].mainsnak.datavalue.value.amount
	local i=string.find(x,"±")
	if i==nil then i=string.len(x)+1 end
	x=string.sub(x,1,i-1)
	x=string.gsub( x," ", "" )
	x=string.gsub( x,"+", "" )
	return x
end

function p.nombroQ(frame)
	local entity = mw.wikibase.getEntity(frame.args[1])
	if not entity then
		return '<span class="error">ne estas ligilo</span>'
	end
	local pop = entity:getBestStatements( 'P1082' )
	if (#pop == 0) or (pop[1].mainsnak.snaktype ~= "value") then
		return "?"
	end
	local x = pop[1].mainsnak.datavalue.value.amount
	local i=string.find(x,"±")
	if i==nil then i=string.len(x)+1 end
	x=string.sub(x,1,i-1)
	x=string.gsub( x," ", "" )
	x=string.gsub( x,"+", "" )
        x=tonumber (x)
        x=mw.getLanguage('eo'):formatNum(x)
        if x==nil then x ="?" end
	return x
end

function p.dato() --  jaro de la loĝantaro
	local entity = mw.wikibase.getEntityObject()
	if not entity then
		return nil
	end
	local pop = entity:getBestStatements( 'P1082' )
	if (#pop == 0) or (pop[1].mainsnak.snaktype ~= "value") then
		return nil
	end
	local function dato2() 
		v =pop[1].qualifiers["P585"]
		if (v==nil) then return nil else v =v[1].datavalue.value.time end
		return v	
	end		
	local provo, v=pcall(dato2,"ne estas dato en wikidatumoj")
	if provo then
		v=string.sub(v,2,5) -- nur la jaro	
  		return v		
  	else
  		return '<span class="error">dato forestas en Vikidatumoj</span>' .. kategorio
	end
end

function p.datoQ(frame) --  jaro de la loĝantaro por la artikolo Qxxx
	local entity = mw.wikibase.getEntityObject(frame.args[1])
	if not entity then
		return nil
	end
	local pop = entity:getBestStatements( 'P1082' )
	if (#pop == 0) or (pop[1].mainsnak.snaktype ~= "value") then
		return nil
	end
	local function dato2() 	
		v = pop[1].qualifiers["P585"]
		if (v==nil) then return nil else v =v[1].datavalue.value.time end
		v=string.sub(v,2,5) -- nur la jaro
  		return v		
	end	
	local provo, v=pcall(dato2,"ne estas dato en wikidatumoj")	
	if provo then
		v=string.sub(v,2,5) -- nur la jaro	
  		return v		
  	else
  		return '<span class="error">dato forestas en Vikidatumoj</span>' .. kategorio
	end	
  
end

return p