Модуль:External links/Documentation

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
Документация
local p = {}
local data = require( 'Module:External links/data' )

-- Для проверки других частей таблицы увеличивайте lineOffset (например, до 395)
-- и делайте предпросмотр страницы [[Шаблон:Внешние ссылки/doc]]
local lineOffset = 0
local lineCounter = 0
local maxItems = 395

local function renderLabel( params )
	if type( params ) == 'string' then
		return params
	end

	local qid = params[ 1 ]
	local default = params[ 2 ]

	return mw.wikibase.label( qid ) or default
end

local function renderLine( frame, params )
	local result = ''

	local resourceLabel = renderLabel( params[ 1 ] )
	local pid = params[ 2 ]
	local qid
	if string.match( pid, '^P%d+:Q%d+$' ) then
		local parts = mw.text.split( pid, ':', true )
		pid = parts[ 1 ]
		qid = parts[ 2 ]
	end		

	result = result .. '| ' .. resourceLabel .. '\n'
	result = result .. '| [[:d:Property:' .. pid .. '|' .. pid .. ']]'
	if qid then
		result = result .. ' = [[:d:' .. qid .. '|' .. qid .. ']]'
	end

	local formatter = params[ 3 ] or ''
	if type ( formatter ) == 'function' then
		formatter = 'function()'
	elseif formatter == '' or mw.ustring.sub( formatter, 1, 1 ) == ':' or qid then
		formatter = mw.text.nowiki( formatter )
	else
		lineCounter = lineCounter + 1
		if lineCounter >= lineOffset and lineCounter < lineOffset + maxItems then
			local formatterStatements = mw.wikibase.getAllStatements( pid, 'P1630' )
			local extFormatterStatements = mw.wikibase.getAllStatements( pid, 'P3303' )
			for _, statement in ipairs( extFormatterStatements ) do
				table.insert( formatterStatements, statement )
			end
			
			local wdFormatters = {}
			local isEqual = false
			for _, statement in ipairs( formatterStatements ) do
				if statement.rank ~= 'deprecated' then
					local wdFormatter = statement.mainsnak.datavalue.value
					if wdFormatter == formatter then
						formatter = '[[Файл:Yes check.svg|15px|alt=Совпадает с Викиданными|link=]] '  ..  mw.text.nowiki( formatter )
						isEqual = true
						break
					else
						table.insert( wdFormatters, mw.text.nowiki( wdFormatter ) )
					end
				end
			end
			if not isEqual then
				formatter = '[[Файл:Red x.svg|16px|alt=Не совпадает с Викиданными|link=]] ' .. mw.text.nowiki( formatter )
				if #wdFormatters then
					formatter = formatter .. '\n* ' .. table.concat( wdFormatters, '\n* ' )
				end
			end
		else
			formatter = mw.text.nowiki( formatter )
		end
	end

	result = result .. '\n| ' .. formatter
	result = result .. '\n'

	result = result .. '|-\n'

	return result
end

function p.render( frame )
	local result = ''
	for _, groupData in pairs( data ) do
		local groupLabel = groupData.label
		local groupList = groupData.list

		result = result .. '|-\n'
		result = result .. '! scope="colgroup" colspan="3" | ' .. groupLabel .. '\n'
		result = result .. '|-\n'

		for _, linkParams in pairs( groupList ) do
			result = result .. renderLine( frame, linkParams )
		end
	end
	return result
end

return p