| Line 10: |
Line 10: |
| | local args | | local args |
| | local border | | local border |
| − | local listnums = {} | + | local listnums |
| | local ODD_EVEN_MARKER = '\127_ODDEVEN_\127' | | local ODD_EVEN_MARKER = '\127_ODDEVEN_\127' |
| | local RESTART_MARKER = '\127_ODDEVEN0_\127' | | local RESTART_MARKER = '\127_ODDEVEN0_\127' |
| Line 85: |
Line 85: |
| | args.name, | | args.name, |
| | mini = 1, | | mini = 1, |
| − | fontstyle = (args.basestyle or '') .. ';' .. (args.titlestyle or '') .. ';background:none transparent;border:none;-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none;' | + | fontstyle = (args.basestyle or '') .. ';' .. (args.titlestyle or '') .. ';background:none transparent;border:none;-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none; padding:0;' |
| | }) | | }) |
| | end | | end |
| Line 134: |
Line 134: |
| | titleCell | | titleCell |
| | :tag('div') | | :tag('div') |
| | + | -- id for aria-labelledby attribute |
| | :attr('id', mw.uri.anchorEncode(args.title)) | | :attr('id', mw.uri.anchorEncode(args.title)) |
| | :addClass(args.titleclass) | | :addClass(args.titleclass) |
| Line 163: |
Line 164: |
| | :attr('colspan', getAboveBelowColspan()) | | :attr('colspan', getAboveBelowColspan()) |
| | :tag('div') | | :tag('div') |
| | + | -- id for aria-labelledby attribute, if no title |
| | + | :attr('id', args.title and nil or mw.uri.anchorEncode(args.above)) |
| | :wikitext(processItem(args.above, args.nowrapitems)) | | :wikitext(processItem(args.above, args.nowrapitems)) |
| | end | | end |
| Line 201: |
Line 204: |
| | if args['group' .. listnum] then | | if args['group' .. listnum] then |
| | local groupCell = row:tag('th') | | local groupCell = row:tag('th') |
| | + | |
| | + | -- id for aria-labelledby attribute, if lone group with no title or above |
| | + | if listnum == 1 and not (args.title or args.above or args.group2) then |
| | + | groupCell |
| | + | :attr('id', mw.uri.anchorEncode(args.group1)) |
| | + | end |
| | | | |
| | groupCell | | groupCell |
| Line 207: |
Line 216: |
| | :addClass(args.groupclass) | | :addClass(args.groupclass) |
| | :cssText(args.basestyle) | | :cssText(args.basestyle) |
| − | :css('width', args.groupwidth or '1%') -- If groupwidth not specified, minimize width
| + | :css('width', args.groupwidth or '1%') -- If groupwidth not specified, minimize width |
| | | | |
| | groupCell | | groupCell |
| Line 251: |
Line 260: |
| | :addClass('navbox-' .. oddEven) | | :addClass('navbox-' .. oddEven) |
| | :addClass(args.listclass) | | :addClass(args.listclass) |
| | + | :addClass(args['list' .. listnum .. 'class']) |
| | :tag('div') | | :tag('div') |
| | :css('padding', (index == 1 and args.list1padding) or args.listpadding or '0em 0.25em') | | :css('padding', (index == 1 and args.list1padding) or args.listpadding or '0em 0.25em') |
| Line 287: |
Line 297: |
| | | | |
| | local function hasBackgroundColors() | | local function hasBackgroundColors() |
| − | for _, key in ipairs({'titlestyle', 'groupstyle', 'basestyle'}) do | + | for _, key in ipairs({'titlestyle', 'groupstyle', 'basestyle', 'abovestyle', 'belowstyle'}) do |
| | if tostring(args[key]):find('background', 1, true) then | | if tostring(args[key]):find('background', 1, true) then |
| | + | return true |
| | + | end |
| | + | end |
| | + | end |
| | + | |
| | + | local function hasBorders() |
| | + | for _, key in ipairs({'groupstyle', 'basestyle', 'abovestyle', 'belowstyle'}) do |
| | + | if tostring(args[key]):find('border', 1, true) then |
| | return true | | return true |
| | end | | end |
| Line 312: |
Line 330: |
| | if hasBackgroundColors() then table.insert(cats, 'Navboxes using background colours') end | | if hasBackgroundColors() then table.insert(cats, 'Navboxes using background colours') end |
| | if isIllegible() then table.insert(cats, 'Potentially illegible navboxes') end | | if isIllegible() then table.insert(cats, 'Potentially illegible navboxes') end |
| | + | if hasBorders() then table.insert(cats, 'Navboxes using borders') end |
| | return cats | | return cats |
| | end | | end |
| Line 366: |
Line 385: |
| | function p._navbox(navboxArgs) | | function p._navbox(navboxArgs) |
| | args = navboxArgs | | args = navboxArgs |
| | + | listnums = {} |
| | | | |
| | for k, _ in pairs(args) do | | for k, _ in pairs(args) do |
| Line 389: |
Line 409: |
| | :attr('role', 'navigation') | | :attr('role', 'navigation') |
| | :node(tbl) | | :node(tbl) |
| − | if args.title then | + | -- aria-labelledby title, otherwise above, otherwise lone group |
| − | nav:attr('aria-labelledby', mw.uri.anchorEncode(args.title)) | + | if args.title or args.above or (args.group1 and not args.group2) then |
| | + | nav:attr('aria-labelledby', mw.uri.anchorEncode(args.title or args.above or args.group1)) |
| | else | | else |
| | nav:attr('aria-label', 'Navbox') | | nav:attr('aria-label', 'Navbox') |
| Line 410: |
Line 431: |
| | :css('padding', '3px') | | :css('padding', '3px') |
| | :node(tbl) | | :node(tbl) |
| − | if args.title then | + | -- aria-labelledby title, otherwise above, otherwise lone group |
| − | nav:attr('aria-labelledby', mw.uri.anchorEncode(args.title)) | + | if args.title or args.above or (args.group1 and not args.group2) then |
| | + | nav:attr('aria-labelledby', mw.uri.anchorEncode(args.title or args.above or args.group1)) |
| | else | | else |
| | nav:attr('aria-label', 'Navbox') | | nav:attr('aria-label', 'Navbox') |
| Line 417: |
Line 439: |
| | end | | end |
| | | | |
| − | renderTrackingCategories(res) | + | if (args.nocat or 'false'):lower() == 'false' then |
| − | | + | renderTrackingCategories(res) |
| | + | end |
| | return striped(tostring(res)) | | return striped(tostring(res)) |
| | end | | end |
| Line 426: |
Line 449: |
| | getArgs = require('Module:Arguments').getArgs | | getArgs = require('Module:Arguments').getArgs |
| | end | | end |
| − | args = getArgs(frame, {wrappers = 'Template:Navbox'}) | + | args = getArgs(frame, {wrappers = {'Template:Navbox', 'Template:Navbox subgroup'}}) |
| | + | if frame.args.border then |
| | + | -- This allows Template:Navbox_subgroup to use {{#invoke:Navbox|navbox|border=...}}. |
| | + | args.border = frame.args.border |
| | + | end |
| | | | |
| | -- Read the arguments in the order they'll be output in, to make references number in the right order. | | -- Read the arguments in the order they'll be output in, to make references number in the right order. |