მოდული:Wikidata

გამოიყენება თარგში {{Wikidata}}.


local i18n = {    ["errors"] = {        ["property-param-not-provided"] = "თვისების პარამეტრი არ არის მითითებული",        ["entity-not-found"] = "არსი ვერ მოიძებნა.",        ["unknown-claim-type"] = "განცხადების უცნობი ტიპი.",        ["unknown-snak-type"] = "სნეკის უცნობი ტიპი.",        ["unknown-datavalue-type"] = "მონაცემთა მნიშვნელობის უცნობი ტიპი.",        ["unknown-entity-type"] = "არსის უცნობი ტიპი.",        ["unknown-property-module"] = "თქვენ უნდა დააყენოთ property-module და property-function.",        ["unknown-claim-module"] = "თქვენ უნდა დააყენოთ claim-module და claim-function.",        ["unknown-value-module"] = "თქვენ უნდა დააყენოთ value-module და value-function.",        ["property-module-not-found"] = "თვისების გამომსახველი მოდული ვერ მოიძებნა",        ["property-function-not-found"] = "თვისების გამომსახველი ფუნქცია ვერ მოიძებნა",        ["claim-module-not-found"] = "დადასტურების გამომსახველი მოდული ვერ მოიძებნა.",        ["claim-function-not-found"] = "დადასტურების გამომსახველი ფუნქცია ვერ მოიძებნა.",        ["value-module-not-found"] = "მნიშვნელობის გამომსახველი მოდული ვერ მოიძებნა.",        ["value-function-not-found"] = "მნიშვნელობის გამომსახველი ფუნქცია ვერ მოიძებნა.",        ['see-wikidata-value'] = "ვიკიმონაცემების მნიშვნელობის ხილვა და შეცვლა"    },    ["somevalue"] = "''უცნობი''",    ["novalue"] = "",    ["approximate"] = '<span style="border-bottom: 1px dotted; cursor: help;" title="დაახლოებით">დაახ. </span>',    ["presumably"] = '<span style="border-bottom: 1px dotted; cursor: help;" title="სავარაუდოდ">სავარ. </span>',}-- settings, may differ from project to projectlocal categoryLinksToEntitiesWithMissingLabel = '[[კატეგორია:სტატიების ბმულები ვიკიმონაცემების ელემენტებზე ქართული წარწერის გარეშე]]';local categoryLocalValuePresent = '';local outputReferences = true;-- sources that shall be omitted if any preffered sources existslocal deprecatedSources = {Q36578 = true, -- Gemeinsame NormdateiQ63056 = true, -- Find a GraveQ15222191 = true, -- BNF};local preferredSources = {Q5375741  = true, -- Encyclopædia Britannica OnlineQ17378135  = true, -- Great Soviet Encyclopedia (1969—1978)};-- Ссылки на используемые модули, которые потребуются в 99% случаев загрузки страниц (чтобы иметь на виду при переименовании)local moduleSources = require('Module:Sources')local p = {}local formatDatavalue, formatEntityId, formatRefs, formatSnak, formatStatement, formatStatementDefault, formatProperty, getSourcingCircumstances, loadCacheSafe, throwError, toBoolean;local function copyTo( obj, target )for k, v in pairs( obj ) dotarget[k] = vendreturn target;endlocal function loadCacheSafe( entityId )local status, result = pcall( function() return mw.loadData( 'Module:WikidataCache/' .. entityId ) end );if ( status == true ) thenreturn result;endreturn nil;endlocal function parseISO8601(str)if 'table' == type(str) thenif str.args and str.args[1] thenstr = '' .. str.args[1]elsereturn 'unknown argument type: ' .. type( str ) .. ': ' .. table.tostring( str )endendlocal Y, M, D = (function(str) local pattern = "(%-?%d+)%-(%d+)%-(%d+)T"local Y, M, D = mw.ustring.match( str, pattern )return tonumber(Y), tonumber(M), tonumber(D)end) (str);local h, m, s = (function(str) local pattern = "T(%d+):(%d+):(%d+)%Z";local H, M, S = mw.ustring.match( str, pattern);return tonumber(H), tonumber(M), tonumber(S);end) (str);local oh,om = ( function(str)if str:sub(-1)=="Z" then return 0,0 end; -- ends with Z, Zulu time-- matches ±hh:mm, ±hhmm or ±hh; else returns nilslocal pattern = "([-+])(%d%d):?(%d?%d?)$";local sign, oh, om = mw.ustring.match( str, pattern);sign, oh, om = sign or "+", oh or "00", om or "00";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})) * 1000;end--[[  Преобразует строку в булевое значение Принимает: строковое значение (может отсутствовать) Возвращает: булевое значение true или false, если получается распознать значение, или defaultValue во всех остальных  случаях]]local function toBoolean( valueToParse, defaultValue )    if ( valueToParse ) then        if valueToParse == '' or valueToParse == 'false' or valueToParse == '0' then            return false        end        return true    end    return defaultValue;end--[[   Функция для получения сущности (еntity) для текущей страницы  Подробнее о сущностях см. d:Wikidata:Glossary/ru  Принимает: строковый индентификатор (типа P18, Q42)  Возвращает: объект таблицу, элементы которой индексируются с нуля]]local function getEntityFromId( id )    if id then    local cached = loadCacheSafe( id );    if ( cached ) then    return cached;    end        return mw.wikibase.getEntityObject( id )    end    local entity = mw.wikibase.getEntityObject();    if ( entity ) then    local cached = loadCacheSafe( entity.id );    if ( cached ) then    return cached;    endend    return entity;end--[[   Внутрення функция для формирования сообщения об ошибке   Принимает: ключ элемента в таблице i18n (например entity-not-found)  Возвращает: строку сообщения]]local function throwError( key )    error( i18n.errors[key] );end--[[   Функция для получения идентификатора сущностей   Принимает: объект таблицу сущности  Возвращает: строковый индентификатор (типа P18, Q42)]]local function getEntityIdFromValue( value )    local prefix = ''    if value['entity-type'] == 'item' then        prefix = 'Q'    elseif value['entity-type'] == 'property' then        prefix = 'P'    else        throwError( 'unknown-entity-type' )    end    return prefix .. value['numeric-id']end-- проверка на наличие специилизированной функции в опцияхlocal function getUserFunction( options, prefix, defaultFunction )    -- проверка на указание специализированных обработчиков в параметрах,    -- переданных при вызове    if options[ prefix .. '-module' ] or options[ prefix .. '-function' ] then    -- проверка на пустые строки в параметрах или их отсутствие         if not options[ prefix .. '-module' ] or not options[ prefix .. '-function' ] then            throwError( 'unknown-' .. prefix .. '-module' );        end        -- динамическая загруза модуля с обработчиком указанным в параметре        local formatter = require ('Module:' .. options[ prefix .. '-module' ]);        if formatter == nil then            throwError( prefix .. '-module-not-found' )        end        local fun = formatter[ options[ prefix .. '-function' ] ]        if fun == nil then            throwError( prefix .. '-function-not-found' )        end        return fun;    end   return defaultFunction;end-- Выбирает свойства по property id, дополнительно фильтруя их по рангуlocal function selectClaims( context, options, propertySelector )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 propertySelector ) then error( 'propertySelector not specified'); end;local WDS = require('Module:WikidataSelectors')result = WDS.filter(options.entity.claims, propertySelector)    if ( not result or #result == 0 ) then    return nil;    end    return result;end--[[   Функция для оформления утверждений (statement)  Подробнее о утверждениях см. d:Wikidata:Glossary/ru  Принимает: таблицу параметров  Возвращает: строку оформленного текста, предназначенного для отображения в статье]]local function formatProperty( options )    -- Получение сущности по идентификатору    local entity = getEntityFromId( options.entityId )    if not entity then        return -- throwError( 'entity-not-found' )    end-- проверка на присутсвие у сущности заявлений (claim)-- подробнее о заявлениях см. d:Викиданные:Глоссарий    if (entity.claims == nil) then        return '' --TODO error?    end-- improve optionsoptions.frame = g_frame;options.entity = entity;options.extends = function( self, newOptions )return copyTo( newOptions, copyTo( self, {} ) )endif ( options.i18n ) thenoptions.i18n = copyTo( options.i18n, copyTo( i18n, {} ) );elseoptions.i18n = i18n;end-- create contextlocal context = { formatSnak = formatSnak, formatPropertyDefault = formatPropertyDefault, formatStatementDefault = formatStatementDefault }context.formatProperty = function( options ) local func = getUserFunction( options, 'property', context.formatPropertyDefault );return func( context, options )end;context.formatStatement = function( options, statement ) return formatStatement( context, options, statement ) end;context.formatSnak = function( options, snak, circumstances ) return formatSnak( context, options, snak, circumstances ) end;context.formatRefs = function( options, statement ) return formatRefs( context, options, statement ) end;context.parseTimeFromSnak = function( snak )if ( snak and snak.datavalue and snak.datavalue.value and snak.datavalue.value.time ) thenlocal timeISO6801 = tostring( snak.datavalue.value.time )return parseISO8601( timeISO6801 );endreturn nil;endcontext.getSourcingCircumstances = function( statement ) return getSourcingCircumstances( statement ) end;context.selectClaims = function( options, propertyId ) return selectClaims( context, options, propertyId ) end;return context.formatProperty( options );endfunction formatPropertyDefault( 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 missing' ); end;    local claims = context.selectClaims( options, options.property );    if (claims == nil) then        return '' --TODO error?    end    -- Обход всех заявлений утверждения и с накоплением оформленых предпочтительных     -- заявлений в таблице    local formattedClaims = {}    for i, claim in ipairs(claims) do        local formattedStatement = context.formatStatement( options, claim )        -- здесь может вернуться либо оформленный текст заявления        -- либо строка ошибки nil похоже никогда не возвращается        if (formattedStatement) then            formattedStatement = '<span class="wikidata-claim" data-wikidata-property-id="' .. string.upper( options.property ) .. '" data-wikidata-claim-id="' .. claim.id .. '">' .. formattedStatement .. '</span>'            table.insert( formattedClaims, formattedStatement )        end    end-- создание текстовой строки со списком оформленых заявлений из таблицы      return mw.text.listToText( formattedClaims, options.separator, options.conjunction )end--[[   Функция для оформления одного утверждения (statement)  Принимает: объект-таблицу утверждение и таблицу параметров  Возвращает: строку оформленного текста с заявлением (claim)]]function formatStatement( context, options, statement )if ( not statement ) thenerror( 'statement is not specified or nil' );end    if not statement.type or statement.type ~= 'statement' then        throwError( 'unknown-claim-type' )    end    local functionToCall = getUserFunction( options, 'claim', context.formatStatementDefault );    return functionToCall( context, options, statement );endfunction getSourcingCircumstances( statement )if (not statement) then error('statement is not specified') end;local circumstances = {};if ( statement.qualifiersand statement.qualifiers.P1480 ) thenfor i, qualifier in pairs( statement.qualifiers.P1480 ) doif ( qualifierand qualifier.datavalueand qualifier.datavalue.type == 'wikibase-entityid'and qualifier.datavalue.valueand qualifier.datavalue.value["entity-type"] == 'item' ) thenlocal circumstance = 'Q' .. qualifier.datavalue.value["numeric-id"];if ( 'Q18086598' == circumstance ) thencircumstances.approximate = true;endif ( 'Q18122778' == circumstance ) thencircumstances.presumably = true;endendendendreturn circumstances;end--[[   Функция для оформления одного утверждения (statement)  Принимает: объект-таблицу утверждение, таблицу параметров,  объект-функцию оформления внутренних структур утверждения (snak) и  объект-функцию оформления ссылки на источники (reference)  Возвращает: строку оформленного текста с заявлением (claim)]]function formatStatementDefault( context, options, statement )if (not context) then error('context is not specified') end;if (not options) then error('options is not specified') end;if (not statement) then error('statement is not specified') end;local circumstances = context.getSourcingCircumstances( statement );if ( options.references ) then    return context.formatSnak( options, statement.mainsnak, circumstances ) .. context.formatRefs( options, statement );    else    return context.formatSnak( options, statement.mainsnak, circumstances );    endend--[[   Функция для оформления части утверждения (snak)  Подробнее о snak см. d:Викиданные:Глоссарий  Принимает: таблицу snak объекта (main snak или же snak от квалификатора) и таблицу опций  Возвращает: строку оформленного викитекста]]function formatSnak( context, options, snak, circumstances )circumstances = circumstances or {};local hash = '';local mainSnakClass = '';if ( snak.hash ) thenhash = ' data-wikidata-hash="' .. snak.hash .. '"';elsemainSnakClass = ' wikidata-main-snak';endlocal before = '<span class="wikidata-snak ' .. mainSnakClass .. '"' .. hash .. '>'local after = '</span>'    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' thenif ( circumstances.presumably ) thenbefore = before .. options.i18n.presumably;endif ( circumstances.approximate ) thenbefore = before .. options.i18n.approximate;end        return before .. formatDatavalue( context, options, snak.datavalue ) .. after;    else        throwError( 'unknown-snak-type' );    endend--[[   Функция для оформления объектов-значений с географическими координатами  Принимает: объект-значение и таблицу параметров,  Возвращает: строку оформленного текста]]function formatGlobeCoordinate( value, options )-- проверка на требование в параметрах вызова на возврат сырого значения     if options['subvalue'] == 'latitude' then -- широты        return value['latitude']    elseif options['subvalue'] == 'longitude' then -- долготы        return value['longitude']    else    -- в противном случае формируются параметры для вызова шаблона {{coord}}    -- нужно дописать в документации шаблона, что он отсюда вызывается, и что    -- любое изменние его парамеров  должно быть согласовано с кодом тут        local eps = 0.0000001 -- < 1/360000        local globe = '' -- TODO        local lat = {}        lat['abs'] = math.abs(value['latitude'])        lat['ns'] = value['latitude'] >= 0 and 'N' or 'S'        lat['d'] = math.floor(lat['abs'] + eps)        lat['m'] = math.floor((lat['abs'] - lat['d']) * 60 + eps)        lat['s'] = math.max(0, ((lat['abs'] - lat['d']) * 60 - lat['m']) * 60)        local lon = {}        lon['abs'] = math.abs(value['longitude'])        lon['ew'] = value['longitude'] >= 0 and 'E' or 'W'        lon['d'] = math.floor(lon['abs'] + eps)        lon['m'] = math.floor((lon['abs'] - lon['d']) * 60 + eps)        lon['s'] = math.max(0, ((lon['abs'] - lon['d']) * 60 - lon['m']) * 60)        local coord = '{{coord'        if (value['precision'] == nil) or (value['precision'] < 1/60) then -- по умолчанию с точностью до секунды            coord = coord .. '|' .. lat['d'] .. '|' .. lat['m'] .. '|' .. lat['s'] .. '|' .. lat['ns']            coord = coord .. '|' .. lon['d'] .. '|' .. lon['m'] .. '|' .. lon['s'] .. '|' .. lon['ew']        elseif value['precision'] < 1 then            coord = coord .. '|' .. lat['d'] .. '|' .. lat['m'] .. '|' .. lat['ns']            coord = coord .. '|' .. lon['d'] .. '|' .. lon['m'] .. '|' .. lon['ew']        else            coord = coord .. '|' .. lat['d'] .. '|' .. lat['ns']            coord = coord .. '|' .. lon['d'] .. '|' .. lon['ew']        end        coord = coord .. '|globe:' .. globe        if options['display'] then            coord = coord .. '|display=' .. options.display        else            coord = coord .. '|display=title'        end        coord = coord .. '}}'        return g_frame:preprocess(coord)    endendlocal function getDefaultValueFunction( datavalue )    -- вызов обработчиков по умолчанию для известных типов значений    if datavalue.type == 'wikibase-entityid' then    -- идентификатор сущности        return function( context, options, value ) return formatEntityId( getEntityIdFromValue( value ), options ) end;    elseif datavalue.type == 'string' then    -- строка        return function( context, options, value ) return value end;    elseif datavalue.type == 'monolingualtext' then    -- моноязычный текст (строка с указанием языка)        return function( context, options, value )        if ( options.monolingualLangTemplate == 'lang' ) then        return options.frame:expandTemplate{ title = 'lang-' .. value.language, args = { value.text } };        elseif ( options.monolingualLangTemplate == 'ref' ) then        return '<span class="lang" lang="' .. value.language .. '">' .. value.text .. '</span>' .. options.frame:expandTemplate{ title = 'ref-' .. value.language };        else        return '<span class="lang" lang="' .. value.language .. '">' .. value.text .. '</span>';        end        end;    elseif datavalue.type == 'globecoordinate' then    -- географические координаты        return function( context, options, value ) return formatGlobeCoordinate( value, options )  end;    elseif datavalue.type == 'quantity' then        return function( context, options, value )    -- диапазон значений        local amount = string.gsub(value['amount'], '^%+', '')        local lang = mw.language.new( 'ka' )        return lang:formatNum( tonumber( amount ) )        end;    elseif datavalue.type == 'time' then        return function( context, options, value )local moduleDate = require('Module:Wikidata/date')    return moduleDate.formatDate( context, options, value );        end;    else    -- во всех стальных случаях возвращаем ошибку        throwError( 'unknown-datavalue-type' )    endend--[[   Функция для оформления значений (value)  Подробнее о значениях  см. d:Wikidata:Glossary/ru  Принимает: объект-значение и таблицу параметров,  Возвращает: строку оформленного текста]]function formatDatavalue( context, options, datavalue )if ( not context ) then error( 'context not specified' ); end;if ( not options ) then error( 'options not specified' ); end;if ( not datavalue ) then error( 'datavalue not specified' ); end;if ( not datavalue.value ) then error( 'datavalue.value is missng' ); end;    -- проверка на указание специализированных обработчиков в параметрах,    -- переданных при вызове    context.formatValueDefault = getDefaultValueFunction( datavalue );    local functionToCall = getUserFunction( options, 'value', context.formatValueDefault );    return functionToCall( context, options, datavalue.value );end-- Небольшой словарь упрощенного отображения (TODO: надо сделать расширенный с учётом даты)local simpleReplaces = {Q30 = '[[ამერიკის შეერთებული შტატები|აშშ]]',Q148 = '[[ჩინეთის სახალხო რესპუბლიკა|ჩინეთი]]',Q183 = '[[გერმანია]]',Q258 = '[[სამხრეთ აფრიკის რესპუბლიკა|სარ]]',Q423 = '[[კორეის სახალხო დემოკრატიული რესპუბლიკა|ჩრდილოეთი კორეა]]',Q2184 = '[[რსფსრ]]',Q2895 = '[[ბელორუსიის საბჭოთა სოციალისტური რესპუბლიკა|ბელორუსიის სსრ]]',Q15180 = '[[საბჭოთა სოციალისტური რესპუბლიკების კავშირი|სსრკ]]',Q16957 = '[[გერმანიის დემოკრატიული რესპუბლიკა|გდრ]]',Q130229 = '[[საქართველოს საბჭოთა სოციალისტური რესპუბლიკა|საქართველოს სსრ]]',Q307022 = '[[აფხაზეთის ავტონომიური საბჭოთა სოციალისტური რესპუბლიკა|აფხაზეთის ასსრ]]',Q378203 = '[[აჭარის ავტონომიური საბჭოთა სოციალისტური რესპუბლიკა|აჭარის ასსრ]]',Q130280 = '[[ესტონეთის საბჭოთა სოციალისტური რესპუბლიკა|ესტონეთის სსრ]]',Q131337 = '[[აზერბაიჯანის საბჭოთა სოციალისტური რესპუბლიკა|აზერბაიჯანის სსრ]]',Q132856 = '[[სომხეთის საბჭოთა სოციალისტური რესპუბლიკა|სომხეთის სსრ]]',Q133356 = '[[უკრაინის საბჭოთა სოციალისტური რესპუბლიკა|უკრაინის სსრ]]',Q168811 = '[[ყაზახეთის საბჭოთა სოციალისტური რესპუბლიკა|ყაზახეთის სსრ]]',Q170895 = '[[მოლდავეთის საბჭოთა სოციალისტური რესპუბლიკა|მოლდავეთის სსრ]]',Q173761 = '[[ლიტვის საბჭოთა სოციალისტური რესპუბლიკა|ლიტვის სსრ]]',Q192180 = '[[ლატვიის საბჭოთა სოციალისტური რესპუბლიკა|ლატვიის სსრ]]',Q199707 = '[[თურქმენეთის საბჭოთა სოციალისტური რესპუბლიკა|თურქმენეთის სსრ]]',Q199711 = '[[ტაჯიკეთის საბჭოთა სოციალისტური რესპუბლიკა|ტაჯიკეთის სსრ]]',Q484578 = '[[უზბეკეთის საბჭოთა სოციალისტური რესპუბლიკა|უზბეკეთის სსრ]]',Q545205 = '[[ამიერკავკასიის სოციალისტური ფედერაციული საბჭოთა რესპუბლიკა|ასფსრ]]',Q809806 = '[[ბაშკირეთის ავტონომიური საბჭოთა სოციალისტური რესპუბლიკა|ბაშკირეთის ასსრ]]',        Q1140829 = '[[თათრეთის ავტონომიური საბჭოთა სოციალისტური რესპუბლიკა|თათრეთის ასსრ]]',Q1157215 = '[[დაღესტანის ავტონომიური საბჭოთა სოციალისტური რესპუბლიკა|დაღესტანის ასსრ]]',}--[[   Функция для оформления идентификатора сущности  Принимает: строку индентификатора (типа Q42) и таблицу параметров,  Возвращает: строку оформленного текста]]function formatEntityId( entityId, options )-- получение локализованного названия     local label = nil;    if ( options.text and options.text ~= '' ) then        label = options.text    else    if ( simpleReplaces[entityId] ) thenreturn simpleReplaces[entityId];endlabel = mw.wikibase.label( entityId );    end-- получение ссылки по идентификатору    local link = mw.wikibase.sitelink( entityId )    if link then        if label then            return '[[' .. link .. '|' .. label .. ']]'        else            return '[[' .. link .. ']]'        end    end    if label then        return '[[:d:' .. entityId .. '|' .. label .. ']]'    end    -- сообщение об отсутвии локализованного названия    -- not good, but better than nothing    return '[[d:' .. entityId .. '|' .. entityId .. ']]<span style="border-bottom: 1px dotted; cursor: help; white-space: nowrap" title="ვიკიმონაცემებში ამ ელემენტის ქართული წარწერა არ არის. თქვენ შეგიძლიათ დახმარება, ქართული ვარიანტის დაწერით.">?</span>' .. categoryLinksToEntitiesWithMissingLabel;end-- getting sitelink of a given wikifunction p.getSiteLink(frame)local f = frame.args[1]local k = frame.args[2]local entity = mw.wikibase.getEntity( k )if not entity thenreturnendlocal link = entity:getSitelink( f )if not link thenreturnendreturn linkend--[[   Функция для оформления утверждений (statement)  Подробнее о утверждениях см. d:Wikidata:Glossary/ru  Принимает: таблицу параметров  Возвращает: строку оформленного текста, предназначенного для отображения в статье]]-- устаревшее имя, не использоватьfunction p.formatStatements( frame )return p.formatProperty( frame );endfunction 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 frame.args.value        else                -- если трогать всё-таки можно, добавляем категорию-маркер                return args.value .. categoryLocalValuePresent;        end    end    if ( plain ) then -- вызова стандартного обработчика без оформления, если передана опция plain    return frame:callParserFunction( '#property', frame.args.property );    endg_frame = frame-- после проверки всех аргументов -- вызов функции оформления для свойства (набора утверждений)    return formatProperty( frame.args )end--[[  Функция оформления ссылок на источники (reference)   Подробнее о ссылках на источники см. d:Wikidata:Glossary/ru  Экспортируется в качестве зарезервированной точки для вызова из функций-расширения вида claim-module/claim-function через context  Вызов из других модулей напрямую осуществляться не должен (используйте frame:expandTemplate вместе с одним из специлизированных шаблонов вывода значения свойства).  Принимает: объект-таблицу утверждение  Возвращает: строку оформленных ссылок для отображения в статье]]function formatRefs( context, options, statement )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 missing' ); end;if ( not statement ) then error( 'statement not specified' ); end;if ( not outputReferences ) thenreturn '';endlocal result = '';if ( statement.references ) thenlocal allReferences = statement.references;local hasPreferred = false;for _, reference in pairs( statement.references ) doif ( reference.snaksand reference.snaks.P248and reference.snaks.P248[1]and reference.snaks.P248[1].datavalueand reference.snaks.P248[1].datavalue.value["numeric-id"] ) thenlocal entityId = "Q" .. reference.snaks.P248[1].datavalue.value["numeric-id"];if ( preferredSources[entityId] ) thenhasPreferred = true;endendendfor _, reference in pairs( statement.references ) dolocal display = true;if ( hasPreferred ) thenif ( reference.snaksand reference.snaks.P248and reference.snaks.P248[1]and reference.snaks.P248[1].datavalueand reference.snaks.P248[1].datavalue.value["numeric-id"] ) thenlocal entityId = "Q" .. reference.snaks.P248[1].datavalue.value["numeric-id"];if ( deprecatedSources[entityId] ) thendisplay = false;endendendif ( display ) thenresult = result .. moduleSources.renderReference( g_frame, options.entity, reference );endendendreturn resultendreturn p
🔥 Top keywords: მთავარი გვერდიევროპის საფეხბურთო ჩემპიონატი 2024სპეციალური:ძიებაევროპის საფეხბურთო ჩემპიონატიდიდგორის ბრძოლაკატეგორია:ქართული გვარებიმამის დღესლოვაკეთისეტყვასაქართველოქვეყნების სიასაჭმელი ტრიუფელითამარ მეფესლოვენიადავით IV აღმაშენებელისაქართველოს ეროვნული საფეხბურთო ნაკრებიმიხეილ მესხის სტადიონიყურბან-ბაირამიილია ჭავჭავაძემეორე მსოფლიო ომიგიორგი მიქაუტაძეჩუტყვავილახვიჩა კვარაცხელიამსოფლიო საფეხბურთო ჩემპიონატიკრიშტიანუ რონალდუპირველი მსოფლიო ომიბელგიარაბათის ციხერუმინეთიგერმანიაკარლეს პუჩდემონიიოანე-ზოსიმეთურქეთის ეროვნული საფეხბურთო ნაკრებივეფხისტყაოსანივახტანგ I გორგასალიქუნთრუშათბილისიზღვის დონექართული დამწერლობა