Модуль:Wikidata/Medals
Поделись знанием:
Документация
Содержит функции форматирования для свойств (claims), представляющих собой ссылки на награды.
См. {{wikidata/p166}}
Функции модуля нельзя вызывать напрямую — они передаются в виде аргументов из соответствующих связанных шаблонов (и только из них, в другие шаблоны их также вставлять не нужно).
Во избежание поломок страниц, использующих данный модуль, желательно экспериментировать в Песочнице для модулей.
local WDS = require('Module:WikidataSelectors') local p = {} --[[ Функция для получения идентификатора сущностей Принимает: объект таблицу сущности Возвращает: строковый индентификатор (типа 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 --Property:P166 function p.formatMedalValue( context, options, statement ) local entityId = getEntityIdFromValue( statement ) local label = mw.wikibase.label( entityId ) -- вывод награды шаблоном, если это возможно if label then local title = mw.title.new( label, 'Template' ) if title.exists then local template = options.frame:expandTemplate{ title = label, args = {} } if string.find( template, 'navbox', 0, true ) == nil then return template end end end local image = nil local entity = mw.wikibase.getEntity( entityId ) -- получение изображения планки из элемента local ribbonImageClaims = WDS.filter( entity.claims, 'p2425' ) if ribbonImageClaims and #ribbonImageClaims then for i, claim in pairs( ribbonImageClaims ) do if claim.type == 'statement' and claim.mainsnak.snaktype == 'value' then image = claim.mainsnak.datavalue.value break end end end -- получение иконки из элемента if not image then local imageClaims = WDS.filter( entity.claims, 'p2910' ) if imageClaims and #imageClaims then for i, claim in pairs( imageClaims ) do if claim.type == 'statement' and claim.mainsnak.snaktype == 'value' then image = claim.mainsnak.datavalue.value break end end end end -- получение ссылки по идентификатору и вывод планки if image then local link = mw.wikibase.sitelink( entityId ) local out = '[[File:' .. image .. '|border|40x40px|link=' if link then out = out .. link else out = out .. 'd:' .. entityId end if label then out = out .. '|' .. label end out = out .. ']]' return out end local out = context.formatValueDefault( context, options, statement ) if out and out ~= '' then return '<p style="text-align:left>' .. out .. '</p>' end return '' end return p;