Module:NavboxMobile: Difference between revisions

No edit summary
No edit summary
Line 305: Line 305:
--  List rows
--  List rows
--
--
local function renderListRow(tbl, index, listnum, listnums_size)
local function renderListRow(tbl, listnum)
     local row = tbl:tag('tr')
     local row = addTableRow(tbl)


     -- Handle imageleft
     -- Process group
     if index == 1 and args[cfg.arg.imageleft] then
     if args['group' .. listnum] then
        row:tag('td')
            :addClass(cfg.class.navbox_image)
            :addClass(args[cfg.arg.imageclass])
            :css('width', '1px')
            :css('padding', '0 2px 0 0')
            :cssText(args[cfg.arg.imageleftstyle])
            :attr('rowspan', listnums_size)
            :tag('div')
                :wikitext(processItem(args[cfg.arg.imageleft]))
    end
 
    -- Handle group cells
    local group_and_num = format(cfg.arg.group_and_num, listnum)
    if args[group_and_num] then
         local groupCell = row:tag('th')
         local groupCell = row:tag('th')
        groupCell
             :attr('scope', 'row')
             :attr('scope', 'row')
             :addClass(cfg.class.navbox_group)
             :addClass('navboxMobile-group-content')
             :cssText(args[cfg.arg.groupstyle])
            :cssText(args.basestyle)
             :wikitext(processItem(args[group_and_num]))
            :cssText(args.groupstyle)
             :cssText(args['group' .. listnum .. 'style'])
             :wikitext(processItem(args['group' .. listnum]))
     end
     end


     -- Handle list cells
     -- Add table row for the list
    row = addTableRow(tbl)
     local listCell = row:tag('td')
     local listCell = row:tag('td')
         :addClass(cfg.class.navbox_list)
    listCell:attr('colspan', 2)
         :cssText(args[cfg.arg.liststyle])
    listCell:css('width', '100%')
         :wikitext(processItem(args[format(cfg.arg.list_and_num, listnum)]))
 
    -- Apply dynamic styling
    local oddEven = cfg.class.navbox_odd_part
    if args['list' .. listnum] and args['list' .. listnum]:sub(1, 12) == '</div><table' then
        oddEven = args['list' .. listnum]:find(cfg.pattern.navbox_title) and cfg.marker.restart or
    cfg.class.navbox_odd_part
    end
    listCell:addClass(oddEven)
 
 
    listCell
        :addClass('navboxMobile-list-content')
         :addClass(cfg.class.navbox_list) -- Add styling for lists
        :addClass(cfg.class.navbox_part .. ((listnum % 2 == 1) and 'odd' or 'even')) -- Ensure odd/even styles
         :addClass(args[cfg.arg.listclass]) -- Apply any additional classes from args
        :addClass(args['listclass_' .. listnum]) -- Apply list-specific classes
         :cssText(args.liststyle)
        :cssText(args['list' .. listnum .. 'style'])


     -- Handle subgroups
     -- Check for nested subgroups dynamically
    local listText = args[format(cfg.arg.list_and_num, listnum)]
     if inArray(cfg.keyword.subgroups, args['list' .. listnum]) then
     if inArray(cfg.keyword.subgroups, listText) then
         local childArgs = {
         local childArgs = {
             [cfg.arg.border] = cfg.keyword.border_subgroup,
             border = 'subgroup',
             [cfg.arg.navbar] = cfg.keyword.navbar_plain
             navbar = 'plain'
         }
         }
         for k, v in pairs(args) do
         for k, v in pairs(args) do
             if k:match("^child" .. listnum .. "_") then
             local prefix = 'child' .. listnum .. '_'
                 childArgs[k:gsub("^child" .. listnum .. "_", "")] = v
            if k:sub(1, #prefix) == prefix then
                 childArgs[k:sub(#prefix + 1)] = v
             end
             end
         end
         end
         listCell:wikitext(p._navboxMobile(childArgs))
         args['list' .. listnum] = p._navboxMobile(childArgs)
     end
     end


     -- Handle final row adjustments
     -- Check for nested lists (e.g., child1_groupX)
     if index == 1 and args[cfg.arg.image] then
     local nestedGroup = args['child' .. listnum .. '_group1']
         row:tag('td')
    local nestedList = args['child' .. listnum .. '_list1']
             :addClass(cfg.class.navbox_image)
 
             :addClass(args[cfg.arg.imageclass])
    if nestedGroup or nestedList then
             :css('width', '1px')
         local nestedTbl = mw.html.create('table')
             :css('padding', '0 0 0 2px')
             :addClass('navboxMobile-subrendermaintabgroup')
            :cssText(args[cfg.arg.imagestyle])
             :css('width', '100%')
             :attr('rowspan', listnums_size)
 
             :tag('div')
        for i = 1, 10 do -- Assume a max of 10 nested groups/lists
                 :wikitext(processItem(args[cfg.arg.image]))
            local nestedGroup = args['child' .. listnum .. '_group' .. i]
            local nestedList = args['child' .. listnum .. '_list' .. i]
 
            if not nestedGroup and not nestedList then break end
 
            local nestedRow = addTableRow(nestedTbl)
 
             if nestedGroup then
                nestedRow:tag('th')
                    :addClass('navboxMobile-group-content')
                    :cssText(args.basestyle)
                    :cssText(args['child' .. listnum .. '_group' .. i .. 'style'])
                    :wikitext(processItem(nestedGroup))
            end
 
             if nestedList then
                nestedRow:tag('td')
                    :addClass('navboxMobile-list-content hlist')
                    :cssText(args['child' .. listnum .. '_list' .. i .. 'style'])
                    :wikitext(processItem(nestedList))
            end
        end
 
        listCell:node(nestedTbl)
    else
        listCell
             :addClass('hlist') -- Add hlist for horizontal styling
             :tag('div') -- Wrap in a div to allow padding and better styling
                :css('padding', args[cfg.arg.listpadding] or '0 0.25em')
                 :wikitext(processItem(args['list' .. listnum], args.nowrapitems))
     end
     end
end
end
Line 432: Line 468:
     local tbl = mw.html.create('table')
     local tbl = mw.html.create('table')
         :addClass('nowraplinks')
         :addClass('nowraplinks')
         :addClass(cfg.class.navbox_list) -- Add consistent styling for the main table
         :addClass(cfg.class.navbox_list)
         :addClass(args.bodyclass)
         :addClass(args.bodyclass)
         :cssText(args.bodystyle)
         :cssText(args.bodystyle)