Модуль:Wikidata/Countries

Матеріал з WikiBoyarka
Перейти до: навігація, пошук

local moduleDates = require( "Module:Dates" );

local p = {}

local function calculateEndDateTimestamp( context, statement )
	if ( statement.qualifiers and statement.qualifiers.p582 ) then
		for i = 0, #statement.qualifiers.p582 do
			local qualifier = statement.qualifiers.p582[i];
			if ( qualifier.datavalue and qualifier.datavalue.value and qualifier.datavalue.value.time ) then
				local timeISO6801 = tostring( qualifier.datavalue.value.time )
				local unixtime = moduleDates.parseISO8601( timeISO6801 )
				return unixtime;
			end
		end
	end

	-- check death day... do we have it at all?
	for h, propertyId in pairs( { "p570", "p577", "p571" } ) do
		local dateClaims = context.selectClaims( propertyId );
		if ( dateClaims ) then
			for i = 1, #dateClaims do
				local statement = dateClaims[i]
				if ( statement.mainsnak and statement.mainsnak.datavalue and statement.mainsnak.datavalue.value and statement.mainsnak.datavalue.value.time ) then
					local timeISO6801 = tostring( statement.mainsnak.datavalue.value.time )
					local unixtime = moduleDates.parseISO8601( timeISO6801 )
					return unixtime;
				end
			end
		end
	end

	-- TODO: check other "end" properties

	-- no death day
	return os.time();
end

function getFlag( context, entityId, actualDate )
	local flags = mw.loadData('Module:Wikidata:Dictionary/Flags');
	local countryFlags = flags[ entityId ];
	local goodFlag = nil;
	if ( countryFlags ) then
		local ordered_dates = {}
		for flagBeginDate in pairs(countryFlags) do
			table.insert(ordered_dates, flagBeginDate)
		end
		table.sort(ordered_dates)

		for i = 1, #ordered_dates do
			local flagBeginDate, flag = ordered_dates[i], countryFlags[ ordered_dates[i] ];
			if ( actualDate >= flagBeginDate ) then
				goodFlag = flag;
			end
		end
	end
	if ( goodFlag ) then
		return '[[File:' .. goodFlag .. '|20x15px|border]]';
	end
	return nil;
end

function p.formatCountryClaimWithFlag( context, statement )
	local flag = nil;
	if ( statement.mainsnak and statement.mainsnak.datavalue and statement.mainsnak.datavalue.value and statement.mainsnak.datavalue.value["numeric-id"] ) then
		local endDateTimestamp = calculateEndDateTimestamp( context, statement ) * 1000;
		flag = getFlag( context, 'Q' .. statement.mainsnak.datavalue.value["numeric-id"], endDateTimestamp );
	end

	if ( flag ) then
		return flag .. '&nbsp;<span class="country-name">' .. context.formatStatementDefault( context, statement ) .. '</span>';
	end

	return '<span class="country-name">' .. context.formatStatementDefault( context, statement ) .. '</span>';
end

return p;