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 = addTableRow(tbl)
     local row = addTableRow(tbl)


     -- Process group (e.g., `group1`, `group2`)
     -- Process group
     local group_and_num = format(cfg.arg.group_and_num, listnum)
     local group_and_num = format(cfg.arg.group_and_num, listnum)
     local groupstyle_and_num = format(cfg.arg.groupstyle_and_num, listnum)
     local groupstyle_and_num = format(cfg.arg.groupstyle_and_num, listnum)
Line 314: Line 314:
         local groupCell = row:tag('th')
         local groupCell = row:tag('th')


         -- ID for aria-labelledby attribute if it's the first group with no title or above
         -- Handle ARIA attributes for accessibility
         if listnum == 1 and not (args[cfg.arg.title] or args[cfg.arg.above] or args[cfg.arg.group2]) then
         if listnum == 1 and not (args[cfg.arg.title] or args[cfg.arg.above] or args[cfg.arg.group2]) then
             groupCell:attr('id', mw.uri.anchorEncode(args[cfg.arg.group1]))
             groupCell:attr('id', mw.uri.anchorEncode(args[cfg.arg.group1]))
Line 330: Line 330:
     -- Add list cell
     -- Add list cell
     local listCell = row:tag('td')
     local listCell = row:tag('td')
    -- If there's a group, add a class; otherwise, make the cell span both columns
     if args[group_and_num] then
     if args[group_and_num] then
         listCell:addClass(cfg.class.navbox_list_with_group)
         listCell:addClass('navboxMobile-list-with-group')
     else
     else
         listCell:attr('colspan', 2)
         listCell:attr('colspan', 2)
     end
     end


    -- Set cell width if group width is not specified
     if not args[cfg.arg.groupwidth] then
     if not args[cfg.arg.groupwidth] then
         listCell:css('width', '100%')
         listCell:css('width', '100%')
     end
     end


     -- Apply styles for odd/even rows
     -- Apply row-specific styles
     local rowstyle = nil
     local rowstyle = (listnum % 2 == 1) and args[cfg.arg.oddstyle] or args[cfg.arg.evenstyle]
    if index % 2 == 1 then
        rowstyle = args[cfg.arg.oddstyle]
    else
        rowstyle = args[cfg.arg.evenstyle]
    end
 
    -- Handle the list itself
     local list_and_num = format(cfg.arg.list_and_num, listnum)
     local list_and_num = format(cfg.arg.list_and_num, listnum)
     local listText = args[list_and_num]
     local listText = args[list_and_num]


     -- Check for nested subgroups
     -- Handle nested subgroups
     if inArray(cfg.keyword.subgroups, listText) then
     if inArray(cfg.keyword.subgroups, listText) then
         local childArgs = {
         local childArgs = {
             [cfg.arg.border] = cfg.keyword.border_subgroup,
             [cfg.arg.border] = cfg.keyword.border_subgroup,
             [cfg.arg.navbar] = cfg.keyword.navbar_plain
             [cfg.arg.navbar] = cfg.keyword.navbar_plain,
         }
         }
         local hasChildArgs = false
         local hasChildArgs = false
         for k, v in pairs(args) do
         for k, v in pairs(args) do
             k = tostring(k)
             local prefix = cfg.keyword.subgroups[1] .. listnum .. "_"
            for _, w in ipairs(cfg.keyword.subgroups) do
            if k:sub(1, #prefix) == prefix then
                w = w .. listnum .. "_"
                childArgs[k:sub(#prefix + 1)] = v
                if (#k > #w) and (k:sub(1, #w) == w) then
                hasChildArgs = true
                    childArgs[k:sub(#w + 1)] = v
                    hasChildArgs = true
                end
             end
             end
         end
         end
Line 375: Line 362:
     end
     end


     -- Odd/even class and striping
     -- Handle automatic striping for odd/even rows
     local oddEven = cfg.marker.oddeven
     local oddEven = cfg.marker.oddeven
     if listText:sub(1, 12) == '</div><table' then
     if listText and listText:sub(1, 12) == '</div><table' then
        -- If listText is for a subgroup navbox, no automatic striping for this row
         oddEven = listText:find(cfg.pattern.navbox_title) and cfg.marker.restart or cfg.class.navbox_odd_part
         oddEven = listText:find(cfg.pattern.navbox_title) and cfg.marker.restart or cfg.class.navbox_odd_part
     end
     end


     -- Apply list-specific styles
     -- Render list content
     local liststyle_and_num = format(cfg.arg.liststyle_and_num, listnum)
     local liststyle_and_num = format(cfg.arg.liststyle_and_num, listnum)
    local listclass_and_num = format(cfg.arg.listclass_and_num, listnum)
     listCell
     listCell
        :css('padding', '0')
         :cssText(args[cfg.arg.liststyle])
         :cssText(args[cfg.arg.liststyle])
         :cssText(rowstyle)
         :cssText(rowstyle)
         :cssText(args[liststyle_and_num])
         :cssText(args[liststyle_and_num])
         :addClass(cfg.class.navbox_list)
         :addClass('navboxMobile-list-content')
         :addClass(cfg.class.navbox_part .. oddEven)
         :addClass(cfg.class.navbox_part .. oddEven)
         :addClass(args[cfg.arg.listclass])
         :addClass(args[cfg.arg.listclass])
        :addClass(args[listclass_and_num])
         :tag('div')
         :tag('div')
             :css('padding', args[cfg.arg.list1padding] or args[cfg.arg.listpadding] or '0 0.25em')
             :css('padding', args[cfg.arg.listpadding] or '0 0.25em')
             :wikitext(processItem(listText, args[cfg.arg.nowrapitems]))
             :wikitext(processItem(listText or '', args[cfg.arg.nowrapitems]))
end
end