Перейти к содержанию

Модуль:Навигация: различия между версиями

Материал из GravityWiki
Нет описания правки
Метка: ручная отмена
Нет описания правки
Строка 4: Строка 4:
     local args = frame:getParent().args
     local args = frame:getParent().args
      
      
     local html = {
     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>',
         '<ul class="nav-main-list">'
         ''
     }
     }
      
      
     -- Собираем и сортируем категории
     -- Собираем категории
     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]
          
          
         -- Обрабатываем категорию
         -- Категория
        local categoryContent = ''
         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
                 categoryContent = frame:preprocess(parts[1] .. ' [[' .. parts[2] .. '|<span class="nav-category-text">' .. (parts[3] or parts[2]) .. '</span>]]')
                 table.insert(wikiMarkup, '* ' .. parts[1] .. ' [[' .. parts[2] .. '|<span class="nav-category-text">' .. (parts[3] or parts[2]) .. '</span>]]')
             end
             end
         else
         else
             categoryContent = frame:preprocess('[[' .. category.name .. '|<span class="nav-category-text">' .. category.name .. '</span>]]')
             table.insert(wikiMarkup, '* [[' .. category.name .. '|<span class="nav-category-text">' .. category.name .. '</span>]]')
         end
         end
          
          
         table.insert(html, '<li class="nav-category">' .. categoryContent)
         -- Подпункты
       
        -- Обрабатываем подпункты
         if subitems then
         if subitems then
            table.insert(html, '<ul class="nav-sub-list">')
             local subitemList = mw.text.split(subitems, ';')
             local subitemList = mw.text.split(subitems, ';')
             for _, subitem in ipairs(subitemList) do
             for _, subitem in ipairs(subitemList) do
                local processedSubitem = frame:preprocess(mw.text.trim(subitem))
                 table.insert(wikiMarkup, '** ' .. mw.text.trim(subitem))
                 table.insert(html, '<li class="nav-sub-item">' .. processedSubitem .. '</li>')
             end
             end
            table.insert(html, '</ul>')
         end
         end
       
        table.insert(html, '</li>')
     end
     end
      
      
     table.insert(html, '</ul>')
     table.insert(wikiMarkup, '')
     table.insert(html, '</nav>')
     table.insert(wikiMarkup, '</nav>')
      
      
     return table.concat(html, '\n')
     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