Модул: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 .. ' <span class="country-name">' .. context.formatValueDefault( value, options ) .. '</span>';
end
return '<span class="country-name">' .. context.formatValueDefault( value, options ) .. '</span>';
end
return p;