Editing Module:Navbox

Jump to: navigation, search

Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.

The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then save the changes below to finish undoing the edit.
Latest revision Your text
Line 9: Line 9:
  
 
local args
 
local args
 +
local tableRowAdded = false
 
local border
 
local border
local listnums
+
local listnums = {}
local ODD_EVEN_MARKER = '\127_ODDEVEN_\127'
 
local RESTART_MARKER = '\127_ODDEVEN0_\127'
 
local REGEX_MARKER = '\127_ODDEVEN(%d?)_\127'
 
  
local function striped(wikitext)
+
local function trim(s)
-- Return wikitext with markers replaced for odd/even striping.
+
    return (mw.ustring.gsub(s, "^%s*(.-)%s*$", "%1"))
-- Child (subgroup) navboxes are flagged with a category that is removed
 
-- by parent navboxes. The result is that the category shows all pages
 
-- where a child navbox is not contained in a parent navbox.
 
local orphanCat = '[[Category:Navbox orphans]]'
 
if border == 'subgroup' and args.orphan ~= 'yes' then
 
-- No change; striping occurs in outermost navbox.
 
return wikitext .. orphanCat
 
end
 
local first, second = 'odd', 'even'
 
if args.evenodd then
 
if args.evenodd == 'swap' then
 
first, second = second, first
 
else
 
first = args.evenodd
 
second = first
 
end
 
end
 
local changer
 
if first == second then
 
changer = first
 
else
 
local index = 0
 
changer = function (code)
 
if code == '0' then
 
-- Current occurrence is for a group before a nested table.
 
-- Set it to first as a valid although pointless class.
 
-- The next occurrence will be the first row after a title
 
-- in a subgroup and will also be first.
 
index = 0
 
return first
 
end
 
index = index + 1
 
return index % 2 == 1 and first or second
 
end
 
end
 
local regex = orphanCat:gsub('([%[%]])', '%%%1')
 
return (wikitext:gsub(regex, ''):gsub(REGEX_MARKER, changer))  -- () omits gsub count
 
 
end
 
end
  
local function processItem(item, nowrapitems)
+
local function addNewline(s)
if item:sub(1, 2) == '{|' then
+
    if s:match('^[*:;#]') or s:match('^{|') then
-- Applying nowrap to lines in a table does not make sense.
+
        return '\n' .. s ..'\n'
-- Add newlines to compensate for trim of x in |parm=x in a template.
+
    else
return '\n' .. item ..'\n'
+
        return s
end
+
    end
if nowrapitems == 'yes' then
+
end
local lines = {}
+
 
for line in (item .. '\n'):gmatch('([^\n]*)\n') do
+
local function addTableRow(tbl)
local prefix, content = line:match('^([*:;#]+)%s*(.*)')
+
    -- If any other rows have already been added, then we add a 2px gutter row.
if prefix and not content:match('^<span class="nowrap">') then
+
    if tableRowAdded then
line = prefix .. '<span class="nowrap">' .. content .. '</span>'
+
        tbl
end
+
            :tag('tr')
table.insert(lines, line)
+
                :css('height', '2px')
end
+
                :tag('td')
item = table.concat(lines, '\n')
+
                    :attr('colspan',2)
end
+
    end
if item:match('^[*:;#]') then
+
 
return '\n' .. item ..'\n'
+
    tableRowAdded = true
end
+
 
return item
+
    return tbl:tag('tr')
 
end
 
end
  
 
local function renderNavBar(titleCell)
 
local function renderNavBar(titleCell)
 +
    -- Depending on the presence of the navbar and/or show/hide link, we may need to add a spacer div on the left
 +
    -- or right to keep the title centered.
 +
    local spacerSide = nil
  
if args.navbar ~= 'off' and args.navbar ~= 'plain' and not (not args.name and mw.getCurrentFrame():getParent():getTitle():gsub('/sandbox$', '') == 'Template:Navbox') then
+
    if args.navbar == 'off' then
titleCell:wikitext(navbar{
+
        -- No navbar, and client wants no spacer, i.e. wants the title to be shifted to the left. If there's
args.name,
+
        -- also no show/hide link, then we need a spacer on the right to achieve the left shift.
mini = 1,
+
        if args.state == 'plain' then spacerSide = 'right' end
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;'
+
    elseif args.navbar == 'plain' or (not args.name and mw.getCurrentFrame():getParent():getTitle():gsub('/sandbox$', '') == 'Template:Navbox') then
})
+
        -- No navbar. Need a spacer on the left to balance out the width of the show/hide link.
end
+
        if args.state ~= 'plain' then spacerSide = 'left' end
 +
    else
 +
        -- Will render navbar (or error message). If there's no show/hide link, need a spacer on the right
 +
        -- to balance out the width of the navbar.
 +
        if args.state == 'plain' then spacerSide = 'right' end
  
 +
        titleCell:wikitext(navbar{
 +
            args.name,
 +
            mini = 1,
 +
            fontstyle = (args.basestyle or '') .. ';' .. (args.titlestyle or '') ..  ';background:none transparent;border:none;'
 +
        })
 +
    end
 +
 +
    -- Render the spacer div.
 +
    if spacerSide then
 +
        titleCell
 +
            :tag('span')
 +
                :css('float', spacerSide)
 +
                :css('width', '6em')
 +
                :wikitext('&nbsp;')
 +
    end
 
end
 
end
  
Line 95: Line 78:
 
--
 
--
 
local function renderTitleRow(tbl)
 
local function renderTitleRow(tbl)
if not args.title then return end
+
    if not args.title then return end
  
local titleRow = tbl:tag('tr')
+
    local titleRow = addTableRow(tbl)
  
if args.titlegroup then
+
    if args.titlegroup then
titleRow
+
        titleRow
:tag('th')
+
            :tag('th')
:attr('scope', 'row')
+
                :attr('scope', 'row')
:addClass('navbox-group')
+
                :addClass('navbox-group')
:addClass(args.titlegroupclass)
+
                :addClass(args.titlegroupclass)
:cssText(args.basestyle)
+
                :cssText(args.basestyle)
:cssText(args.groupstyle)
+
                :cssText(args.groupstyle)
:cssText(args.titlegroupstyle)
+
                :cssText(args.titlegroupstyle)
:wikitext(args.titlegroup)
+
                :wikitext(args.titlegroup)
end
+
    end
  
local titleCell = titleRow:tag('th'):attr('scope', 'col')
+
    local titleCell = titleRow:tag('th'):attr('scope', 'col')
  
if args.titlegroup then
+
    if args.titlegroup then
titleCell
+
        titleCell
:css('border-left', '2px solid #fdfdfd')
+
            :css('border-left', '2px solid #fdfdfd')
:css('width', '100%')
+
            :css('width', '100%')
end
+
    end
  
local titleColspan = 2
+
    local titleColspan = 2
if args.imageleft then titleColspan = titleColspan + 1 end
+
    if args.imageleft then titleColspan = titleColspan + 1 end
if args.image then titleColspan = titleColspan + 1 end
+
    if args.image then titleColspan = titleColspan + 1 end
if args.titlegroup then titleColspan = titleColspan - 1 end
+
    if args.titlegroup then titleColspan = titleColspan - 1 end
  
titleCell
+
    titleCell
:cssText(args.basestyle)
+
        :cssText(args.basestyle)
:cssText(args.titlestyle)
+
        :cssText(args.titlestyle)
:addClass('navbox-title')
+
        :addClass('navbox-title')
:attr('colspan', titleColspan)
+
        :attr('colspan', titleColspan)
  
renderNavBar(titleCell)
+
    renderNavBar(titleCell)
  
titleCell
+
    titleCell
:tag('div')
+
        :tag('div')
-- id for aria-labelledby attribute
+
            :addClass(args.titleclass)
:attr('id', mw.uri.anchorEncode(args.title))
+
            :css('font-size', '114%')
:addClass(args.titleclass)
+
            :wikitext(addNewline(args.title))
:css('font-size', '114%')
 
:css('margin', '0 4em')
 
:wikitext(processItem(args.title))
 
 
end
 
end
  
Line 147: Line 127:
  
 
local function getAboveBelowColspan()
 
local function getAboveBelowColspan()
local ret = 2
+
    local ret = 2
if args.imageleft then ret = ret + 1 end
+
    if args.imageleft then ret = ret + 1 end
if args.image then ret = ret + 1 end
+
    if args.image then ret = ret + 1 end
return ret
+
    return ret
 
end
 
end
  
 
local function renderAboveRow(tbl)
 
local function renderAboveRow(tbl)
if not args.above then return end
+
    if not args.above then return end
  
tbl:tag('tr')
+
    addTableRow(tbl)
:tag('td')
+
        :tag('td')
:addClass('navbox-abovebelow')
+
            :addClass('navbox-abovebelow')
:addClass(args.aboveclass)
+
            :addClass(args.aboveclass)
:cssText(args.basestyle)
+
            :cssText(args.basestyle)
:cssText(args.abovestyle)
+
            :cssText(args.abovestyle)
:attr('colspan', getAboveBelowColspan())
+
            :attr('colspan', getAboveBelowColspan())
:tag('div')
+
            :tag('div')
-- id for aria-labelledby attribute, if no title
+
                :wikitext(addNewline(args.above))
:attr('id', args.title and nil or mw.uri.anchorEncode(args.above))
 
:wikitext(processItem(args.above, args.nowrapitems))
 
 
end
 
end
  
 
local function renderBelowRow(tbl)
 
local function renderBelowRow(tbl)
if not args.below then return end
+
    if not args.below then return end
  
tbl:tag('tr')
+
    addTableRow(tbl)
:tag('td')
+
        :tag('td')
:addClass('navbox-abovebelow')
+
            :addClass('navbox-abovebelow')
:addClass(args.belowclass)
+
            :addClass(args.belowclass)
:cssText(args.basestyle)
+
            :cssText(args.basestyle)
:cssText(args.belowstyle)
+
            :cssText(args.belowstyle)
:attr('colspan', getAboveBelowColspan())
+
            :attr('colspan', getAboveBelowColspan())
:tag('div')
+
            :tag('div')
:wikitext(processItem(args.below, args.nowrapitems))
+
                :wikitext(addNewline(args.below))
 
end
 
end
  
Line 186: Line 164:
 
--  List rows
 
--  List rows
 
--
 
--
local function renderListRow(tbl, index, listnum)
+
local function renderListRow(tbl, listnum)
local row = tbl:tag('tr')
+
    local row = addTableRow(tbl)
  
if index == 1 and args.imageleft then
+
    if listnum == 1 and args.imageleft then
row
+
        row
:tag('td')
+
            :tag('td')
:addClass('noviewer')
+
                :addClass('navbox-image')
:addClass('navbox-image')
+
                :addClass(args.imageclass)
:addClass(args.imageclass)
+
                :css('width', '0%')
:css('width', '1px')               -- Minimize width
+
                :css('padding', '0px 2px 0px 0px')
:css('padding', '0px 2px 0px 0px')
+
                :cssText(args.imageleftstyle)
:cssText(args.imageleftstyle)
+
                :attr('rowspan', 2 * #listnums - 1)
:attr('rowspan', #listnums)
+
                :tag('div')
:tag('div')
+
                    :wikitext(addNewline(args.imageleft))
:wikitext(processItem(args.imageleft))
+
    end
end
 
  
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
+
        groupCell
if listnum == 1 and not (args.title or args.above or args.group2) then
+
            :attr('scope', 'row')
groupCell
+
            :addClass('navbox-group')
:attr('id', mw.uri.anchorEncode(args.group1))
+
            :addClass(args.groupclass)
end
+
            :cssText(args.basestyle)
  
groupCell
+
        if args.groupwidth then
:attr('scope', 'row')
+
            groupCell:css('width', args.groupwidth)
:addClass('navbox-group')
+
        end
:addClass(args.groupclass)
 
:cssText(args.basestyle)
 
:css('width', args.groupwidth or '1%') -- If groupwidth not specified, minimize width
 
  
groupCell
+
        groupCell
:cssText(args.groupstyle)
+
            :cssText(args.groupstyle)
:cssText(args['group' .. listnum .. 'style'])
+
            :cssText(args['group' .. listnum .. 'style'])
:wikitext(args['group' .. listnum])
+
            :wikitext(args['group' .. listnum])
end
+
    end
  
local listCell = row:tag('td')
+
    local listCell = row:tag('td')
  
if args['group' .. listnum] then
+
    if args['group' .. listnum] then
listCell
+
        listCell
:css('text-align', 'left')
+
            :css('text-align', 'left')
:css('border-left-width', '2px')
+
            :css('border-left-width', '2px')
:css('border-left-style', 'solid')
+
            :css('border-left-style', 'solid')
else
+
    else
listCell:attr('colspan', 2)
+
        listCell:attr('colspan', 2)
end
+
    end
  
if not args.groupwidth then
+
    if not args.groupwidth then
listCell:css('width', '100%')
+
        listCell:css('width', '100%')
end
+
    end
  
local rowstyle  -- usually nil so cssText(rowstyle) usually adds nothing
+
    local isOdd = (listnum % 2) == 1
if index % 2 == 1 then
+
    local rowstyle = args.evenstyle
rowstyle = args.oddstyle
+
    if isOdd then rowstyle = args.oddstyle end
else
 
rowstyle = args.evenstyle
 
end
 
  
local listText = args['list' .. listnum]
+
    local evenOdd
local oddEven = ODD_EVEN_MARKER
+
    if args.evenodd == 'swap' then
if listText:sub(1, 12) == '</div><table' then
+
        if isOdd then evenOdd = 'even' else evenOdd = 'odd' end
-- Assume list text is for a subgroup navbox so no automatic striping for this row.
+
    else
oddEven = listText:find('<th[^>]*"navbox%-title"') and RESTART_MARKER or 'odd'
+
        if isOdd then evenOdd = args.evenodd or 'odd' else evenOdd = args.evenodd or 'even' end
end
+
    end
listCell
 
:css('padding', '0px')
 
:cssText(args.liststyle)
 
:cssText(rowstyle)
 
:cssText(args['list' .. listnum .. 'style'])
 
:addClass('navbox-list')
 
:addClass('navbox-' .. oddEven)
 
:addClass(args.listclass)
 
:addClass(args['list' .. listnum .. 'class'])
 
:tag('div')
 
:css('padding', (index == 1 and args.list1padding) or args.listpadding or '0em 0.25em')
 
:wikitext(processItem(listText, args.nowrapitems))
 
  
if index == 1 and args.image then
+
    listCell
row
+
        :css('padding', '0px')
:tag('td')
+
        :cssText(args.liststyle)
:addClass('noviewer')
+
        :cssText(rowstyle)
:addClass('navbox-image')
+
        :cssText(args['list' .. listnum .. 'style'])
:addClass(args.imageclass)
+
        :addClass('navbox-list')
:css('width', '1px')               -- Minimize width
+
        :addClass('navbox-' .. evenOdd)
:css('padding', '0px 0px 0px 2px')
+
        :addClass(args.listclass)
:cssText(args.imagestyle)
+
        :tag('div')
:attr('rowspan', #listnums)
+
            :css('padding', (listnum == 1 and args.list1padding) or args.listpadding or '0em 0.25em')
:tag('div')
+
            :wikitext(addNewline(args['list' .. listnum]))
:wikitext(processItem(args.image))
+
 
end
+
    if listnum == 1 and args.image then
 +
        row
 +
            :tag('td')
 +
                :addClass('navbox-image')
 +
                :addClass(args.imageclass)
 +
                :css('width', '0%')
 +
                :css('padding', '0px 0px 0px 2px')
 +
                :cssText(args.imagestyle)
 +
                :attr('rowspan', 2 * #listnums - 1)
 +
                :tag('div')
 +
                    :wikitext(addNewline(args.image))
 +
    end
 
end
 
end
  
Line 287: Line 257:
  
 
local function needsHorizontalLists()
 
local function needsHorizontalLists()
if border == 'subgroup' or args.tracking == 'no' then
+
    if border == 'child' or border == 'subgroup' or args.tracking == 'no' then return false end
return false
+
 
end
+
    local listClasses = {'plainlist', 'hlist', 'hlist hnum', 'hlist hwrap', 'hlist vcard', 'vcard hlist', 'hlist vevent'}
local listClasses = {
+
    for i, cls in ipairs(listClasses) do
['plainlist'] = true, ['hlist'] = true, ['hlist hnum'] = true,
+
        if args.listclass == cls or args.bodyclass == cls then
['hlist hwrap'] = true, ['hlist vcard'] = true, ['vcard hlist'] = true,
+
            return false
['hlist vevent'] = true,
+
        end
}
+
    end
return not (listClasses[args.listclass] or listClasses[args.bodyclass])
+
 
 +
    return true
 
end
 
end
  
 
local function hasBackgroundColors()
 
local function hasBackgroundColors()
for _, key in ipairs({'titlestyle', 'groupstyle', 'basestyle', 'abovestyle', 'belowstyle'}) do
+
    return mw.ustring.match(args.titlestyle or '','background') or mw.ustring.match(args.groupstyle or '','background') or mw.ustring.match(args.basestyle or '','background')
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
 
end
 
end
 
 
end
 
end
  
 
local function isIllegible()
 
local function isIllegible()
local styleratio = require('Module:Color contrast')._styleratio
+
    local styleratio = require('Module:Color contrast')._styleratio
  
for key, style in pairs(args) do
+
    for key, style in pairs(args) do
if tostring(key):match("style$") then
+
        if tostring(key):match("style$") then
if styleratio{mw.text.unstripNoWiki(style)} < 4.5 then
+
            if styleratio{mw.text.unstripNoWiki(style)} < 4.5 then
return true
+
                return true  
end
+
            end
end
+
        end
end
+
    end
return false
+
    return false
 
end
 
end
  
 
local function getTrackingCategories()
 
local function getTrackingCategories()
local cats = {}
+
    local cats = {}
if needsHorizontalLists() then table.insert(cats, 'Navigational boxes without horizontal lists') end
+
    if needsHorizontalLists() then table.insert(cats, 'Navigational boxes without horizontal lists') end
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
  
 
local function renderTrackingCategories(builder)
 
local function renderTrackingCategories(builder)
local title = mw.title.getCurrentTitle()
+
    local title = mw.title.getCurrentTitle()
if title.namespace ~= 10 then return end -- not in template space
+
    if title.namespace ~= 10 then return end -- not in template space
local subpage = title.subpageText
+
    local subpage = title.subpageText
if subpage == 'doc' or subpage == 'sandbox' or subpage == 'testcases' then return end
+
    if subpage == 'doc' or subpage == 'sandbox' or subpage == 'testcases' then return end
  
for _, cat in ipairs(getTrackingCategories()) do
+
    for i, cat in ipairs(getTrackingCategories()) do
builder:wikitext('[[Category:' .. cat .. ']]')
+
        builder:wikitext('[[Category:' .. cat .. ']]')
end
+
    end
 
end
 
end
  
Line 351: Line 309:
 
--
 
--
 
local function renderMainTable()
 
local function renderMainTable()
local tbl = mw.html.create('table')
+
    local tbl = mw.html.create('table')
:addClass('nowraplinks')
+
        :addClass('nowraplinks')
:addClass(args.bodyclass)
+
        :addClass(args.bodyclass)
  
if args.title and (args.state ~= 'plain' and args.state ~= 'off') then
+
    if args.title and (args.state ~= 'plain' and args.state ~= 'off') then
if args.state == 'collapsed' then args.state = 'mw-collapsed' end
+
        tbl
tbl
+
            :addClass('collapsible')
:addClass('mw-collapsible')
+
            :addClass(args.state or 'autocollapse')
:addClass(args.state or 'autocollapse')
+
    end
end
 
  
tbl:css('border-spacing', 0)
+
    tbl:css('border-spacing', 0)
if border == 'subgroup' or border == 'none' then
+
    if border == 'subgroup' or border == 'child' or border == 'none' then
tbl
+
        tbl
:addClass('navbox-subgroup')
+
            :addClass('navbox-subgroup')
:cssText(args.bodystyle)
+
            :cssText(args.bodystyle)
:cssText(args.style)
+
            :cssText(args.style)
else -- regular navbox - bodystyle and style will be applied to the wrapper table
+
    else -- regular navobx - bodystyle and style will be applied to the wrapper table
tbl
+
        tbl
:addClass('navbox-inner')
+
            :addClass('navbox-inner')
:css('background', 'transparent')
+
            :css('background', 'transparent')
:css('color', 'inherit')
+
            :css('color', 'inherit')
end
+
    end
tbl:cssText(args.innerstyle)
+
    tbl:cssText(args.innerstyle)
  
renderTitleRow(tbl)
+
    renderTitleRow(tbl)
renderAboveRow(tbl)
+
    renderAboveRow(tbl)
for i, listnum in ipairs(listnums) do
+
    for i, listnum in ipairs(listnums) do
renderListRow(tbl, i, listnum)
+
        renderListRow(tbl, listnum)
end
+
    end
renderBelowRow(tbl)
+
    renderBelowRow(tbl)
  
return tbl
+
    return tbl
 
end
 
end
  
 
function p._navbox(navboxArgs)
 
function p._navbox(navboxArgs)
args = navboxArgs
+
    args = navboxArgs
listnums = {}
+
 
 +
    for k, v in pairs(args) do
 +
        local listnum = ('' .. k):match('^list(%d+)$')
 +
        if listnum then table.insert(listnums, tonumber(listnum)) end
 +
    end
 +
    table.sort(listnums)
  
for k, _ in pairs(args) do
+
    border = trim(args.border or args[1] or '')
if type(k) == 'string' then
 
local listnum = k:match('^list(%d+)$')
 
if listnum then table.insert(listnums, tonumber(listnum)) end
 
end
 
end
 
table.sort(listnums)
 
  
border = mw.text.trim(args.border or args[1] or '')
+
    -- render the main body of the navbox
if border == 'child' then
+
    local tbl = renderMainTable()
border = 'subgroup'
 
end
 
  
-- render the main body of the navbox
+
    -- render the appropriate wrapper around the navbox, depending on the border param
local tbl = renderMainTable()
+
    local res = mw.html.create()
 +
    if border == 'none' then
 +
        res:node(tbl)
 +
    elseif border == 'subgroup' or border == 'child' then
 +
        -- We assume that this navbox is being rendered in a list cell of a parent navbox, and is
 +
        -- therefore inside a div with padding:0em 0.25em. We start with a </div> to avoid the
 +
        -- padding being applied, and at the end add a <div> to balance out the parent's </div>
 +
        res
 +
            :wikitext('</div>') -- XXX: hack due to lack of unclosed support in mw.html.
 +
            :node(tbl)
 +
            :wikitext('<div>') -- XXX: hack due to lack of unclosed support in mw.html.
 +
    else
 +
        res
 +
            :tag('table')
 +
                :addClass('navbox')
 +
                :css('border-spacing', 0)
 +
                :cssText(args.bodystyle)
 +
                :cssText(args.style)
 +
                :tag('tr')
 +
                    :tag('td')
 +
                        :css('padding', '2px')
 +
                        :node(tbl)
 +
    end
  
-- render the appropriate wrapper around the navbox, depending on the border param
+
    renderTrackingCategories(res)
local res = mw.html.create()
 
if border == 'none' then
 
local nav = res:tag('div')
 
:attr('role', 'navigation')
 
:node(tbl)
 
-- aria-labelledby title, otherwise above, otherwise lone group
 
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
 
nav:attr('aria-label', 'Navbox')
 
end
 
elseif border == 'subgroup' then
 
-- We assume that this navbox is being rendered in a list cell of a parent navbox, and is
 
-- therefore inside a div with padding:0em 0.25em. We start with a </div> to avoid the
 
-- padding being applied, and at the end add a <div> to balance out the parent's </div>
 
res
 
:wikitext('</div>')
 
:node(tbl)
 
:wikitext('<div>')
 
else
 
local nav = res:tag('div')
 
:attr('role', 'navigation')
 
:addClass('navbox')
 
:addClass(args.navboxclass)
 
:cssText(args.bodystyle)
 
:cssText(args.style)
 
:css('padding', '3px')
 
:node(tbl)
 
-- aria-labelledby title, otherwise above, otherwise lone group
 
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
 
nav:attr('aria-label', 'Navbox')
 
end
 
end
 
  
if (args.nocat or 'false'):lower() == 'false' then
+
    return tostring(res)
renderTrackingCategories(res)
 
end
 
return striped(tostring(res))
 
 
end
 
end
  
 
function p.navbox(frame)
 
function p.navbox(frame)
if not getArgs then
+
    if not getArgs then
getArgs = require('Module:Arguments').getArgs
+
        getArgs = require('Module:Arguments').getArgs
end
+
    end
args = getArgs(frame, {wrappers = {'Template:Navbox'}})
+
    args = getArgs(frame, {wrappers = 'Template:Navbox'})
  
-- 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.
local _
+
    local _
_ = args.title
+
    _ = args.title
_ = args.above
+
    _ = args.above
for i = 1, 20 do
+
    for i = 1, 20 do
_ = args["group" .. tostring(i)]
+
        _ = args["group" .. tostring(i)]
_ = args["list" .. tostring(i)]
+
        _ = args["list" .. tostring(i)]
end
+
    end
_ = args.below
+
    _ = args.below
  
return p._navbox(args)
+
    return p._navbox(args)
 
end
 
end
  
 
return p
 
return p

Please note that all contributions to All About Ayrshire may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see All About Ayrshire:Copyrights for details). Do not submit copyrighted work without permission!

Cancel Editing help (opens in new window)

Template used on this page: