Модуль: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;