Sari la conținut

Modul:WikidataUtils/Time/Interval

De la Wikipedia, enciclopedia liberă

local Wikidata = require('Modul:Wikidata')
local getArgs = require('Modul:Arguments').getArgs
local DateUtils = require('Modul:DateUtils')
local p = {}
local endash = mw.text.decode('–')

local printDateFromSnak = function(snak)
	return DateUtils.formatDate(DateUtils.extractDateFromWikidataSnak(snak))
end

p.fromArgs = function(property, q, startProp, endProp, instantProp)
	local start = {prop = startProp}
	local endd = {prop = endProp}
	local instant = {prop = instantProp}
	if property then 
		local claims = Wikidata.findBestClaimsForProperty(q, property)
		if claims then
			for _,eachClaim in ipairs(claims) do
				if Wikidata.isClaimTrue(eachClaim) then
					if eachClaim.qualifiers then
						for _,eachMoment in {start, endd, instant} do
							if Wikidata.isValueSnak(eachClaim.qualifiers[moment.prop]) then
								moment.snak = eachClaim.qualifiers[moment.prop]
							end
						end
					end
				end
			end
		end
	else
		local moments = {start, endd, instant}
		for _,eachMoment in ipairs(moments) do
			local momentClaims = Wikidata.findBestClaimsForProperty(q, eachMoment.prop)
			mw.logObject(momentClaims, '[WU/T/I] claim')
			if momentClaims then for _,eachMomentClaim in ipairs(momentClaims) do
				if Wikidata.hasValueSnak(eachMomentClaim) and Wikidata.isClaimTrue(eachMomentClaim) then
					eachMoment.snak = eachMomentClaim.mainsnak
				end
			end end
		end
	end
	if start.snak and endd.snak then
		return printDateFromSnak(start.snak) .. endash .. printDateFromSnak(endd.snak)
	elseif start.snak then
		return printDateFromSnak(start.snak) .. endash .. "''prezent''"
	elseif endd.snak then
		return 'până la ' .. printDateFromSnak(endd.snak)
	elseif instant.snak then
		return printDateFromSnak(instant.snak)
	end
	return nil
end

p.fromArray = function(array)
	local q = array.q or mw.wikibase.getEntityIdForCurrentPage()
	local property = array.p
	local startProp = array[1] or 'P580'
	local endProp = array[2] or 'P582'
	local instantProp = array[3] or 'P585'
	
	return p.fromArgs(property, q, startProp, endProp, instantProp)
end

p.fromFrame = function(frame)
	local args = getArgs(frame)
	return p.fromArray(args)
end
return p