<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki.onlyfumos.com/w/index.php?action=history&amp;feed=atom&amp;title=Modul%3ANavbox</id>
	<title>Modul:Navbox - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.onlyfumos.com/w/index.php?action=history&amp;feed=atom&amp;title=Modul%3ANavbox"/>
	<link rel="alternate" type="text/html" href="https://wiki.onlyfumos.com/w/index.php?title=Modul:Navbox&amp;action=history"/>
	<updated>2026-11-04T01:30:34Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Touhou Wiki</subtitle>
	<generator>MediaWiki 1.46.0</generator>
	<entry>
		<id>https://wiki.onlyfumos.com/w/index.php?title=Modul:Navbox&amp;diff=11282&amp;oldid=prev</id>
		<title>imported&gt;Satorioshi: Die Seite wurde neu angelegt: „-- lua port of Template:Navbox -- by DennouNeko  -- == Helper functions == -- libraries  local common = require(&quot;Module:Common&quot;) local style = require(…“</title>
		<link rel="alternate" type="text/html" href="https://wiki.onlyfumos.com/w/index.php?title=Modul:Navbox&amp;diff=11282&amp;oldid=prev"/>
		<updated>2016-09-01T19:37:18Z</updated>

		<summary type="html">&lt;p&gt;Die Seite wurde neu angelegt: „-- lua port of &lt;a href=&quot;/wiki/Vorlage:Navbox&quot; title=&quot;Vorlage:Navbox&quot;&gt;Template:Navbox&lt;/a&gt; -- by DennouNeko  -- == Helper functions == --&lt;a href=&quot;/w/index.php?title=Libraries&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Libraries (Seite nicht vorhanden)&quot;&gt;libraries &lt;/a&gt; local common = require(&amp;quot;Module:Common&amp;quot;) local style = require(…“&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;-- lua port of [[Template:Navbox]]&lt;br /&gt;
-- by DennouNeko&lt;br /&gt;
&lt;br /&gt;
-- == Helper functions ==&lt;br /&gt;
--[[ libraries ]]&lt;br /&gt;
local common = require(&amp;quot;Module:Common&amp;quot;)&lt;br /&gt;
local style = require(&amp;quot;Module:Styles&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
local colors = style.main_colors&lt;br /&gt;
&lt;br /&gt;
if mw.text == nil then mw.text = require(&amp;quot;Module:MW.text&amp;quot;) end&lt;br /&gt;
&lt;br /&gt;
--[[ Retrieve a full list of &amp;#039;list#&amp;#039;, &amp;#039;list#style&amp;#039;, &amp;#039;group#&amp;#039; and &amp;#039;group#style&amp;#039; arguments&lt;br /&gt;
     as a table of objects with &amp;#039;index&amp;#039;, &amp;#039;list&amp;#039;, &amp;#039;liststyle&amp;#039;, &amp;#039;group&amp;#039; and &amp;#039;groupstyle&amp;#039; fields,&lt;br /&gt;
     where &amp;#039;index&amp;#039; is the number in &amp;#039;list#&amp;#039; argument name.&lt;br /&gt;
     Only &amp;#039;list&amp;#039; and &amp;#039;index&amp;#039; are always defined. Elements that weren&amp;#039;t specified will be empty.&lt;br /&gt;
     If &amp;#039;list#&amp;#039; wasn&amp;#039;t defined, rest of elements for that given index will be ignored.&lt;br /&gt;
     Key of argument matches the number in arguments name. ]]&lt;br /&gt;
local function scan_lists(frame)&lt;br /&gt;
  local idx = {}&lt;br /&gt;
  local list = {}&lt;br /&gt;
  local group = {}&lt;br /&gt;
  local liststyle = {}&lt;br /&gt;
  local groupstyle = {}&lt;br /&gt;
&lt;br /&gt;
  local ret = {}&lt;br /&gt;
&lt;br /&gt;
  local s,e,t&lt;br /&gt;
&lt;br /&gt;
  for k,v in frame:argumentPairs() do&lt;br /&gt;
    -- accept only parameters without leading zeros&lt;br /&gt;
    s,e,t = string.find(k, &amp;#039;^group([1-9]%d*)style$&amp;#039;)&lt;br /&gt;
    if s ~= nil then groupstyle[tonumber(t)] = v end&lt;br /&gt;
&lt;br /&gt;
    s,e,t = string.find(k, &amp;#039;^list([1-9]%d*)style$&amp;#039;)&lt;br /&gt;
    if s ~= nil then liststyle[tonumber(t)] = v end&lt;br /&gt;
&lt;br /&gt;
    s,e,t = string.find(k, &amp;#039;^group([1-9]%d*)$&amp;#039;)&lt;br /&gt;
    if s ~= nil then group[tonumber(t)] = v end&lt;br /&gt;
&lt;br /&gt;
    s,e,t = string.find(k, &amp;#039;^list([1-9]%d*)$&amp;#039;)&lt;br /&gt;
    if s ~= nil then&lt;br /&gt;
      list[tonumber(t)] = v&lt;br /&gt;
      idx[#idx+1] = tonumber(t)&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  table.sort(idx)&lt;br /&gt;
&lt;br /&gt;
  for k,v in pairs(idx) do&lt;br /&gt;
    local tmp = {}&lt;br /&gt;
    tmp[&amp;#039;index&amp;#039;] = v&lt;br /&gt;
    tmp[&amp;#039;list&amp;#039;] = list[v]&lt;br /&gt;
    if common.isset(group[v]) then tmp[&amp;#039;group&amp;#039;] = group[v] end&lt;br /&gt;
    if common.isset(liststyle[v]) then tmp[&amp;#039;liststyle&amp;#039;] = liststyle[v] end&lt;br /&gt;
    if common.isset(groupstyle[v]) then tmp[&amp;#039;groupstyle&amp;#039;] = groupstyle[v] end&lt;br /&gt;
    ret[#ret+1] = tmp&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- == Functions generating the document elements ==&lt;br /&gt;
&lt;br /&gt;
--[[ Generates the beginning of box, based on specified &amp;#039;ttype&amp;#039; and &amp;#039;border&amp;#039;. ]]&lt;br /&gt;
local function start_box(frame, border, ttype)&lt;br /&gt;
  local ret = {}&lt;br /&gt;
  if border == &amp;quot;subgroup&amp;quot; or border == &amp;quot;child&amp;quot; then&lt;br /&gt;
    -- since we&amp;#039;re in a cell of parent navbox, we have to close its &amp;lt;div&amp;gt; element&lt;br /&gt;
    ret[#ret+1] = &amp;#039;&amp;lt;/div&amp;gt;&amp;#039;&lt;br /&gt;
  elseif border == &amp;quot;none&amp;quot; then&lt;br /&gt;
    -- nothing to do&lt;br /&gt;
  else&lt;br /&gt;
    -- new, independent navbox - create a frame around it&lt;br /&gt;
    ret[#ret+1] = &amp;#039;&amp;lt;table class=&amp;quot;navbox&amp;#039;&lt;br /&gt;
    if common.isset(frame.args[&amp;#039;bodyclass&amp;#039;]) then ret[#ret+1] = &amp;quot; &amp;quot; .. frame.args[&amp;#039;bodyclass&amp;#039;] end&lt;br /&gt;
    ret[#ret+1] = &amp;#039;&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;&amp;#039;&lt;br /&gt;
    if common.isset(colors[ttype]) then ret[#ret+1] = &amp;#039;background:&amp;#039; .. colors[ttype][&amp;#039;background&amp;#039;] .. &amp;#039;;&amp;#039; end&lt;br /&gt;
    -- ret[#ret+1] = &amp;#039;border:1px solid #aaa; padding:1px;width:100%;vertical-align:middle;margin:auto;clear:both;font-size:88%;text-align:center;&amp;#039;&lt;br /&gt;
    style.add(ret, frame.args[&amp;#039;bodystyle&amp;#039;])&lt;br /&gt;
    style.add(ret, frame.args[&amp;#039;style&amp;#039;])&lt;br /&gt;
    ret[#ret+1] = &amp;#039;&amp;quot;&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;padding: 2px;&amp;quot;&amp;gt;&amp;#039;&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  -- The actual navbox table starts here&lt;br /&gt;
  ret[#ret+1] = &amp;#039;&amp;lt;table cellspacing=&amp;quot;0&amp;quot; class=&amp;quot;nowraplinks&amp;#039;&lt;br /&gt;
  if common.isset(frame.args[&amp;#039;title&amp;#039;]) and frame.args[&amp;#039;state&amp;#039;] ~= &amp;quot;plain&amp;quot; and frame.args[&amp;#039;state&amp;#039;] ~= &amp;quot;off&amp;quot; then&lt;br /&gt;
    --TODO: If there is support for collapsible and autocollapse, swap comments here&lt;br /&gt;
    --ret[#ret+1] = &amp;#039; collapsible &amp;#039;&lt;br /&gt;
    ret[#ret+1] = &amp;#039; mw-collapsible &amp;#039;&lt;br /&gt;
    if common.isset(frame.args[&amp;#039;state&amp;#039;]) then&lt;br /&gt;
      ret[#ret+1] = frame.args[&amp;#039;state&amp;#039;]&lt;br /&gt;
    else&lt;br /&gt;
      --ret[#ret+1] = &amp;#039;autocollapse&amp;#039;&lt;br /&gt;
      ret[#ret+1] = &amp;#039;mw-collapsed&amp;#039;&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  if border == &amp;quot;subgroup&amp;quot; or border == &amp;quot;child&amp;quot; or border == &amp;quot;none&amp;quot; then&lt;br /&gt;
    ret[#ret+1] = &amp;#039; navbox-subgroup&amp;quot; style=&amp;quot;&amp;#039;&lt;br /&gt;
    if common.isset(colors[ttype]) then table.insert(ret, &amp;#039;background:&amp;#039; .. colors[ttype][&amp;#039;background&amp;#039;] .. &amp;#039;;&amp;#039;) end&lt;br /&gt;
    -- ret[#ret+1] = &amp;#039;margin:auto;clear:both;font-size:88%;text-align:center;width:100%;vertical-align:middle;&amp;#039;&lt;br /&gt;
    ret[#ret+1] = &amp;#039;width: 100%;&amp;#039;&lt;br /&gt;
    style.add(ret, frame.args[&amp;#039;bodystyle&amp;#039;])&lt;br /&gt;
    style.add(ret, frame.args[&amp;#039;style&amp;#039;])&lt;br /&gt;
    ret[#ret+1] = &amp;#039;&amp;quot;&amp;gt;&amp;#039;&lt;br /&gt;
  else&lt;br /&gt;
    ret[#ret+1] = &amp;#039;&amp;quot; style=&amp;quot;width:100%;background:transparent;color:inherit;&amp;quot;&amp;gt;&amp;#039;&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  return table.concat(ret)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[ Finalizes the box, based on specified &amp;#039;ttype&amp;#039; and &amp;#039;border&amp;#039; ]]&lt;br /&gt;
local function end_box(frame, border, ttype)&lt;br /&gt;
  local ret = {&amp;quot;&amp;quot;}&lt;br /&gt;
  ret[#ret+1] = &amp;#039;&amp;lt;/table&amp;gt;&amp;#039;&lt;br /&gt;
  if border == &amp;quot;subgroup&amp;quot; or border == &amp;quot;child&amp;quot; then&lt;br /&gt;
    -- open a &amp;lt;div&amp;gt;, since we closed one when starting this child navbox&lt;br /&gt;
    ret[#ret+1] = &amp;#039;&amp;lt;div&amp;gt;&amp;#039;&lt;br /&gt;
  elseif border == &amp;quot;none&amp;quot; then&lt;br /&gt;
    -- nothing to do&lt;br /&gt;
  else&lt;br /&gt;
    -- close the table we started as a frame&lt;br /&gt;
    ret[#ret+1] = &amp;#039;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&amp;#039;&lt;br /&gt;
  end&lt;br /&gt;
  return table.concat(ret)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[ Generates the title row: &amp;#039;v(iew) • d(iscuss) • e(dit)&amp;#039; + title + &amp;#039;[Expand]&amp;#039;/&amp;#039;[Collapse]&amp;#039; buttons. ]]&lt;br /&gt;
local function build_title(frame, border, ttype)&lt;br /&gt;
  local ret = {&amp;quot;&amp;quot;}&lt;br /&gt;
  if not common.isset(frame.args[&amp;#039;title&amp;#039;]) then return &amp;#039;&amp;#039; end&lt;br /&gt;
&lt;br /&gt;
  table.insert(ret, &amp;#039;&amp;lt;tr&amp;gt;&amp;#039;)&lt;br /&gt;
  if common.isset(frame.args[&amp;#039;titlegroup&amp;#039;]) then&lt;br /&gt;
    -- in case that there&amp;#039;s a group for title&lt;br /&gt;
    ret[#ret+1] = &amp;#039;&amp;lt;td class=&amp;quot;navbox-group&amp;quot; style=&amp;quot;&amp;#039;&lt;br /&gt;
    if common.isset(colors[ttype]) then ret[#ret+1] = &amp;#039;background:&amp;#039; .. colors[ttype][&amp;#039;group&amp;#039;] .. &amp;#039;;&amp;#039; end&lt;br /&gt;
    ret[#ret+1] = &amp;#039;padding-left:1em;padding-right:1em;white-space:nowrap;text-align:right;&amp;#039;&lt;br /&gt;
    style.add(ret, frame.args[&amp;#039;basestyle&amp;#039;])&lt;br /&gt;
    style.add(ret, frame.args[&amp;#039;groupstyle&amp;#039;])&lt;br /&gt;
    style.add(ret, frame.args[&amp;#039;titlegroupstyle&amp;#039;])&lt;br /&gt;
    ret[#ret+1] = &amp;#039;&amp;quot;&amp;gt;\n&amp;#039;&lt;br /&gt;
    ret[#ret+1] = frame.args[&amp;#039;titlegroup&amp;#039;]&lt;br /&gt;
    ret[#ret+1] = &amp;#039;&amp;lt;/td&amp;gt;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
    ret[#ret+1] = &amp;#039;&amp;lt;th style=&amp;quot;border-left:2px solid &amp;#039;&lt;br /&gt;
    ret[#ret+1] = common.cv(common.isset(colors[ttype]), colors[ttype][&amp;#039;background&amp;#039;], &amp;#039;#fdfdfd&amp;#039;)&lt;br /&gt;
    ret[#ret+1] = &amp;#039;;width:100%;&amp;#039;&lt;br /&gt;
  else&lt;br /&gt;
    -- no group for title&lt;br /&gt;
    table.insert(ret, &amp;#039;&amp;lt;th style=&amp;quot;&amp;#039;)&lt;br /&gt;
  end&lt;br /&gt;
  if common.isset(colors[ttype]) then ret[#ret+1] = &amp;#039;background:&amp;#039; .. colors[ttype][&amp;#039;title&amp;#039;] .. &amp;#039;;&amp;#039; end&lt;br /&gt;
  ret[#ret+1] = &amp;#039;text-align:center;&amp;#039;&lt;br /&gt;
  style.add(ret, frame.args[&amp;#039;basestyle&amp;#039;])&lt;br /&gt;
  style.add(ret, frame.args[&amp;#039;titlestyle&amp;#039;])&lt;br /&gt;
  ret[#ret+1] = &amp;#039;&amp;quot;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
  -- calculate the colspan for title&lt;br /&gt;
  local cs = 2 -- 2 because each list element with group occupies 2 columns&lt;br /&gt;
  if common.isset(frame.args[&amp;#039;imageleft&amp;#039;]) then cs = cs + 1 end&lt;br /&gt;
  if common.isset(frame.args[&amp;#039;image&amp;#039;]) then cs = cs + 1 end&lt;br /&gt;
  if common.isset(frame.args[&amp;#039;titlegroup&amp;#039;]) then cs = cs - 1 end -- if there was a titlegroup, it occupies one cell already&lt;br /&gt;
  ret[#ret+1] = &amp;#039; colspan = &amp;quot;&amp;#039; .. cs .. &amp;#039;&amp;quot;&amp;#039;&lt;br /&gt;
  ret[#ret+1] = &amp;#039; class=&amp;quot;navbox-title&amp;quot;&amp;gt;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
  -- add navbars and/or padding when needed&lt;br /&gt;
  if frame.args[&amp;#039;navbar&amp;#039;] == &amp;quot;plain&amp;quot; or frame.args[&amp;#039;navbar&amp;#039;] == &amp;quot;off&amp;quot; or border == &amp;quot;subgroup&amp;quot; or border == &amp;quot;child&amp;quot; or border == &amp;quot;none&amp;quot; then&lt;br /&gt;
    if frame.args[&amp;#039;navbar&amp;#039;] == &amp;quot;off&amp;quot; then&lt;br /&gt;
      if frame.args[&amp;#039;state&amp;#039;] == &amp;quot;plain&amp;quot; then ret[#ret+1] = &amp;#039;&amp;lt;div style=&amp;quot;float:right;width:6em;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt;&amp;#039; end&lt;br /&gt;
    else&lt;br /&gt;
      if frame.args[&amp;#039;state&amp;#039;] ~= &amp;quot;plain&amp;quot; then ret[#ret+1] = &amp;#039;&amp;lt;div style=&amp;quot;float:left; width:6em;text-align:left;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt;&amp;#039; end&lt;br /&gt;
    end&lt;br /&gt;
  else&lt;br /&gt;
    if frame.args[&amp;#039;state&amp;#039;] == &amp;quot;plain&amp;quot; then ret[#ret+1] = &amp;#039;&amp;lt;div style=&amp;quot;float:right;width:6em;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt;&amp;#039; end&lt;br /&gt;
&lt;br /&gt;
    ret[#ret+1] = &amp;#039;&amp;lt;div style=&amp;quot;float:left; width:6em;text-align:left;&amp;quot;&amp;gt;&amp;#039;&lt;br /&gt;
    if frame.args[&amp;#039;name&amp;#039;] ~= nil then&lt;br /&gt;
      local args = {}&lt;br /&gt;
      args[#args+1] = frame.args[&amp;#039;name&amp;#039;]&lt;br /&gt;
      args[&amp;#039;mini&amp;#039;] = &amp;#039;1&amp;#039;&lt;br /&gt;
&lt;br /&gt;
      -- TODO: Build the navbar without using external template?&lt;br /&gt;
      local q = {&amp;quot;&amp;quot;}&lt;br /&gt;
      q[#q+1] = &amp;#039;text-align:left;&amp;#039;&lt;br /&gt;
      style.add(q, frame.args[&amp;#039;basestyle&amp;#039;])&lt;br /&gt;
      style.add(q, frame.args[&amp;#039;titlestyle&amp;#039;])&lt;br /&gt;
      q[#q+1] = &amp;#039;border:none;&amp;#039;&lt;br /&gt;
      args[&amp;#039;fontstyle&amp;#039;] = table.concat(q)&lt;br /&gt;
&lt;br /&gt;
      ret[#ret+1] = frame:expandTemplate{title = &amp;#039;Navbar&amp;#039;, args = args}&lt;br /&gt;
    else&lt;br /&gt;
      ret[#ret+1] = &amp;#039;&amp;amp;nbsp;&amp;#039;&lt;br /&gt;
      ret[#ret+1] = &amp;#039;[[Category:Navboxes without name]]&amp;#039;&lt;br /&gt;
    end&lt;br /&gt;
    ret[#ret+1] = &amp;#039;&amp;lt;/div&amp;gt;&amp;#039;&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  -- the title starts here&lt;br /&gt;
  ret[#ret+1] = &amp;#039;&amp;lt;span&amp;#039;&lt;br /&gt;
  if common.isset(frame.args[&amp;#039;titleclass&amp;#039;]) then ret[#ret+1] = &amp;#039; class=&amp;quot;&amp;#039; .. frame.args[&amp;#039;titleclass&amp;#039;] .. &amp;#039;&amp;quot;&amp;#039; end&lt;br /&gt;
  ret[#ret+1] = &amp;#039; style=&amp;quot;font-size:&amp;#039; .. common.cv((border == &amp;quot;subgroup&amp;quot; or border == &amp;quot;child&amp;quot; or border == &amp;quot;none&amp;quot;), &amp;#039;100%&amp;#039;, &amp;#039;110%&amp;#039;) .. &amp;#039;;&amp;quot;&amp;gt;\n&amp;#039;&lt;br /&gt;
&lt;br /&gt;
  ret[#ret+1] = frame.args[&amp;#039;title&amp;#039;]&lt;br /&gt;
  &lt;br /&gt;
  ret[#ret+1] = &amp;#039;&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
  ret[#ret+1] = &amp;#039;&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&amp;#039;&lt;br /&gt;
  return table.concat(ret)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[ Generates the &amp;#039;above&amp;#039; and &amp;#039;below&amp;#039; rows.&lt;br /&gt;
     Returns the generated row and updated &amp;#039;sep&amp;#039; value (if separation is going to be needed). ]]&lt;br /&gt;
local function build_above_below(frame, border, ttype, text, rstyle, sep)&lt;br /&gt;
  local ret = {&amp;#039;&amp;#039;}&lt;br /&gt;
  if common.isset(text) then&lt;br /&gt;
    if sep then -- if separation is needed&lt;br /&gt;
      table.insert(ret, &amp;#039;&amp;lt;tr style=&amp;quot;height: 2px;&amp;quot;&amp;gt;&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;#039;)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- start the &amp;#039;above&amp;#039; or &amp;#039;below&amp;#039; row&lt;br /&gt;
    ret[#ret+1] = &amp;#039;&amp;lt;tr&amp;gt;&amp;#039;&lt;br /&gt;
    ret[#ret+1] = &amp;#039;&amp;lt;td class=&amp;quot;navbox-abovebelow&amp;quot; style=&amp;quot;&amp;#039;&lt;br /&gt;
    if common.isset(colors[ttype]) then&lt;br /&gt;
      -- both above and below share same default color from &amp;#039;colors&amp;#039; table&lt;br /&gt;
      ret[#ret+1] = &amp;#039;background:&amp;#039; .. common.cv((border ~= &amp;quot;subgroup&amp;quot; and border ~= &amp;quot;child&amp;quot;), colors[ttype][&amp;#039;above&amp;#039;], colors[ttype][&amp;#039;group&amp;#039;]) .. &amp;#039;;&amp;#039;&lt;br /&gt;
    end&lt;br /&gt;
    ret[#ret+1] = &amp;#039;padding-left:1em;padding-right:1em;text-align:center;&amp;#039;&lt;br /&gt;
    style.add(ret, frame.args[&amp;#039;basestyle&amp;#039;])&lt;br /&gt;
    style.add(ret, rstyle)&lt;br /&gt;
    ret[#ret+1] = &amp;#039;&amp;quot;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
    -- calculate and add the colspan (always full table width)&lt;br /&gt;
    local cs = 2&lt;br /&gt;
    if common.isset(frame.args[&amp;#039;imageleft&amp;#039;]) then cs = cs + 1 end&lt;br /&gt;
    if common.isset(frame.args[&amp;#039;image&amp;#039;]) then cs = cs + 1 end&lt;br /&gt;
    ret[#ret+1] = &amp;#039; colspan=&amp;quot;&amp;#039; .. cs .. &amp;#039;&amp;quot;&amp;gt;\n&amp;#039;&lt;br /&gt;
&lt;br /&gt;
    -- row content&lt;br /&gt;
    ret[#ret+1] = text&lt;br /&gt;
&lt;br /&gt;
    ret[#ret+1] = &amp;#039;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;#039;&lt;br /&gt;
    sep = true -- now we&amp;#039;re going to need separation&lt;br /&gt;
  end&lt;br /&gt;
  return table.concat(ret),sep&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[ Generates a single row of the list. ]]&lt;br /&gt;
local function build_row(frame, border, ttype, k, group, list, groupstyle, liststyle)&lt;br /&gt;
  local ret = {&amp;quot;&amp;quot;}&lt;br /&gt;
  if common.isset(group) then&lt;br /&gt;
    -- there&amp;#039;s a group name for current list, so add a cell for it&lt;br /&gt;
    ret[#ret+1] = &amp;#039;&amp;lt;td class=&amp;quot;navbox-group&amp;quot; style=&amp;quot;&amp;#039;&lt;br /&gt;
    if common.isset(colors[ttype]) then &lt;br /&gt;
      ret[#ret+1] = &amp;#039;background:&amp;#039; .. common.cv((border ~= &amp;quot;subgroup&amp;quot; and border ~= &amp;quot;child&amp;quot;), colors[ttype][&amp;#039;group&amp;#039;], colors[ttype][&amp;#039;subgroup&amp;#039;]) .. &amp;#039;;&amp;#039;&lt;br /&gt;
    end&lt;br /&gt;
    ret[#ret+1] = &amp;#039;padding-left:1em; padding-right:1em; white-space:nowrap; text-align:right;&amp;#039;&lt;br /&gt;
    style.add(ret, frame.args[&amp;#039;basestyle&amp;#039;])&lt;br /&gt;
    if common.isset(frame.args[&amp;#039;groupwidth&amp;#039;]) then ret[#ret+1] = &amp;#039;width:&amp;#039; .. frame.args[&amp;#039;groupwidth&amp;#039;] .. &amp;#039;;&amp;#039; end&lt;br /&gt;
    style.add(ret, frame.args[&amp;#039;groupstyle&amp;#039;])&lt;br /&gt;
    style.add(ret, groupstyle)&lt;br /&gt;
    ret[#ret+1] = &amp;#039;&amp;quot;&amp;gt;&amp;#039;&lt;br /&gt;
    ret[#ret+1] = &amp;#039;&amp;lt;div style=&amp;quot;padding:0;&amp;quot;&amp;gt;\n&amp;#039;&lt;br /&gt;
    ret[#ret+1] = group&lt;br /&gt;
    ret[#ret+1] = &amp;#039;&amp;lt;/div&amp;gt;&amp;lt;/td&amp;gt;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
    -- start the content cell&lt;br /&gt;
    ret[#ret+1] = &amp;#039;&amp;lt;td style=&amp;quot;text-align:left;border-left-width:2px;border-left-style:solid;&amp;#039;&lt;br /&gt;
  else&lt;br /&gt;
    -- no group name, start the content already&lt;br /&gt;
    ret[#ret+1] = &amp;#039;&amp;lt;td colspan=2 style=&amp;quot;&amp;#039;&lt;br /&gt;
  end&lt;br /&gt;
  -- a bit tricky, but this works as XOR&lt;br /&gt;
  if (frame.args[&amp;#039;evenodd&amp;#039;] == &amp;quot;swap&amp;quot;) ~= ((k % 2) == 0) then&lt;br /&gt;
    if common.isset(colors[ttype]) then ret[#ret+1] = &amp;#039;background:&amp;#039; .. colors[ttype][&amp;#039;dark&amp;#039;] .. &amp;#039;;&amp;#039; end&lt;br /&gt;
  else&lt;br /&gt;
    ret[#ret+1] = &amp;#039;background:transparent;&amp;#039;&lt;br /&gt;
  end&lt;br /&gt;
  if not common.isset(frame.args[&amp;#039;groupwidth&amp;#039;]) then ret[#ret+1] = &amp;#039;width:100%;&amp;#039; end&lt;br /&gt;
  ret[#ret+1] = &amp;#039;padding: 0;&amp;#039;&lt;br /&gt;
  style.add(ret, frame.args[&amp;#039;liststyle&amp;#039;])&lt;br /&gt;
  style.add(ret, common.cv((frame.args[&amp;#039;evenodd&amp;#039;] == &amp;quot;swap&amp;quot;) ~= ((k % 2) == 0), frame.args[&amp;#039;evenstyle&amp;#039;], frame.args[&amp;#039;oddstyle&amp;#039;]))&lt;br /&gt;
  style.add(ret, liststyle)&lt;br /&gt;
  ret[#ret+1] = &amp;#039;&amp;quot; class=&amp;quot;navbox-list &amp;#039; .. common.cv((frame.args[&amp;#039;evenodd&amp;#039;] == &amp;quot;swap&amp;quot;) ~= ((k % 2) == 0), &amp;#039;navbox-even&amp;#039;, &amp;#039;navbox-odd&amp;#039;) .. &amp;#039;&amp;quot;&amp;gt;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
  -- add the &amp;lt;div&amp;gt; with content (same &amp;lt;div&amp;gt; that child navbox has to close when starting table)&lt;br /&gt;
  ret[#ret+1] = &amp;#039;&amp;lt;div style=&amp;quot;padding:&amp;#039;&lt;br /&gt;
  if common.isset(frame.args[&amp;#039;list&amp;#039; .. k .. &amp;#039;padding&amp;#039;]) then&lt;br /&gt;
    ret[#ret+1] = frame.args[&amp;#039;list&amp;#039; .. k .. &amp;#039;padding&amp;#039;]&lt;br /&gt;
  elseif common.isset(frame.args[&amp;#039;listpadding&amp;#039;]) then&lt;br /&gt;
    ret[#ret+1] = frame.args[&amp;#039;listpadding&amp;#039;]&lt;br /&gt;
  else&lt;br /&gt;
    ret[#ret+1] = &amp;#039;0em 0.25em&amp;#039;&lt;br /&gt;
  end&lt;br /&gt;
  ret[#ret+1] = &amp;#039;;&amp;quot;&amp;gt;\n&amp;#039;&lt;br /&gt;
  ret[#ret+1] = list&lt;br /&gt;
  ret[#ret+1] = &amp;#039;&amp;lt;/div&amp;gt;&amp;lt;/td&amp;gt;&amp;#039;&lt;br /&gt;
  return table.concat(ret)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[ Generates the &amp;quot;body&amp;quot; of table (everything below title) ]]&lt;br /&gt;
local function build_body(frame, border, ttype, lists)&lt;br /&gt;
  local ret = {}&lt;br /&gt;
  local sep = common.isset(frame.args[&amp;#039;title&amp;#039;]) -- if there was a title, we have to add separation for first row&lt;br /&gt;
  local imgs = true -- add images if present&lt;br /&gt;
  local irows = common.cv( (#lists &amp;gt; 0), (2 * #lists - 1), 1 )&lt;br /&gt;
&lt;br /&gt;
  -- aff the &amp;#039;above&amp;#039; row&lt;br /&gt;
  ret[#ret+1],sep = build_above_below(frame, border, ttype, frame.args[&amp;#039;above&amp;#039;], frame.args[&amp;#039;abovestyle&amp;#039;], sep)&lt;br /&gt;
  &lt;br /&gt;
  for k,v in pairs(lists) do&lt;br /&gt;
    if sep then -- add separation if needed&lt;br /&gt;
      ret[#ret+1] = &amp;#039;&amp;lt;tr style=&amp;quot;height: 2px;&amp;quot;&amp;gt;&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;#039;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    table.insert(ret, &amp;#039;&amp;lt;tr&amp;gt;&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
    -- add left image (if wasn&amp;#039;t added yet and is present)&lt;br /&gt;
    if imgs then&lt;br /&gt;
      if common.isset(frame.args[&amp;#039;imageleft&amp;#039;]) then&lt;br /&gt;
        ret[#ret+1] = &amp;#039;&amp;lt;td style=&amp;quot;width:0%;padding:0px 2px 0px 0px;&amp;#039;&lt;br /&gt;
        style.add(ret, frame.args[&amp;#039;imageleftstyle&amp;#039;])&lt;br /&gt;
        ret[#ret+1] = &amp;#039;&amp;quot; rowspan=&amp;quot;&amp;#039; .. irows .. &amp;#039;&amp;quot;&amp;gt;&amp;#039; .. frame.args[&amp;#039;imageleft&amp;#039;] .. &amp;#039;&amp;lt;/td&amp;gt;&amp;#039;&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- add the list content&lt;br /&gt;
    ret[#ret+1] = build_row(frame, border, ttype, v[&amp;#039;index&amp;#039;], v[&amp;#039;group&amp;#039;], v[&amp;#039;list&amp;#039;], v[&amp;#039;groupstyle&amp;#039;], v[&amp;#039;liststyle&amp;#039;])&lt;br /&gt;
&lt;br /&gt;
    -- add right image (if wasn&amp;#039;t added yet and is present)&lt;br /&gt;
    if imgs then&lt;br /&gt;
      if common.isset(frame.args[&amp;#039;image&amp;#039;]) then&lt;br /&gt;
        ret[#ret+1] = &amp;#039;&amp;lt;td style=&amp;quot;width:0%;padding:0px 0px 0px 2px;&amp;#039;&lt;br /&gt;
        style.add(ret, frame.args[&amp;#039;imagestyle&amp;#039;])&lt;br /&gt;
        ret[#ret+1] = &amp;#039;&amp;quot; rowspan=&amp;quot;&amp;#039; .. irows .. &amp;#039;&amp;quot;&amp;gt;&amp;#039; .. frame.args[&amp;#039;image&amp;#039;] .. &amp;#039;&amp;lt;/td&amp;gt;&amp;#039;&lt;br /&gt;
      end&lt;br /&gt;
&lt;br /&gt;
      -- mark that images were added already&lt;br /&gt;
      imgs = false&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    ret[#ret+1] = &amp;#039;&amp;lt;/tr&amp;gt;&amp;#039;&lt;br /&gt;
    sep = true -- now the separation is going to be needed for sure&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  ret[#ret+1],sep = build_above_below(frame, border, ttype, frame.args[&amp;#039;below&amp;#039;], frame.args[&amp;#039;belowstyle&amp;#039;], sep)&lt;br /&gt;
&lt;br /&gt;
  return table.concat(ret)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- == Exported functions ==&lt;br /&gt;
--[[ Generates and returns the whole navbox table. ]]&lt;br /&gt;
local function buildNavbox(frame)&lt;br /&gt;
  local template = {}&lt;br /&gt;
  local border = &amp;quot;&amp;quot;&lt;br /&gt;
  local ttype = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  if common.isset(frame.args[&amp;#039;border&amp;#039;]) then&lt;br /&gt;
    border = frame.args[&amp;#039;border&amp;#039;]&lt;br /&gt;
  elseif common.isset(frame.args[1]) then&lt;br /&gt;
    border = mw.text.trim(frame.args[1])&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  if common.isset(frame.args[&amp;#039;type&amp;#039;]) then&lt;br /&gt;
    ttype = frame.args[&amp;#039;type&amp;#039;]&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  -- TODO: filtering of border and type values?&lt;br /&gt;
&lt;br /&gt;
  -- prepare the data first&lt;br /&gt;
  local lists = scan_lists(frame)&lt;br /&gt;
&lt;br /&gt;
  -- build the content  &lt;br /&gt;
  template[#template+1] = start_box(frame, border, ttype)&lt;br /&gt;
  template[#template+1] = build_title(frame, border, ttype)&lt;br /&gt;
  template[#template+1] = build_body(frame, border, ttype, lists)&lt;br /&gt;
  template[#template+1] = end_box(frame, border, ttype)&lt;br /&gt;
&lt;br /&gt;
  return table.concat(template)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- [[ Workaround for the &amp;quot;Navbox subgroup&amp;quot; template ]]&lt;br /&gt;
local function buildNavboxSubgroup(frame)&lt;br /&gt;
  if not common.isset(frame.args[&amp;#039;border&amp;#039;]) then frame.args[&amp;#039;border&amp;#039;] = &amp;#039;child&amp;#039; end&lt;br /&gt;
&lt;br /&gt;
  -- TODO: add/modify/remove other params?&lt;br /&gt;
&lt;br /&gt;
  -- call the main function&lt;br /&gt;
  return buildNavbox(frame)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[ Mostly for debugging, generates and returns a table of sets of colors&lt;br /&gt;
     and the values in cells with colors used as backgrounds. ]]&lt;br /&gt;
local function buildColorTable(frame)&lt;br /&gt;
  local ret = {&amp;quot;&amp;quot;}&lt;br /&gt;
  table.insert(ret, &amp;#039;&amp;lt;table class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot;&amp;gt;&amp;#039;)&lt;br /&gt;
  table.insert(ret, &amp;#039;&amp;lt;caption&amp;gt;List of colors in order from darkest to brigthest one&amp;lt;/caption&amp;gt;&amp;#039;)&lt;br /&gt;
  table.insert(ret, &amp;#039;&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;&amp;quot;type&amp;quot;&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;title&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;above, below&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;group,&amp;lt;br/&amp;gt;sub-above/below&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;sub-group&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;dark background&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;background&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&amp;#039;)&lt;br /&gt;
  for k,v in pairs(colors) do&lt;br /&gt;
    table.insert(ret, &amp;#039;&amp;lt;tr&amp;gt;&amp;#039;)&lt;br /&gt;
    table.insert(ret, &amp;#039;&amp;lt;td&amp;gt;&amp;#039; .. k .. &amp;#039;&amp;lt;/td&amp;gt;&amp;#039;)&lt;br /&gt;
    table.insert(ret, &amp;#039;&amp;lt;td style=&amp;quot;background:&amp;#039; .. v[&amp;#039;title&amp;#039;] .. &amp;#039;&amp;quot;&amp;gt;&amp;#039; .. v[&amp;#039;title&amp;#039;] .. &amp;#039;&amp;lt;/td&amp;gt;&amp;#039;)&lt;br /&gt;
    table.insert(ret, &amp;#039;&amp;lt;td style=&amp;quot;background:&amp;#039; .. v[&amp;#039;above&amp;#039;] .. &amp;#039;&amp;quot;&amp;gt;&amp;#039; .. v[&amp;#039;above&amp;#039;] .. &amp;#039;&amp;lt;/td&amp;gt;&amp;#039;)&lt;br /&gt;
    table.insert(ret, &amp;#039;&amp;lt;td style=&amp;quot;background:&amp;#039; .. v[&amp;#039;group&amp;#039;] .. &amp;#039;&amp;quot;&amp;gt;&amp;#039; .. v[&amp;#039;group&amp;#039;] .. &amp;#039;&amp;lt;/td&amp;gt;&amp;#039;)&lt;br /&gt;
    table.insert(ret, &amp;#039;&amp;lt;td style=&amp;quot;background:&amp;#039; .. v[&amp;#039;subgroup&amp;#039;] .. &amp;#039;&amp;quot;&amp;gt;&amp;#039; .. v[&amp;#039;subgroup&amp;#039;] .. &amp;#039;&amp;lt;/td&amp;gt;&amp;#039;)&lt;br /&gt;
    table.insert(ret, &amp;#039;&amp;lt;td style=&amp;quot;background:&amp;#039; .. v[&amp;#039;dark&amp;#039;] .. &amp;#039;&amp;quot;&amp;gt;&amp;#039; .. v[&amp;#039;dark&amp;#039;] .. &amp;#039;&amp;lt;/td&amp;gt;&amp;#039;)&lt;br /&gt;
    table.insert(ret, &amp;#039;&amp;lt;td style=&amp;quot;background:&amp;#039; .. v[&amp;#039;background&amp;#039;] .. &amp;#039;&amp;quot;&amp;gt;&amp;#039; .. v[&amp;#039;background&amp;#039;] .. &amp;#039;&amp;lt;/td&amp;gt;&amp;#039;)&lt;br /&gt;
    table.insert(ret, &amp;#039;&amp;lt;/tr&amp;gt;&amp;#039;)&lt;br /&gt;
  end&lt;br /&gt;
  table.insert(ret, &amp;#039;&amp;lt;/table&amp;gt;&amp;#039;)&lt;br /&gt;
  return table.concat(ret)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- export local functions&lt;br /&gt;
return {&lt;br /&gt;
  [&amp;#039;buildNavbox&amp;#039;] = buildNavbox,&lt;br /&gt;
  [&amp;#039;buildNavboxTemplate&amp;#039;] = function(frame) return buildNavbox(frame:getParent()) end, -- for wrappers&lt;br /&gt;
  [&amp;#039;buildNavboxSubgroup&amp;#039;] = buildNavboxSubgroup,&lt;br /&gt;
  [&amp;#039;buildNavboxSubgroupTemplate&amp;#039;] = function(frame) return buildNavboxSubgroup(frame:getParent()) end, -- for wrappers&lt;br /&gt;
  [&amp;#039;buildColorTable&amp;#039;] = buildColorTable&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- [[Category:Lua Scripts|{{PAGENAME}}]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Satorioshi</name></author>
	</entry>
</feed>