Module:NavboxUpgraded: Difference between revisions

Created page with "-- Module:NavboxUpgraded local p = {} local getArgs = require('Module:Arguments').getArgs -- Function to generate the desktop navbox function p._navboxDesktop(args) local navbox = mw.html.create('table') navbox :addClass('navbox') :css('width', '100%') :css('margin', 'auto') :css('clear', 'both') :css('border', '1px solid #a2a9b1') :css('padding', '1px') :css('font-size', '88%') :css('text-align',..."
 
No edit summary
Line 1: Line 1:
-- Module:NavboxUpgraded
-- Module:NavboxUpgraded
local p = {}
local p = {}


local getArgs = require('Module:Arguments').getArgs
local getArgs = require('Module:Arguments').getArgs
-- Recursive function to process subgroups
local function renderSubgroups(args, groupPrefix)
    local html = mw.html.create()
    for i = 1, 10 do
        local subgroup = args[groupPrefix .. '_group' .. i]
        local sublist = args[groupPrefix .. '_list' .. i]
        if subgroup or sublist then
            local container = html:tag('div')
                :addClass('navbox-subgroup')
                :css('margin', '0.5em 0')
                :css('padding', '0.25em')
            -- Subgroup heading
            if subgroup then
                container:tag('div')
                    :addClass('navbox-subgroup-heading')
                    :css('background-color', '#e6e6ff') -- Light shade
                    :css('padding', '0.25em 1em')
                    :css('font-weight', 'bold')
                    :wikitext(subgroup)
            end
            -- Subgroup list
            if sublist then
                container:tag('ul')
                    :addClass('navbox-list')
                    :css('padding-left', '1.5em')
                    :css('list-style', 'disc') -- Bullet points
                    :wikitext(sublist)
            end
        end
    end
    return tostring(html)
end


-- Function to generate the desktop navbox
-- Function to generate the desktop navbox
Line 43: Line 77:


     -- Handle groups and lists
     -- Handle groups and lists
     for i = 1, 20 do
     for i = 1, 10 do
         local group = args['group' .. i]
         local group = args['group' .. i]
         local list = args['list' .. i]
         local list = args['list' .. i]
         if group or list then
         if group or list then
             local row = navbox:tag('tr')
             local row = navbox:tag('tr')
            -- Group heading
             if group then
             if group then
                 local groupCell = row:tag('th')
                 local groupCell = row:tag('th')
Line 53: Line 89:
                     :addClass('navbox-group')
                     :addClass('navbox-group')
                     :css('text-align', 'right')
                     :css('text-align', 'right')
                     :css('background-color', '#ddf')
                     :css('background-color', '#ddf') -- Parent shade
                     :css('padding', '0.25em 1em')
                     :css('padding', '0.25em 1em')
                     :wikitext(group)
                     :wikitext(group)
             end
             end
            -- Group content
             if list then
             if list then
                 local listCell = row:tag('td')
                 local listCell = row:tag('td')
Line 62: Line 100:
                     :addClass('navbox-list')
                     :addClass('navbox-list')
                     :css('text-align', 'left')
                     :css('text-align', 'left')
                     :css('background-color', '#f7f7f7')
                     :css('background-color', '#f7f7f7') -- Neutral list background
                     :css('padding', '0.25em 1em')
                     :css('padding', '0.25em 1em')
                     :wikitext(list)
 
                -- Render subgroups if present
                local subgroups = renderSubgroups(args, 'list' .. i)
                if subgroups ~= '' then
                     listCell:wikitext(subgroups)
                else
                    listCell:tag('ul')
                        :addClass('navbox-list')
                        :css('list-style', 'disc') -- Bullet points
                        :css('padding-left', '1.5em')
                        :wikitext(list)
                end
             end
             end
         end
         end
Line 99: Line 148:
     -- Handle title
     -- Handle title
     if args.title then
     if args.title then
         local titleDiv = navbox:tag('div')
         navbox:tag('div')
        titleDiv
             :addClass('navbox-title-mobile')
             :addClass('navbox-title-mobile')
             :css('background-color', '#ccf')
             :css('background-color', '#ccf')
Line 109: Line 157:
     -- Handle above
     -- Handle above
     if args.above then
     if args.above then
         local aboveDiv = navbox:tag('div')
         navbox:tag('div')
        aboveDiv
             :addClass('navbox-abovebelow-mobile')
             :addClass('navbox-abovebelow-mobile')
             :css('background-color', '#ddf')
             :css('background-color', '#ddf')
Line 118: Line 165:


     -- Handle groups and lists
     -- Handle groups and lists
     for i = 1, 20 do
     for i = 1, 10 do
         local group = args['group' .. i]
         local group = args['group' .. i]
         local list = args['list' .. i]
         local list = args['list' .. i]
         if group or list then
         if group or list then
             if group then
             if group then
                 local groupDiv = navbox:tag('div')
                 navbox:tag('div')
                groupDiv
                     :addClass('navbox-group-mobile')
                     :addClass('navbox-group-mobile')
                     :css('background-color', '#ddf')
                     :css('background-color', '#ddf') -- Parent shade
                     :css('padding', '0.25em 1em')
                     :css('padding', '0.25em 1em')
                     :css('font-weight', 'bold')
                     :css('font-weight', 'bold')
Line 132: Line 178:
             end
             end
             if list then
             if list then
                 local listDiv = navbox:tag('div')
                 navbox:tag('div')
                listDiv
                     :addClass('navbox-list-mobile')
                     :addClass('navbox-list-mobile')
                     :css('background-color', '#f7f7f7')
                     :css('background-color', '#f7f7f7')
                     :css('padding', '0.25em 1em')
                     :css('padding', '0.25em 1em')
                     :wikitext(list)
                     :tag('ul')
                        :css('list-style', 'disc') -- Bullets
                        :css('padding-left', '1.5em')
                        :wikitext(list)
             end
             end
         end
         end
Line 144: Line 192:
     -- Handle below
     -- Handle below
     if args.below then
     if args.below then
         local belowDiv = navbox:tag('div')
         navbox:tag('div')
        belowDiv
             :addClass('navbox-abovebelow-mobile')
             :addClass('navbox-abovebelow-mobile')
             :css('background-color', '#ddf')
             :css('background-color', '#ddf')
Line 155: Line 202:
end
end


-- Main function to generate both versions and wrap them appropriately
-- Main function
function p.navbox(frame)
function p.navbox(frame)
     local args = getArgs(frame)
     local args = getArgs(frame)
Line 163: Line 210:
     local res = mw.html.create()
     local res = mw.html.create()
     res
     res
        :wikitext(frame:extensionTag('templatestyles', '', {src = 'Module:NavboxUpgraded/styles.css'}))
         :tag('div')
         :tag('div')
             :addClass('nomobile')
             :addClass('nomobile')