Модуль:Навигация: различия между версиями
Внешний вид
Admin (обсуждение | вклад) Нет описания правки Метка: ручная отмена |
Admin (обсуждение | вклад) Нет описания правки |
||
| Строка 4: | Строка 4: | ||
local args = frame:getParent().args | local args = frame:getParent().args | ||
local | local wikiMarkup = { | ||
'<nav class="wiki-nav-menu">', | '<nav class="wiki-nav-menu">', | ||
'<div class="nav-section-title">' .. (args.section or 'Навигация') .. '</div>', | '<div class="nav-section-title">' .. (args.section or 'Навигация') .. '</div>', | ||
' | '' | ||
} | } | ||
-- Собираем | -- Собираем категории | ||
local categories = {} | local categories = {} | ||
for key, value in pairs(args) do | for key, value in pairs(args) do | ||
| Строка 30: | Строка 30: | ||
local subitems = args[category.subitems_key] | local subitems = args[category.subitems_key] | ||
-- | -- Категория | ||
if string.find(category.name, '&') then | if string.find(category.name, '&') then | ||
local parts = mw.text.split(category.name, '&') | local parts = mw.text.split(category.name, '&') | ||
if #parts >= 2 then | if #parts >= 2 then | ||
table.insert(wikiMarkup, '* ' .. parts[1] .. ' [[' .. parts[2] .. '|<span class="nav-category-text">' .. (parts[3] or parts[2]) .. '</span>]]') | |||
end | end | ||
else | else | ||
table.insert(wikiMarkup, '* [[' .. category.name .. '|<span class="nav-category-text">' .. category.name .. '</span>]]') | |||
end | end | ||
-- Подпункты | |||
if subitems then | if subitems then | ||
local subitemList = mw.text.split(subitems, ';') | local subitemList = mw.text.split(subitems, ';') | ||
for _, subitem in ipairs(subitemList) do | for _, subitem in ipairs(subitemList) do | ||
table.insert(wikiMarkup, '** ' .. mw.text.trim(subitem)) | |||
table.insert( | |||
end | end | ||
end | end | ||
end | end | ||
table.insert( | table.insert(wikiMarkup, '') | ||
table.insert( | table.insert(wikiMarkup, '</nav>') | ||
return table.concat( | return frame:preprocess(table.concat(wikiMarkup, '\n')) | ||
end | end | ||
return p | return p | ||
Версия от 07:38, 20 октября 2025
Для документации этого модуля может быть создана страница Модуль:Навигация/doc
local p = {}
function p.navmenu(frame)
local args = frame:getParent().args
local wikiMarkup = {
'<nav class="wiki-nav-menu">',
'<div class="nav-section-title">' .. (args.section or 'Навигация') .. '</div>',
''
}
-- Собираем категории
local categories = {}
for key, value in pairs(args) do
if string.match(key, '^category%d+$') then
local num = tonumber(string.match(key, 'category(%d+)'))
categories[num] = {
name = value,
subitems_key = 'subitems' .. num
}
end
end
local sortedNums = {}
for num in pairs(categories) do table.insert(sortedNums, num) end
table.sort(sortedNums)
for _, num in ipairs(sortedNums) do
local category = categories[num]
local subitems = args[category.subitems_key]
-- Категория
if string.find(category.name, '&') then
local parts = mw.text.split(category.name, '&')
if #parts >= 2 then
table.insert(wikiMarkup, '* ' .. parts[1] .. ' [[' .. parts[2] .. '|<span class="nav-category-text">' .. (parts[3] or parts[2]) .. '</span>]]')
end
else
table.insert(wikiMarkup, '* [[' .. category.name .. '|<span class="nav-category-text">' .. category.name .. '</span>]]')
end
-- Подпункты
if subitems then
local subitemList = mw.text.split(subitems, ';')
for _, subitem in ipairs(subitemList) do
table.insert(wikiMarkup, '** ' .. mw.text.trim(subitem))
end
end
end
table.insert(wikiMarkup, '')
table.insert(wikiMarkup, '</nav>')
return frame:preprocess(table.concat(wikiMarkup, '\n'))
end
return p