Modulo:WikidataBiografio

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-10-29
-- ĉ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 = {}


-- funkcioj por naskiĝdatoj kaj mortodatoj
function p.naskidato()
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.time
	return x
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

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

function p.mortdato()
local entity = mw.wikibase.getEntity()
	if not entity then
		return nil
	end
	local dato = entity:getBestStatements( 'P570' )
	local x=''
    if (#dato == 0)  then
		return nil
	end
    if (dato[1].mainsnak.snaktype == "somevalue") then x = "nekonata" end
	if x~="nekonata" then x = dato[1].mainsnak.datavalue.value.time end

	return x
end

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

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=='nekonata' then return 'mortdato ne konata' end
    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

-- funkcioj por naskiĝloko kaj mortoloko
function p.naskiloko()
local ento = mw.wikibase.getEntity()
	if not ento then
		return nil
	end
	local loko = ento:getBestStatements( 'P19' )
	if (#loko == 0) or (loko[1].mainsnak.snaktype ~= "value") then
		return nil
	end
	local x = loko[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

-- 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 ento = mw.wikibase.getEntity()
	if not ento then
		return nil
	end
	local loko = ento:getBestStatements( 'P20' )
	if (#loko == 0) or (loko[1].mainsnak.snaktype ~= "value") then
		return nil
	end
	local x = loko[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

-- 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	

-- funkcio por legi okupojn el vikidatumoj (p106)
function p.okupo()
local ento = mw.wikibase.getEntity()
	if not ento then
		return nil
	end
	local okupo = ento:getBestStatements( 'P106' )
	if (#okupo == 0) or (okupo[1].mainsnak.snaktype ~= "value") then
		return nil
	end
	local y=''
	local n = #okupo
	if n > 1 then
		for indekso, valoro in ipairs(okupo) do
			local x=mw.wikibase.label('Q' .. okupo[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= okupo[1].mainsnak.datavalue.value["numeric-id"]	
		y = mw.wikibase.label('Q' .. x)
	end
	return y 
end

-- funkcio por legi la sekson de persono el vikidatumoj (p21)
function p.sekso()
local ento = mw.wikibase.getEntity()
	if not ento then
		return nil
	end
	local sekso = ento:getBestStatements( 'P21' )
	if (#sekso == 0) or (sekso[1].mainsnak.snaktype ~= "value") then
		return nil
	end
	local x = sekso[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


return p