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, dateFormat)
	return DateUtils.formatDate(DateUtils.extractDateFromWikidataSnak(snak), false, false, dateFormat)
end

p.fromArgs = function(property, q, startProp, endProp, instantProp, dateFormat)
	local start = {prop = startProp}
	local endd = {prop = endProp}
	local instant = {prop = instantProp}
	local moments = {start, endd, instant}
	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 ipairs(moments) do
							if eachClaim.qualifiers[eachMoment.prop] then for ___,eachQual in ipairs(eachClaim.qualifiers[eachMoment.prop]) do
								if Wikidata.isValueSnak(eachQual) then
									mw.logObject(eachQual, '[WU/T/I] found qual for prop ')
									eachMoment.snak = eachQual
									break
								end
							end end
						end
					end
					break
				end
			end
		end
	else
		for _,eachMoment in ipairs(moments) do
			local momentClaims = Wikidata.findBestClaimsForProperty(q, eachMoment.prop)
			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
	--mw.logObject(moments, '[WU/T/I] moments')
	if start.snak and endd.snak then
		return printDateFromSnak(start.snak, dateFormat) .. endash .. printDateFromSnak(endd.snak, dateFormat)
	elseif start.snak then
		return printDateFromSnak(start.snak, dateFormat) .. endash .. "''prezent''"
	elseif endd.snak then
		return 'până la ' .. printDateFromSnak(endd.snak, dateFormat)
	elseif instant.snak then
		return printDateFromSnak(instant.snak, dateFormat)
	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'
	local dateFormat = array.dateFormat
	
	return p.fromArgs(property, q, startProp, endProp, instantProp, dateFormat)
end

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