require('strict')local p = local parentCfg = mw.loadData('Module:Navbox/configuration')local thisCfg = mw.loadData('Module:Navbox with columns/configuration')local cfg = for k, v in pairs(thisCfg) do if type(v)
'table' then for kk, vv in pairs(parentCfg[k]) do cfg[k][kk] = vv end end for kk, vv in pairs(v) do cfg[k][kk] = vv end endendlocal inArray = require("Module:TableTools").inArraylocal getArgs -- lazily initialized
-- helper functionslocal andnum = function(s, n) return string.format(cfg.arg[s..'_and_num'], n) end local isblank = function(v) return (v or )
local function concatstrings(s) local r = table.concat(s, ) if r:match('^%s*$') then return nil end return rend local function concatstyles(s) local r = for _, v in ipairs(s) do v = mw.text.trim(v, "%s;") if not isblank(v) then r = r .. v .. ';' end end if isblank(r) then return nil end return rend local function getSubgroup(args, listnum, listText, prefix) local subArgs = local hasSubArgs = false local subgroups = prefix and or cfg.keyword.subgroups for k, v in pairs(args) do k = tostring(k) for _, w in ipairs(subgroups) do w = w .. listnum .. "_" if (#k > #w) and (k:sub(1, #w)
-- Main functionsp._navbox = require('Module:Navbox')._navbox
function p._withColumns(pargs) -- table for args passed to navbox local targs = -- tables of column numbers local colheadernums = local colnums = local colfooternums = -- process args local passthrough = for k,v in pairs(pargs) do if passthrough[k] then targs[k] = v elseif type(k)
1 and isblank(pargs[andnum('colheader', 1)]) and isblank(pargs[andnum('colfooter', 1)]) and isblank(pargs[cfg.arg.fullwidth]) then local nopad = inArray(mw.ustring.gsub(pargs[cfg.arg.padding] or , '[;%%]', )) if not nopad then row:tag('td'):wikitext(' ') :attr('style', 'width:'..(pargs[cfg.arg.padding] or '5em')..';') end end col = row:tag('td'):attr('class', 'navbox-list') col:attr('style', concatstyles) local wt = pargs[andnum('col', n)] if wt and inArray(cfg.keyword.subgroups, wt) then local prefix = mw.ustring.gsub(cfg.arg.col_and_num,"%%d","") wt = getSubgroup(pargs, n, wt, prefix) end col:tag('div'):newline:wikitext(wt):newline end --- Footer row --- if (#colfooternums > 0) then row = coltable:tag('tr') for k, n in ipairs(colfooternums) do col = row:tag('td'):attr('class', 'navbox-abovebelow') col:attr('style', concatstyles) if tonumber(pargs[andnum('colfootercolspan', n)]) then col:attr('colspan', pargs[andnum('colfootercolspan', n)]) end col:wikitext(pargs[andnum('colfooter', n)]) end end -- assign table to list1 targs[andnum('list', 1)] = tostring(coltable) if isblank(pargs[andnum('colheader', 1)]) and isblank(pargs[andnum('col', 1)]) and isblank(pargs[andnum('colfooter', 1)]) then targs[andnum('list', 1)] = targs[andnum('list', 1)] .. '' .. cfg.pattern.without_first_col .. '' end
-- Other parameters targs[cfg.arg.border] = pargs[cfg.arg.border] or pargs[1] targs[cfg.arg.evenodd] = (not isblank(pargs[cfg.arg.evenodd])) and pargs[cfg.arg.evenodd] or nil targs[cfg.arg.list1padding] = '0px' targs[andnum('liststyle', 1)] = 'background:transparent;color:inherit;' targs[cfg.arg.style] = concatstyles targs[cfg.arg.tracking] = 'no' return p._navbox(targs)end
-- Template entry pointsfunction p.navbox (frame, boxtype) local function readArgs(args, prefix) -- Read the arguments in the order they'll be output in, to make references -- number in the right order. local _ _ = args[prefix .. cfg.arg.title] _ = args[prefix .. cfg.arg.above] -- Limit this to 20 as covering 'most' cases (that's a SWAG) and because -- iterator approach won't work here for i = 1, 20 do _ = args[prefix .. andnum('group', i)] if inArray(cfg.keyword.subgroups, args[prefix .. andnum('list', i)]) then for _, v in ipairs(cfg.keyword.subgroups) do readArgs(args, prefix .. v .. i .. "_") end end end _ = args[prefix .. cfg.arg.below] end
if not getArgs then getArgs = require('Module:Arguments').getArgs end local args = getArgs(frame,) readArgs(args, "") return p['_'..(boxtype or 'navbox')](args)end
p['with columns'] = function (frame) return p.navbox(frame, 'withColumns')end
local q = q._navbox = p._withColumnsq.navbox = p['with columns']return q