Modulo:WikidataBiografio/provejo

El Vikipedio, la libera enciklopedio
Dokumentado Dokumentado


Ŝablona programado Diskutoj Lua Testoj Subpaĝoj
Modulo Esperanto English

Modulo: Dokumentado



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.)
-- modulo WikidataBiografio, 2015-11-07
-- ĉefaj aŭtoroj: Pino~eowiki kaj Tlustulimu
-- Jen kombinata modulo el la antaŭa [[Modulo:WikidataDato]] kaj [[Modulo:WikidataLoko]]. 
-- Ĝi konservas nur la historion de la unua, ĉar kombino malfacilus.

local p = {}


-- komuna funkcio por Vikidatumaj eroj, kiuj enhavas kalendaran daton
function p.tempobjekto(pkodo)
local entity = mw.wikibase.getEntity()
	if not entity then
		return nil
	end
	local dato = entity:getBestStatements(pkodo)
	if (#dato == 0) or (dato[1].mainsnak.snaktype ~= "value") then
		return nil
	end
	local x = dato[1].mainsnak.datavalue.value.time
	return x
end


-- funkcioj por naskiĝdatoj kaj mortodatoj
-- por naskiĝdato: P569
function p.naskidato()
	local pkodo = "P569"
	return p.tempobjekto(pkodo)
end

-- funkcioj por precizeco de naskiĝdatoj 
function p.Nprecizeco()
local entity = mw.wikibase.getEntity()
	if not entity then
		return nil
	end
	local dato = entity:getBestStatements( 'P569' )
	if (#dato == 0) or (dato[1].mainsnak.snaktype ~= "value") then
		return nil
	end
	local x = dato[1].mainsnak.datavalue.value.precision
	return x
end

-- prilaboraj funkcioj por la naskiĝdato
function p.Njaro()
local x = p.naskidato()
    if x== nil then return nil else
	x=string.sub(x,1,5)
	x=tonumber(x)
	return x
	end
end

function p.Nmonato()
local x = p.naskidato()
    if x == nil then return nil end
	x=string.sub(x,7,8)
	if x=='00' then x = '' end	
	if x=='01' then x = 'januaro' end
	if x=='02' then x = 'februaro' end
	if x=='03' then x = 'marto' end
	if x=='04' then x = 'aprilo' end
	if x=='05' then x = 'majo' end
	if x=='06' then x = 'junio' end
	if x=='07' then x = 'julio' end
	if x=='08' then x = 'aŭgusto' end
	if x=='09' then x = 'septembro' end
	if x=='10' then x = 'oktobro' end
	if x=='11' then x = 'novembro' end
	if x=='12' then x = 'decembro' end
	return x
end

function p.Ntago()
local x = p.naskidato()
	if x == nil then return nil end
	x=mw.text.trim(string.sub(x,10,11))
	if string.sub(x,1,1)=='0' then x= string.sub(x,2,2)	end
	if x=='0' then x= '' end
	return x
end

-- por la mortodato: p570
function p.mortdato()
	local pkodo = "P570"
	return p.tempobjekto(pkodo)
end

-- prilaboraj funkcioj por la mortodato
function p.Mjaro()
local x = p.mortdato()
    if x == nil then return nil end
	x=string.sub(x,1,5)
	x=tonumber(x)
	return x
end

function p.Mmonato()
local x = p.mortdato()
    if x == nil then return nil end
	x=string.sub(x,7,8)
	if x=='00' then x = '' end	
	if x=='01' then x = 'januaro' end
	if x=='02' then x = 'februaro' end
	if x=='03' then x = 'marto' end
	if x=='04' then x = 'aprilo' end
	if x=='05' then x = 'majo' end
	if x=='06' then x = 'junio' end
	if x=='07' then x = 'julio' end
	if x=='08' then x = 'aŭgusto' end
	if x=='09' then x = 'septembro' end
	if x=='10' then x = 'oktobro' end
	if x=='11' then x = 'novembro' end
	if x=='12' then x = 'decembro' end
	return x
end

function p.Mtago()
local x = p.mortdato()
    if x == nil then return nil end
	x=mw.text.trim(string.sub(x,10,11))
	if string.sub(x,1,1)=='0' then x= string.sub(x,2,2) end
	if x=='0' then x= '' end
	return x
end

-- kalkula funkcio
function p.agho()
	local d=p.naskidato() 
	if d == nil then return nil
	end	
	local y=string.sub(d,7,8)
	local z=string.sub(d,10,11)	
	d=os.time{year=p.Njaro(), month=y, day=z}
	local f=p.mortdato()
	local x = p.mortdato()
    if x == nil then f=os.time() else
	x=string.sub(x,7,8)
	z=string.sub(d,10,11)	
	f=os.time{year=p.Mjaro(), month=x, day=z} end
	return math.floor((f-d)/3600/24/365.25)
end

function p.vivanta()
	local x = p.mortdato()
    if x == nil then return 0 else return 1 end
end


-- komuna funkcio por por Vikidatumaj eroj, kiuj povas enhavi nur unu enhavon
function p.solaobjekto(pkodo)
local ento = mw.wikibase.getEntity()
	if not ento then
		return nil
	end
	local objekto = ento:getBestStatements(pkodo)
	if (#objekto == 0) or (objekto[1].mainsnak.snaktype ~= "value") then
		return nil
	end
	local x = objekto[1].mainsnak.datavalue.value["numeric-id"]
	-- jen kodo, kiu surbaze de la id-numero trovas la rilatan artikolon
	x= mw.wikibase.label('Q' .. x)
	return x
end


-- funkcioj por naskiĝloko kaj mortoloko
function p.naskiloko()
	local pkodo = "P19"
	return p.solaobjekto(pkodo)
end

-- funkcio por la ligilo en ŝablonoj
function p.NlokTeksto()
	local n = p.naskiloko()
	local r = ""
	if n ~= nil then
		r = "[[" .. n .. "]]"
	else 
		return nil		
	end
	return r
end	

function p.mortloko()
	local pkodo = "P20"
	return p.solaobjekto(pkodo)
end

-- funkcio por la ligilo en ŝablonoj
function p.MlokTeksto()
	local m = p.mortloko()
	local r = ""
	if m ~= nil then
		r = "[[" .. m .. "]]"
	else 
		return nil		
	end
	return r
end	

-- komuna funkcio por Vikidatumaj eroj, kiuj povas enhavi pli ol unu enhavon kiel liston
function p.datumobjekto(pkodo)
local ento = mw.wikibase.getEntity()
	if not ento then
		return nil
	end
	local objekto = ento:getBestStatements(pkodo)
	if (#objekto == 0) or (objekto[1].mainsnak.snaktype ~= "value") then
		return nil
	end
	local y=''
	local n = #objekto
	if n > 1 then
		for indekso, valoro in ipairs(objekto) do
			local x=mw.wikibase.label('Q' .. objekto[indekso].mainsnak.datavalue.value["numeric-id"])
			if x ~= nil then	
				if indekso == 1 then y = x else y=y .. ',' .. x end
			end
		end
	else
		local x= objekto[1].mainsnak.datavalue.value["numeric-id"]	
		y = mw.wikibase.label('Q' .. x)
	end
	return y 	
end	


-- funkcio por legi okupojn el vikidatumoj (p106)
function p.okupo()
	local pkodo = "P106"
	return p.datumobjekto(pkodo) 
end

-- funkcio por legi la sekson de persono el vikidatumoj (p21)
function p.sekso()
	local pkodo = "P21"
	return p.solaobjekto(pkodo)
end

-- funkcio por legi membrecon el vikidatumoj (p463)
function p.membreco()
	local pkodo = "P463"
	return p.datumobjekto(pkodo) 
end


-- funkcio por legi geedzojn el vikidatumoj (p26)
function p.geedzoj()
	local pkodo = "P26"
	return p.datumobjekto(pkodo) 
end

-- funkcio por legi patron el vikidatumoj (p22)
function p.patro()
	local pkodo = "P22"
	return p.solaobjekto(pkodo) 
end

-- funkcio por legi patrinon el vikidatumoj (p25)
function p.patrino()
	local pkodo = "P25"
	return p.solaobjekto(pkodo) 
end

-- funkcio por legi fratojn el vikidatumoj (p7)
function p.fratoj()
	local pkodo = "P7"
	return p.datumobjekto(pkodo)
end

-- funkcio por legi fratinojn el vikidatumoj (p9)
function p.fratinoj()
	local pkodo = "P9"
	return p.datumobjekto(pkodo)
end

-- funkcio por legi universitatojn el vikidatumoj (p69)
function p.universitatoj()
	local pkodo = "P69"
	return p.datumobjekto(pkodo)
end

-- funkcio por legi dungintojn el vikidatumoj (p108)
function p.dungintoj()
	local pkodo = "P108"
	return p.datumobjekto(pkodo)
end


return p