<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://self-defense.website/index.php?action=history&amp;feed=atom&amp;title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C%3ANavbox</id>
	<title>Модуль:Navbox - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://self-defense.website/index.php?action=history&amp;feed=atom&amp;title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C%3ANavbox"/>
	<link rel="alternate" type="text/html" href="https://self-defense.website/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Navbox&amp;action=history"/>
	<updated>2026-04-20T13:45:26Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.37.1</generator>
	<entry>
		<id>https://self-defense.website/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Navbox&amp;diff=877&amp;oldid=prev</id>
		<title>Admin: 1 версия импортирована</title>
		<link rel="alternate" type="text/html" href="https://self-defense.website/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Navbox&amp;diff=877&amp;oldid=prev"/>
		<updated>2022-01-24T13:18:57Z</updated>

		<summary type="html">&lt;p&gt;1 версия импортирована&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Версия 13:18, 24 января 2022&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://self-defense.website/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Navbox&amp;diff=876&amp;oldid=prev</id>
		<title>[[wikipedia:ru:ombox|ombox]]&gt;Stjn: за неимением общего Module:Navbar для упрощения поддержки переведём шестерёнку на основу Шаблон:Tnavbar-view</title>
		<link rel="alternate" type="text/html" href="https://self-defense.website/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Navbox&amp;diff=876&amp;oldid=prev"/>
		<updated>2021-12-20T15:11:34Z</updated>

		<summary type="html">&lt;p&gt;за неимением общего &lt;a href=&quot;/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Navbar&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Модуль:Navbar (страница не существует)&quot;&gt;Module:Navbar&lt;/a&gt; для упрощения поддержки переведём шестерёнку на основу &lt;a href=&quot;/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Tnavbar-view&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Шаблон:Tnavbar-view (страница не существует)&quot;&gt;Шаблон:Tnavbar-view&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;--&lt;br /&gt;
-- Реализует {{навигационная таблица}}, {{подгруппы навигационной таблицы}} и {{навигационная таблица с блоками}}.&lt;br /&gt;
-- Основной объём кода заимствован из английского Module:Navbox.&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local getArgs -- lazily initialized&lt;br /&gt;
local yesno -- lazily initialized&lt;br /&gt;
local styleratio&lt;br /&gt;
&lt;br /&gt;
local ODD_EVEN_MARKER = '\127_ODDEVEN_\127'&lt;br /&gt;
local RESTART_MARKER = '\127_ODDEVEN0_\127'&lt;br /&gt;
local REGEX_MARKER = '\127_ODDEVEN(%d?)_\127'&lt;br /&gt;
&lt;br /&gt;
-- общие параметры для всех шаблонов&lt;br /&gt;
local commonAliases = {&lt;br /&gt;
	name = {'name', 'имя'},&lt;br /&gt;
	navigation = {'navigation', 'навигация'},&lt;br /&gt;
	navbar = {'navbar', 'ссылка_на_просмотр'},&lt;br /&gt;
	state = {'state'},&lt;br /&gt;
	orphan = {'orphan'},&lt;br /&gt;
	tracking = {'tracking'},&lt;br /&gt;
	border = {'border', 1},&lt;br /&gt;
	title = {'title', 'заголовок'},&lt;br /&gt;
	titlegroup = {'titlegroup'},&lt;br /&gt;
	above = {'above', 'вверху'},&lt;br /&gt;
	image = {'image', 'изображение'},&lt;br /&gt;
	imageleft = {'imageleft', 'изображение2', 'изображение_слева'},&lt;br /&gt;
	below = {'below', 'внизу'},&lt;br /&gt;
		&lt;br /&gt;
	bodyclass = {'bodyclass', 'класс_тела'},&lt;br /&gt;
	titleclass = {'titleclass', 'класс_заголовка'},&lt;br /&gt;
	titlegroupclass = {'titlegroupclass'},&lt;br /&gt;
	aboveclass = {'aboveclass', 'класс_вверху'},&lt;br /&gt;
	belowclass = {'belowclass', 'класс_внизу'},&lt;br /&gt;
	groupclass = {'groupclass', 'класс_групп'},&lt;br /&gt;
	listclass = {'listclass', 'класс_списков'},&lt;br /&gt;
	imageclass = {'imageclass', 'класс_изображения'},&lt;br /&gt;
	&lt;br /&gt;
	basestyle = {'basestyle', 'стиль', 'стиль_базовый'},&lt;br /&gt;
	bodystyle = {'style', 'bodystyle', 'стиль_тела'},&lt;br /&gt;
	titlestyle = {'titlestyle', 'стиль_основного_заголовка', 'стиль_заголовка'},&lt;br /&gt;
	titlegroupstyle = {'titlegroupstyle'},&lt;br /&gt;
	innerstyle = {'innerstyle'},&lt;br /&gt;
	abovestyle = {'abovestyle', 'стиль_вверху'},&lt;br /&gt;
	belowstyle = {'belowstyle', 'стиль_внизу'},&lt;br /&gt;
	imagestyle = {'imagestyle', 'стиль_изображения'},&lt;br /&gt;
	imageleftstyle = {'imageleftstyle', 'imagestyle2', 'стиль_изображения_слева'},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- параметры {{навигационная таблица}} и {{подгруппы навигационной таблицы}}&lt;br /&gt;
local standardAliases = {&lt;br /&gt;
	groupstyle = {'groupstyle', 'стиль_заголовков', 'стиль_групп'},&lt;br /&gt;
	liststyle = {'liststyle', 'стиль_списков'},&lt;br /&gt;
	evenodd = {'evenodd', 'чётные_нечётные', 'четные_нечетные'},&lt;br /&gt;
	groupwidth = {'groupwidth', 'ширина_групп'},&lt;br /&gt;
	listpadding = {'listpadding', 'отступ_списков'},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- параметры {{навигационная таблица}} и {{подгруппы навигационной таблицы}} с нумерацией&lt;br /&gt;
local standardElementAliases = {&lt;br /&gt;
	group = {'group%s', 'заголовок%s', 'группа%s'},&lt;br /&gt;
	list = {'list%s', 'список%s'},&lt;br /&gt;
	groupstyle = {'group%sstyle', 'стиль_заголовка%s', 'стиль_группы%s'},&lt;br /&gt;
	listclass = {'list%sclass', 'класс%sсписка', 'класс_списка%s'},&lt;br /&gt;
	liststyle = {'list%sstyle', 'стиль_списка%s'},&lt;br /&gt;
	listpadding = {'list%spadding'}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- параметры {{навигационная таблица с блоками}}&lt;br /&gt;
-- с нижнего подчеркивания начинаются параметры, конфликтующие с standardAliases &lt;br /&gt;
local groupsParentAliases = {&lt;br /&gt;
	selected = {'selected', 'открытый_блок', 'развернуть'},&lt;br /&gt;
	secttitlestyle = {'secttitlestyle', 'стиль_заголовков'},&lt;br /&gt;
	_groupstyle = {'groupstyle', 'стиль_блоков'},&lt;br /&gt;
	_liststyle = {'liststyle', 'стиль_списков', 'contentstyle'},&lt;br /&gt;
	_listpadding = {'listpadding', 'отступ_списка', 'отступ_списков'}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- параметры {{навигационная таблица с блоками}} с нумерацией&lt;br /&gt;
local groupsChildAliases = {&lt;br /&gt;
	groupname = {'abbr%s', 'имя_блока%s', 'аббр%s'},&lt;br /&gt;
	state = {'state%s'},&lt;br /&gt;
	title = {'group%s', 'блок%s', 'заголовок%s', 'группа%s', 'sect%s', 'section%s', 'секция%s'},&lt;br /&gt;
	list1 = {'list%s', 'список%s', 'content%s'},&lt;br /&gt;
	image = {'image%s', 'изображение%s'},&lt;br /&gt;
	imageleft = {'imageleft%s', 'изображение_слева%s'},&lt;br /&gt;
&lt;br /&gt;
	secttitlestyle = {'sect%stitlestyle', 'стиль%sзаголовка', 'стиль_секции%s'},&lt;br /&gt;
	groupstyle = {'group%sstyle', 'стиль%sблока', 'стиль_группы%s', 'стиль_блока%s'},&lt;br /&gt;
	listclass = {'list%sclass', 'класс%sсписка', 'класс_списка%s'},&lt;br /&gt;
	liststyle = {'list%sstyle', 'стиль%sсписка', 'стиль_списка%s', 'content%sstyle'},&lt;br /&gt;
	color = {'цвет%s'}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local function checkAliases(args, aliases, index)&lt;br /&gt;
	for _, alias in ipairs(aliases) do&lt;br /&gt;
		local arg&lt;br /&gt;
		if index then&lt;br /&gt;
			arg = args[string.format(alias, index)]&lt;br /&gt;
		else&lt;br /&gt;
			arg = args[alias]&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if arg then&lt;br /&gt;
			return arg&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function checkElAliases(args, name, index)&lt;br /&gt;
	return checkAliases(args, standardElementAliases[name], index)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function concatStyles(t)&lt;br /&gt;
	local res&lt;br /&gt;
	for k, v in pairs(t) do&lt;br /&gt;
		if v then&lt;br /&gt;
			res = res and res .. ';' .. v or v&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return res&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function striped(wikitext, args)&lt;br /&gt;
	-- Return wikitext with markers replaced for odd/even striping.&lt;br /&gt;
	-- Child (subgroup) navboxes are flagged with a category that is removed&lt;br /&gt;
	-- by parent navboxes. The result is that the category shows all pages&lt;br /&gt;
	-- where a child navbox is not contained in a parent navbox.&lt;br /&gt;
	local orphanCat = '[[Категория:Навигационные шаблоны без родителя]]'&lt;br /&gt;
	if args.border == 'subgroup' and args.orphan ~= 'yes' then&lt;br /&gt;
		-- No change; striping occurs in outermost navbox.&lt;br /&gt;
		return wikitext .. orphanCat&lt;br /&gt;
	end&lt;br /&gt;
	local first, second = 'odd', 'even'&lt;br /&gt;
	if args.evenodd then&lt;br /&gt;
		if args.evenodd == 'swap' then&lt;br /&gt;
			first, second = second, first&lt;br /&gt;
		else&lt;br /&gt;
			first = args.evenodd&lt;br /&gt;
			second = first&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local changer&lt;br /&gt;
	if first == second then&lt;br /&gt;
		changer = first&lt;br /&gt;
	else&lt;br /&gt;
		local index = 0&lt;br /&gt;
		changer = function (code)&lt;br /&gt;
			if code == '0' then&lt;br /&gt;
				-- Current occurrence is for a group before a nested table.&lt;br /&gt;
				-- Set it to first as a valid although pointless class.&lt;br /&gt;
				-- The next occurrence will be the first row after a title&lt;br /&gt;
				-- in a subgroup and will also be first.&lt;br /&gt;
				index = 0&lt;br /&gt;
				return first&lt;br /&gt;
			end&lt;br /&gt;
			index = index + 1&lt;br /&gt;
			return index % 2 == 1 and first or second&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local regex = orphanCat:gsub('([%[%]])', '%%%1')&lt;br /&gt;
	return (wikitext:gsub(regex, ''):gsub(REGEX_MARKER, changer))  -- () omits gsub count&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function addNewline(s)&lt;br /&gt;
	if s:match('^[*:;#]') or s:match('^{|') then&lt;br /&gt;
		return '\n' .. s ..'\n'&lt;br /&gt;
	else&lt;br /&gt;
		return s&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderNavBar(titleCell, args)&lt;br /&gt;
	local currentFrame = mw.getCurrentFrame()&lt;br /&gt;
	if args.navbar ~= 'off' and args.navbar ~= 'plain' &lt;br /&gt;
		and (args.name or not currentFrame:getParent():getTitle():gsub('/песочница$', '') == 'Шаблон:Навигационная таблица') then&lt;br /&gt;
		&lt;br /&gt;
		-- Check color contrast of the gear icon&lt;br /&gt;
		if not styleratio then&lt;br /&gt;
			styleratio = require('Module:Color contrast')._styleratio&lt;br /&gt;
		end&lt;br /&gt;
		local contrastStyle = args.titlestyle or args.basestyle&lt;br /&gt;
		local gearStyleBlack = (contrastStyle and mw.text.unstripNoWiki(contrastStyle) .. '; color:#666;' or '')&lt;br /&gt;
		local gearStyleWhite = (contrastStyle and mw.text.unstripNoWiki(contrastStyle) .. '; color:#fff;' or '')&lt;br /&gt;
		local gear = currentFrame:expandTemplate{&lt;br /&gt;
			title = 'Tnavbar-view',&lt;br /&gt;
			args = {&lt;br /&gt;
				args.name,&lt;br /&gt;
				fontcolor = (styleratio{gearStyleBlack} &amp;lt; styleratio{gearStyleWhite}) and 'white',&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		--- Gear creation&lt;br /&gt;
		titleCell&lt;br /&gt;
			:tag('span')&lt;br /&gt;
				:addClass('navbox-gear')&lt;br /&gt;
				:css('float', 'left')&lt;br /&gt;
				:css('text-align', 'left')&lt;br /&gt;
				:css('width', '5em')&lt;br /&gt;
				:css('margin-right', '0.5em')&lt;br /&gt;
				:wikitext(gear)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
--   Title row&lt;br /&gt;
--&lt;br /&gt;
local function renderTitleRow(tbl, args)&lt;br /&gt;
	if not args.title then return end&lt;br /&gt;
&lt;br /&gt;
	local titleRow = tbl:tag('tr')&lt;br /&gt;
&lt;br /&gt;
	if args.titlegroup then&lt;br /&gt;
		titleRow&lt;br /&gt;
			:tag('th')&lt;br /&gt;
				:attr('scope', 'row')&lt;br /&gt;
				:addClass('navbox-group')&lt;br /&gt;
				:addClass(args.titlegroupclass)&lt;br /&gt;
				:cssText(args.basestyle)&lt;br /&gt;
				:cssText(args.groupstyle)&lt;br /&gt;
				:cssText(args.titlegroupstyle)&lt;br /&gt;
				:wikitext(args.titlegroup)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local titleCell = titleRow:tag('th'):attr('scope', 'colgroup')&lt;br /&gt;
&lt;br /&gt;
	if args.titlegroup then&lt;br /&gt;
		titleCell&lt;br /&gt;
			:css('border-left', '2px solid #fdfdfd')&lt;br /&gt;
			:css('width', '100%')&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local titleColspan = 2&lt;br /&gt;
	if args.imageleft then titleColspan = titleColspan + 1 end&lt;br /&gt;
	if args.image then titleColspan = titleColspan + 1 end&lt;br /&gt;
	if args.titlegroup then titleColspan = titleColspan - 1 end&lt;br /&gt;
&lt;br /&gt;
	titleCell&lt;br /&gt;
		:cssText(args.basestyle)&lt;br /&gt;
		:cssText(args.titlestyle)&lt;br /&gt;
		:addClass('navbox-title')&lt;br /&gt;
		:attr('colspan', titleColspan)&lt;br /&gt;
&lt;br /&gt;
	renderNavBar(titleCell, args)&lt;br /&gt;
&lt;br /&gt;
	titleCell&lt;br /&gt;
		:tag('div')&lt;br /&gt;
			:attr('id', mw.uri.anchorEncode(args.title))&lt;br /&gt;
			:addClass(args.titleclass)&lt;br /&gt;
			:css('font-size', '114%')&lt;br /&gt;
			:css('margin', '0 5em')&lt;br /&gt;
			:wikitext(addNewline(args.title))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
--   Above/Below rows&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
local function getAboveBelowColspan(args)&lt;br /&gt;
	local ret = 2&lt;br /&gt;
	if args.imageleft then ret = ret + 1 end&lt;br /&gt;
	if args.image then ret = ret + 1 end&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderAboveRow(tbl, args)&lt;br /&gt;
	if not args.above then return end&lt;br /&gt;
&lt;br /&gt;
	tbl:tag('tr')&lt;br /&gt;
		:tag('td')&lt;br /&gt;
			:addClass('navbox-abovebelow')&lt;br /&gt;
			:addClass(args.aboveclass)&lt;br /&gt;
			:cssText(args.basestyle)&lt;br /&gt;
			:cssText(args.abovestyle)&lt;br /&gt;
			:attr('colspan', getAboveBelowColspan(args))&lt;br /&gt;
			:tag('div')&lt;br /&gt;
				:wikitext(addNewline(args.above))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderBelowRow(tbl, args)&lt;br /&gt;
	if not args.below then return end&lt;br /&gt;
&lt;br /&gt;
	tbl:tag('tr')&lt;br /&gt;
		:tag('td')&lt;br /&gt;
			:addClass('navbox-abovebelow')&lt;br /&gt;
			:addClass(args.belowclass)&lt;br /&gt;
			:cssText(args.basestyle)&lt;br /&gt;
			:cssText(args.belowstyle)&lt;br /&gt;
			:attr('colspan', getAboveBelowColspan(args))&lt;br /&gt;
			:tag('div')&lt;br /&gt;
				:wikitext(addNewline(args.below))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
--   List rows&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
local function haveSubgroups(args)&lt;br /&gt;
	for i = 1, 23 do&lt;br /&gt;
		if checkElAliases(args, 'group', i) and checkElAliases(args, 'list', i) then&lt;br /&gt;
			return true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderListRow(tbl, args, index, rowspan, rowArgs)&lt;br /&gt;
	local row = tbl:tag('tr')&lt;br /&gt;
&lt;br /&gt;
	if index == 1 and args.imageleft then&lt;br /&gt;
		row&lt;br /&gt;
			:tag('td')&lt;br /&gt;
				:addClass('navbox-image')&lt;br /&gt;
				:addClass(args.imageclass)&lt;br /&gt;
				:css('width', '1px')&lt;br /&gt;
				:css('padding', '0px 7px 0px 0px')&lt;br /&gt;
				:cssText(args.imageleftstyle)&lt;br /&gt;
				:attr('rowspan', rowspan)&lt;br /&gt;
				:tag('div')&lt;br /&gt;
					:wikitext(addNewline(args.imageleft))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if rowArgs.group then&lt;br /&gt;
		local groupCell = row:tag('th')&lt;br /&gt;
&lt;br /&gt;
		groupCell&lt;br /&gt;
			:attr('scope', 'row')&lt;br /&gt;
			:addClass('navbox-group')&lt;br /&gt;
			:addClass(args.groupclass)&lt;br /&gt;
			:cssText(args.basestyle)&lt;br /&gt;
			:css('width', args.groupwidth or '1px') -- If groupwidth not specified, minimize width&lt;br /&gt;
&lt;br /&gt;
		groupCell&lt;br /&gt;
			:cssText(args.groupstyle)&lt;br /&gt;
			:cssText(rowArgs.groupstyle)&lt;br /&gt;
			:wikitext(rowArgs.group)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local listCell = row:tag('td')&lt;br /&gt;
&lt;br /&gt;
	if rowArgs.group then&lt;br /&gt;
		listCell&lt;br /&gt;
			:css('text-align', 'left')&lt;br /&gt;
			:css('border-left-width', '2px')&lt;br /&gt;
			:css('border-left-style', 'solid')&lt;br /&gt;
	else&lt;br /&gt;
		if haveSubgroups(args) then&lt;br /&gt;
			listCell&lt;br /&gt;
				:attr('colspan', 2)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if not args.groupwidth then&lt;br /&gt;
		listCell:css('width', '100%')&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local listText = rowArgs.list&lt;br /&gt;
	local oddEven = ODD_EVEN_MARKER&lt;br /&gt;
	if listText:sub(1, 12) == '&amp;lt;/div&amp;gt;&amp;lt;table' then&lt;br /&gt;
		-- Assume list text is for a subgroup navbox so no automatic striping for this row.&lt;br /&gt;
		oddEven = listText:find('&amp;lt;th[^&amp;gt;]*&amp;quot;navbox%-title&amp;quot;') and RESTART_MARKER or 'odd'&lt;br /&gt;
	end&lt;br /&gt;
	listCell&lt;br /&gt;
		:css('padding', '0px')&lt;br /&gt;
		:cssText(args.liststyle)&lt;br /&gt;
		:cssText(rowArgs.liststyle)&lt;br /&gt;
		:addClass('navbox-list')&lt;br /&gt;
		:addClass('navbox-' .. oddEven)&lt;br /&gt;
		:addClass(args.listclass)&lt;br /&gt;
		:addClass(rowArgs.listclass)&lt;br /&gt;
		:tag('div')&lt;br /&gt;
			:css('padding', rowArgs.listpadding or args.listpadding or '0em 0.25em')&lt;br /&gt;
			:wikitext(addNewline(listText))&lt;br /&gt;
&lt;br /&gt;
	if index == 1 and args.image then&lt;br /&gt;
		row&lt;br /&gt;
			:tag('td')&lt;br /&gt;
				:addClass('navbox-image')&lt;br /&gt;
				:addClass(args.imageclass)&lt;br /&gt;
				:css('width', '1px')&lt;br /&gt;
				:css('padding', '0px 0px 0px 7px')&lt;br /&gt;
				:cssText(args.imagestyle)&lt;br /&gt;
				:attr('rowspan', rowspan)&lt;br /&gt;
				:tag('div')&lt;br /&gt;
					:wikitext(addNewline(args.image))&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
--   Tracking categories&lt;br /&gt;
--&lt;br /&gt;
local function needsChangetoSubgroups(args)&lt;br /&gt;
	for i = 1, 23 do&lt;br /&gt;
		if (checkElAliases(args, 'group', i)) and not (checkElAliases(args, 'list', i)) then&lt;br /&gt;
			return true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function needsHorizontalLists(args)&lt;br /&gt;
	if args.border == 'subgroup' or args.tracking == 'no' then&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
	local listClasses = {&lt;br /&gt;
		['plainlist'] = true, ['hlist'] = true, ['hlist hnum'] = true,&lt;br /&gt;
		['hlist hwrap'] = true, ['hlist vcard'] = true, ['vcard hlist'] = true,&lt;br /&gt;
		['hlist vevent'] = true, ['hlist hlist-items-nowrap'] = true, ['hlist-items-nowrap'] = true,&lt;br /&gt;
	}&lt;br /&gt;
	return not (listClasses[args.listclass] or listClasses[args.bodyclass])&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- local function hasBackgroundColors()&lt;br /&gt;
--	return mw.ustring.match(titlestyle or '','background') or mw.ustring.match(groupstyle or '','background') or mw.ustring.match(basestyle or '','background')&lt;br /&gt;
-- end&lt;br /&gt;
&lt;br /&gt;
local function isIllegible(args)&lt;br /&gt;
	if not styleratio then&lt;br /&gt;
		styleratio = require('Module:Color contrast')._styleratio&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	for key, style in pairs(args) do&lt;br /&gt;
		if tostring(key):match(&amp;quot;style$&amp;quot;) or tostring(key):match(&amp;quot;^стиль&amp;quot;) then&lt;br /&gt;
			if styleratio{mw.text.unstripNoWiki(style)} &amp;lt; 4.5 then&lt;br /&gt;
				return true &lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getTrackingCategories(args)&lt;br /&gt;
	local cats = {}&lt;br /&gt;
	if needsChangetoSubgroups(args) then table.insert(cats, 'Навигационные шаблоны с ошибочным использованием заголовков') end&lt;br /&gt;
	if needsHorizontalLists(args) then table.insert(cats, 'Навигационные шаблоны без горизонтальных списков') end&lt;br /&gt;
	if isIllegible(args) then table.insert(cats, 'Потенциально нечитаемые навигационные шаблоны') end&lt;br /&gt;
	return cats&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderTrackingCategories(builder, args)&lt;br /&gt;
	local title = mw.title.getCurrentTitle()&lt;br /&gt;
	if title.namespace ~= 10 then return end -- not in template space&lt;br /&gt;
	local subpage = title.subpageText&lt;br /&gt;
	if subpage == 'doc' or subpage == 'песочница' or subpage == 'тесты' then return end&lt;br /&gt;
&lt;br /&gt;
	for i, cat in ipairs(getTrackingCategories(args)) do&lt;br /&gt;
		builder:wikitext('[[Категория:' .. cat .. ']]')&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
--   Main navbox tables&lt;br /&gt;
--&lt;br /&gt;
local function renderMainTable(args, listnums)&lt;br /&gt;
	local tbl = mw.html.create('table')&lt;br /&gt;
		:addClass('nowraplinks')&lt;br /&gt;
		:addClass(args.bodyclass)&lt;br /&gt;
&lt;br /&gt;
	if args.title and (args.state ~= 'plain' and args.state ~= 'off') then&lt;br /&gt;
		tbl&lt;br /&gt;
			:addClass('collapsible')&lt;br /&gt;
			:addClass(args.state or 'autocollapse')&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	tbl:css('border-spacing', 0)&lt;br /&gt;
	if args.border == 'subgroup' or args.border == 'none' then&lt;br /&gt;
		tbl&lt;br /&gt;
			:addClass('navbox-subgroup')&lt;br /&gt;
			:cssText(args.bodystyle)&lt;br /&gt;
	else -- regular navbox - bodystyle and style will be applied to the wrapper table&lt;br /&gt;
		tbl&lt;br /&gt;
			:addClass('navbox-inner')&lt;br /&gt;
			:css('background', 'transparent')&lt;br /&gt;
			:css('color', 'inherit')&lt;br /&gt;
	end&lt;br /&gt;
	tbl:cssText(args.innerstyle)&lt;br /&gt;
&lt;br /&gt;
	renderTitleRow(tbl, args)&lt;br /&gt;
	renderAboveRow(tbl, args)&lt;br /&gt;
	for i, listnum in ipairs(listnums) do&lt;br /&gt;
		local rowArgs = {&lt;br /&gt;
			group = checkElAliases(args, 'group', listnum),&lt;br /&gt;
			list = checkElAliases(args, 'list', listnum),&lt;br /&gt;
			groupstyle = checkElAliases(args, 'groupstyle', listnum),&lt;br /&gt;
			listclass = checkElAliases(args, 'listclass', listnum),&lt;br /&gt;
			liststyle = checkElAliases(args, 'liststyle', listnum),&lt;br /&gt;
			listpadding = checkElAliases(args, 'listpadding', listnum)&lt;br /&gt;
		}&lt;br /&gt;
		renderListRow(tbl, args, i, #listnums, rowArgs)&lt;br /&gt;
	end&lt;br /&gt;
	renderBelowRow(tbl, args)&lt;br /&gt;
&lt;br /&gt;
	return tbl&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Read the arguments in the order they'll be output in, to make references number in the right order.&lt;br /&gt;
local function readInTheRightOrder(args, groupAliases, listAliases)&lt;br /&gt;
	local _&lt;br /&gt;
	_ = checkAliases(args, commonAliases.title)&lt;br /&gt;
	_ = checkAliases(args, commonAliases.above)&lt;br /&gt;
	for i = 1, 23 do&lt;br /&gt;
		_ = checkAliases(args, groupAliases, i)&lt;br /&gt;
		_ = checkAliases(args, listAliases, i)&lt;br /&gt;
	end&lt;br /&gt;
	_ = checkAliases(args, commonAliases.below)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._navbox(args)&lt;br /&gt;
	if not yesno then&lt;br /&gt;
		yesno = require('Module:Yesno')&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local listnums = {}&lt;br /&gt;
	for k, v in pairs(args) do&lt;br /&gt;
		local listnum = ('' .. k):match('^list(%d+)$') or ('' .. k):match('^список(%d+)$')&lt;br /&gt;
		if listnum then table.insert(listnums, tonumber(listnum)) end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	table.sort(listnums)&lt;br /&gt;
&lt;br /&gt;
	args.border = mw.text.trim(args.border or args[1] or '')&lt;br /&gt;
	if args.border == 'child' then&lt;br /&gt;
		args.border = 'subgroup'&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	for argname, aliasesList in pairs(commonAliases) do&lt;br /&gt;
		args[argname] = checkAliases(args, aliasesList)	&lt;br /&gt;
	end&lt;br /&gt;
	for argname, aliasesList in pairs(standardAliases) do&lt;br /&gt;
		args[argname] = checkAliases(args, aliasesList)	&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	args.navigation = yesno(args.navigation, '')&lt;br /&gt;
	&lt;br /&gt;
	-- render the main body of the navbox&lt;br /&gt;
	local tbl = renderMainTable(args, listnums)&lt;br /&gt;
&lt;br /&gt;
	-- render the appropriate wrapper around the navbox, depending on the border param&lt;br /&gt;
	local res = mw.html.create()&lt;br /&gt;
	if args.border == 'none' then&lt;br /&gt;
		local nav = res:tag('div')&lt;br /&gt;
			:attr('role', 'navigation')&lt;br /&gt;
			:node(tbl)&lt;br /&gt;
		if args.title then&lt;br /&gt;
			nav:attr('aria-labelledby', mw.uri.anchorEncode(args.title))&lt;br /&gt;
		else&lt;br /&gt;
			nav:attr('aria-label', 'Навигационный шаблон')&lt;br /&gt;
		end&lt;br /&gt;
		if args.name and args.name ~= '-' then&lt;br /&gt;
			nav:attr('data-name', args.name)&lt;br /&gt;
		end&lt;br /&gt;
		if args.navigation == true then&lt;br /&gt;
			nav:attr('data-navboxnavigation', '1')&lt;br /&gt;
		elseif args.navigation == false then&lt;br /&gt;
			nav:attr('data-navboxnavigation', '0')&lt;br /&gt;
		end&lt;br /&gt;
	elseif args.border == 'subgroup' then&lt;br /&gt;
		-- We assume that this navbox is being rendered in a list cell of a parent navbox, and is&lt;br /&gt;
		-- therefore inside a div with padding:0em 0.25em. We start with a &amp;lt;/div&amp;gt; to avoid the&lt;br /&gt;
		-- padding being applied, and at the end add a &amp;lt;div&amp;gt; to balance out the parent's &amp;lt;/div&amp;gt;&lt;br /&gt;
		res&lt;br /&gt;
			:wikitext('&amp;lt;/div&amp;gt;') -- XXX: hack due to lack of unclosed support in mw.html.&lt;br /&gt;
			:node(tbl)&lt;br /&gt;
			:wikitext('&amp;lt;div&amp;gt;') -- XXX: hack due to lack of unclosed support in mw.html.&lt;br /&gt;
	else&lt;br /&gt;
		local nav = res:tag('div')&lt;br /&gt;
			:attr('role', 'navigation')&lt;br /&gt;
			:addClass('navbox')&lt;br /&gt;
			:cssText(args.bodystyle)&lt;br /&gt;
			:node(tbl)&lt;br /&gt;
		if args.title then&lt;br /&gt;
			nav:attr('aria-labelledby', mw.uri.anchorEncode(args.title))&lt;br /&gt;
		else&lt;br /&gt;
			nav:attr('aria-label', 'Навигационный шаблон')&lt;br /&gt;
		end&lt;br /&gt;
		if args.name and args.name ~= '-' then&lt;br /&gt;
			nav:attr('data-name', args.name)&lt;br /&gt;
		end&lt;br /&gt;
		if args.navigation == true then&lt;br /&gt;
			nav:attr('data-navboxnavigation', '1')&lt;br /&gt;
		elseif args.navigation == false then&lt;br /&gt;
			nav:attr('data-navboxnavigation', '0')&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	renderTrackingCategories(res, args)&lt;br /&gt;
&lt;br /&gt;
	return striped(tostring(res), args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.navbox(frame)&lt;br /&gt;
	if not getArgs then&lt;br /&gt;
		getArgs = require('Module:Arguments').getArgs&lt;br /&gt;
	end&lt;br /&gt;
	if not yesno then&lt;br /&gt;
		yesno = require('Module:Yesno')&lt;br /&gt;
	end&lt;br /&gt;
	args = getArgs(frame, {wrappers = {'Шаблон:Навигационная таблица', 'Шаблон:Подгруппы навигационной таблицы'}})&lt;br /&gt;
	if frame.args.border then&lt;br /&gt;
		-- This allows Template:Navbox_subgroup to use {{#invoke:Navbox|navbox|border=...}}.&lt;br /&gt;
		args.border = frame.args.border&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	readInTheRightOrder(args, standardElementAliases.group, standardElementAliases.list)&lt;br /&gt;
&lt;br /&gt;
	return p._navbox(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.navboxWithCollapsibleGroups(frame)&lt;br /&gt;
	if not getArgs then&lt;br /&gt;
		getArgs = require('Module:Arguments').getArgs&lt;br /&gt;
	end&lt;br /&gt;
	local args = getArgs(frame, {wrappers = {'Шаблон:Навигационная таблица с блоками'}})&lt;br /&gt;
	&lt;br /&gt;
	readInTheRightOrder(args, groupsChildAliases.title, groupsChildAliases.list1)&lt;br /&gt;
	&lt;br /&gt;
	local parent = {}&lt;br /&gt;
	for argname, aliasesList in pairs(commonAliases) do&lt;br /&gt;
		parent[argname] = checkAliases(args, aliasesList)	&lt;br /&gt;
	end&lt;br /&gt;
	for argname, aliasesList in pairs(groupsParentAliases) do&lt;br /&gt;
		parent[argname] = checkAliases(args, aliasesList)	&lt;br /&gt;
	end&lt;br /&gt;
				&lt;br /&gt;
	for i = 1, 20 do&lt;br /&gt;
		local child = {}&lt;br /&gt;
		for argname, aliasesList in pairs(groupsChildAliases) do&lt;br /&gt;
			child[argname] = checkAliases(args, aliasesList, i)	&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		child.color = child.color and string.format('background:%s;', child.color) or ''&lt;br /&gt;
		child.border = 'child'&lt;br /&gt;
		child.navbar = 'plain'&lt;br /&gt;
	&lt;br /&gt;
		if parent.selected and parent.selected == child.groupname then&lt;br /&gt;
			child.state = 'uncollapsed'&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		child.state = child.state or 'collapsed'&lt;br /&gt;
		&lt;br /&gt;
		child.basestyle = concatStyles{parent.basestyle, parent.secttitlestyle, child.secttitlestyle}&lt;br /&gt;
    	child.titlestyle = concatStyles{parent._groupstyle, child.groupstyle, child.color}&lt;br /&gt;
    	child.liststyle  = concatStyles{parent._liststyle, child.liststyle}&lt;br /&gt;
    	child.lispadding = parent._listpadding&lt;br /&gt;
		&lt;br /&gt;
		if child.title then&lt;br /&gt;
			parent['list' .. i] = p._navbox(child)&lt;br /&gt;
		else&lt;br /&gt;
			parent['list' .. i] = child.list1&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return p._navbox(parent)&lt;br /&gt;
	&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>[[wikipedia:ru:ombox|ombox]]&gt;Stjn</name></author>
	</entry>
</feed>