Шаблон:Флагификация/Вьетнам: различия между версиями

Материал из Энциклопедия автомобильных номеров мира
Перейти к навигации Перейти к поиску
(Новая страница: «Test»)
(Новая страница: «Test»)
Строка 1: Строка 1:
<!--
--
-- This module will implement {{Navbox}}
--
local p = {}
local HtmlBuilder = require('Module:HtmlBuilder')
local Navbar = require('Module:Navbar')


-->{{#switch:{{{border|{{{1|}}}}}}|subgroup|child=</div>|none=|#default=<table class="navbox {{{bodyclass|}}}" cellspacing="0" <!--
local args
  -->style="border: 1px solid #aaa; width: 100%; margin: auto; clear: both; font-size: 88%; text-align: center; padding: 1px; background: #fdfdfd;{{{bodystyle|}}};{{{style|}}}"><tr><td style="padding:2px;">}}<!--
local frame
local tableRowAdded = false
local border
local listnums = {}
   
function trim(s)
    return (mw.ustring.gsub(s, "^%s*(.-)%s*$", "%1"))
end


--><table cellspacing="0" class="nowraplinks {{#if:{{{title|}}}|{{#switch:{{{state|}}}|plain|off=|<!--
function addTableRow(tbl)
-->#default=collapsible {{#if:{{{state|}}}|{{{state}}}|autocollapse}}}}}} {{#switch:{{{border|{{{1|}}}}}}|<!--
    -- If any other rows have already been added, then we add a 2px gutter row.
-->subgroup|child|none=" style="background: #fdfdfd; width:100%;{{{bodystyle|}}};{{{style|}}}|<!--
    if tableRowAdded then
-->#default=" style="width:100%;background:transparent;color:inherit}};{{{innerstyle|}}};"><!--
        tbl
            .tag('tr')
                .css('height', '2px')
                .tag('td')
    end
   
    tableRowAdded = true
   
    return tbl.tag('tr')
end




---Title and Navbar---
--
-->{{#if:{{{title|}}}|<tr>{{#if:{{{titlegroup|}}}|<!--
--   Title row
--><td style="white-space: nowrap; text-align: right; font-weight: bold; padding-left: 1em; padding-right: 1em; background: #ddddff;{{{basestyle|}}};{{{groupstyle|}}};{{{titlegroupstyle|}}}">{{{titlegroup|}}}</td><!--
--
--><th style="text-align:center; padding-left:1em; padding-right:1em; background:#ccccff; border-left:2px solid #fdfdfd; width:100%;|<th style="text-align:center; padding-left:1em; padding-right:1em;background:#ccccff;}}{{{basestyle|}}};{{{titlestyle|}}};{{#switch:{{{border|{{{1|}}}}}}|subgroup=background:#ddddff;{{{basestyle|}}};{{{titlestyle|}}} |child=background:#ddddff;{{{basestyle|}}};{{{titlestyle|}}} |none=background:#ddddff;{{{basestyle|}}};{{{titlestyle|}}}}}" <!--
function renderTitleRow(tbl)
-->colspan={{#expr:2{{#if:{{{imageleft|}}}|+1}}{{#if:{{{image|}}}|+1}}{{#if:{{{titlegroup|}}}|-1}}}}<!--
    if not args.title then return end
  -->> <!--
    local titleRow = addTableRow(tbl)
   
    if args.titlegroup then
        titleRow
            .tag('th')
                .attr('scope', 'row')
                .addClass('navbox-group')
                .addClass(args.titlegroupclass)
                .cssText(args.basestyle)
                .cssText(args.groupstyle)
                .cssText(args.titlegroupstyle)
                .wikitext(args.titlegroup)
    end
   
    local titleCell = titleRow.tag('th').attr('scope', 'col')
           
    if args.titlegroup then
        titleCell
            .css('border-left', '2px solid #fdfdfd')
            .css('width', '100%')
    end
   
    local titleColspan = 2
    if args.imageleft then titleColspan = titleColspan + 1 end
    if args.image then titleColspan = titleColspan + 1 end
    if args.titlegroup then titleColspan = titleColspan - 1 end
   
    titleCell
        .cssText(args.basestyle)
        .cssText(args.titlestyle)
        .addClass('navbox-title')
        .attr('colspan', titleColspan)
    renderNavBar(titleCell)
   
    titleCell
        .tag('div')
            .addClass(args.titleclass)
            .css('font-size', '110%')
            .newline()
            .wikitext(args.title)
end


-->{{#if:{{#switch:{{{navbar|}}}|plain|off=1}}<!--
function renderNavBar(titleCell)
-->{{#if:{{{name|}}}||{{#switch:{{{border|{{{1|}}}}}}|subgroup|child|none=1}}}}|<!--
    -- Depending on the presence of the navbar and/or show/hide link, we may need to add a spacer div on the left
-->{{#ifeq:{{{navbar|}}}|off|{{#ifeq:{{{state|}}}|plain|<div style="float:right;width:3.5em;">&nbsp;</div>}}|<!--
    -- or right to keep the title centered.
-->{{#ifeq:{{{state|}}}|plain||<div style="float:left; width:3.5em;text-align:left;">&nbsp;</div>}}}}|<!--
    local spacerSide = nil
--><div style="float:left; width:3.5em;text-align:left;"><!--
-->{{Tnavbar (beta)|{{{name}}}|fontstyle={{{basestyle|}}};{{{titlestyle|}}};border:none;|mini=1}}<!--
--></div>{{#ifeq:{{{state|}}}|plain|<div style="float:right;width:3.5em;">&nbsp;</div>}}}}<!--


--><span class="{{{titleclass|}}}" style="font-size:{{#switch:{{{border|{{{1|}}}}}}|subgroup|child|none=100|#default=110}}%;"><!--
    if args.navbar == 'off' then
-->{{{title}}}</span></th></tr>}}<!--
        -- No navbar, and client wants no spacer, i.e. wants the title to be shifted to the left. If there's
        -- also no show/hide link, then we need a spacer on the right to achieve the left shift.
        if args.state == 'plain' then spacerSide = 'right' end
    elseif args.navbar == 'plain' or args.navbar == 'off' or (not args.name and (border == 'subgroup' or border == 'child' or border == 'none')) then
        -- No navbar. Need a spacer on the left to balance out the width of the show/hide link.
        if args.state ~= 'plain' then spacerSide = 'left' end
    else
        -- Will render navbar (or error message). If there's no show/hide link, need a spacer on the right
        -- to balance out the width of the navbar.
        if args.state == 'plain' then spacerSide = 'right' end


        titleCell.wikitext(Navbar.navbar({
            args.name,
            mini = 1,
            fontstyle = (args.basestyle or '') .. ';' .. (args.titlestyle or '') ..  ';background:none transparent;border:none;'
        }))
    end
   
    -- Render the spacer div.
    if spacerSide then
        titleCell
            .tag('span')
                .css('float', spacerSide)
                .css('width', '6em')
                .wikitext('&nbsp;')
    end
end




---Above---
--
-->{{#if:{{{above|}}}|<!--
-Above/Below rows
  -->{{#if:{{{title|}}}|<tr style="height:2px;"><td></td></tr>}}<!--
--
--><tr><td style="background:{{#switch:{{{border|{{{1|}}}}}} |subgroup=#e6e6ff; |child=#e6e6ff; |none=#e6e6ff; |#default=#ddddff;}} padding-left:1em; padding-right:1em; text-align:center; {{{basestyle|}}}; {{{abovestyle|}}}" <!--
function renderAboveRow(tbl)
-->colspan="{{#expr:2{{#if:{{{imageleft|}}}|+1}}{{#if:{{{image|}}}|+1}}}}">{{{above}}}</td></tr>}}<!--
    if not args.above then return end
   
    addTableRow(tbl)
        .tag('td')
            .addClass('navbox-abovebelow')
            .addClass(args.aboveclass)
            .cssText(args.basestyle)
            .cssText(args.abovestyle)
            .attr('colspan', getAboveBelowColspan())
            .tag('div')
                .newline()
                .wikitext(args.above)
end


function renderBelowRow(tbl)
    if not args.below then return end
   
    addTableRow(tbl)
        .tag('td')
            .addClass('navbox-abovebelow')
            .addClass(args.belowclass)
            .cssText(args.basestyle)
            .cssText(args.belowstyle)
            .attr('colspan', getAboveBelowColspan())
            .tag('div')
                .newline()
                .wikitext(args.below)
end


function getAboveBelowColspan()
    local ret = 2
    if args.imageleft then ret = ret + 1 end
    if args.image then ret = ret + 1 end
    return ret
end
--
--  List rows
--
function renderListRow(tbl, listnum)
    local row = addTableRow(tbl)
   
    if listnum == 1 and args.imageleft then
        row
            .tag('td')
                .addClass('navbox-image')
                .addClass(args.imageclass)
                .css('width', '0%')
                .css('padding', '0px 2px 0px 0px')
                .cssText(args.imageleftstyle)
                .attr('rowspan', 2 * #listnums - 1)
                .tag('div')
                    .newline()
                    .wikitext(args.imageleft)
    end
    if args['group' .. listnum] then
        local groupCell = row.tag('th')
       
        groupCell
              .attr('scope', 'row')
              .addClass('navbox-group')
              .addClass(args.groupclass)
              .cssText(args.basestyle)
             
        if args.groupwidth then
            groupCell.css('width', args.groupwidth)
        end
         
        groupCell
            .cssText(args.groupstyle)
            .cssText(args['group' .. listnum .. 'style'])
            .wikitext(args['group' .. listnum])
    end
   
    local listCell = row.tag('td')


---Body---
    if args['group' .. listnum] then
        listCell
            .css('text-align', 'left')
            .css('border-left-width', '2px')
            .css('border-left-style', 'solid')
    else
        listCell.attr('colspan', 2)
    end
   
    if not args.groupwidth then
        listCell.css('width', '100%')
    end
   
    local isOdd = (listnum % 2) == 1
    local rowstyle = args.evenstyle
    if isOdd then rowstyle = args.oddstyle end
    local evenOdd
    if args.evenodd == 'swap' then
        if isOdd then evenOdd = 'even' else evenOdd = 'odd' end
    else
        if isOdd then evenOdd = args.evenodd or 'odd' else evenOdd = args.evenodd or 'even' end
    end
   
    listCell
        .css('padding', '0px')
        .cssText(args.liststyle)
        .cssText(rowstyle)
        .cssText(args['list' .. listnum .. 'style'])
        .addClass('navbox-list')
        .addClass('navbox-' .. evenOdd)
        .addClass(args.listclass)
        .tag('div')
            .css('padding', (listnum == 1 and args.list1padding) or args.listpadding or '0em 0.25em')
            .newline()
            .wikitext(args['list' .. listnum])


---First group/list and images---
    if listnum == 1 and args.image then
-->{{#if:{{{list1|}}}|{{#if:{{{title|}}}{{{above|}}}|<tr style="height:2px;"><td></td></tr>}}<tr><!--
        row
            .tag('td')
                .addClass('navbox-image')
                .addClass(args.imageclass)
                .css('width', '0%')
                .css('padding', '0px 0px 0px 2px')
                .cssText(args.imagestyle)
                .attr('rowspan', 2 * #listnums - 1)
                .tag('div')
                    .newline()
                    .wikitext(args.image)
    end
end


-->{{#if:{{{imageleft|}}}|<!--
--><td style="width:0%;padding:0px 2px 0px 0px;{{{imageleftstyle|}}}" <!--
-->rowspan={{#expr:1{{#if:{{{list2|}}}|+2}}{{#if:{{{list3|}}}|+2}}{{#if:{{{list4|}}}|+2}}<!--
-->{{#if:{{{list5|}}}|+2}}{{#if:{{{list6|}}}|+2}}{{#if:{{{list7|}}}|+2}}{{#if:{{{list8|}}}|+2}}<!--
-->{{#if:{{{list9|}}}|+2}}{{#if:{{{list10|}}}|+2}}{{#if:{{{list11|}}}|+2}}{{#if:{{{list12|}}}|+2}}<!--
-->{{#if:{{{list13|}}}|+2}}{{#if:{{{list14|}}}|+2}}{{#if:{{{list15|}}}|+2}}{{#if:{{{list16|}}}|+2}}<!--
-->{{#if:{{{list17|}}}|+2}}{{#if:{{{list18|}}}|+2}}{{#if:{{{list19|}}}|+2}}{{#if:{{{list20|}}}|+2}}}}><!--
-->{{{imageleft}}}</td>}}<!--


-->{{#if:{{{group1|}}}|<td style="white-space: nowrap; text-align: right; font-weight: bold; padding-left: 1em; padding-right: 1em; background: {{#switch:{{{border|{{{1|}}}}}} |subgroup=#e6e6ff; |child=#e6e6ff; |none=#e6e6ff; |#default=#ddddff;}} {{{basestyle|}}};{{#if:{{{groupwidth|}}}|width:{{{groupwidth}}};}}{{{groupstyle|}}};{{{group1style|}}}"><!--
--
-->{{{group1}}}</td><td style="text-align:left;border-left-width:2px;border-left-style:solid;|<td colspan=2 style="}}<!--
--   Tracking categories
-->{{#if:{{{groupwidth|}}}||width:100%;}}padding:0px;{{#ifeq:{{{evenodd|}}}|swap|background: #F0F0F0;|{{{evenodd|background: transparent;}}}}};{{{liststyle|}}};{{{oddstyle|}}};{{{list1style|}}}; <!--
--
-->border-color: #fdfdfd;"><!--
function renderTrackingCategories(builder)
--><div style="padding:{{{list1padding|{{{listpadding|0em 0.25em}}}}}}">
    local frame = mw.getCurrentFrame()
{{{list1}}}</div></td><!--
   
    if not frame then return end
   
    local s = frame:preprocess('{{#ifeq:{{NAMESPACE}}|{{ns:10}}|1|0}}{{SUBPAGENAME}}')
    if mw.ustring.sub(s, 1, 1) == '0' then return end -- not in template space
    local subpage = mw.ustring.lower(mw.ustring.sub(s, 2))
    if subpage == 'doc' or subpage == 'sandbox' or subpage == 'testcases' then return end
   
    for i, cat in ipairs(getTrackingCategories()) do
        builder.wikitext('[[Category:' .. cat .. ']]')
    end
end


-->{{#if:{{{image|}}}|<!--
function getTrackingCategories()
--><td style="width:0%;padding:0px 0px 0px 2px;{{{imagestyle|}}}" <!--
    local cats = {}
-->rowspan={{#expr:1{{#if:{{{list2|}}}|+2}}{{#if:{{{list3|}}}|+2}}{{#if:{{{list4|}}}|+2}}<!--
    if needsHorizontalLists() then table.insert(cats, 'Navigational boxes without horizontal lists') end
-->{{#if:{{{list5|}}}|+2}}{{#if:{{{list6|}}}|+2}}{{#if:{{{list7|}}}|+2}}{{#if:{{{list8|}}}|+2}}<!--
    if hasBackgroundColors() then table.insert(cats, 'Navboxes using background colours') end
-->{{#if:{{{list9|}}}|+2}}{{#if:{{{list10|}}}|+2}}{{#if:{{{list11|}}}|+2}}{{#if:{{{list12|}}}|+2}}<!--
    return cats
-->{{#if:{{{list13|}}}|+2}}{{#if:{{{list14|}}}|+2}}{{#if:{{{list15|}}}|+2}}{{#if:{{{list16|}}}|+2}}<!--
end
-->{{#if:{{{list17|}}}|+2}}{{#if:{{{list18|}}}|+2}}{{#if:{{{list19|}}}|+2}}{{#if:{{{list20|}}}|+2}}}}><!--
-->{{{image}}}</td>}}<!--


--></tr>}}<!--
function needsHorizontalLists()
    if border == 'child' or border == 'subgroup'  or args.tracking == 'no' then return false end
   
    local listClasses = {'plainlist', 'hlist', 'hlist hnum', 'hlist vcard', 'vcard hlist'}
    for i, cls in ipairs(listClasses) do
        if args.listclass == cls or args.bodyclass == cls then
            return false
        end
    end


    return true
end


function hasBackgroundColors()
    return args.titlestyle or args.groupstyle
end


---Remaining groups/lists---


-->{{#if:{{{list2|}}}|<!--
--
-->{{#if:{{{title|}}}{{{above|}}}{{{list1|}}}|<tr style="height:2px"><td></td></tr>}}<tr><!--
--   Main navbox tables
  -->{{#if:{{{group2|}}}|<td style="white-space: nowrap; text-align: right; font-weight: bold; padding-left: 1em; padding-right: 1em; background: {{#switch:{{{border|{{{1|}}}}}} |subgroup=#e6e6ff; |child=#e6e6ff; |none=#e6e6ff; |#default=#ddddff;}} {{{basestyle|}}};{{#if:{{{groupwidth|}}}|width:{{{groupwidth}}};}}{{{groupstyle|}}};{{{group2style|}}}"><!--
--
-->{{{group2}}}</td><td style="text-align:left;border-left-width:2px;border-left-style:solid;|<td colspan=2 style="}}<!--
function renderMainTable()
-->{{#if:{{{groupwidth|}}}||width:100%;}}padding:0px;{{#ifeq:{{{evenodd|}}}|swap|background: transparent;|{{{evenodd|background: #F0F0F0;}}}}};{{{liststyle|}}};{{{evenstyle|}}};{{{list2style|}}}; <!--
    local tbl = HtmlBuilder.create('table')
-->border-color: #fdfdfd;"><!--
        .attr('cellspacing', 0)
  --><div style="padding:{{{listpadding|0em 0.25em}}}">
        .addClass('nowraplinks')
{{{list2}}}</div></td></tr>}}<!--
        .addClass(args.bodyclass)
           
    if args.title and (args.state ~= 'plain' and args.state ~= 'off') then
        tbl
            .addClass('collapsible')
            .addClass(args.state or 'autocollapse')
    end
   
    tbl.css('border-spacing', 0)
    if border == 'subgroup' or border == 'child' or border == 'none' then
        tbl
            .addClass('navbox-subgroup')
            .cssText(args.bodystyle)
            .cssText(args.style)
    else -- regular navobx - bodystyle and style will be applied to the wrapper table
        tbl
            .addClass('navbox-inner')
            .css('background', 'transparent')
            .css('color', 'inherit')
    end
    tbl.cssText(args.innerstyle)
   
    renderTitleRow(tbl)
    renderAboveRow(tbl)
    for i, listnum in ipairs(listnums) do
        renderListRow(tbl, listnum)
    end
    renderBelowRow(tbl)
   
    return tbl
end


-->{{#if:{{{list3|}}}|<!--
function p._navbox(navboxArgs)
-->{{#if:{{{title|}}}{{{above|}}}{{{list1|}}}{{{list2|}}}|<tr style="height:2px"><td></td></tr>}}<tr><!--
    args = navboxArgs
-->{{#if:{{{group3|}}}|<td style="white-space: nowrap; text-align: right; font-weight: bold; padding-left: 1em; padding-right: 1em; background: {{#switch:{{{border|{{{1|}}}}}} |subgroup=#e6e6ff; |child=#e6e6ff; |none=#e6e6ff; |#default=#ddddff;}} {{{basestyle|}}};{{#if:{{{groupwidth|}}}|width:{{{groupwidth}}};}}{{{groupstyle|}}};{{{group3style|}}}"><!--
   
-->{{{group3}}}</td><td style="text-align:left;border-left-width:2px;border-left-style:solid;|<td colspan=2 style="}}<!--
    for k, v in pairs(args) do
  -->{{#if:{{{groupwidth|}}}||width:100%;}}padding:0px;{{#ifeq:{{{evenodd|}}}|swap|background: #F0F0F0;|{{{evenodd|background: transparent;}}}}};{{{liststyle|}}};{{{oddstyle|}}};{{{list3style|}}}; <!--
        local listnum = ('' .. k):match('^list(%d+)$')
-->border-color: #fdfdfd;"><!--
        if listnum then table.insert(listnums, tonumber(listnum)) end
--><div style="padding:{{{listpadding|0em 0.25em}}}">
    end
{{{list3}}}</div></td></tr>}}<!--
    table.sort(listnums)
   
    border = trim(args.border or args[1] or '')


-->{{#if:{{{list4|}}}|<!--
    -- render the main body of the navbox
--><tr style="height:2px"><td></td></tr><tr><!--
    local tbl = renderMainTable()
-->{{#if:{{{group4|}}}|<td style="white-space: nowrap; text-align: right; font-weight: bold; padding-left: 1em; padding-right: 1em; background: {{#switch:{{{border|{{{1|}}}}}} |subgroup=#e6e6ff; |child=#e6e6ff; |none=#e6e6ff; |#default=#ddddff;}} {{{basestyle|}}};{{#if:{{{groupwidth|}}}|width:{{{groupwidth}}};}}{{{groupstyle|}}};{{{group4style|}}}"><!--
-->{{{group4}}}</td><td style="text-align:left;border-left-width:2px;border-left-style:solid;|<td colspan=2 style="}}<!--
-->{{#if:{{{groupwidth|}}}||width:100%;}}padding:0px;{{#ifeq:{{{evenodd|}}}|swap|background: transparent;|{{{evenodd|background: #F0F0F0;}}}}};{{{liststyle|}}};{{{evenstyle|}}};{{{list4style|}}}; <!--
-->border-color: #fdfdfd;"><!--
--><div style="padding:{{{listpadding|0em 0.25em}}}">
{{{list4}}}</div></td></tr>}}<!--


-->{{#if:{{{list5|}}}|<!--
    -- render the appropriate wrapper around the navbox, depending on the border param
--><tr style="height:2px"><td></td></tr><tr><!--
    local res = HtmlBuilder.create()
-->{{#if:{{{group5|}}}|<td style="white-space: nowrap; text-align: right; font-weight: bold; padding-left: 1em; padding-right: 1em; background: {{#switch:{{{border|{{{1|}}}}}} |subgroup=#e6e6ff; |child=#e6e6ff; |none=#e6e6ff; |#default=#ddddff;}} {{{basestyle|}}};{{#if:{{{groupwidth|}}}|width:{{{groupwidth}}};}}{{{groupstyle|}}};{{{group5style|}}}"><!--
    if border == 'none' then
-->{{{group5}}}</td><td style="text-align:left;border-left-width:2px;border-left-style:solid;|<td colspan=2 style="}}<!--
        res.node(tbl)
-->{{#if:{{{groupwidth|}}}||width:100%;}}padding:0px;{{#ifeq:{{{evenodd|}}}|swap|background: #F0F0F0;|{{{evenodd|background: transparent;}}}}};{{{liststyle|}}};{{{oddstyle|}}};{{{list5style|}}}; <!--
    elseif border == 'subgroup' or border == 'child' then
-->border-color: #fdfdfd;"><!--
        -- We assume that this navbox is being rendered in a list cell of a parent navbox, and is
--><div style="padding:{{{listpadding|0em 0.25em}}}">
        -- therefore inside a div with padding:0em 0.25em. We start with a </div> to avoid the
{{{list5}}}</div></td></tr>}}<!--
        -- padding being applied, and at the end add a <div> to balance out the parent's </div>
        res
            .tag('/div', {unclosed = true})
                .done()
            .node(tbl)
            .tag('div', {unclosed = true})
    else
        res
            .tag('table')
                .attr('cellspacing', 0)
                .addClass('navbox')
                .css('border-spacing', 0)
                .cssText(args.bodystyle)
                .cssText(args.style)
                .tag('tr')
                    .tag('td')
                        .css('padding', '2px')
                        .node(tbl)
    end
    renderTrackingCategories(res)
    return tostring(res)
end
function p.navbox(frame)
    -- ParserFunctions considers the empty string to be false, so to preserve the previous
    -- behavior of {{navbox}}, change any empty arguments to nil, so Lua will consider
    -- them false too.
    local args = {}
    local parent_args = frame:getParent().args;


-->{{#if:{{{list6|}}}|<!--
    -- Out of order parsing bug.
--><tr style="height:2px"><td></td></tr><tr><!--
    local temp;
-->{{#if:{{{group6|}}}|<td style="white-space: nowrap; text-align: right; font-weight: bold; padding-left: 1em; padding-right: 1em; background: {{#switch:{{{border|{{{1|}}}}}} |subgroup=#e6e6ff; |child=#e6e6ff; |none=#e6e6ff; |#default=#ddddff;}} {{{basestyle|}}};{{#if:{{{groupwidth|}}}|width:{{{groupwidth}}};}}{{{groupstyle|}}};{{{group6style|}}}"><!--
    temp = parent_args.title;
-->{{{group6}}}</td><td style="text-align:left;border-left-width:2px;border-left-style:solid;|<td colspan=2 style="}}<!--
    temp = parent_args.above;
-->{{#if:{{{groupwidth|}}}||width:100%;}}padding:0px;{{#ifeq:{{{evenodd|}}}|swap|background: transparent;|{{{evenodd|background: #F0F0F0;}}}}};{{{liststyle|}}};{{{evenstyle|}}};{{{list6style|}}}; <!--
    for i = 1, 20 do
-->border-color: #fdfdfd;"><!--
        temp = parent_args["group" .. tostring(i)];
--><div style="padding:{{{listpadding|0em 0.25em}}}">
        temp = parent_args["list" .. tostring(i)];
{{{list6}}}</div></td></tr>}}<!--
    end   
 
    temp = parent_args.below;
-->{{#if:{{{list7|}}}|<!--
   
--><tr style="height:2px"><td></td></tr><tr><!--
    for k, v in pairs(parent_args) do
-->{{#if:{{{group7|}}}|<td style="white-space: nowrap; text-align: right; font-weight: bold; padding-left: 1em; padding-right: 1em; background: {{#switch:{{{border|{{{1|}}}}}} |subgroup=#e6e6ff; |child=#e6e6ff; |none=#e6e6ff; |#default=#ddddff;}} {{{basestyle|}}};{{#if:{{{groupwidth|}}}|width:{{{groupwidth}}};}}{{{groupstyle|}}};{{{group7style|}}}"><!--
        if v ~= '' then
-->{{{group7}}}</td><td style="text-align:left;border-left-width:2px;border-left-style:solid;|<td colspan=2 style="}}<!--
            args[k] = v
-->{{#if:{{{groupwidth|}}}||width:100%;}}padding:0px;{{#ifeq:{{{evenodd|}}}|swap|background: #F0F0F0;|{{{evenodd|background: transparent;}}}}};{{{liststyle|}}};{{{oddstyle|}}};{{{list7style|}}}; <!--
        end
-->border-color: #fdfdfd;"><!--
    end
--><div style="padding:{{{listpadding|0em 0.25em}}}">
    return p._navbox(args)
{{{list7}}}</div></td></tr>}}<!--
end
 
   
-->{{#if:{{{list8|}}}|<!--
return p
--><tr style="height:2px"><td></td></tr><tr><!--
-->{{#if:{{{group8|}}}|<td style="white-space: nowrap; text-align: right; font-weight: bold; padding-left: 1em; padding-right: 1em; background: {{#switch:{{{border|{{{1|}}}}}} |subgroup=#e6e6ff; |child=#e6e6ff; |none=#e6e6ff; |#default=#ddddff;}} {{{basestyle|}}};{{#if:{{{groupwidth|}}}|width:{{{groupwidth}}};}}{{{groupstyle|}}};{{{group8style|}}}"><!--
-->{{{group8}}}</td><td style="text-align:left;border-left-width:2px;border-left-style:solid;|<td colspan=2 style="}}<!--
-->{{#if:{{{groupwidth|}}}||width:100%;}}padding:0px;{{#ifeq:{{{evenodd|}}}|swap|background: transparent;|{{{evenodd|background: #F0F0F0;}}}}};{{{liststyle|}}};{{{evenstyle|}}};{{{list8style|}}}; <!--
-->border-color: #fdfdfd;"><!--
--><div style="padding:{{{listpadding|0em 0.25em}}}">
{{{list8}}}</div></td></tr>}}<!--
 
-->{{#if:{{{list9|}}}|<!--
--><tr style="height:2px"><td></td></tr><tr><!--
-->{{#if:{{{group9|}}}|<td style="white-space: nowrap; text-align: right; font-weight: bold; padding-left: 1em; padding-right: 1em; background: {{#switch:{{{border|{{{1|}}}}}} |subgroup=#e6e6ff; |child=#e6e6ff; |none=#e6e6ff; |#default=#ddddff;}} {{{basestyle|}}};{{#if:{{{groupwidth|}}}|width:{{{groupwidth}}};}}{{{groupstyle|}}};{{{group9style|}}}"><!--
-->{{{group9}}}</td><td style="text-align:left;border-left-width:2px;border-left-style:solid;|<td colspan=2 style="}}<!--
-->{{#if:{{{groupwidth|}}}||width:100%;}}padding:0px;{{#ifeq:{{{evenodd|}}}|swap|background: #F0F0F0;|{{{evenodd|background: transparent;}}}}};{{{liststyle|}}};{{{oddstyle|}}};{{{list9style|}}}; <!--
-->border-color: #fdfdfd;"><!--
--><div style="padding:{{{listpadding|0em 0.25em}}}">
{{{list9}}}</div></td></tr>}}<!--
 
-->{{#if:{{{list10|}}}|<!--
--><tr style="height:2px"><td></td></tr><tr><!--
-->{{#if:{{{group10|}}}|<td style="white-space: nowrap; text-align: right; font-weight: bold; padding-left: 1em; padding-right: 1em; background: {{#switch:{{{border|{{{1|}}}}}} |subgroup=#e6e6ff; |child=#e6e6ff; |none=#e6e6ff; |#default=#ddddff;}} {{{basestyle|}}};{{#if:{{{groupwidth|}}}|width:{{{groupwidth}}};}}{{{groupstyle|}}};{{{group10style|}}}"><!--
-->{{{group10}}}</td><td style="text-align:left;border-left-width:2px;border-left-style:solid;|<td colspan=2 style="}}<!--
-->{{#if:{{{groupwidth|}}}||width:100%;}}padding:0px;{{#ifeq:{{{evenodd|}}}|swap|background: transparent;|{{{evenodd|background: #F0F0F0;}}}}};{{{liststyle|}}};{{{evenstyle|}}};{{{list10style|}}}; <!--
-->border-color: #fdfdfd;"><!--
--><div style="padding:{{{listpadding|0em 0.25em}}}">
{{{list10}}}</div></td></tr>}}<!--
 
-->{{#if:{{{list11|}}}|<!--
--><tr style="height:2px"><td></td></tr><tr><!--
-->{{#if:{{{group11|}}}|<td style="white-space: nowrap; text-align: right; font-weight: bold; padding-left: 1em; padding-right: 1em; background: {{#switch:{{{border|{{{1|}}}}}} |subgroup=#e6e6ff; |child=#e6e6ff; |none=#e6e6ff; |#default=#ddddff;}} {{{basestyle|}}};{{#if:{{{groupwidth|}}}|width:{{{groupwidth}}};}}{{{groupstyle|}}};{{{group11style|}}}"><!--
-->{{{group11}}}</td><td style="text-align:left;border-left-width:2px;border-left-style:solid;|<td colspan=2 style="}}<!--
-->{{#if:{{{groupwidth|}}}||width:100%;}}padding:0px;{{#ifeq:{{{evenodd|}}}|swap|background: #F0F0F0;|{{{evenodd|background: transparent;}}}}};{{{liststyle|}}};{{{oddstyle|}}};{{{list11style|}}}; <!--
-->border-color: #fdfdfd;"><!--
--><div style="padding:{{{listpadding|0em 0.25em}}}">
{{{list11}}}</div></td></tr>}}<!--
 
-->{{#if:{{{list12|}}}|<!--
--><tr style="height:2px"><td></td></tr><tr><!--
-->{{#if:{{{group12|}}}|<td style="white-space: nowrap; text-align: right; font-weight: bold; padding-left: 1em; padding-right: 1em; background: {{#switch:{{{border|{{{1|}}}}}} |subgroup=#e6e6ff; |child=#e6e6ff; |none=#e6e6ff; |#default=#ddddff;}} {{{basestyle|}}};{{#if:{{{groupwidth|}}}|width:{{{groupwidth}}};}}{{{groupstyle|}}};{{{group12style|}}}"><!--
-->{{{group12}}}</td><td style="text-align:left;border-left-width:2px;border-left-style:solid;|<td colspan=2 style="}}<!--
-->{{#if:{{{groupwidth|}}}||width:100%;}}padding:0px;{{#ifeq:{{{evenodd|}}}|swap|background: transparent;|{{{evenodd|background: #F0F0F0;}}}}};{{{liststyle|}}};{{{evenstyle|}}};{{{list12style|}}}; <!--
-->border-color: #fdfdfd;"><!--
--><div style="padding:{{{listpadding|0em 0.25em}}}">
{{{list12}}}</div></td></tr>}}<!--
 
-->{{#if:{{{list13|}}}|<!--
--><tr style="height:2px"><td></td></tr><tr><!--
-->{{#if:{{{group13|}}}|<td style="white-space: nowrap; text-align: right; font-weight: bold; padding-left: 1em; padding-right: 1em; background: {{#switch:{{{border|{{{1|}}}}}} |subgroup=#e6e6ff; |child=#e6e6ff; |none=#e6e6ff; |#default=#ddddff;}} {{{basestyle|}}};{{#if:{{{groupwidth|}}}|width:{{{groupwidth}}};}}{{{groupstyle|}}};{{{group13style|}}}"><!--
-->{{{group13}}}</td><td style="text-align:left;border-left-width:2px;border-left-style:solid;|<td colspan=2 style="}}<!--
-->{{#if:{{{groupwidth|}}}||width:100%;}}padding:0px;{{#ifeq:{{{evenodd|}}}|swap|background: #F0F0F0;|{{{evenodd|background: transparent;}}}}};{{{liststyle|}}};{{{oddstyle|}}};{{{list13style|}}}; <!--
-->border-color: #fdfdfd;"><!--
--><div style="padding:{{{listpadding|0em 0.25em}}}">
{{{list13}}}</div></td></tr>}}<!--
 
-->{{#if:{{{list14|}}}|<!--
--><tr style="height:2px"><td></td></tr><tr><!--
-->{{#if:{{{group14|}}}|<td style="white-space: nowrap; text-align: right; font-weight: bold; padding-left: 1em; padding-right: 1em; background: {{#switch:{{{border|{{{1|}}}}}} |subgroup=#e6e6ff; |child=#e6e6ff; |none=#e6e6ff; |#default=#ddddff;}} {{{basestyle|}}};{{#if:{{{groupwidth|}}}|width:{{{groupwidth}}};}}{{{groupstyle|}}};{{{group14style|}}}"><!--
-->{{{group14}}}</td><td style="text-align:left;border-left-width:2px;border-left-style:solid;|<td colspan=2 style="}}<!--
-->{{#if:{{{groupwidth|}}}||width:100%;}}padding:0px;{{#ifeq:{{{evenodd|}}}|swap|background: transparent;|{{{evenodd|background: #F0F0F0;}}}}};{{{liststyle|}}};{{{evenstyle|}}};{{{list14style|}}}; <!--
-->border-color: #fdfdfd;"><!--
--><div style="padding:{{{listpadding|0em 0.25em}}}">
{{{list14}}}</div></td></tr>}}<!--
 
-->{{#if:{{{list15|}}}|<!--
--><tr style="height:2px"><td></td></tr><tr><!--
-->{{#if:{{{group15|}}}|<td style="white-space: nowrap; text-align: right; font-weight: bold; padding-left: 1em; padding-right: 1em; background: {{#switch:{{{border|{{{1|}}}}}} |subgroup=#e6e6ff; |child=#e6e6ff; |none=#e6e6ff; |#default=#ddddff;}} {{{basestyle|}}};{{#if:{{{groupwidth|}}}|width:{{{groupwidth}}};}}{{{groupstyle|}}};{{{group15style|}}}"><!--
-->{{{group15}}}</td><td style="text-align:left;border-left-width:2px;border-left-style:solid;|<td colspan=2 style="}}<!--
-->{{#if:{{{groupwidth|}}}||width:100%;}}padding:0px;{{#ifeq:{{{evenodd|}}}|swap|background: #F0F0F0;|{{{evenodd|background: transparent;}}}}};{{{liststyle|}}};{{{oddstyle|}}};{{{list15style|}}}; <!--
-->border-color: #fdfdfd;"><!--
--><div style="padding:{{{listpadding|0em 0.25em}}}">
{{{list15}}}</div></td></tr>}}<!--
 
-->{{#if:{{{list16|}}}|<!--
--><tr style="height:2px"><td></td></tr><tr><!--
-->{{#if:{{{group16|}}}|<td style="white-space: nowrap; text-align: right; font-weight: bold; padding-left: 1em; padding-right: 1em; background: {{#switch:{{{border|{{{1|}}}}}} |subgroup=#e6e6ff; |child=#e6e6ff; |none=#e6e6ff; |#default=#ddddff;}} {{{basestyle|}}};{{#if:{{{groupwidth|}}}|width:{{{groupwidth}}};}}{{{groupstyle|}}};{{{group16style|}}}"><!--
-->{{{group16}}}</td><td style="text-align:left;border-left-width:2px;border-left-style:solid;|<td colspan=2 style="}}<!--
-->{{#if:{{{groupwidth|}}}||width:100%;}}padding:0px;{{#ifeq:{{{evenodd|}}}|swap|background: transparent;|{{{evenodd|background: #F0F0F0;}}}}};{{{liststyle|}}};{{{evenstyle|}}};{{{list16style|}}}; <!--
-->border-color: #fdfdfd;"><!--
--><div style="padding:{{{listpadding|0em 0.25em}}}">
{{{list16}}}</div></td></tr>}}<!--
 
-->{{#if:{{{list17|}}}|<!--
--><tr style="height:2px"><td></td></tr><tr><!--
-->{{#if:{{{group17|}}}|<td style="white-space: nowrap; text-align: right; font-weight: bold; padding-left: 1em; padding-right: 1em; background: {{#switch:{{{border|{{{1|}}}}}} |subgroup=#e6e6ff; |child=#e6e6ff; |none=#e6e6ff; |#default=#ddddff;}} {{{basestyle|}}};{{#if:{{{groupwidth|}}}|width:{{{groupwidth}}};}}{{{groupstyle|}}};{{{group17style|}}}"><!--
  -->{{{group17}}}</td><td style="text-align:left;border-left-width:2px;border-left-style:solid;|<td colspan=2 style="}}<!--
-->{{#if:{{{groupwidth|}}}||width:100%;}}padding:0px;{{#ifeq:{{{evenodd|}}}|swap|background: #F0F0F0;|{{{evenodd|background: transparent;}}}}};{{{liststyle|}}};{{{oddstyle|}}};{{{list17style|}}}; <!--
-->border-color: #fdfdfd;"><!--
--><div style="padding:{{{listpadding|0em 0.25em}}}">
{{{list17}}}</div></td></tr>}}<!--
 
-->{{#if:{{{list18|}}}|<!--
--><tr style="height:2px"><td></td></tr><tr><!--
-->{{#if:{{{group18|}}}|<td style="white-space: nowrap; text-align: right; font-weight: bold; padding-left: 1em; padding-right: 1em; background: {{#switch:{{{border|{{{1|}}}}}} |subgroup=#e6e6ff; |child=#e6e6ff; |none=#e6e6ff; |#default=#ddddff;}} {{{basestyle|}}};{{#if:{{{groupwidth|}}}|width:{{{groupwidth}}};}}{{{groupstyle|}}};{{{group18style|}}}"><!--
-->{{{group18}}}</td><td style="text-align:left;border-left-width:2px;border-left-style:solid;|<td colspan=2 style="}}<!--
-->{{#if:{{{groupwidth|}}}||width:100%;}}padding:0px;{{#ifeq:{{{evenodd|}}}|swap|background: transparent;|{{{evenodd|background: #F0F0F0;}}}}};{{{liststyle|}}};{{{evenstyle|}}};{{{list18style|}}}; <!--
-->border-color: #fdfdfd;"><!--
--><div style="padding:{{{listpadding|0em 0.25em}}}">
{{{list18}}}</div></td></tr>}}<!--
 
-->{{#if:{{{list19|}}}|<!--
--><tr style="height:2px"><td></td></tr><tr><!--
-->{{#if:{{{group19|}}}|<td style="white-space: nowrap; text-align: right; font-weight: bold; padding-left: 1em; padding-right: 1em; background: {{#switch:{{{border|{{{1|}}}}}} |subgroup=#e6e6ff; |child=#e6e6ff; |none=#e6e6ff; |#default=#ddddff;}} {{{basestyle|}}};{{#if:{{{groupwidth|}}}|width:{{{groupwidth}}};}}{{{groupstyle|}}};{{{group19style|}}}"><!--
-->{{{group19}}}</td><td style="text-align:left;border-left-width:2px;border-left-style:solid;|<td colspan=2 style="}}<!--
-->{{#if:{{{groupwidth|}}}||width:100%;}}padding:0px;{{#ifeq:{{{evenodd|}}}|swap|background: #F0F0F0;|{{{evenodd|background: transparent;}}}}};{{{liststyle|}}};{{{oddstyle|}}};{{{list19style|}}}; <!--
-->border-color: #fdfdfd;"><!--
--><div style="padding:{{{listpadding|0em 0.25em}}}">
{{{list19}}}</div></td></tr>}}<!--
 
-->{{#if:{{{list20|}}}|<!--
--><tr style="height:2px"><td></td></tr><tr><!--
-->{{#if:{{{group20|}}}|<td style="white-space: nowrap; text-align: right; font-weight: bold; padding-left: 1em; padding-right: 1em; background: {{#switch:{{{border|{{{1|}}}}}} |subgroup=#e6e6ff; |child=#e6e6ff; |none=#e6e6ff; |#default=#ddddff;}} {{{basestyle|}}};{{#if:{{{groupwidth|}}}|width:{{{groupwidth}}};}}{{{groupstyle|}}};{{{group20style|}}}"><!--
-->{{{group20}}}</td><td style="text-align:left;border-left-width:2px;border-left-style:solid;|<td colspan=2 style="}}<!--
-->{{#if:{{{groupwidth|}}}||width:100%;}}padding:0px;{{#ifeq:{{{evenodd|}}}|swap|background: transparent;|{{{evenodd|background: #F0F0F0;}}}}};{{{liststyle|}}};{{{evenstyle|}}};{{{list20style|}}}; <!--
-->border-color: #fdfdfd;"><!--
--><div style="padding:{{{listpadding|0em 0.25em}}}">
{{{list20}}}</div></td></tr>}}<!--
 
 
---Below---
-->{{#if:{{{below|}}}|<!--
-->{{#if:{{{title|}}}{{{above|}}}{{{list1|}}}{{{list2|}}}{{{list3|}}}|<tr style="height:2px;"><td></td></tr>}}<!--
--><tr><td style="background:{{#switch:{{{border|{{{1|}}}}}} |subgroup=#e6e6ff; |child=#e6e6ff; |none=#e6e6ff; |#default=#ddddff;}} padding-left:1em; padding-right:1em; text-align:center; {{{basestyle|}}};{{{belowstyle|}}}" <!--
-->colspan="{{#expr:2{{#if:{{{imageleft|}}}|+1}}{{#if:{{{image|}}}|+1}}}}">{{{below}}}</td></tr>}}<!--
 
 
--></table>{{#switch:{{{border|{{{1|}}}}}}|subgroup|child=<div>|none=|#default=</td></tr></table>}}<!--
 
--><noinclude>
 
{{doc}}
 
[[Категория:Навигационные шаблоны:Для переноса из англовики]]
 
</noinclude>

Версия от 22:51, 9 октября 2015

--

-- This module will implement

--

local p = {}

local HtmlBuilder = require('Module:HtmlBuilder') local Navbar = require('Module:Navbar')

local args local frame local tableRowAdded = false local border local listnums = {}

function trim(s)

   return (mw.ustring.gsub(s, "^%s*(.-)%s*$", "%1"))

end

function addTableRow(tbl)

   -- If any other rows have already been added, then we add a 2px gutter row.
   if tableRowAdded then
       tbl
           .tag('tr')
               .css('height', '2px')
               .tag('td')
   end
   
   tableRowAdded = true
   
   return tbl.tag('tr')

end


-- -- Title row -- function renderTitleRow(tbl)

   if not args.title then return end

   local titleRow = addTableRow(tbl)
    
   if args.titlegroup then
       titleRow
           .tag('th')
               .attr('scope', 'row')
               .addClass('navbox-group')
               .addClass(args.titlegroupclass)
               .cssText(args.basestyle)
               .cssText(args.groupstyle)
               .cssText(args.titlegroupstyle)
               .wikitext(args.titlegroup)
   end
   
   local titleCell = titleRow.tag('th').attr('scope', 'col')
           
   if args.titlegroup then
       titleCell
           .css('border-left', '2px solid #fdfdfd')
           .css('width', '100%')
   end
   
   local titleColspan = 2
   if args.imageleft then titleColspan = titleColspan + 1 end
   if args.image then titleColspan = titleColspan + 1 end
   if args.titlegroup then titleColspan = titleColspan - 1 end
   
   titleCell
       .cssText(args.basestyle)
       .cssText(args.titlestyle)
       .addClass('navbox-title')
       .attr('colspan', titleColspan)

    renderNavBar(titleCell)

    titleCell
        .tag('div')
            .addClass(args.titleclass)
            .css('font-size', '110%')
            .newline()
            .wikitext(args.title)

end

function renderNavBar(titleCell)

   -- Depending on the presence of the navbar and/or show/hide link, we may need to add a spacer div on the left
   -- or right to keep the title centered.
   local spacerSide = nil
   if args.navbar == 'off' then
       -- No navbar, and client wants no spacer, i.e. wants the title to be shifted to the left. If there's
       -- also no show/hide link, then we need a spacer on the right to achieve the left shift.
       if args.state == 'plain' then spacerSide = 'right' end
   elseif args.navbar == 'plain' or args.navbar == 'off' or (not args.name and (border == 'subgroup' or border == 'child' or border == 'none')) then
       -- No navbar. Need a spacer on the left to balance out the width of the show/hide link.
       if args.state ~= 'plain' then spacerSide = 'left' end
   else
       -- Will render navbar (or error message). If there's no show/hide link, need a spacer on the right
       -- to balance out the width of the navbar.
       if args.state == 'plain' then spacerSide = 'right' end
       titleCell.wikitext(Navbar.navbar({ 
           args.name, 
           mini = 1, 
           fontstyle = (args.basestyle or ) .. ';' .. (args.titlestyle or ) ..  ';background:none transparent;border:none;'
       }))
   end
   
   -- Render the spacer div.
   if spacerSide then
       titleCell
           .tag('span')
               .css('float', spacerSide)
               .css('width', '6em')
               .wikitext(' ')
   end

end


-- -- Above/Below rows -- function renderAboveRow(tbl)

   if not args.above then return end

   addTableRow(tbl)
       .tag('td')
           .addClass('navbox-abovebelow')
           .addClass(args.aboveclass)
           .cssText(args.basestyle)
           .cssText(args.abovestyle)
           .attr('colspan', getAboveBelowColspan())
           .tag('div')
               .newline()
               .wikitext(args.above)

end

function renderBelowRow(tbl)

   if not args.below then return end
   
   addTableRow(tbl)
       .tag('td')
           .addClass('navbox-abovebelow')
           .addClass(args.belowclass)
           .cssText(args.basestyle)
           .cssText(args.belowstyle)
           .attr('colspan', getAboveBelowColspan())
           .tag('div')
               .newline()
               .wikitext(args.below)

end

function getAboveBelowColspan()

   local ret = 2
   if args.imageleft then ret = ret + 1 end
   if args.image then ret = ret + 1 end
   return ret

end


-- -- List rows -- function renderListRow(tbl, listnum)

   local row = addTableRow(tbl)
   
   if listnum == 1 and args.imageleft then
       row
           .tag('td')
               .addClass('navbox-image')
               .addClass(args.imageclass)
               .css('width', '0%')
               .css('padding', '0px 2px 0px 0px')
               .cssText(args.imageleftstyle)
               .attr('rowspan', 2 * #listnums - 1)
               .tag('div')
                   .newline()
                   .wikitext(args.imageleft)
   end

   if args['group' .. listnum] then
       local groupCell = row.tag('th')
       
       groupCell
              .attr('scope', 'row')
              .addClass('navbox-group')
              .addClass(args.groupclass)
              .cssText(args.basestyle)
              
       if args.groupwidth then
           groupCell.css('width', args.groupwidth)
       end
          
       groupCell
           .cssText(args.groupstyle)
           .cssText(args['group' .. listnum .. 'style'])
           .wikitext(args['group' .. listnum])
   end
   
   local listCell = row.tag('td')
   if args['group' .. listnum] then
       listCell
           .css('text-align', 'left')
           .css('border-left-width', '2px')
           .css('border-left-style', 'solid')
   else
       listCell.attr('colspan', 2)
   end
   
   if not args.groupwidth then 
       listCell.css('width', '100%')
   end
   
   local isOdd = (listnum % 2) == 1
   local rowstyle = args.evenstyle
   if isOdd then rowstyle = args.oddstyle end

   local evenOdd
   if args.evenodd == 'swap' then
       if isOdd then evenOdd = 'even' else evenOdd = 'odd' end
   else
       if isOdd then evenOdd = args.evenodd or 'odd' else evenOdd = args.evenodd or 'even' end
   end
   
   listCell
       .css('padding', '0px')
       .cssText(args.liststyle)
       .cssText(rowstyle)
       .cssText(args['list' .. listnum .. 'style'])
       .addClass('navbox-list')
       .addClass('navbox-' .. evenOdd)
       .addClass(args.listclass)
       .tag('div')
           .css('padding', (listnum == 1 and args.list1padding) or args.listpadding or '0em 0.25em')
           .newline()
           .wikitext(args['list' .. listnum])
   if listnum == 1 and args.image then
       row
           .tag('td')
               .addClass('navbox-image')
               .addClass(args.imageclass)
               .css('width', '0%')
               .css('padding', '0px 0px 0px 2px')
               .cssText(args.imagestyle)
               .attr('rowspan', 2 * #listnums - 1)
               .tag('div')
                   .newline()
                   .wikitext(args.image)
   end

end


-- -- Tracking categories -- function renderTrackingCategories(builder)

   local frame = mw.getCurrentFrame()
   
   if not frame then return end
   
   local s = frame:preprocess('1Вьетнам')
   if mw.ustring.sub(s, 1, 1) == '0' then return end -- not in template space
   local subpage = mw.ustring.lower(mw.ustring.sub(s, 2))
   if subpage == 'doc' or subpage == 'sandbox' or subpage == 'testcases' then return end
   
   for i, cat in ipairs(getTrackingCategories()) do
       builder.wikitext() 
   end

end

function getTrackingCategories()

   local cats = {}
   if needsHorizontalLists() then table.insert(cats, 'Navigational boxes without horizontal lists') end
   if hasBackgroundColors() then table.insert(cats, 'Navboxes using background colours') end
   return cats

end

function needsHorizontalLists()

   if border == 'child' or border == 'subgroup'  or args.tracking == 'no' then return false end
   
   local listClasses = {'plainlist', 'hlist', 'hlist hnum', 'hlist vcard', 'vcard hlist'}
   for i, cls in ipairs(listClasses) do
       if args.listclass == cls or args.bodyclass == cls then
           return false
       end
   end
   return true

end

function hasBackgroundColors()

   return args.titlestyle or args.groupstyle

end


-- -- Main navbox tables -- function renderMainTable()

   local tbl = HtmlBuilder.create('table')
       .attr('cellspacing', 0)
       .addClass('nowraplinks')
       .addClass(args.bodyclass)
            
   if args.title and (args.state ~= 'plain' and args.state ~= 'off') then
       tbl
           .addClass('collapsible')
           .addClass(args.state or 'autocollapse')
   end

   tbl.css('border-spacing', 0)
   if border == 'subgroup' or border == 'child' or border == 'none' then
       tbl
           .addClass('navbox-subgroup')
           .cssText(args.bodystyle)
           .cssText(args.style)
   else -- regular navobx - bodystyle and style will be applied to the wrapper table
       tbl
           .addClass('navbox-inner')
           .css('background', 'transparent')
           .css('color', 'inherit')
   end
   tbl.cssText(args.innerstyle)

   renderTitleRow(tbl)
   renderAboveRow(tbl)
   for i, listnum in ipairs(listnums) do
       renderListRow(tbl, listnum) 
   end
   renderBelowRow(tbl)
   
   return tbl

end

function p._navbox(navboxArgs)

   args = navboxArgs
   
   for k, v in pairs(args) do
       local listnum = ( .. k):match('^list(%d+)$')
       if listnum then table.insert(listnums, tonumber(listnum)) end
   end
   table.sort(listnums)

   border = trim(args.border or args[1] or )
   -- render the main body of the navbox
   local tbl = renderMainTable()
   -- render the appropriate wrapper around the navbox, depending on the border param
   local res = HtmlBuilder.create()
   if border == 'none' then
       res.node(tbl)
   elseif border == 'subgroup' or border == 'child' then
       -- We assume that this navbox is being rendered in a list cell of a parent navbox, and is

-- therefore inside a div with padding:0em 0.25em. We start with a to avoid the -- padding being applied, and at the end add a

to balance out the parent's
       res
           .tag('/div', {unclosed = true})
               .done()
           .node(tbl)
           .tag('div', {unclosed = true})
   else
       res
           .tag('table')
               .attr('cellspacing', 0)
               .addClass('navbox')
               .css('border-spacing', 0)
               .cssText(args.bodystyle)
               .cssText(args.style)
               .tag('tr')
                   .tag('td')
                       .css('padding', '2px')
                       .node(tbl)
   end

   renderTrackingCategories(res)

   return tostring(res)

end

function p.navbox(frame)

   -- ParserFunctions considers the empty string to be false, so to preserve the previous 

-- behavior of

, change any empty arguments to nil, so Lua will consider

   -- them false too.
   local args = {}
   local parent_args = frame:getParent().args;
   -- Out of order parsing bug.
   local temp;
   temp = parent_args.title;
   temp = parent_args.above;
   for i = 1, 20 do
       temp = parent_args["group" .. tostring(i)];
       temp = parent_args["list" .. tostring(i)];
   end    
   temp = parent_args.below;
   
   for k, v in pairs(parent_args) do
       if v ~=  then
           args[k] = v
       end
   end
   return p._navbox(args)

end

return p