Module:PortableNavbox

local p = {} function p.box( f ) local args = require( 'Module:ProcessArgs' ).merge( true ) local navbox = {}

if args.title then local class = args.class or 'mw-collapsible mw-collapsed' local bodyStyle = args.bodystyle or '' if bodyStyle ~= '' then bodyStyle = 'style="' .. bodyStyle .. '"' end table.insert( navbox, ' {| class="navbox hlist ' .. class .. '" ' .. bodyStyle ) local titleStyle = args.titlestyle or '' if titleStyle ~= '' then titleStyle = 'style="' .. titleStyle .. '"' end local navbar = args[1] or '' if navbar ~= '' then local mini = '' if navbar:match( 'navbar%-mini' ) then mini = '1' end navbar = ' ' .. f:preprocess( '' ) .. ' '		end table.insert( navbox, '! class="navbox-top" colspan="2" ' .. titleStyle .. ' | ' .. navbar .. ' ' .. args.title .. ' ' ) else table.insert( navbox, ' {| class="navbox-child"' ) end local groupNums = {} for k, v in pairs( args ) do		if type( k ) == 'string' then local groupNum = k:match( 'group(%d+)' ) if groupNum and v then table.insert( groupNums, tonumber( groupNum ) ) end end end table.sort( groupNums ) local groupStyle = args.groupstyle or '' local listStyle = args.liststyle or '' for _, v in ipairs( groupNums ) do local list = args['list' .. v]		if list then table.insert( navbox, '|-\n! class="navbox-group" style="' .. groupStyle .. '" | ' .. args['group' .. v] ) table.insert( navbox, '| class="navbox-list" style="' .. listStyle .. '" | ' .. list:gsub( '^([*#:{])', '\n%1' ) ) end end table.insert( navbox, '|}' ) navbox = table.concat( navbox, '\n' ):gsub( ' style=""', '' ) return navbox end return p