«Մոդուլ:Wikidata» խմբագրումներու միջեւ տարբերութիւն

Content deleted Content added
No edit summary
No edit summary
Պիտակ: Reverted
Տող 2.
local fileDefaultSize = '267x400px';
local outputReferences = true;
 
-- sources that shall be omitted if any preffered sources exists
local deprecatedSources = {
Q36578 = true, -- Gemeinsame Normdatei
Q63056 = true, -- Find a Grave
Q1798125 = true, -- LIBRIS
Q15222191 = true, -- BNF
Q15241312 = true, -- Freebase
Q29861311 = true, -- SNAC
Q86999151 = true, -- WeChangEd
Q523660 = true, -- International Music Score Library Project by https://ru.wikipedia.org/?diff=107090748
};
 
-- Ссылки на используемые модули, которые потребуются в 99% случаев загрузки страниц (чтобы иметь на виду при переименовании)
Տող 71 ⟶ 59՝
end
 
local function getCategoryByCode( code, sortkey )
local value = getConfig( 'categories', code );
if not value or value == '' then
return '';
end
return '[[Category:' .. value .. ']]';
if sortkey ~= nil then
return '[[Category:' .. value .. '|' .. sortkey .. ']]'; -- экранировать?
else
return '[[Category:' .. value .. ']]';
end
end
 
Տող 153 ⟶ 146՝
 
error('Unsupported precision: ' .. precision );
end
 
--[[
Функция для формирования категории на основе wikidata/config
]]
local function extractCategory( options, value )
if ( not options.category or options.nocat ) then
return '';
end
local propertyId = string.gsub( options.category, '([^Pp0-9].*)$', '');
local wbStatus, claims = pcall( mw.wikibase.getAllStatements, value.id, propertyId );
if ( wbStatus ~= true or not claims ) then return ''; end
allClaims = {}
allClaims[ propertyId ] = claims
claims = WDS.filter( allClaims, options.category )
if not claims then return ''; end
for _, claim in pairs( claims ) do
if ( claim
and claim.mainsnak
and claim.mainsnak.datavalue
and claim.mainsnak.datavalue.type == 'wikibase-entityid' ) then
local catEntityId = claim.mainsnak.datavalue.value.id;
local wbStatus, catSiteLink = pcall( mw.wikibase.getSitelink, catEntityId );
 
if ( wbStatus == true and catSiteLink ) then
return '[[' .. catSiteLink .. ']]';
else
return '[[Կատեգորիա:Վիքիդատա։Կատեգորիայի կարիք ունեցող հոդվածներ]]'
end
end
end
 
return '';
end
 
Տող 171 ⟶ 199՝
end
 
-- Обрачивает отформатированное значение в инлайновый или блочный тег.
--[[
-- @param value String value
Обрачивает отформатированное значение в тег
-- @param attributes Table of attributes
-- @return string HTML tag with value
Принимает: строковое значение, строку с атрибутами (может отсутствовать)
local function wrapValue( value, attributes )
Возвращает: строковое значение, значения с блочными тегами остаются блоком, текст встраиваем в строку
]]
local function wrapFormatProperty( value, attributes )
local tagName = 'span';
local spacer = '';
if (
string.match( value, '\n' )
or string.match( value, '<t[dhr][ >]' )
or string.match( value, '<div[ >]' )
or string.find( value, 'UNIQ%-%-imagemap' )
) then
tagName = 'div';
spacer = '\n'
end
local attrString = ''
return '<' .. tagName .. ' ' .. ( attributes or '' ) .. '>' .. spacer .. value .. '</' .. tagName .. '>';
for key, value in pairs( attributes or {} ) do
local _key = mw.text.trim( key )
local _value = mw.text.encode( mw.text.trim( value ) )
attrString = attrString .. _key .. '="' .. _value .. '" '
end
return '<' .. tagName .. ' ' .. attrString .. '>' .. spacer .. value .. '</' .. tagName .. '>';
end
 
-- Wraps formatted snak value into HTML tag with attributes.
-- @param value String value of snak
-- @param hash Snak hash
-- @param attributes Table of extra attributes
-- @return string HTML tag with value
local function wrapSnak( value, hash, attributes )
local newAttributes = mw.clone( attributes or {} )
newAttributes['class'] = ( newAttributes['class'] or '' ) .. ' wikidata-snak'
if hash then
newAttributes['data-wikidata-hash'] = hash
else
newAttributes['class'] = newAttributes['class'] .. ' wikidata-main-snak'
end
 
return wrapValue( value, newAttributes )
end
 
-- Wraps formatted statement value into HTML tag with attributes.
-- @param value String value of statement
-- @param propertyId String PID of property
-- @param claimId String ID of claim or nil for local value
-- @param attributes Table of extra attributes
-- @return string HTML tag with value
local function wrapStatement( value, propertyId, claimId, attributes )
local newAttributes = mw.clone( attributes or {} )
newAttributes['class'] = newAttributes['class'] or ''
newAttributes['data-wikidata-property-id'] = string.upper( propertyId )
 
if claimId then
newAttributes['class'] = newAttributes['class'] .. ' wikidata-claim'
newAttributes['data-wikidata-claim-id'] = claimId
else
newAttributes['class'] = newAttributes['class'] .. ' no-wikidata'
end
 
return wrapValue( value, newAttributes )
end
 
-- Wraps formatted qualifier's statement value into HTML tag with attributes.
-- @param value String value of qualifier's statement
-- @param propertyId String PID of qualifier
-- @param attributes Table of extra attributes
-- @return string HTML tag with value
local function wrapQualifier( value, qualifierId, attributes )
local newAttributes = mw.clone( attributes or {} )
newAttributes['data-wikidata-qualifier-id'] = string.upper( qualifierId )
return wrapValue( value, newAttributes )
end
 
Տող 375 ⟶ 459՝
local getLabelWithLang_DEFAULT_PROPERTIES = { "P1813", "P1448", "P1705" };
local getLabelWithLang_DEFAULT_SELECTORS = {
'P1813[language:' .. CONTENT_LANGUAGE_CODE .. '][!P3831,P3831:Q105690470]',
'P1448[language:' .. CONTENT_LANGUAGE_CODE .. '][!P3831,P3831:Q105690470]',
'P1705[language:' .. CONTENT_LANGUAGE_CODE .. '][!P3831,P3831:Q105690470]'
};
 
Տող 438 ⟶ 522՝
local claims;
if options.property then -- TODO: Почему тут может не быть property?
if options.rank then -- передать настройки ранга из конфига
claims = context.selectClaims( options, options.property );
claims = context.selectClaims( options, options.property .. options.rank );
else
claims = context.selectClaims( options, options.property );
end
end
if claims == nil then
Տող 444 ⟶ 532՝
end
 
-- Обход всех заявлений утверждения и с накоплением оформленыхоформленных предпочтительных
-- заявлений в таблице
local formattedClaims = {}
Տող 452 ⟶ 540՝
-- здесь может вернуться либо оформленный текст заявления, либо строка ошибки, либо nil
if ( formattedStatement and formattedStatement ~= '' ) then
formattedStatement = '<span class="wikidata-claim" data-wikidata-property-id="' .. stringcontext.upperwrapStatement( formattedStatement, options.property ) .. '" data-wikidata-claim-id="' .., claim.id .. '">' .. formattedStatement .. '</span>')
table.insert( formattedClaims, formattedStatement )
end
Տող 471 ⟶ 559՝
end
 
-- create context
--[[
local function initContext( options )
Функция для оформления утверждений (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 options
options.frame = g_frame;
options.entity = entity;
options.extends = function( self, newOptions )
return copyTo( newOptions, copyTo( self, {} ) )
end
 
if ( options.i18n ) then
options.i18n = copyTo( options.i18n, copyTo( getConfig( 'i18n' ), {} ) );
else
options.i18n = getConfig( 'i18n' );
end
 
-- create context
local context = {
entity = options.entity,
extractCategory = extractCategory,
formatSnak = formatSnak,
formatPropertyDefault = formatPropertyDefault,
formatStatementDefault = formatStatementDefault },
wrapSnak = wrapSnak,
wrapStatement = wrapStatement,
wrapQualifier = wrapQualifier,
}
context.cloneOptions = function( options )
local entity = options.entity;
Տող 542 ⟶ 604՝
context.getSourcingCircumstances = function( statement ) return getSourcingCircumstances( statement ) end;
context.selectClaims = function( options, propertyId ) return selectClaims( context, options, propertyId ) end;
 
return context
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 options
options.frame = g_frame;
options.entity = entity;
options.extends = function( self, newOptions )
return copyTo( newOptions, copyTo( self, {} ) )
end
 
if ( options.i18n ) then
options.i18n = copyTo( options.i18n, copyTo( getConfig( 'i18n' ), {} ) );
else
options.i18n = getConfig( 'i18n' );
end
local context = initContext( options );
 
return context.formatProperty( options );
Տող 637 ⟶ 736՝
function formatSnak( context, options, snak, circumstances )
circumstances = circumstances or {};
local hash = '';
local mainSnakClass = '';
if ( snak.hash ) then
hash = ' data-wikidata-hash="' .. snak.hash .. '"';
else
mainSnakClass = ' wikidata-main-snak';
end
 
local before = '<span class="wikidata-snak ' .. mainSnakClass .. '"' .. hash .. '>'
local after = '</span>'
 
if snak.snaktype == 'somevalue' then
Տող 675 ⟶ 764՝
end
 
return before .context.wrapSnak( result, snak..hash after;)
end
 
Տող 714 ⟶ 803՝
end
local format = options.format or ''
g_frame.args = {tostring(value['latitude']), tostring(value['longitude']), globe = globe, type = options.type and options.type or '', display = display }
if format == '' then
format = 'dms'
if value['precision'] then
local precision = value['precision'] * 60
if precision >= 60 then
format = 'd'
elseif precision >= 1 then
format = 'dm'
end
end
end
 
g_frame.args = {
tostring(value['latitude']),
tostring(value['longitude']),
globe = globe,
type = options.type and options.type or '',
scale = options.scale and options.scale or '',
display = display,
format = format,
}
return coord_mod.coord(g_frame)
Տող 732 ⟶ 842՝
if options[ 'caption' ] and options[ 'caption' ] ~= '' then
caption = options[ 'caption' ];
elseif options[ 'description' ] and options[ 'description' ] ~= '' then
caption = options[ 'description' ];
end
if caption ~= '' then
caption = wrapFormatPropertywrapQualifier( caption, 'P2096', { class =" 'media-caption" data-wikidata-qualifier-id="P2096"', style =" 'display:block;"' } );
end
 
Տող 749 ⟶ 857՝
local size = options[ 'size' ];
if size and size ~= '' then
-- TODO: check localized pixel names too
if not string.match( size, 'px$' )
andif not string.match( size, 'пксpx$' ) -- TODO: использовать перевод для языка викиthen
then
size = size .. 'px'
end
Տող 760 ⟶ 867՝
 
if options[ 'alt' ] and options[ 'alt' ] ~= '' then
image = image .. '|alt=' .. options[ 'alt' ];
end
if caption ~= '' then
image = image .. '|' .. caption
end
image = image .. ']]';
Տող 766 ⟶ 877՝
if caption ~= '' then
image = image .. '<br>' .. caption;
end
 
if options[ 'local_caption' ] and options[ 'local_caption' ] ~= '' then
image = image .. getCategoryByCode( 'media-contains-local-caption' )
end
else
image = image .. caption .. getCategoryByCode( 'media-contains-markup' );
end
 
if options.entity and options.fixdouble then
local page = mw.title.getCurrentTitle()
local txt = page:getContent()
if txt and txt:match(':' .. value) and mw.title.getCurrentTitle():inNamespace(0) then image = image .. getCategoryByCode( 'media-contains-local-double' ) end
end
return image
end
Տող 834 ⟶ 935՝
 
if formatter and formatter ~= '' then
local encodedValue = mw.ustring.gsub( value, '%%', '%%%%' ) -- ломается, если подставить внутрь другого mw.ustring.gsub
local link = mw.ustring.gsub(
mw.ustring.gsub( formatter, '$1', valueencodedValue ), '.',
{ [' '] = '%20', ['+'] = '%2b', ['['] = '%5B', [']'] = '%5D' } )
 
local title = options.title
Տող 842 ⟶ 945՝
title = '$1'
end
title = mw.ustring.gsub( title, '$1', value )
mw.ustring.gsub( title, '$1', encodedValue ), '.',
{ ['['] = '(', [']'] = ')' } )
 
return '[' .. link .. ' ' .. title .. ']'
Տող 863 ⟶ 968՝
 
local function formatNum( number, sigfig )
local multiplier = ''
sigfig = sigfig or 12 -- округление до 12 знаков после запятой, на 13-м возникает ошибка в точности
if options.countByThousands then
local powers = options.i18n['thousandPowers']
local pos = 1
while math.abs(number) >= 1000 and pos < #powers do
number = number / 1000
pos = pos + 1
end
multiplier = powers[pos]
if math.abs(number) >= 100 then
sigfig = sigfig or 0
elseif math.abs(number) >= 10 then
sigfig = sigfig or 1
else
sigfig = sigfig or 2
end
else
sigfig = sigfig or 12 -- округление до 12 знаков после запятой, на 13-м возникает ошибка в точности
end
local mult = 10^sigfig;
number = math.floor( number * mult + 0.5 ) / mult;
return string.gsub( lang:formatNum( number ), '^-', '−' ) .. multiplier;
end
 
Տող 944 ⟶ 1070՝
 
return out;
end
 
-- Функция для оформления URL
local function formatUrlValue( context, options, value )
if not options.length or options.length == '' then
options.length = 25
end
 
local moduleUrl = require( 'Module:URL' )
return moduleUrl.formatUrlSingle( context, options, value )
end
 
Տող 970 ⟶ 1106՝
DATATYPE_CACHE[propertyId] = propertyEntity.datatype;
return propertyEntity.datatype;
end
 
local function formatLangRefs( options )
local langRefs = ''
if ( options.qualifiers and options.qualifiers.P407 ) then
for i, qualifier in pairs( options.qualifiers.P407 ) do
if ( qualifier
and qualifier.datavalue
and qualifier.datavalue.type == 'wikibase-entityid' ) then
local langRefEntity = getEntityFromId( qualifier.datavalue.value.id )
if ( langRefEntity and langRefEntity.claims ) then
local langRefCodeClaims = WDS.filter( langRefEntity.claims, 'P218' )
if langRefCodeClaims then
for _, claim in pairs( langRefCodeClaims ) do
if ( claim.mainsnak
and claim.mainsnak
and claim.mainsnak.datavalue
and claim.mainsnak.datavalue.type == 'string' ) then
local langRefCode = claim.mainsnak.datavalue.value
langRefs = langRefs .. '&#8203;' .. options.frame:expandTemplate{ title = 'ref-' ..langRefCode }
end
end
end
end
end
end
end
 
return langRefs
end
 
Տող 1011 ⟶ 1118՝
-- Media
return function( context, options, value )
if options.caption and options.caption ~= '' then
options.local_caption = options.caption;
elseif options.description and options.description ~= '' then
options.local_caption = options.description;
end
options.caption = ''
options.description = ''
if options.qualifiers and options.qualifiers.P2096 then
for i, qualifier in pairs( options.qualifiers.P2096 ) do
if ( qualifier
and qualifier.datavalue
and qualifier.datavalue.type == 'monolingualtext'
and qualifier.datavalue.value
and qualifier.datavalue.value.language == contentLanguageCode ) then
options.caption = qualifier.datavalue.value.text
options.description = qualifier.datavalue.value.text
break
end
end
end
if options['appendTimestamp'] and options.qualifiers and options.qualifiers.P585 and options.qualifiers.P585[1] then
local moment = formatDatavalue (context, options, options.qualifiers.P585[1].datavalue, 'time')
if not options.caption or options.caption == '' then
options.caption = moment
options.description = moment
else
options.caption = options.caption .. ', ' .. moment
options.description = options.description .. ', ' .. moment
end
end
return formatCommonsMedia( value, options )
end;
Տող 1055 ⟶ 1132՝
elseif datatype and datatype == 'url' then
-- URL
return function( context, options, value )formatUrlValue
local moduleUrl = require( 'Module:URL' )
local langRefs = formatLangRefs( options )
if not options.length or options.length == '' then
options.length = math.max( 18, 25 - #langRefs )
end
return moduleUrl.formatUrlSingle( context, options, value ) .. langRefs
end
end
return function( context, options, value ) return value end;
Տող 1072 ⟶ 1142՝
return value.text;
end
returnlocal options.frame:expandTemplate{ titlelangTemplate = mw.title.new('lang-' .. value.language, args = { value.text } }10);
if langTemplate.exists then
return options.frame:expandTemplate{ title = 'lang-' .. value.language, args = { value.text } };
else
return '<span class="lang" lang="' .. value.language .. '">' .. value.text .. '</span>' .. '[[Կատեգորիա:Lang- կաղապարի կարիք ունեցող հոդվածներ]]';
end
elseif ( options.monolingualLangTemplate == 'ref' ) then
local refTemplate = mw.title.new('ref-' .. value.language);
if refTemplate.exists 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>' .. '[[Կատեգորիա:Ref- կաղապարի կարիք ունեցող հոդվածներ]]';
end
else
return '<span class="lang" lang="' .. value.language .. '">' .. value.text .. '</span>';
Տող 1135 ⟶ 1215՝
 
-- определение соответствующей показываемому элементу категории
local category = pcontext.extractCategory( context, options, { id = entityId } )
 
-- получение ссылки по идентификатору
Տող 1169 ⟶ 1249՝
 
--[[
Функция для формированияоформления категорииутверждений на основе wikidata/config(statement)
Подробнее о утверждениях см. d:Wikidata:Glossary/ru
 
Принимает: таблицу параметров
Возвращает: строку оформленного текста, предназначенного для отображения в статье
]]
-- устаревшее имя, не использовать
function p.extractCategory( context, options, value )
function p.formatStatements( frame )
if ( not options.category or options.nocat ) then
return ''p.formatProperty( frame );
end
local propertyId = string.gsub( options.category, '([^Pp0-9].*)$', '');
local wbStatus, claims = pcall( mw.wikibase.getAllStatements, value.id, propertyId );
if ( wbStatus ~= true or not claims ) then return ''; end
allClaims = {}
allClaims[ propertyId ] = claims
claims = WDS.filter( allClaims, options.category )
if not claims then return ''; end
for _, claim in pairs( claims ) do
if ( claim
and claim.mainsnak
and claim.mainsnak.datavalue
and claim.mainsnak.datavalue.type == 'wikibase-entityid' ) then
local catEntityId = claim.mainsnak.datavalue.value.id;
local wbStatus, catSiteLink = pcall( mw.wikibase.getSitelink, catEntityId );
 
if ( wbStatus == true and catSiteLink ) then
return '[[' .. catSiteLink .. ']]';
end
end
end
 
return '';
end
-- getting sitelink of a given wiki
function p.getSiteLink(frame)
Տող 1213 ⟶ 1273՝
end
return link
end
--[[
Функция для оформления утверждений (statement)
Подробнее о утверждениях см. d:Wikidata:Glossary/ru
 
Принимает: таблицу параметров
Возвращает: строку оформленного текста, предназначенного для отображения в статье
]]
-- устаревшее имя, не использовать
function p.formatStatements( frame )
return p.formatProperty( frame );
end
 
Տող 1339 ⟶ 1388՝
end
 
local context = initContext( args );
-- обработчики по типу значения
local wrapperExtraArgs = ''{}
if args['value-module'] and args['value-function'] and not string.find( value, '[%[%]%{%}]' ) then
local func = getUserFunction( args, 'value' );
value = func( {}context, args, value );
elseif datatype == 'commonsMedia' then
value = formatCommonsMedia( value, args );
elseif datatype == 'external-id' and not string.find( value, '[%[%]%{%}]' ) then
wrapperExtraArgs = wrapperExtraArgs .. [' data-wikidata-external-id="'] ..= mw.text.encodekillMarkers( value ).. '"';
value = formatExternalId( value, args );
--elseif datatype == 'math' then
-- args.frame = frame -- костыль: в formatMath нужно frame:extensionTag
value = formatMath( value, args );
-- value = formatMath( value, args );
elseif datatype == 'url' then
value = formatUrlValue( context, args, value );
local moduleUrl = require( 'Module:URL' );
if not args.length or args.length == '' then
args.length = 25
end
value = moduleUrl.formatUrlSingle( nil, args, value );
end
 
Տող 1364 ⟶ 1411՝
 
-- временная штрафная категория для исправления табличных вставок
iflocal (allowTables = getPropertyParams(propertyId, ~=nil, {})['P166allowTables']
if ( not allowTables
and string.match( value, '<t[drdhr][ >]' )
-- and not string.match( value, '<table[ >]' )
-- and not string.match( value, '^%{%|' )
) then
value = value .. getCategoryByCode( 'value-contains-table', propertyId )
else
value = wrapFormatPropertywrapStatement( value, 'class="no-wikidata"'propertyId, nil, wrapperExtraArgs );
.. wrapperExtraArgs .. ' data-wikidata-property-id="'
.. propertyId .. '"' );
end
end
 
-- добавляем категорию-маркер
if not args.nocat then
local pageTitle = mw.title.getCurrentTitle();
if pageTitle.namespace == 0 then
value = value .. getCategoryByCode( 'local-value-present' );
end
end
Տող 1398 ⟶ 1437՝
-- после проверки всех аргументов -- вызов функции оформления для свойства (набора утверждений)
return formatProperty( args )
end
 
--[[
Функция проверки на присутствие источника в списке нерекомендованных.
 
Принимает: таблицу snak'ов
Возвращает: true/false
]]
function isReferenceDeprecated( snaks )
if not snaks then
return false
end
if snaks.P248
and snaks.P248[1]
and snaks.P248[1].datavalue
and snaks.P248[1].datavalue.value.id
then
local entityId = snaks.P248[1].datavalue.value.id
if getConfig( 'deprecatedSources', entityId ) then
return true
end
elseif snaks.P1433
and snaks.P1433[1]
and snaks.P1433[1].datavalue
and snaks.P1433[1].datavalue.value.id
then
local entityId = snaks.P1433[1].datavalue.value.id
if getConfig( 'deprecatedSources', entityId ) then
return true
end
end
return false
end
 
Տող 1427 ⟶ 1498՝
local displayCount = 0;
for _, reference in pairs( statement.references ) do
local entityId = nil;
if ( reference.snaks
andif not isReferenceDeprecated( reference.snaks.P248 ) then
hasNotDeprecated = true;
and reference.snaks.P248[1]
and reference.snaks.P248[1].datavalue
and reference.snaks.P248[1].datavalue.value.id ) then
local entityId = reference.snaks.P248[1].datavalue.value.id;
if ( not deprecatedSources[entityId] ) then
hasNotDeprecated = true;
end
end
end
Տող 1442 ⟶ 1507՝
local display = true;
if ( hasNotDeprecated ) then
if isReferenceDeprecated( reference.snaks ) then
display = false;
and reference.snaks.P248
and reference.snaks.P248[1]
and reference.snaks.P248[1].datavalue
and reference.snaks.P248[1].datavalue.value.id ) then
local entityId = reference.snaks.P248[1].datavalue.value.id;
if ( deprecatedSources[entityId] ) then
display = false;
end
end
end
if ( displayCount > 2 ) then
if ( options.entity and options.property ) then
local propertyID = mw.ustring.match( options.property, '^[Pp][0-9]+' ) -- TODO: обрабатывать не тут, а раньше
local moreReferences = '<sup>[[d:' .. options.entity.id .. '#' .. string.upper( options.property ) .. '|[…]]]</sup>';
local moreReferences = '<sup>[[d:' .. options.entity.id .. '#' .. string.upper( propertyID ) .. '|[…]]]</sup>';
table.insert( references, moreReferences );
end