Модуль:Іншае значэньне
Дакумэнтацыю да гэтага модуля можна стварыць у Модуль:Іншае значэньне/Дакумэнтацыя
--------------------------------------------------------------------------------
-- Модуль:Іншае значэньне --
-- --
-- Дадзены модуль выводзіць паведамленьні і спасылкі на зьвязаныя артыкулы. --
-- Зьмяшчае дапаможныя функцыі для іншых Lua-модуляў --
--------------------------------------------------------------------------------
local libraryUtil = require('libraryUtil')
local checkType = libraryUtil.checkType
local checkTypeForNamedArg = libraryUtil.checkTypeForNamedArg
local mArguments -- lazily initialise [[Модуль:Аргумэнты]]
local yesno -- lazily initialise [[Модуль:ТакНе]]
local p = {}
--------------------------------------------------------------------------------
-- дапаможныя функцыі
--------------------------------------------------------------------------------
local function getArgs(frame)
-- Атрымлівае аргумэнты ад бацькоўскага аб’екту, абразаючы пропусты.
mArguments = require('Модуль:Аргумэнты')
return mArguments.getArgs(frame, {parentOnly = true})
end
local function removeInitialColon(s)
-- Выдаляе з радку пярэдняе дзьвюхкроп’е (калі ёсьць).
return s:match('^:?(.*)')
end
function p.findNamespaceId(link, removeColon)
-- Шукае код прасторы назваў спасылкі ці старонкі. Не працуе са спасылкамі
-- ў падвойных квадратных дужках. Дапомна абразае дзьвюхкроп’і
-- ў пачатку старонкі. Калі абразаць іх ня трэба,
-- пастаўце парамэтар removeColon = false.
checkType('findNamespaceId', 1, link, 'string')
checkType('findNamespaceId', 2, removeColon, 'boolean', true)
if removeColon ~= false then
link = removeInitialColon(link)
end
local namespace = link:match('^(.-):')
if namespace then
local nsTable = mw.site.namespaces[namespace]
if nsTable then
return nsTable.id
end
end
return 0
end
function p.formatPages(...)
-- Фарматуе сьпіс старонак з дапамогаю formatLink і вяртае яго it as an array.
-- ў выглядзе масіву. Пустыя значэньні непрымальныя.
local pages = {...}
local ret = {}
for i, page in ipairs(pages) do
ret[i] = p._formatLink{link = page}
end
return ret
end
function p.formatPageTables(...)
-- Са сьпісу табліцаў старонкі/дысплэю вытварае сьпіс фарматаваных
-- спасылак. Пустыя значэньні непрымальныя.
local pages = {...}
local links = {}
for i, t in ipairs(pages) do
checkType('formatPageTables', i, t, 'table')
local link = t[1]
local display = t[2]
links[i] = p._formatLink{link = link, display = display}
end
return links
end
function p.makeWikitextError(msg, helpLink, addTrackingCategory, title)
-- Фарматуе паведамленьне пра памылку для вартаньня ў вікітэкст.
-- Калі addTrackingCategory ня false пасьля выхадду з
-- [[Модулю:ТакНе]], і мы не на старонцы абмеркаваньня, дадаецца
-- катэгорыя адсочваньня.
checkType('makeWikitextError', 1, msg, 'string')
checkType('makeWikitextError', 2, helpLink, 'string', true)
yesno = require('Модуль:ТакНе')
title = title or mw.title.getCurrentTitle()
-- Зрабіць тэкст дапаможнай спасылкі.
local helpText
if helpLink then
helpText = ' ([[' .. helpLink .. '|help]])'
else
helpText = ''
end
-- Зрабіць тэкст катэгорыі.
local category
if not title.isTalkPage -- Не катэгарызаваць старонкі абмеркаваньняў
and title.namespace ~= 2 -- Не катэгарызаваць старонкі ўдзельнікаў
and yesno(addTrackingCategory) ~= false -- Даць магчымасьць адключыць
then
category = 'Вікіпэдыя:Праблема ў парамэтрах шаблёнаў'
category = string.format(
'[[%s:%s]]',
mw.site.namespaces[14].name,
category
)
else
category = ''
end
return string.format(
'<strong class="error">Памылка: %s%s.</strong>%s',
msg,
helpText,
category
)
end
function p.disambiguate(page, disambiguator)
-- Фарматуе назву старонкі з даданьнем у дужкай неадназначнасьці,
-- то бок «Артыкул» → «Артыкул (неадназначнасьць)».
checkType('disambiguate', 1, page, 'string')
checkType('disambiguate', 2, disambiguator, 'string', true)
disambiguator = disambiguator or 'disambiguation'
return string.format('%s (%s)', page, disambiguator)
end
--------------------------------------------------------------------------------
-- З атрыманай спасылкі вяртае вікіспасылку і значэньні. Пры неабходнасьці
-- спасылкі аддзяляюцца двухкроп’ямі, а спасылкі на разьдзелы апрацоўваюцца
-- і выводзяцца з разьдзяляльнікам « § » замест стандартнага «#» у МэдыяВікі.
--------------------------------------------------------------------------------
function p.formatLink(frame)
-- Экспартаваная функцыя formatLink для выкарыстаньня ў шаблёнах.
yesno = require('Модуль:ТакНе')
local args = getArgs(frame)
local link = args[1]
if not link then
return p.makeWikitextError(
'спасылка ня вызначаная',
'Шаблён:Фармат спасылкі#Памылкі',
args.category
)
end
return p._formatLink{
link = link,
display = args[2],
italicizePage = yesno(args.italicizepage),
italicizeSection = yesno(args.italicizesection),
}
end
local function italicize(s)
-- Зрабіць радок курсіўным.
return '<i>' .. s .. '</i>'
end
local function maybeItalicize(s, shouldItalicize)
-- зрабіць s курсіўным, калі s — радок, і парамэтар shouldItalicize = true.
if s and shouldItalicize then
return italicize(s)
else
return s
end
end
local function parseLink(link)
-- Parse a link and return a table with the link's components.
-- These components are:
-- - link: the link, stripped of any initial colon (always present)
-- - page: the page name (always present)
-- - section: the page name (may be nil)
-- - display: the display text, if manually entered after a pipe (may be nil)
link = removeInitialColon(link)
-- Find whether a faux display value has been added with the {{!}} magic
-- word.
local prePipe, display = link:match('^(.-)|(.*)$')
link = prePipe or link
-- Find the page, if it exists.
-- For links like [[#Bar]], the page will be nil.
local preHash, postHash = link:match('^(.-)#(.*)$')
local page
if not preHash then
-- We have a link like [[Foo]].
page = link
elseif preHash ~= '' then
-- We have a link like [[Foo#Bar]].
page = preHash
end
-- Find the section, if it exists.
local section
if postHash and postHash ~= '' then
section = postHash
end
return {
link = link,
page = page,
section = section,
display = display,
}
end
function p._formatLink(options)
-- Экспартаваная функцыя formatLink для выкарыстаньня ў модулях.
checkType('_formatLink', 1, options, 'table')
checkTypeForNamedArg('_formatLink', 'link', options.link, 'string', false)
checkTypeForNamedArg(
'_formatLink',
'display',
options.display,
'string',
true
)
checkTypeForNamedArg(
'_formatLink',
'italicizePage',
options.italicizePage,
'boolean',
true
)
checkTypeForNamedArg(
'_formatLink',
'italicizeSection',
options.italicizeSection,
'boolean',
true
)
local parsed = parseLink(options.link)
local display = options.display or parsed.display
-- Для выпадку, калі ня трэба падзяляць спасылку вэртыкальнай рыскай
if not display and not parsed.section and not options.italicizePage then
return string.format('[[:%s]]', parsed.link)
end
-- Знайсьці тэкст для вываду ў спасылцы з вэртыкальнай рыскай
if not display then
local page = maybeItalicize(parsed.page, options.italicizePage)
local section = maybeItalicize(parsed.section, options.italicizeSection)
if not page then
display = string.format('§ %s', section)
elseif section then
display = string.format('%s § %s', page, section)
else
display = page
end
end
return string.format('[[:%s|%s]]', parsed.link, display)
end
--------------------------------------------------------------------------------
-- Вяртае стандартны тэкст падзагалоўку.
--------------------------------------------------------------------------------
function p.hatnote(frame)
local args = getArgs(frame)
local s = args[1]
local options = {}
if not s then
return p.makeWikitextError(
'тэкст ня вызначаны',
'Шаблён:Іншае значэньне#Памылкі',
args.category
)
end
options.extraclasses = args.extraclasses
options.selfref = args.selfref
return p._hatnote(s, options)
end
function p._hatnote(s, options)
checkType('_hatnote', 1, s, 'string')
checkType('_hatnote', 2, options, 'table', true)
options = options or {}
local classes = {'hatnote', 'navigation-not-searchable'}
local extraclasses = options.extraclasses
local selfref = options.selfref
if type(extraclasses) == 'string' then
classes[#classes + 1] = extraclasses
end
if selfref then
classes[#classes + 1] = 'selfref'
end
return string.format(
'<div role="note" class="%s">%s</div>',
table.concat(classes, ' '),
s
)
end
return p