<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.geministation.com/index.php?action=history&amp;feed=atom&amp;title=Module%3ANavbox</id>
	<title>Module:Navbox - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.geministation.com/index.php?action=history&amp;feed=atom&amp;title=Module%3ANavbox"/>
	<link rel="alternate" type="text/html" href="https://wiki.geministation.com/index.php?title=Module:Navbox&amp;action=history"/>
	<updated>2026-06-04T09:46:36Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki.geministation.com/index.php?title=Module:Navbox&amp;diff=3784&amp;oldid=prev</id>
		<title>Banri: Created page with &quot;-- -- Implements {{navbox}} --  local p = {} local tnavbar = require( &#039;Module:Tnavbar&#039; ) local yesno = require( &#039;Module:Yesno&#039; ) local onmain = require(&#039;Module:Mainonly&#039;).on_m...&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.geministation.com/index.php?title=Module:Navbox&amp;diff=3784&amp;oldid=prev"/>
		<updated>2020-05-31T16:25:54Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;-- -- Implements {{navbox}} --  local p = {} local tnavbar = require( &amp;#039;Module:Tnavbar&amp;#039; ) local yesno = require( &amp;#039;Module:Yesno&amp;#039; ) local onmain = require(&amp;#039;Module:Mainonly&amp;#039;).on_m...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;--&lt;br /&gt;
-- Implements {{navbox}}&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
local tnavbar = require( &amp;#039;Module:Tnavbar&amp;#039; )&lt;br /&gt;
local yesno = require( &amp;#039;Module:Yesno&amp;#039; )&lt;br /&gt;
local onmain = require(&amp;#039;Module:Mainonly&amp;#039;).on_main()&lt;br /&gt;
local page_title = mw.title.getCurrentTitle().fullText&lt;br /&gt;
--&lt;br /&gt;
-- Helper for inserting a new row into the navbox&lt;br /&gt;
--&lt;br /&gt;
-- @param tbl {mw.html table}&lt;br /&gt;
-- @return tbl {mw.html table}&lt;br /&gt;
--&lt;br /&gt;
local function insertRow( tbl )&lt;br /&gt;
	return tbl:tag( &amp;#039;tr&amp;#039; )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
-- Creates the navbox table&lt;br /&gt;
--&lt;br /&gt;
-- @param args {table}&lt;br /&gt;
-- @return tbl {mw.html table}&lt;br /&gt;
--&lt;br /&gt;
local function createTbl( args )&lt;br /&gt;
&lt;br /&gt;
	local tbl = mw.html.create( &amp;#039;table&amp;#039; )&lt;br /&gt;
&lt;br /&gt;
	tbl&lt;br /&gt;
		:addClass( yesno( args.subgroup ) and &amp;#039;navbox-subgroup&amp;#039; or &amp;#039;navbox&amp;#039; )&lt;br /&gt;
		:addClass( &amp;#039;nowraplinks&amp;#039; )&lt;br /&gt;
&lt;br /&gt;
	if not yesno( args.subgroup ) and&lt;br /&gt;
		( args.state == &amp;#039;collapsed&amp;#039; or&lt;br /&gt;
		  args.state == &amp;#039;uncollapsed&amp;#039; or&lt;br /&gt;
		  args.state == &amp;#039;autocollapse&amp;#039; or&lt;br /&gt;
		  -- defaults to autocollapse&lt;br /&gt;
		  args.state == nil )&lt;br /&gt;
	then&lt;br /&gt;
		tbl:addClass( &amp;#039;mw-collapsible&amp;#039; )&lt;br /&gt;
&lt;br /&gt;
		if args.state == &amp;#039;collapsed&amp;#039; then&lt;br /&gt;
			tbl:addClass( &amp;#039;mw-collapsed&amp;#039; )&lt;br /&gt;
		elseif args.state == &amp;#039;uncollapsed&amp;#039; then&lt;br /&gt;
			tbl:addClass(&amp;#039;navbox-uncollapsed&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if yesno( args.collapsible ) then&lt;br /&gt;
		tbl:addClass( &amp;#039;navbox-collapsible&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if args.style then&lt;br /&gt;
		tbl:cssText( args.style )&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- manually set collapse/expand messages&lt;br /&gt;
	-- bug causing the default database messages to be used&lt;br /&gt;
	tbl&lt;br /&gt;
		:attr( {&lt;br /&gt;
			[&amp;#039;cellspacing&amp;#039;] = &amp;#039;0&amp;#039;,&lt;br /&gt;
			[&amp;#039;data-expandtext&amp;#039;] = &amp;#039;show&amp;#039;,&lt;br /&gt;
			[&amp;#039;data-collapsetext&amp;#039;] = &amp;#039;hide&amp;#039;&lt;br /&gt;
		} )&lt;br /&gt;
&lt;br /&gt;
	return tbl&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
-- Wrapper for [[Module:Tnavbar]]&lt;br /&gt;
--&lt;br /&gt;
-- @param args {table}&lt;br /&gt;
-- @return {string}&lt;br /&gt;
--&lt;br /&gt;
local function navbar( args )&lt;br /&gt;
	return tnavbar._collapsible( { [1] = &amp;#039;&amp;lt;span style=&amp;quot;display:none;&amp;quot;&amp;gt;RS3 &amp;lt;/span&amp;gt;&amp;#039;..args.title, [2] = args.name } )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
-- Creates the header (what you see when the navbox is collapsed)&lt;br /&gt;
--&lt;br /&gt;
-- @param tbl {mw.html table}&lt;br /&gt;
-- @param args {table}&lt;br /&gt;
-- @return {mw.html table}&lt;br /&gt;
--&lt;br /&gt;
local function header( tbl, args )&lt;br /&gt;
	local div = insertRow( tbl )&lt;br /&gt;
		:tag( &amp;#039;th&amp;#039; )&lt;br /&gt;
			:attr( &amp;#039;colspan&amp;#039;, &amp;#039;2&amp;#039; )&lt;br /&gt;
			:addClass( &amp;#039;navbox-title&amp;#039; )&lt;br /&gt;
			:attr( &amp;#039;id&amp;#039; , &amp;#039;navbox-title&amp;#039; )&lt;br /&gt;
				:tag( &amp;#039;div&amp;#039; )&lt;br /&gt;
&lt;br /&gt;
	-- @todo move this to site css so we can simplify this (hook off a class)&lt;br /&gt;
	-- to something like div:wikitext( args.name and navbar( args ) or args.title )&lt;br /&gt;
	-- which can be appended to the above and returned straight away&lt;br /&gt;
	if args.name then&lt;br /&gt;
		div&lt;br /&gt;
			:css( &amp;#039;padding-right&amp;#039;, args.state == &amp;#039;plain&amp;#039; and &amp;#039;6em&amp;#039; or &amp;#039;0&amp;#039; )&lt;br /&gt;
			:wikitext( navbar( args ) )&lt;br /&gt;
	else&lt;br /&gt;
		div&lt;br /&gt;
			:css( &amp;#039;padding-left&amp;#039;, args.state == &amp;#039;plain&amp;#039; and &amp;#039;0&amp;#039; or &amp;#039;6em&amp;#039; )&lt;br /&gt;
			:wikitext( &amp;#039;&amp;lt;span style=&amp;quot;display:none;&amp;quot;&amp;gt;RS3 &amp;lt;/span&amp;gt;&amp;#039;..args.title )&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return div:allDone()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
-- Inserts a row into the navbox&lt;br /&gt;
--&lt;br /&gt;
-- @param tbl {mw.html table}&lt;br /&gt;
-- @param gtitle {string}&lt;br /&gt;
-- @param group {string}&lt;br /&gt;
-- @param gtype {string}&lt;br /&gt;
-- @param gcats {table}&lt;br /&gt;
-- @param style {string}&lt;br /&gt;
-- @return {mw.html table}&lt;br /&gt;
--&lt;br /&gt;
local function row( tbl, gtitle, group, gtype, gcats, style, _name, subgroup )&lt;br /&gt;
	local tr = insertRow( tbl )&lt;br /&gt;
	local td&lt;br /&gt;
	&lt;br /&gt;
	if gtitle then&lt;br /&gt;
		td = tr&lt;br /&gt;
			:addClass( &amp;#039;navbox-group&amp;#039; )&lt;br /&gt;
			:tag( &amp;#039;td&amp;#039; )&lt;br /&gt;
				:addClass( &amp;#039;navbox-group-title&amp;#039; )&lt;br /&gt;
				:wikitext( gtitle )&lt;br /&gt;
				:done()&lt;br /&gt;
			:tag( &amp;#039;td&amp;#039; )&lt;br /&gt;
	else&lt;br /&gt;
		td = tr&lt;br /&gt;
			:addClass( &amp;#039;navbox-group&amp;#039; )&lt;br /&gt;
			:addClass( &amp;#039;navbox-group-split&amp;#039; )&lt;br /&gt;
			:tag( &amp;#039;td&amp;#039; )&lt;br /&gt;
				:addClass( &amp;#039;navbox-group-title-hidden&amp;#039; )&lt;br /&gt;
				:attr( &amp;#039;colspan&amp;#039;, &amp;#039;0&amp;#039; )&lt;br /&gt;
				:css( &amp;#039;display&amp;#039;, &amp;#039;none&amp;#039; )&lt;br /&gt;
				:done()&lt;br /&gt;
			:tag( &amp;#039;td&amp;#039; )&lt;br /&gt;
				:attr( &amp;#039;colspan&amp;#039;, &amp;#039;2&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	--[[&lt;br /&gt;
	   List styling&lt;br /&gt;
	   This is unlikely to be implemented in the near future due to it requiring extra css to work&lt;br /&gt;
	   and mobile currently not supporting that css.&lt;br /&gt;
	   As an example, it lets you do the following instead if using {{*}} all the time&lt;br /&gt;
	   | group3 =&lt;br /&gt;
	   * {{plink|foo}}&lt;br /&gt;
	   * {{plink|bar}}&lt;br /&gt;
	   * {{plink|baz}}&lt;br /&gt;
	]]&lt;br /&gt;
	if mw.ustring.match( group, &amp;#039;^%s*%*&amp;#039; ) then&lt;br /&gt;
		td:newline()&lt;br /&gt;
&lt;br /&gt;
		-- trim whitespace on bullets&lt;br /&gt;
		local spl = mw.text.split( group, &amp;#039;\n&amp;#039; )&lt;br /&gt;
&lt;br /&gt;
		for i = 1, #spl do&lt;br /&gt;
			spl[i] = mw.text.trim( spl[i] )&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		group = &amp;#039;\n&amp;#039; .. table.concat( spl, &amp;#039;\n&amp;#039; )		&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	--local group2 = group&lt;br /&gt;
	--local group3 = group2&lt;br /&gt;
	-- analytics&lt;br /&gt;
&lt;br /&gt;
	--if _name then&lt;br /&gt;
	--	local name = mw.ustring.gsub(_name,&amp;#039; &amp;#039;,&amp;#039;_&amp;#039;)&lt;br /&gt;
	--	for v in mw.ustring.gmatch(group,&amp;#039;%[%[[^%]]+%]%]&amp;#039;) do&lt;br /&gt;
	--		if mw.ustring.match(v,&amp;#039;%[%[File:.+|link=&amp;#039;) then&lt;br /&gt;
	--			local link = mw.ustring.match(v,&amp;#039;|link=([^%]|]+)&amp;#039;)&lt;br /&gt;
	--			if link then&lt;br /&gt;
	--				local linkrep = mw.ustring.gsub(link,&amp;#039;([%%%]%[%-^$*()+?])&amp;#039;,&amp;#039;%%%1&amp;#039;)&lt;br /&gt;
	--				local _link = mw.ustring.gsub(link,&amp;#039; &amp;#039;,&amp;#039;_&amp;#039;)&lt;br /&gt;
	--				local newfile = mw.ustring.gsub(v,&amp;#039;|link=&amp;#039;..linkrep,string.format(&amp;#039;|link=https://wiki.geministation.com/w/%s?f=%s&amp;#039;,_link,name))&lt;br /&gt;
	--				local w = mw.ustring.gsub(v,&amp;#039;([%%%]%[%-^$*()+?])&amp;#039;,&amp;#039;%%%1&amp;#039;)&lt;br /&gt;
	--				group2 = mw.ustring.gsub(group2,w,newfile)&lt;br /&gt;
	--			end&lt;br /&gt;
	--		elseif mw.ustring.match(v,&amp;#039;%[%[Category:&amp;#039;) then&lt;br /&gt;
				-- nothing&lt;br /&gt;
	--		else&lt;br /&gt;
	--			local link = mw.ustring.match(v,&amp;#039;%[%[([^%]|]+)&amp;#039;)&lt;br /&gt;
	--			local txt = mw.ustring.match(v,&amp;#039;%|([^%]|]+)&amp;#039;) or link&lt;br /&gt;
&lt;br /&gt;
	--			local newlink = &amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
				-- black links if current page&lt;br /&gt;
	--			if link == page_title then&lt;br /&gt;
	--				newlink = string.format(&amp;#039;&amp;lt;b&amp;gt;%s&amp;lt;/b&amp;gt;&amp;#039;,txt)&lt;br /&gt;
	--			else&lt;br /&gt;
	--				local _link = mw.ustring.gsub(link or &amp;#039;&amp;#039;,&amp;#039; &amp;#039;,&amp;#039;_&amp;#039;)&lt;br /&gt;
	--				newlink = string.format(&amp;#039;[https://wiki.geministation.com/w/%s?n=%s %s]&amp;#039;,_link,name,txt)&lt;br /&gt;
	--			end&lt;br /&gt;
	--			local w = mw.ustring.gsub(v,&amp;#039;([%%%]%[%-^$*()+?])&amp;#039;,&amp;#039;%%%1&amp;#039;)&lt;br /&gt;
	--			group2 = mw.ustring.gsub(group2,w,newlink)&lt;br /&gt;
	--		end&lt;br /&gt;
	--	end&lt;br /&gt;
&lt;br /&gt;
		--[==[&lt;br /&gt;
			fix [[these kind]]s of [[link]]s post analytics parse&lt;br /&gt;
			]==]&lt;br /&gt;
	--	group3 = group2&lt;br /&gt;
&lt;br /&gt;
	--	for v in mw.ustring.gmatch(group2,&amp;#039;%[https://wiki.geministation.com/w[^%]]-%]%a&amp;#039;) do&lt;br /&gt;
	--		local rep = mw.ustring.gsub(v,&amp;#039;%]&amp;#039;,&amp;#039;&amp;#039;)&lt;br /&gt;
	--		rep = rep..&amp;#039;]&amp;#039;&lt;br /&gt;
	--		local w = mw.ustring.gsub(v,&amp;#039;([%%%]%[%-^$*()+?])&amp;#039;,&amp;#039;%%%1&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
	--		group3 = mw.ustring.gsub(group2,w,rep)&lt;br /&gt;
	--	end&lt;br /&gt;
	--end&lt;br /&gt;
&lt;br /&gt;
	td&lt;br /&gt;
		:addClass( &amp;#039;navbox-list&amp;#039; )&lt;br /&gt;
		:wikitext( group ) --group3&lt;br /&gt;
&lt;br /&gt;
	if gtype and mw.ustring.lower( gtype ) == &amp;#039;subgroup&amp;#039; then&lt;br /&gt;
		td&lt;br /&gt;
			:addClass( &amp;#039;navbox-parent&amp;#039; )&lt;br /&gt;
			:css( {&lt;br /&gt;
				padding = &amp;#039;0&amp;#039;,&lt;br /&gt;
				[&amp;#039;border-bottom&amp;#039;] = &amp;#039;0&amp;#039;&lt;br /&gt;
			} )&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if style then&lt;br /&gt;
		td:cssText( style )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- add subgroup categories&lt;br /&gt;
	if next(gcats) and onmain then&lt;br /&gt;
		first_char = page_title:sub(1,1)&lt;br /&gt;
		title_pattern = &amp;quot;[&amp;quot; .. first_char:upper() .. first_char:lower() .. &amp;quot;]&amp;quot; .. page_title:sub(2)&lt;br /&gt;
		title_pattern = title_pattern :gsub(&amp;quot;%(&amp;quot;,&amp;quot;%%(&amp;quot;)&lt;br /&gt;
								:gsub(&amp;quot;%)&amp;quot;,&amp;quot;%%)&amp;quot;)&lt;br /&gt;
								:gsub(&amp;quot;_&amp;quot;,&amp;quot; &amp;quot;)&lt;br /&gt;
								:gsub(&amp;quot; &amp;quot;,&amp;quot;[_ ]&amp;quot;)&lt;br /&gt;
								:gsub(&amp;quot;%-&amp;quot;,&amp;quot;%%-&amp;quot;)&lt;br /&gt;
		local link_patterns = {&lt;br /&gt;
			&amp;quot;%[%[&amp;quot;..title_pattern..&amp;quot;%]%]&amp;quot;, &amp;quot;%[%[&amp;quot;..title_pattern..&amp;quot;%|&amp;quot;, &amp;quot;{{[Pp]link%|&amp;quot;..title_pattern..&amp;quot;}}&amp;quot;,&lt;br /&gt;
			&amp;quot;{{[Pp]link%|&amp;quot;..title_pattern..&amp;quot;%|&amp;quot;, &amp;quot;{{[Pp]linkp%|&amp;quot;..title_pattern..&amp;quot;}}&amp;quot;,&lt;br /&gt;
			&amp;quot;{{[Pp]linkp%|&amp;quot;..title_pattern..&amp;quot;%|&amp;quot;, &amp;quot;{{[Ii]linkp%|&amp;quot;..title_pattern..&amp;quot;}}&amp;quot;,&lt;br /&gt;
			&amp;quot;{{[Ii]linkp%|&amp;quot;..title_pattern..&amp;quot;%|&amp;quot;, &amp;quot;{{[Cc]hatl%|&amp;quot;..title_pattern..&amp;quot;}}&amp;quot;,&lt;br /&gt;
			&amp;quot;{{[Cc]hatl%|&amp;quot;..title_pattern..&amp;quot;%|&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
		for _,v in ipairs(link_patterns) do&lt;br /&gt;
			if group:match(v) then&lt;br /&gt;
				for _,cat in ipairs(gcats) do&lt;br /&gt;
					td:wikitext(&amp;#039;[[Category:&amp;#039;..cat..&amp;#039;]]&amp;#039;)&lt;br /&gt;
				end&lt;br /&gt;
				break&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return td:allDone()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
-- Inserts a footer into the navbox&lt;br /&gt;
--&lt;br /&gt;
-- @param tbl {mw.html table}&lt;br /&gt;
-- @param args {table}&lt;br /&gt;
-- @return {mw.html table}&lt;br /&gt;
--&lt;br /&gt;
local function footer( tbl, args )&lt;br /&gt;
	local th = insertRow( tbl )&lt;br /&gt;
		:tag( &amp;#039;th&amp;#039; )&lt;br /&gt;
			:attr( &amp;#039;colspan&amp;#039;, &amp;#039;2&amp;#039; )&lt;br /&gt;
			:addClass( &amp;#039;navbox-footer&amp;#039; )&lt;br /&gt;
&lt;br /&gt;
	if args.fstyle then&lt;br /&gt;
		th:cssText( args.fstyle )&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if mw.ustring.match( args.footer, &amp;#039;^%s*%*&amp;#039; ) then&lt;br /&gt;
		th:newline()&lt;br /&gt;
&lt;br /&gt;
		-- trim whitespace on bullets&lt;br /&gt;
		local spl = mw.text.split( args.footer, &amp;#039;\n&amp;#039; )&lt;br /&gt;
&lt;br /&gt;
		for i = 1, #spl do&lt;br /&gt;
			spl[i] = mw.text.trim( spl[i] )&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		args.footer = table.concat( spl, &amp;#039;\n&amp;#039; )&lt;br /&gt;
&lt;br /&gt;
		th:addClass( &amp;#039;navbox-list&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	th:wikitext( args.footer )&lt;br /&gt;
&lt;br /&gt;
	return th:allDone()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
-- Adds [[Category:Navigational templates]] to navbox template pages&lt;br /&gt;
--&lt;br /&gt;
-- @return {string}&lt;br /&gt;
--&lt;br /&gt;
local function categories()&lt;br /&gt;
	local title = mw.title.getCurrentTitle()&lt;br /&gt;
	local page = title.text&lt;br /&gt;
	local ns = title.nsText&lt;br /&gt;
&lt;br /&gt;
	if ns == &amp;#039;Template&amp;#039; then&lt;br /&gt;
		-- sort in category by pagename&lt;br /&gt;
		return &amp;#039;[[Category:Navigational templates|&amp;#039; .. page .. &amp;#039;]]&amp;#039;&lt;br /&gt;
	else&lt;br /&gt;
		return &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
-- Adds [[Template:Navbox/doc]] to navbox template pages&lt;br /&gt;
--&lt;br /&gt;
-- @param args {table}&lt;br /&gt;
-- @return {string}&lt;br /&gt;
--&lt;br /&gt;
local function docs( args )&lt;br /&gt;
	local frame = mw.getCurrentFrame()&lt;br /&gt;
	local title = mw.title.getCurrentTitle()&lt;br /&gt;
	local base = title.baseText&lt;br /&gt;
	local ns = title.nsText&lt;br /&gt;
&lt;br /&gt;
		-- not if a subpage of [[Template:Navbox]]&lt;br /&gt;
	if base ~= &amp;#039;Navbox&amp;#039; and&lt;br /&gt;
		-- in template ns&lt;br /&gt;
		ns == &amp;#039;Template&amp;#039; and&lt;br /&gt;
		-- not a navbox group within a navbox&lt;br /&gt;
		not yesno( args.subgroup ) and&lt;br /&gt;
		-- not a collapsible navbox within a navbox&lt;br /&gt;
		not yesno( args.collapsible ) and&lt;br /&gt;
		-- not if the doc argument is set to &amp;quot;no&amp;quot;&lt;br /&gt;
		( args.doc == nil or yesno( args.doc ) )&lt;br /&gt;
	then&lt;br /&gt;
		return frame:expandTemplate{ title = &amp;#039;Navbox/doc&amp;#039; }&lt;br /&gt;
	else&lt;br /&gt;
		return &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
-- Navbox method to allow it to be called by other modules&lt;br /&gt;
--&lt;br /&gt;
-- @param _args {table}&lt;br /&gt;
-- @return {string}&lt;br /&gt;
--&lt;br /&gt;
function p._navbox( _args )&lt;br /&gt;
	local args = {}&lt;br /&gt;
	local wkCss = &amp;#039;&amp;#039;&lt;br /&gt;
	local wkDiv = &amp;#039;&amp;#039;&lt;br /&gt;
	local j&lt;br /&gt;
	&lt;br /&gt;
	-- preserves parser function behaviour where an empty string is considered undefined&lt;br /&gt;
	-- or nil in lua&amp;#039;s case&lt;br /&gt;
	for k, v in pairs( _args ) do&lt;br /&gt;
		if v ~= &amp;#039;&amp;#039; then&lt;br /&gt;
			args[k] = v&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local tbl = createTbl( args )&lt;br /&gt;
&lt;br /&gt;
	if not yesno( args.subgroup ) then&lt;br /&gt;
		tbl = header( tbl, args )&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- insert up to 20 rows&lt;br /&gt;
	--&lt;br /&gt;
	-- 20 is a limit inherited from wikipedia when we copied this over&lt;br /&gt;
	-- and we&amp;#039;ve never had a reason to extend it&lt;br /&gt;
	for i = 1, 20 do&lt;br /&gt;
		j = tostring( i )&lt;br /&gt;
&lt;br /&gt;
		if args[&amp;#039;group&amp;#039; .. j] then&lt;br /&gt;
			local gcats = {}&lt;br /&gt;
			for p = 1, 20 do&lt;br /&gt;
				local q = tostring ( p )&lt;br /&gt;
				&lt;br /&gt;
				if args[&amp;#039;g&amp;#039; .. j .. &amp;#039;cat&amp;#039; .. q] then&lt;br /&gt;
					table.insert(gcats, args[&amp;#039;g&amp;#039; .. j .. &amp;#039;cat&amp;#039; .. q])&lt;br /&gt;
				else&lt;br /&gt;
					break&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
					&lt;br /&gt;
			tbl = row( tbl, args[&amp;#039;gtitle&amp;#039; .. j], args[&amp;#039;group&amp;#039; .. j], args[&amp;#039;gtype&amp;#039; .. j], gcats, args[&amp;#039;style&amp;#039; .. j], args.name, args.subgroup )&lt;br /&gt;
		else&lt;br /&gt;
			break&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if args.footer then&lt;br /&gt;
		tbl = footer( tbl, args )&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	tbl = tostring( tbl )&lt;br /&gt;
&lt;br /&gt;
	local cats = &amp;#039;&amp;#039;&lt;br /&gt;
	if not yesno(args.subgroup) and not yesno(args.hidecat) then&lt;br /&gt;
		cats = categories()&lt;br /&gt;
	end&lt;br /&gt;
	local docs = docs( args )&lt;br /&gt;
&lt;br /&gt;
	return tbl .. cats .. docs&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
-- Main navbox method accessed through #invoke&lt;br /&gt;
--&lt;br /&gt;
-- @param frame {table}&lt;br /&gt;
-- @return {string}&lt;br /&gt;
--&lt;br /&gt;
function p.navbox( frame )&lt;br /&gt;
	local args = frame:getParent().args&lt;br /&gt;
	return p._navbox( args )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;br /&gt;
-- &amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Banri</name></author>
	</entry>
</feed>