Модуль:Навигация: различия между версиями
Внешний вид
Admin (обсуждение | вклад) Нет описания правки |
Admin (обсуждение | вклад) Нет описания правки |
||
| Строка 4: | Строка 4: | ||
local args = frame:getParent().args | local args = frame:getParent().args | ||
-- | -- Просто генерируем вики-разметку и обрабатываем её | ||
local | local wikiMarkup = {} | ||
table.insert(wikiMarkup, '<nav class="wiki-nav-menu">') | |||
table.insert(wikiMarkup, '<div class="nav-section-title">' .. (args.section or 'Навигация') .. '</div>') | |||
table.insert(wikiMarkup, '<ul class="nav-main-list">') | |||
-- | for i = 1, 20 do -- Предполагаем максимум 20 категорий | ||
local category = args['category' .. i] | |||
local subitems = args['subitems' .. i] | |||
if category then | |||
if | -- Категория | ||
local | table.insert(wikiMarkup, '<li class="nav-category">') | ||
table.insert( | if string.find(category, '&') then | ||
local parts = mw.text.split(category, '&') | |||
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 | |||
table.insert(wikiMarkup, '[[' .. category .. '|<span class="nav-category-text">' .. category .. '</span>]]') | |||
end | end | ||
-- Подпункты | |||
if subitems then | |||
table.insert(wikiMarkup, '<ul class="nav-sub-list">') | |||
local subitemList = mw.text.split(subitems, ';') | |||
for _, subitem in ipairs(subitemList) do | |||
table.insert(wikiMarkup, '<li class="nav-sub-item">' .. mw.text.trim(subitem) .. '</li>') | |||
end | |||
table.insert(wikiMarkup, '</ul>') | |||
end | end | ||
table.insert(wikiMarkup, '</li>') | |||
end | end | ||
end | end | ||
table.insert( | table.insert(wikiMarkup, '</ul>') | ||
table.insert( | table.insert(wikiMarkup, '</nav>') | ||
return table.concat( | -- Обрабатываем всю разметку через препроцессор | ||
return frame:preprocess(table.concat(wikiMarkup, '\n')) | |||
end | end | ||
return p | return p | ||
Версия от 07:35, 20 октября 2025
Для документации этого модуля может быть создана страница Модуль:Навигация/doc
local p = {}
function p.navmenu(frame)
local args = frame:getParent().args
-- Просто генерируем вики-разметку и обрабатываем её
local wikiMarkup = {}
table.insert(wikiMarkup, '<nav class="wiki-nav-menu">')
table.insert(wikiMarkup, '<div class="nav-section-title">' .. (args.section or 'Навигация') .. '</div>')
table.insert(wikiMarkup, '<ul class="nav-main-list">')
for i = 1, 20 do -- Предполагаем максимум 20 категорий
local category = args['category' .. i]
local subitems = args['subitems' .. i]
if category then
-- Категория
table.insert(wikiMarkup, '<li class="nav-category">')
if string.find(category, '&') then
local parts = mw.text.split(category, '&')
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 .. '|<span class="nav-category-text">' .. category .. '</span>]]')
end
-- Подпункты
if subitems then
table.insert(wikiMarkup, '<ul class="nav-sub-list">')
local subitemList = mw.text.split(subitems, ';')
for _, subitem in ipairs(subitemList) do
table.insert(wikiMarkup, '<li class="nav-sub-item">' .. mw.text.trim(subitem) .. '</li>')
end
table.insert(wikiMarkup, '</ul>')
end
table.insert(wikiMarkup, '</li>')
end
end
table.insert(wikiMarkup, '</ul>')
table.insert(wikiMarkup, '</nav>')
-- Обрабатываем всю разметку через препроцессор
return frame:preprocess(table.concat(wikiMarkup, '\n'))
end
return p