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