Модуль:Wikidata/Flags: различия между версиями
Материал из FetbukWiki
https://ru.wikipedia.org/wiki>Сидик из ПТУ (переопределение для флага Бельгии — в Википедии (и вообще де-факто) используется не тот флаг, что имеет статус де-юре, соответствует шаблонам "Флаг Бельгии" и "Флагификация/Бельгия") |
м (1 версия импортирована) |
(нет различий)
|
Текущая версия от 21:55, 10 марта 2022
Для документации этого модуля может быть создана страница Модуль:Wikidata/Flags/doc
local p = {};
function p.getFlag( parseTimeFromSnak, countryEntityOrId, actualDate )
local flagClaims;
if type( countryEntityOrId ) == "string" then
flagClaims = mw.wikibase.getAllStatements( countryEntityOrId, 'P41' )
elseif countryEntityOrId and countryEntityOrId.claims and countryEntityOrId.claims.P41 then
flagClaims = countryEntityOrId.claims.P41
end
if not flagClaims or #flagClaims == 0 then
return nil;
end
local countryFlags = {};
for _, flagImageStatement in pairs( flagClaims ) do
if flagImageStatement.rank ~= 'deprecated' then
local flagImage;
if flagImageStatement and
flagImageStatement.mainsnak and
not (flagImageStatement.qualifiers and flagImageStatement.qualifiers.P366)
then
if flagImageStatement.mainsnak.datavalue and
flagImageStatement.mainsnak.datavalue.value
then
flagImage = flagImageStatement.mainsnak.datavalue.value;
elseif flagImageStatement.mainsnak.snaktype == 'novalue' then
flagImage = 'novalue';
end
end
local flagStartTime = -9223372036854775808;
if flagImageStatement.qualifiers and
flagImageStatement.qualifiers.P580 and
flagImageStatement.qualifiers.P580[ 1 ]
then
if type( parseTimeFromSnak ) == 'table' then
parseTimeFromSnak = parseTimeFromSnak.parseTimeFromSnak;
end
local parsedFlagStartTime = parseTimeFromSnak( flagImageStatement.qualifiers.P580[ 1 ] );
if parsedFlagStartTime then
flagStartTime = parsedFlagStartTime;
end
end
if flagImage then
countryFlags[ flagStartTime ] = flagImage;
end
end
end
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
if goodFlag == 'novalue' then
return nil;
end
if goodFlag == 'Flag of Belgium.svg' then
goodFlag = 'Flag of Belgium (civil).svg';
end
return '[[File:' .. goodFlag .. '|20x15px|border|link=|alt=]]';
end
return nil;
end
return p;