Module:Navbox

-- -- This module will implement --

local p = {}

local gutterRow = '  '

local ret = {} function add(...) for i, s in ipairs({...}) do       if s then table.insert(ret, s)       end end end

function renderList(args, listnum) if args.title or args.above or args.list1 then add(gutterRow) end add(' ') if args['group' .. listnum] then add('') add(args['group' .. listnum]) add(' <td style="text-align:left;border-left-width:2px;border-left-style:solid;')   else        add('<td colspan=2 style="') end if not args.groupwidth then add('width:100%;') end local isOdd = (listnum % 2) == 1 local rowstyle = args.evenstyle if isOdd then rowstyle = args.oddstyle end add('padding:0px;', args.liststyle, ';', rowstyle, ';', args['list' .. listnum .. 'style'], '" ')   add('class="navbox-list navbox-') if args.evenodd == 'swap' then if isOdd then add('even') else add('odd') end else if isOdd then add(args.evenodd or 'odd') else add(args.evenodd or 'even') end end add(' ', args.listclass, '">')   add('', args['list' .. listnum], '   ') end

function p._navbox(args) local 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) local border = args.border or args[1] if border == 'subgroup' or border == 'child' then add(' ') elseif border ~= 'none' then add(' ') if border == 'subgroup' or border == 'child' then add(' ') elseif border ~= 'none' then add('  ') end

-- TODO: add tracking categories return table.concat(ret, '') end

function p.navbox(frame) return p._navbox(frame:getParent.args) end

return p