Модуль:Іншае значэньне
Перайсьці да навігацыі
Перайсьці да пошуку
Дакумэнтацыю да гэтага модуля можна стварыць у Модуль:Іншае значэньне/Дакумэнтацыя
--------------------------------------------------------------------------------
-- Модуль:Іншае значэньне --
-- --
-- Дадзены модуль выводзіць паведамленьні і спасылкі на зьвязаныя артыкулы. --
-- Зьмяшчае дапаможныя функцыі для іншых Lua-модуляў --
--------------------------------------------------------------------------------
local libraryUtil = require('libraryUtil')
local checkType = libraryUtil.checkType
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(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, 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 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)
local args = getArgs(frame)
local link = args[1]
local display = args[2]
if not link then
return p.makeWikitextError(
'спасылка ня вызначаная',
'Шаблён:Фармат верхняй спасылкі#Памылкі',
args.category
)
end
return p._formatLink(link, display)
end
function p._formatLink(link, display)
checkType('_formatLink', 1, link, 'string')
checkType('_formatLink', 2, display, 'string', true)
-- Выдаліць з радку пярэдняе дзьвюхкроп’е для спасылак, дзе гэта было
-- пазначана ўручную
link = removeInitialColon(link)
-- Вызначыць, ці было дададзенае іншае адлюстроўванае значэньне з
-- дапамогай чароўнага слова {{!}}.
if not display then
local prePipe, postPipe = link:match('^(.-)|(.*)$')
link = prePipe or link
display = postPipe
end
-- Вызначыць адлюстроўванае значэньне.
if not display then
local page, section = link:match('^(.-)#(.*)$')
if page then
display = page .. ' § ' .. section
end
end
-- Сканструяваць спасылку.
if display then
return string.format(
'[[:%s|%s]]',
string.gsub(link, '|(.*)$', ''), --display overwrites manual piping
display
)
else
return string.format('[[:%s]]', link)
end
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