Модул:Wikidata/Standard

Мавод аз Википедиа — донишномаи озод



local MODULE_NAME_DICTIONARY_FLAGS = 'Module:Wikidata:Dictionary/Flags';

local function getDefaultActualDate( context )
	-- 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, claim in ipairs( dateClaims ) do
				local time = context.getDateFromSnak( claim.mainsnak );
				if ( time ) then
					return time;
				end
			end
		end
	end

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

local function getActualDate( context, statement )
	if ( statement.qualifiers and statement.qualifiers.P582 ) then
		for i, qualifier in ipairs( statement.qualifiers.P582 ) do
			local time = context.getDateFromSnak( qualifier );
			if ( time ) then
				return time;
			end
		end
	end
	return nil;
end

function getFlagFromDictionary( entityId, actualDate )
	local flags = mw.loadData( MODULE_NAME_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.formatCountryStatement( context, options, statement )
	local actualDate = getActualDate( context, statement );
	if ( not actualDate ) then
		actualDate = getDefaultActualDate( context );
	end
	local newOptions = options:extends({
			actualDate = actualDate,
		});
	return newContext.formatStatementDefault( context, newOptions, statement );
end

function p.formatCountryValue( context, options, value )
	local countryId = 'Q' .. value["numeric-id"];
	local actualDate = options.actualDate;
	local flag = getFlagFromDictionary( countryId, actualDate );
	if ( flag ) then
		return flag .. '&nbsp;<span class="country-name">' .. context.formatValueDefault( value, options ) .. '</span>';
	end
	return '<span class="country-name">' .. context.formatValueDefault( value, options ) .. '</span>';
end

return p;