Модуль:Верхняя зноска зь меткай

Дакумэнтацыю да гэтага модуля можна стварыць у Модуль:Верхняя зноска зь меткай/Дакумэнтацыя

--------------------------------------------------------------------------------
--                         Верхняя зноска зь меткай                           --
--                                                                            --
-- Гэты модуль робіць грунтоўную працу ў стварэньні верхняй зноскі ў выглядзе --
-- сьпісу, перад якім дадаецца карыстальніцкая метка з двухкроп’ем, напр.     --
-- „МЕТКА: [Сьпіс старонак]“. Гэта можна прымяняць у {{Глядзіце таксама}} ды  --
-- іншых падобных шаблёнах.                                                   --
--------------------------------------------------------------------------------

local mHatnote = require('Модуль:Іншае значэньне')
local mHatlist = require('Модуль:Сьпіс верхніх зносак')
local mArguments --лянівая ініцыялізацыя
local p = {}

-- Дапомныя значэньні для гэтага модулю
local defaults = {
	label = 'Глядзіце таксама', --дапомнае значэньне меткі ў зносцы
	labelForm = '%s: %s',
	prefixes = {'метка', 'метка ', 'м'},
	template = 'Модуль:Верхняя зноска зь меткай'
}

-- Дапаможная функцыя, якая камбінуе парамэтры вываду ў аргумэнты старонкі.
-- Таксама сьціскае разрэджаныя архівы (староньні станоўчы эфэкт).
function p.preprocessDisplays (args, prefixes)
	-- Прэфіксы вызначаюць, у якім парадку правяраць парамэтры для фармаваньня вываду
	-- Да кожнага зь іх аўтаматычна дадаецца нумарацыя, т. б. 'метка1', 'метка 1', & 'м1'
	prefixes = prefixes or defaults.prefixes
	local pages = {}
	for k, v in pairs(args) do
		if type(k) == 'number' then
			local display
			for i = 1, #prefixes do
				display = args[prefixes[i] .. k]
				if display then break end
			end
			local page = display and
				string.format('%s|%s', string.gsub(v, '|.*$', ''), display) or v
			pages[#pages + 1] = page
		end
	end
	return pages
end

-- Утварае верхнюю зноску з сьпісам старонак.
-- Галоўны каркас (шаблён выкліку) прымае 1 або 2 аргумэнты для меткі ў
-- адзіночнай і (неабавязкова) множнай формаў адпаведна:
-- * {{#invoke:Верхняя зноска зь меткай|labelledList|Адзіночная форма|Множная форма}}
-- Выніковы шаблён прымае назву старонкі і парамэтры метак нармальна.
function p.labelledList (frame)
	mArguments = require('Модуль:Аргумэнты')
	local labels = {frame.args[1] or defaults.label}
	labels[2] = frame.args[2] or labels[1]
	labels[3] = frame.args[3] --без дапомнага
	labels[4] = frame.args[4] --без дапомнага
	local template = frame:getParent():getTitle()
	local args = mArguments.getArgs(frame, {parentOnly = true})
	local pages = p.preprocessDisplays(args)
	local options = {
		extraclasses = frame.args.extraclasses,
		category = args.category,
		selfref = frame.args.selfref or args.selfref,
		template = template
	}
	return p._labelledList(pages, labels, options)
end

function p._labelledList (pages, labels, options)
	labels = labels or {}
	if #pages == 0 then
		return mHatnote.makeWikitextError(
			'не зададзеныя назвы старонак',
			(options.template or defaults.template) .. '#Памылкі',
			options.category
		)
	end
	label = (#pages == 1 and labels[1] or labels[2]) or defaults.label
	for k, v in pairs(pages) do 
		if mHatnote.findNamespaceId(v) ~= 0 then
			label =
				(
					#pages == 1 and
					(labels[3] or labels[1] or defaults.label) or
					(labels[4] or labels[2] or defaults.label)
				) or defaults.label
		end
	end
	local text = string.format(
		options.labelForm or defaults.labelForm,
		label,
		mHatlist.andList(pages, true)
	)
	local hnOptions = {
		extraclasses = options.extraclasses,
		selfref = options.selfref
	}
	return mHatnote._hatnote(text, hnOptions)
end

return p