Module:NavboxMobile: Difference between revisions

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


     -- Process group
     -- Handle imageleft
     if args['group' .. listnum] then
     if index == 1 and args[cfg.arg.imageleft] 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('navboxMobile-group-content')
             :addClass(cfg.class.navbox_group)
            :cssText(args.basestyle)
             :cssText(args[cfg.arg.groupstyle])
            :cssText(args.groupstyle)
             :wikitext(processItem(args[group_and_num]))
             :cssText(args['group' .. listnum .. 'style'])
             :wikitext(processItem(args['group' .. listnum]))
     end
     end


     -- Add table row for the list
     -- Handle list cells
    row = addTableRow(tbl)
     local listCell = row:tag('td')
     local listCell = row:tag('td')
    listCell:attr('colspan', 2)
        :addClass(cfg.class.navbox_list)
    listCell:css('width', '100%')
        :cssText(args[cfg.arg.liststyle])
        :wikitext(processItem(args[format(cfg.arg.list_and_num, listnum)]))


     -- Apply dynamic styling
     -- Handle subgroups
     local oddEven = cfg.class.navbox_odd_part
     local listText = args[format(cfg.arg.list_and_num, listnum)]
    if args['list' .. listnum] and args['list' .. listnum]:sub(1, 12) == '</div><table' then
     if inArray(cfg.keyword.subgroups, listText) 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'])
 
    -- Check for nested subgroups dynamically
     if inArray(cfg.keyword.subgroups, args['list' .. listnum]) then
         local childArgs = {
         local childArgs = {
             border = 'subgroup',
             [cfg.arg.border] = cfg.keyword.border_subgroup,
             navbar = 'plain'
             [cfg.arg.navbar] = cfg.keyword.navbar_plain
         }
         }
         for k, v in pairs(args) do
         for k, v in pairs(args) do
             local prefix = 'child' .. listnum .. '_'
             if k:match("^child" .. listnum .. "_") then
            if k:sub(1, #prefix) == prefix then
                 childArgs[k:gsub("^child" .. listnum .. "_", "")] = v
                 childArgs[k:sub(#prefix + 1)] = v
             end
             end
         end
         end
         args['list' .. listnum] = p._navboxMobile(childArgs)
         listCell:wikitext(p._navboxMobile(childArgs))
     end
     end


     -- Check for nested lists (e.g., child1_groupX)
     -- Handle final row adjustments
     local nestedGroup = args['child' .. listnum .. '_group1']
     if index == 1 and args[cfg.arg.image] then
    local nestedList = args['child' .. listnum .. '_list1']
         row:tag('td')
 
             :addClass(cfg.class.navbox_image)
    if nestedGroup or nestedList then
             :addClass(args[cfg.arg.imageclass])
         local nestedTbl = mw.html.create('table')
             :css('width', '1px')
             :addClass('navboxMobile-subgroup')
            :css('padding', '0 0 0 2px')
             :css('width', '100%')
             :cssText(args[cfg.arg.imagestyle])
 
             :attr('rowspan', listnums_size)
        for i = 1, 10 do -- Assume a max of 10 nested groups/lists
             :tag('div')
            local nestedGroup = args['child' .. listnum .. '_group' .. i]
                 :wikitext(processItem(args[cfg.arg.image]))
            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