Global Lua Modules/Navbox

This template is used to build navboxes. It is highly recommended to use this template only for building other templates, instead of using it on pages directly.
== Features ==
* Supports up to unlimited rows
** Hides rows without a value
* Supports image and left image
* Supports subheaders
** Subheaders are automatically hidden if they have no rows under them (can be overridden per header)
** Subheaders can be collapsed (configurable per header or globally)
* Supports custom styles and classes
* Alternating row styles (can be disabled)
* Subgroups without nested template code
* Automatic striping handling for subsections/child navboxes (based on Wikipedia's Module:Navbox)
* Can be run from wikicode (#invoke) or directly in a Module via "require"
* Alternating toggle labels
== ==
# Install the Lua Module: 
# Install the CSS styles: 
# Create Template:Navbox with the following code:{{#invoke:Navbox|main}}
== ==
Here is a list of all supported parameters.
* (n) should be replaced by any valid number, or a set of numbers separated by dots (e.g. "1.1.1").
** The numbers should be positive integers and should not start with the digit 0.
** If a parameter in the format list(x.y) is used, a subgroup navbox will be inserted in place of list(x). The subgroup navbox will have the parameter list(y), as well as most non-numbered parameters of the parent navbox.
* Underlined values are defaults.
All parameters are optional.
=== Main Parameters ===
;template
:Name of the template, used for VDE (view/discuss/edit) links. The value will be passed directly to .
;border/unnamed parameter 1
:Can be used to control the border of the navbox. Currently only supports the value "child", making the navbox a child navbox of another one.
;title
:The main title of the box. If unset, will appear in its place (except for in child navboxes, where it may be omitted).
;above
:Used to add a row that appears above all image, header and data rows.
;header(n)
:Used to add subheaders to the navbox. Headers are hidden by default unless there are any list rows under them.
;show(n) = yes/no
:Use this parameter to force show/hide a section. The number should correspond to the number of the header that started the section.
;showall = yes
:Use this to force show all sections. Can be overridden with individual show(n) parameters.
;group(n)
:Contains the group label for a row. If not present, the corresponding list will expand to fill the gap.
;list(n)
:The actual list for the row.
;below
:Used to add a row that appears below all header and data rows.
=== Images ===
The navbox supports 2 images (one left and one right). Both images support full syntax ([[File:Name.ext|...]]) and filename (File:Name.ext). In case of the former, the respective width and link parameters will be ignored.
;image
:Specify an image for the right side
;imagewidth = 100px
:If you didn't use the full syntax, use this to specify the width of the image
;imagelink
:You can use this to link the image to a certain page.
;imageleft
:Specify an image for the left side
;imageleftwidth = 100px
:Width for the left image
;imageleftlink
:Link for the left image
=== Style Parameters ===
;alternaterows = yes/no/odd/even/swap
:You can optionally set this to no or odd to disable alternating row styles. If set to even, the alternate styling will be used for all rows. If set to swap, the odd rows will be the alternate rows; otherwise the even rows are.
;bodystyle
;bodyclass
:Classes and styles to add to the navbox itself
;titlestyle
;titleclass
:Classes and styles to add to the title
;abovestyle
;aboveclass
:Classes and styles to add to the above row
;imagestyle
;imageclass
:Classes and styles to add to the image
;imageleftstyle
;imageleftclass
:Classes and styles to add to the left image
;rowclass
:Classes to add to all list rows
;altrowclass = alt
:Classes to add to list rows with alternating styles
;groupstyle
;groupclass
:Classes and styles to add to the groups
;altgroupstyle
;altgroupclass
:Classes and styles to add to the groups in alternate rows (if enabled)
;liststyle
;listclass
:Classes and styles to add to the lists.
:By default, the hlist class will be added inside each list cell. This behavior can be overridden by including hlist or plainlist among the classes in the listclass parameter.
;altliststyle
;altlistclass
:Classes and styles to add to the lists in alternate rows (if enabled)
;belowstyle
;belowclass
:Classes and styles to add to the below row
=== Collapsing ===
The Navbox supports two forms of collapsing: for the navbox itself and for individual subsections.
;state = collapsed/expanded/plain
:This parameter controls the collapsing of the navbox itself. If set to collapsed, the box will be collapsed by default. If set to expanded, the box can be collapsed, but will be open by default. If set to plain, the box can not be collapsed and no Show/Hide link will show.
;state(n) = collapsed/expanded/plain
:Used to control the collapsing of a single section. A section goes from one header to the next. The number should thus correspond to the one of the header that is above the section to collapse. Options are the same as above.
;defaultstate = collapsed/expanded/plain
:Sets the default collapse state for the subsections only. Can still be overridden by individual state(n) parameters.
;collapsetext = Hide
;expandtext = Show
:Custom text for the toggle labels of the navbox itself.
;collapsetext(n) = Hide
;expandtext(n) = Show
:Custom text for the toggle labels of a single section.
;defaultcollapsetext
;defaultexpandtext
:Sets the default toggle labels. Can be overridden by individual parameters.
====
===Simple Example===
{{Navbox
 |title = A simple navbox
 |template = Navbox <!-- Used for V D E links -->
 |above = Text to appear on top
 |group1 = First Group
 |list1 = 
* This
* Is
* An
* Example
* List
 |list2 = Second list without group (centered)
 |group3 = Third group without list (not shown)
 |group99999 = 99999th Group
 |list99999 = Any number works
 |below = Text to appear on bottom
}}
===Headers Example===
{{Navbox
 |title = Navbox with subheaders
 |group1 = First Group
 |list1 = This list is before the first header
 |header2 = Header for section 2
 |group2 = Second Group
 |list2 = Second List (part of section 2)
 |group3 = Third Group
 |list3 = Third List (also part of section 2)
 |header4 = Header with no lists (Not shown)
 |header5 = Another Header
 |list5 = Another list (part of section 5)
 |header6 = Another header with no lists (force shown)
 |show6 = yes
 |header7 = A header with a list that is force hidden
 |list7 = Not shown either
 |show7 = no
}}
===Images Example===
{{Navbox
 |title = Navbox with images
 |group1 = First Group
 |list1 = First List
 |header2 = Some Header
 |list2 = Some List
 
 |image = File:Wiki.png
 |imagewidth = 60px
 |imagelink = w:
 
 |imageleft = [[File:Example.jpg|50px]]
 
 |below = Below goes below images too
}}
===Collapsing Example===
{{Navbox
 |title = Navbox with collapsing
 |state = collapsed
 
 |header1 = First Header (Plain)
 |group1 = First Group
 |list1 = This list is before the first header
 |group2 = Second Group
 |list2 = Second List
 
 |header3 = Second Header (Expanded)
 |state3 = expanded
 |group3 = Third Group
 |list3 = Third List
 |group4 = Fourth Group
 |list4 = Fourth List
 
 |header5 = Third Header (Collapsed)
 |state5 = collapsed
 |group5 = Fifth Group
 |list5 = Fifth List
 |group6 = Sixth Group
 |list6 = Sixth List
}}
===Custom Styles Example===
Example using Wikipedia-style colors, taken from Wikipedia's CSS.
Note: It is recommended to use CSS classes for styling instead of inline CSS styles if possible. To view/edit your wiki's default CSS, go to MediaWiki:Common.css.
{{Navbox
 |title = .navbox-title
 |above = .navbox-above
 |header1 = .navbox-header
 |group1 = .navbox-row-group
 |list1 = .navbox-row-list
 |group2 = .alt .navbox-row-group
 |list2 = .alt .navbox-row-list
 |list3 = .navbox-list.no-group
 |below = .navbox-below
 
 |bodystyle = background: #fdfdfd; color: black; border: 1px solid #aaa; padding: 3px
 |titlestyle = background: #ccf; color: black
 |abovestyle = background: #ddf; color: black
 |headerstyle = background: #ddf; color: black
 |groupstyle = background: #ddf; border-right: 2px solid white; color: black; text-align: right; padding-right: 1em
 |liststyle = background: transparent; color: black
 |altliststyle = background: #f7f7f7; color: black
 |belowstyle = background: #ddf; color: black
}}
===Subgroups Example===
{{Navbox
 |title = Navbox with subgroups
 |group1 = Normal group
 |list1 = Normal list
 |group2 = Subgrouped
 |list2 = {{Navbox|child
 |group1 = First subgroup
 |list1 = List goes here
 |group2 = Second...
 |list2 = Another list
 |group3 = Subgrouped
 |group3.1 = Another subgroup
 |list3.1 = List here
 |image = [[File:Example.jpg|48px]]
 }}
}}