Модуль:Участник:BabylonAS/Nova/ШаблонКод

Материал из Minecraft Wiki
Перейти к: навигация, поиск

Этот модуль реализует шаблоны {{Шаблон}}, {{ШаблонСсылка}} и {{ШаблонКод}}. Лучше этот модуль использовать именно через них.

-- Модуль для реализации шаблонов {{Шаблон}}, {{ШаблонКод}} и {{ШаблонСсылка}}

-- Экспортируемые настройки
local p = {}

function p.temp(f)
	-- Вычислить аргументы
	-- Допускается передача аргументов через аргумент функции f в другом модуле Lua,
	-- через вызов {{#invoke: модуль | функция | аргумент1 | агрумент2 | ... }} или через
	-- вызывающий шаблон
	local args = f.args or f				-- аргументы через {{#invoke:}} или вызов из другого модуля
	if f == mw.getCurrentFrame() and args[1] == nil then
		args = f:getParent().args			-- аргументы через вызывающий шаблон
	end
	
	args[1] = mw.text.trim(args[1])
	
	local type = mw.text.trim(args["тип"] or '') -- тип вывода
	local tag = (type == 'code') and 'code' or 'kbd' -- теги
	
	-- Теги для окраса в серый
	local grayStart = '<span style="color: #696969">'
	local grayEnd = '</span>'
	
	-- Выводимый код
	local wikicode = '<' .. tag .. '>' .. grayStart .. '{{' .. grayEnd
	
	-- Добавление ссылки (если используется тип link)
	if type == 'link' then
		-- Открывающие скобки ссылки
		wikicode = wikicode .. '[['
		
		local colon = args[1]:find(':') -- местоположение первого двоеточия
		if colon == nil then
			-- Если в первом аргументе нет двоеточия, то ищем шаблон в пространстве имён Шаблон
			wikicode = wikicode .. 'Шаблон:' .. args[1] .. '|' .. args[1]
		else
			if colon > 1 then
				-- Если перед двоеточием есть префикс, то перед ним ставим двоеточие, чтобы избавиться
				-- от проблем с интервики, категориями или файлами
				wikicode = wikicode .. ':' .. args[1]
			else
				wikicode = wikicode .. args[1] .. '|' .. args[1]
			end
		end
		
		-- Закрывающие скобки ссылки
		wikicode = wikicode .. ']]'
	else
		wikicode = wikicode .. args[1]
	end
	
	-- Добавление параметров
	if args[2] ~= nil then
		for i, v in ipairs(args) do
			if i > 1 then
				-- добавляем параметр
				wikicode = wikicode .. grayStart .. '&#124;' .. grayEnd .. mw.text.trim(v)
			end
		end
	end
	
	-- Закрывающие скобки и тег
	wikicode = wikicode .. grayStart .. '}}' .. grayEnd .. '</' .. tag .. '>'
	
	return wikicode
end

-- Экспорт
return p