Модуль:Wikidata/Medals

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

Документацію для цього модуля можна створити у Модуль:Wikidata/Medals/документація

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;