1662
воштон
(обновление из ru:Модуль:Wikidata) |
п (Откат правок Putnik (обсуждение) к версии Kaganer) |
||
["somevalue"] = "''неизвестно''",
["novalue"] = "",
["
["presumably"] = '<span style="border-bottom: 1px dotted; cursor: help;" title="предположительно">предп. </span>',
}
end
local function
if 'table' == type(str) then
if str.args and str.args[1] then
return tonumber(sign .. oh), tonumber(sign .. om);
end )(str)
return tonumber(os.time({year=Y, month=M, day=D, hour=(h+oh), min=(m+om), sec=s}
end
-- Выбирает свойства по property id, дополнительно фильтруя их по рангу
local function selectClaims( context, options,
if ( not context ) then error( 'context not specified'); end;
if ( not options ) then error( 'options not specified'); end;
if ( not options.entity ) then error( 'options.entity is missing'); end;
if ( not
local allPropertyClaims = options.entity.claims[ string.upper( propertyId ) ];
if ( not allPropertyClaims ) then
return nil;
end
--Поиск предпочтительного ранга
local requiredRank = 'normal' -- ранг по умолчанию (deprecated не используем)
-- если есть хотя бы один preferred, используем только их
for i, statement in pairs( allPropertyClaims ) do
if (statement.rank == 'preferred') then
requiredRank = 'preferred';
break
end
end
local result = {};
if ( allPropertyClaims[0] ) then
for i = 0, #allPropertyClaims do
local statement = allPropertyClaims[i]
if (statement.rank == requiredRank) then
result[ #result + 1 ] = statement;
end
end
else
for i, statement in pairs( allPropertyClaims ) do
if (statement.rank == requiredRank) then
result[ #result + 1 ] = statement;
end
end
end
if (
return nil;
end
-- create context
local context = { formatSnak = formatSnak, formatPropertyDefault = formatPropertyDefault, formatStatementDefault = formatStatementDefault }
context.formatProperty = function( options )
local func = getUserFunction( options, 'property', context.formatPropertyDefault );
context.parseTimeFromSnak = function( snak )
if ( snak and snak.datavalue and snak.datavalue.value and snak.datavalue.value.time ) then
return parseISO8601( timeISO6801 );
end
return nil;
-- создание текстовой строки со списком оформленых заявлений из таблицы
end
and qualifier.datavalue.value["entity-type"] == 'item' ) then
local circumstance = 'Q' .. qualifier.datavalue.value["numeric-id"];
if ( '
circumstances.
end
if ( 'Q18122778' == circumstance ) then
if snak.snaktype == 'somevalue' then
return before .. options.i18n['somevalue'] .. after;
elseif snak.snaktype == 'novalue' then
return before .. options.i18n['novalue'] .. after;
elseif snak.snaktype == 'value' then
before = before .. options.i18n.presumably;
end
if ( circumstances.
before = before .. options.i18n.
end
return before .. formatDatavalue( context, options, snak.datavalue
else
throwError( 'unknown-snak-type' );
end
local function getDefaultValueFunction( datavalue )
-- вызов обработчиков по умолчанию для известных типов значений
if datavalue.type == 'wikibase-entityid' then
elseif datavalue.type == 'string' then
-- строка
return function( context, options, value ) return value end;
elseif datavalue.type == 'monolingualtext' then
-- моноязычный текст (строка с указанием языка)
return function( context, options, value ) return '<span class="lang" lang="' .. value.language .. '">' .. value.text .. '</span>' end;
elseif datavalue.type == 'globecoordinate' then
-- географические координаты
-- диапазон значений
local amount = string.gsub(value['amount'], '^%+', '')
local lang = mw.language.
return lang:formatNum( tonumber( amount ) )
end;
Возвращает: строку оформленного текста
]]
function formatDatavalue( context, options, datavalue
if ( not context ) then error( 'context not specified' ); end;
if ( not options ) then error( 'options not specified' ); end;
-- проверка на указание специализированных обработчиков в параметрах,
-- переданных при вызове
context.formatValueDefault = getDefaultValueFunction( datavalue
local functionToCall = getUserFunction( options, 'value', context.formatValueDefault );
return functionToCall( context, options, datavalue.value );
-- Небольшой словарь упрощенного отображения (TODO: надо сделать расширенный с учётом даты)
local simpleReplaces = {
Q30 = '[[Соединённые Штаты Америки|США]]',
Q148 = '[[Китайская Народная Республика|КНР]]',
Q183 = '[[Германия]]',
Q258 = '[[Южно-Африканская Республика|ЮАР]]',
Q423 = '[[Корейская Народно-Демократическая Республика|КНДР]]',
Q2184 = '[[Российская Советская Федеративная Социалистическая Республика|РСФСР]]',
Q2895 = '[[Белорусская Советская Социалистическая Республика|Белорусская ССР]]',
Q15180 = '[[Союз Советских Социалистических Республик|СССР]]',
Q16957 = '[[Германская Демократическая Республика|ГДР]]',
Q130229 = '[[Грузинская Советская Социалистическая Республика|Грузинская ССР]]',
Q130280 = '[[Эстонская Советская Социалистическая Республика|Эстонская ССР]]',
Q131337 = '[[Азербайджанская Советская Социалистическая Республика|Азербайджанская ССР]]',
Q132856 = '[[Армянская Советская Социалистическая Республика|Армянская ССР]]',
Q133356 = '[[Украинская Советская Социалистическая Республика|Украинская ССР]]',
Q168811 = '[[Казахская Советская Социалистическая Республика|Казахская ССР]]',
Q170895 = '[[Молдавская Советская Социалистическая Республика|Молдавская ССР]]',
Q173761 = '[[Литовская Советская Социалистическая Республика|Литовская ССР]]',
Q192180 = '[[Латвийская Советская Социалистическая Республика|Латвийская ССР]]',
Q199707 = '[[Туркменская Советская Социалистическая Республика|Туркменская ССР]]',
Q199711 = '[[Таджикская Советская Социалистическая Республика|Таджикская ССР]]',
Q484578 = '[[Узбекская Советская Социалистическая Республика|Узбекская ССР]]',
Q809806 = '[[Башкирская Автономная Советская Социалистическая Республика|Башкирская АССР]]',
Q1157215 = '[[Дагестанская Автономная Советская Социалистическая Республика|Дагестанская АССР]]',
}
--[[
if label then
end
-- сообщение об отсутвии локализованного названия
-- not good, but better than nothing
return '[[
end
function p.formatProperty( frame )
local args = frame.args
local plain = toBoolean( frame.args.plain, false );
frame.args.nocat = toBoolean( frame.args.nocat, false );
frame.args.references = toBoolean( frame.args.references, true );
-- проверка на отсутствие обязательного параметра property
if not frame.args.property then
throwError( 'property-param-not-provided' )
end
if frame.args.value and frame.args.value ~= '' then
if plain or frame.args.nocat or frame:callParserFunction( '#property', frame.args.property )=='' then
-- опция, запрещающая оформление значения, поэтому никак не трогаем
return
else
-- если трогать всё-таки можно, добавляем категорию-маркер
return args.value .. categoryLocalValuePresent;
end
end
if ( plain ) then -- вызова стандартного обработчика без оформления, если передана опция plain
return frame:callParserFunction( '#property',
end
g_frame = frame
-- после проверки всех аргументов -- вызов функции оформления для свойства (набора утверждений)
return formatProperty( frame.args )
end
|