<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl">
	<id>https://wiki.idzie.xn--t-wha.xn--drog-eta.pl/index.php?action=history&amp;feed=atom&amp;title=Modu%C5%82%3ANavbox</id>
	<title>Moduł:Navbox - Historia wersji</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.idzie.xn--t-wha.xn--drog-eta.pl/index.php?action=history&amp;feed=atom&amp;title=Modu%C5%82%3ANavbox"/>
	<link rel="alternate" type="text/html" href="https://wiki.idzie.xn--t-wha.xn--drog-eta.pl/index.php?title=Modu%C5%82:Navbox&amp;action=history"/>
	<updated>2026-07-10T07:04:47Z</updated>
	<subtitle>Historia wersji tej strony wiki</subtitle>
	<generator>MediaWiki 1.44.2</generator>
	<entry>
		<id>https://wiki.idzie.xn--t-wha.xn--drog-eta.pl/index.php?title=Modu%C5%82:Navbox&amp;diff=799&amp;oldid=prev</id>
		<title>Żółty Kapłan: 1 wersja</title>
		<link rel="alternate" type="text/html" href="https://wiki.idzie.xn--t-wha.xn--drog-eta.pl/index.php?title=Modu%C5%82:Navbox&amp;diff=799&amp;oldid=prev"/>
		<updated>2025-12-07T22:28:36Z</updated>

		<summary type="html">&lt;p&gt;1 wersja&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;pl&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← poprzednia wersja&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Wersja z 00:28, 8 gru 2025&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;4&quot; class=&quot;diff-notice&quot; lang=&quot;pl&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(Brak różnic)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff cache key wiki_droga:diff:1.41:old-798:rev-799 --&gt;
&lt;/table&gt;</summary>
		<author><name>Żółty Kapłan</name></author>
	</entry>
	<entry>
		<id>https://wiki.idzie.xn--t-wha.xn--drog-eta.pl/index.php?title=Modu%C5%82:Navbox&amp;diff=798&amp;oldid=prev</id>
		<title>wpl&gt;Nux: revert, return printlog 🙈</title>
		<link rel="alternate" type="text/html" href="https://wiki.idzie.xn--t-wha.xn--drog-eta.pl/index.php?title=Modu%C5%82:Navbox&amp;diff=798&amp;oldid=prev"/>
		<updated>2025-04-12T14:11:53Z</updated>

		<summary type="html">&lt;p&gt;revert, return printlog 🙈&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nowa strona&lt;/b&gt;&lt;/p&gt;&lt;div&gt;require (&amp;quot;strict&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
local res = mw.loadData(&amp;#039;Moduł:Navbox/res&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
local priv = {} -- private functions scope&lt;br /&gt;
-- expose private for easy testing/debugging&lt;br /&gt;
p.__priv = priv&lt;br /&gt;
&lt;br /&gt;
function priv.encodeClass(name)&lt;br /&gt;
	local t = mw.getContentLanguage():lcfirst(name)&lt;br /&gt;
	local s = mw.ustring.gsub(t, &amp;quot;.&amp;quot;, { [&amp;#039;ł&amp;#039;] = &amp;#039;l&amp;#039;, [&amp;#039;Ł&amp;#039;] = &amp;#039;L&amp;#039;, [&amp;#039;_&amp;#039;] = &amp;#039; &amp;#039;}) -- wstępne zmiany ł-&amp;gt;l i _-&amp;gt; spacja&lt;br /&gt;
	local p = mw.ustring.gsub(s, &amp;quot;%p+&amp;quot;, &amp;quot;-&amp;quot;) -- znaczki nieliterowe na minusy&lt;br /&gt;
	local q = mw.ustring.gsub(p, &amp;quot;%s+&amp;quot;, &amp;quot;_&amp;quot;) -- odstępy na podkreślenia&lt;br /&gt;
	local r = mw.ustring.toNFD(q) -- wyodrębnij diakrytyki&lt;br /&gt;
	local e = string.gsub(r,&amp;quot;[\127-\255]+&amp;quot;,&amp;#039;&amp;#039;) -- usuń to czego nie ma w ASCII&lt;br /&gt;
	return e&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function priv.getPrinter(name)&lt;br /&gt;
	local printer = res.printers[name]&lt;br /&gt;
	return printer and require(printer) or nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function priv.printSubTree(container, tree, currentPrinter, printlog)&lt;br /&gt;
&lt;br /&gt;
	local function printList(container, node, collapsibleContent)&lt;br /&gt;
		local mwCCC = collapsibleContent and &amp;#039;mw-collapsible-content&amp;#039; or nil&lt;br /&gt;
		if #node &amp;lt;= 0 then&lt;br /&gt;
			if printlog then&lt;br /&gt;
				printlog.printedLeafs = (printlog.printedLeafs or 0) + 1&lt;br /&gt;
			end&lt;br /&gt;
			local leaf&lt;br /&gt;
			if (currentPrinter.leaf == &amp;#039;table&amp;#039;) and mwCCC then&lt;br /&gt;
				-- zwijanie tabelki i skórka timeless się gryzą&lt;br /&gt;
				leaf = container:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
					:addClass(mwCCC)&lt;br /&gt;
					:tag(currentPrinter.leaf)&lt;br /&gt;
			elseif currentPrinter.leaf then&lt;br /&gt;
				leaf = container:tag(currentPrinter.leaf)&lt;br /&gt;
					:addClass(mwCCC)&lt;br /&gt;
			else&lt;br /&gt;
				leaf = container&lt;br /&gt;
					:addClass(mwCCC)&lt;br /&gt;
			end&lt;br /&gt;
			if currentPrinter.update then currentPrinter.update(leaf, true, node, printlog) end&lt;br /&gt;
			leaf&lt;br /&gt;
				:addClass(node.odd())&lt;br /&gt;
				:addClass(node.even())&lt;br /&gt;
				:newline()&lt;br /&gt;
				:wikitext(node.get(res.arg.list.name))&lt;br /&gt;
				:newline()&lt;br /&gt;
		else&lt;br /&gt;
			local subprinter = priv.getPrinter(node.peek(res.arg.list.name))&lt;br /&gt;
			if subprinter then&lt;br /&gt;
				node.use(res.arg.list.name)&lt;br /&gt;
			else&lt;br /&gt;
				subprinter = priv.getPrinter(true)&lt;br /&gt;
			end&lt;br /&gt;
			local subtag = subprinter.root or subprinter.leaf or &amp;#039;div&amp;#039;&lt;br /&gt;
			local subtree = ((subtag == &amp;#039;table&amp;#039;) and mwCCC)&lt;br /&gt;
				and container:tag(&amp;#039;div&amp;#039;):addClass(mwCCC):tag(subtag) -- zwijanie tabelki i skórka timeless się gryzą&lt;br /&gt;
				or container:tag(subtag):addClass(mwCCC)&lt;br /&gt;
			if currentPrinter.update then currentPrinter.update(subtree, false, node, printlog) end&lt;br /&gt;
			priv.printSubTree(subtree, node, subprinter, printlog)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	currentPrinter.print(container, tree, printList, printlog)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function priv.argsService(templateContext)&lt;br /&gt;
	local args = {}&lt;br /&gt;
&lt;br /&gt;
	local function add(k, v, prefix)&lt;br /&gt;
		if v and #v &amp;gt; 0 then&lt;br /&gt;
			args[k] = v&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local peekName = function(name)&lt;br /&gt;
		if not args[name] and templateContext and templateContext.aliases then&lt;br /&gt;
			local alias = templateContext.aliases[name]&lt;br /&gt;
			if alias and args[alias] then&lt;br /&gt;
				return alias&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		return name&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function peek(name)&lt;br /&gt;
		return args[peekName(name)]&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local function get(name)&lt;br /&gt;
		return peek(peekName(name)) or (res.aux.missingArgNamePrefix..name..res.aux.missingArgNameSuffix)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local function dump()&lt;br /&gt;
		return mw.text.jsonEncode(args)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return {&lt;br /&gt;
		add = add,&lt;br /&gt;
		peek = peek,&lt;br /&gt;
		use = peek,&lt;br /&gt;
		get = get,&lt;br /&gt;
		dump = dump,&lt;br /&gt;
	}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function priv.loadArgsTree(args, printlog, templateContext)&lt;br /&gt;
&lt;br /&gt;
	local dynamicArgs = {}&lt;br /&gt;
	for k, v in pairs(res.arg) do&lt;br /&gt;
		if templateContext and templateContext.aliases then&lt;br /&gt;
			local alias = templateContext.aliases[v.name]&lt;br /&gt;
			if v.dynamic and alias then dynamicArgs[alias] = v.dynamic end&lt;br /&gt;
		end&lt;br /&gt;
		if v.dynamic then dynamicArgs[v.name] = v.dynamic end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local splitArgName = function(name)&lt;br /&gt;
		if type(name) ~= &amp;quot;string&amp;quot; then&lt;br /&gt;
			--mw.logObject(name, &amp;quot;to nie jest tekst&amp;quot;)&lt;br /&gt;
			return false, nil&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		local prefix, suffix = mw.ustring.match(name, &amp;quot;^(.-)([1-9][%.0-9]*)$&amp;quot;)&lt;br /&gt;
		if not prefix or not dynamicArgs[prefix] then&lt;br /&gt;
			--mw.logObject(name, &amp;quot;wzór nie pasuje lub nierozpoznany&amp;quot;)&lt;br /&gt;
			return false, nil&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		local keys = mw.text.split(suffix,&amp;#039;.&amp;#039;,true)&lt;br /&gt;
		for i = 1, #keys do&lt;br /&gt;
			keys[i] = tonumber(keys[i])&lt;br /&gt;
			if not keys[i] or (keys[i] == 0) then&lt;br /&gt;
				--mw.logObject({name, keys, i, keys[i]}, &amp;quot;wzór ma błędy&amp;quot;)&lt;br /&gt;
				return false, nil&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		return prefix, keys&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local updateIndex = function(node, k)&lt;br /&gt;
		node.index = node.index or {}&lt;br /&gt;
		for i, v in ipairs(node.index) do&lt;br /&gt;
			if v == k then&lt;br /&gt;
				return&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		table.insert(node.index, k)&lt;br /&gt;
		table.sort(node.index)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local argsTree = not printlog&lt;br /&gt;
		and priv.argsService(templateContext)&lt;br /&gt;
		or require(&amp;#039;Moduł:Navbox/diag&amp;#039;).argsService(templateContext)&lt;br /&gt;
	local argsTree_add = argsTree.add&lt;br /&gt;
	argsTree.add = nil&lt;br /&gt;
	local argsTree_tree = nil&lt;br /&gt;
&lt;br /&gt;
	local tree = function()&lt;br /&gt;
		if not argsTree_tree or (#argsTree_tree &amp;lt;= 0) then&lt;br /&gt;
			return nil&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		local function createNode(v)&lt;br /&gt;
			&lt;br /&gt;
			local peekName = function(name)&lt;br /&gt;
				if not v.address then&lt;br /&gt;
					return nil&lt;br /&gt;
				end&lt;br /&gt;
				&lt;br /&gt;
				if argsTree.peek(name..v.address) then&lt;br /&gt;
					return name..v.address&lt;br /&gt;
				end&lt;br /&gt;
				&lt;br /&gt;
				if templateContext and templateContext.aliases then&lt;br /&gt;
					local alias = templateContext.aliases[name]&lt;br /&gt;
					if alias and peek(alias..v.address) then&lt;br /&gt;
						return alias..v.address&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 node = {&lt;br /&gt;
				address = function() return v.address and &amp;quot;a&amp;quot;..string.gsub(v.address, &amp;#039;%.&amp;#039;, &amp;#039;_&amp;#039;) or nil end,&lt;br /&gt;
				peek = function(name)&lt;br /&gt;
					return peekName(name)&lt;br /&gt;
						and argsTree.peek(peekName(name))&lt;br /&gt;
						or (templateContext and templateContext.defaults and templateContext.defaults[name])&lt;br /&gt;
				end,&lt;br /&gt;
				use = function(name) return peekName(name) and argsTree.use(peekName(name)) or nil end,&lt;br /&gt;
				get = function(name) return peekName(name) and argsTree.get(peekName(name)) or nil end,&lt;br /&gt;
				odd = function() return v.odd and res.class.odd or nil end,&lt;br /&gt;
				even = function() return v.even and res.class.even or nil end,&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
			local function calculateTest()&lt;br /&gt;
				local pattern = mw.loadData(&amp;quot;Moduł:Navbox/title&amp;quot;).wikilinkPattern&lt;br /&gt;
				local s1 = argsTree.peek(res.arg.group.name..v.address)&lt;br /&gt;
				if s1 and mw.ustring.match(s1, pattern) then return true end&lt;br /&gt;
				local s2 = argsTree.peek(res.arg.list.name..v.address)&lt;br /&gt;
				if s2 and mw.ustring.match(s2, pattern) then return true end&lt;br /&gt;
				for i, n in ipairs(node) do&lt;br /&gt;
					if n.test(pattern) then return true end&lt;br /&gt;
				end&lt;br /&gt;
				return false&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			local testCache&lt;br /&gt;
&lt;br /&gt;
			node.test = function()&lt;br /&gt;
				if testCache == nil then&lt;br /&gt;
					testCache = calculateTest()&lt;br /&gt;
				end&lt;br /&gt;
				&lt;br /&gt;
				return testCache&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			return node&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		local function buildTree(buffer, tree)&lt;br /&gt;
			for i, v in ipairs(tree.index) do&lt;br /&gt;
				local data = tree[v]&lt;br /&gt;
				local node = createNode(data)&lt;br /&gt;
				table.insert(buffer, node)&lt;br /&gt;
				if data.index then&lt;br /&gt;
					buildTree(node, data)&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		local rootNode = createNode({})&lt;br /&gt;
		buildTree(rootNode, argsTree_tree)&lt;br /&gt;
		return rootNode&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function analyzeArg(k, v, prefix, keys)&lt;br /&gt;
		argsTree_add(k, v, prefix)&lt;br /&gt;
		if prefix and v and (#v &amp;gt; 0) then&lt;br /&gt;
			argsTree_tree = argsTree_tree or {}&lt;br /&gt;
			local node = argsTree_tree&lt;br /&gt;
			for i = 1, #keys do&lt;br /&gt;
				local k = keys[i]&lt;br /&gt;
				local child = node[k]&lt;br /&gt;
				updateIndex(node, k)&lt;br /&gt;
				if not child then&lt;br /&gt;
					child = {&lt;br /&gt;
						address = node.address and (node.address..&amp;#039;.&amp;#039;..tostring(k)) or tostring(k),&lt;br /&gt;
					}&lt;br /&gt;
					node[k] = child&lt;br /&gt;
				end&lt;br /&gt;
				&lt;br /&gt;
				node = child&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	for k, v in pairs(args) do&lt;br /&gt;
		local prefix, keys = splitArgName(k)&lt;br /&gt;
		local json, subargs&lt;br /&gt;
		if (prefix == res.arg.list.name) and v and (#v &amp;gt; 0) then&lt;br /&gt;
			json, subargs = pcall(mw.text.jsonDecode, v)&lt;br /&gt;
		end&lt;br /&gt;
		if json then&lt;br /&gt;
			--analyzeArg(k, &amp;#039;* szablon *&amp;#039;, prefix, keys)&lt;br /&gt;
			for vk, vv in pairs(subargs) do&lt;br /&gt;
				local vprefix, vkeys = splitArgName(vk)&lt;br /&gt;
				if not vprefix and (vk == res.arg.list.name) then&lt;br /&gt;
					vprefix = vk&lt;br /&gt;
					vkeys = {}&lt;br /&gt;
				end&lt;br /&gt;
				if vprefix and prefix then&lt;br /&gt;
					local newKeys = {}&lt;br /&gt;
					for j, u in ipairs(keys) do table.insert(newKeys, u) end&lt;br /&gt;
					for j, u in ipairs(vkeys) do table.insert(newKeys, u) end&lt;br /&gt;
					local n = {}&lt;br /&gt;
					for j, u in ipairs(newKeys) do table.insert(n, tostring(u)) end&lt;br /&gt;
					local name = vprefix..table.concat(n, &amp;#039;.&amp;#039;)&lt;br /&gt;
					analyzeArg(name, vv, vprefix, newKeys)&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			analyzeArg(k, v, prefix, keys)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if templateContext and priv.getPrinter(templateContext.list) then&lt;br /&gt;
		analyzeArg(res.arg.list.name, templateContext.list, nil, nil)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if argsTree_tree then&lt;br /&gt;
		local tree = argsTree_tree&lt;br /&gt;
&lt;br /&gt;
		local function loadLeafNodes(tree, buffer, level)&lt;br /&gt;
			if not tree.index then&lt;br /&gt;
				table.insert(buffer, tree)&lt;br /&gt;
			else&lt;br /&gt;
				local n = level&lt;br /&gt;
				for i, v in ipairs(tree.index) do&lt;br /&gt;
					local k = loadLeafNodes(tree[v], buffer, level + 1)&lt;br /&gt;
					if k &amp;gt; n then&lt;br /&gt;
						n = k&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
				&lt;br /&gt;
				level = n&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			return level&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		local buffer = {}&lt;br /&gt;
		local levels = loadLeafNodes(tree, buffer, 0)&lt;br /&gt;
		for i, v in ipairs(buffer) do&lt;br /&gt;
			v.odd = (i % 2) == 1&lt;br /&gt;
			v.even = (i % 2) == 0&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if printlog then&lt;br /&gt;
			printlog.levels = levels&lt;br /&gt;
			printlog.leafs = #buffer&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	argsTree.tree = tree&lt;br /&gt;
&lt;br /&gt;
	--mw.logObject(printlog, &amp;#039;printlog&amp;#039;)&lt;br /&gt;
	--mw.logObject(argsTree, &amp;#039;argsTree&amp;#039;)&lt;br /&gt;
	return argsTree&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function priv.drawMiniNavBar(container, title, tags)&lt;br /&gt;
	local pde = container:tag(&amp;#039;ul&amp;#039;)&lt;br /&gt;
		:addClass(&amp;#039;tnavbar&amp;#039;)&lt;br /&gt;
		:addClass(&amp;#039;noprint&amp;#039;)&lt;br /&gt;
		:addClass(&amp;#039;plainlinks&amp;#039;)&lt;br /&gt;
		:addClass(&amp;#039;hlist&amp;#039;)&lt;br /&gt;
	-- p&lt;br /&gt;
	local p = pde:tag(&amp;#039;li&amp;#039;):wikitext(&amp;quot;[[&amp;quot;, title.nsText, &amp;#039;:&amp;#039;, title.text, &amp;#039;|&amp;#039;)&lt;br /&gt;
	p:tag(&amp;#039;span&amp;#039;):attr(&amp;#039;title&amp;#039;, res.navbar.p):wikitext(tags.p)&lt;br /&gt;
	p:wikitext(&amp;#039;]]&amp;#039;)&lt;br /&gt;
	-- d&lt;br /&gt;
	if not title.isTalkPage then&lt;br /&gt;
		local tt = title.talkPageTitle&lt;br /&gt;
		local d = pde:tag(&amp;#039;li&amp;#039;):wikitext(&amp;quot;[[&amp;quot;, tt.nsText, &amp;#039;:&amp;#039;, tt.text, &amp;#039;|&amp;#039;)&lt;br /&gt;
		d:tag(&amp;#039;span&amp;#039;):attr(&amp;#039;title&amp;#039;, res.navbar.d):wikitext(tags.d)&lt;br /&gt;
		d:wikitext(&amp;#039;]]&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	-- e&lt;br /&gt;
	pde:tag(&amp;#039;li&amp;#039;)&lt;br /&gt;
		:attr(&amp;#039;title&amp;#039;, res.navbar.e)&lt;br /&gt;
		:wikitext(&amp;#039;[&amp;#039;, title:fullUrl(&amp;quot;action=edit&amp;quot;), &amp;#039; &amp;#039;, tags.e, &amp;#039;]&amp;#039;)&lt;br /&gt;
	-- U&lt;br /&gt;
	if mw.title.equals(title, mw.title.getCurrentTitle()) and (title.namespace == 10) then&lt;br /&gt;
		local fullpagenamee = mw.uri.encode(title.fullText, &amp;quot;WIKI&amp;quot;)&lt;br /&gt;
		pde:tag(&amp;#039;li&amp;#039;)&lt;br /&gt;
			:attr(&amp;#039;title&amp;#039;, res.navbar.U)&lt;br /&gt;
			:wikitext(&amp;#039;[https://tools.wmflabs.org/templatetransclusioncheck/index.php?lang=pl&amp;amp;name=&amp;#039;, fullpagenamee, &amp;#039; &amp;#039;, tags.U, &amp;#039;]&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function priv.splitCustomClasses(customClasses, navboxName)&lt;br /&gt;
	if not customClasses then&lt;br /&gt;
		return {}&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local result = {}&lt;br /&gt;
	local cc = mw.text.split(customClasses,&amp;quot;%s+&amp;quot;)&lt;br /&gt;
	for i, v in ipairs(cc) do&lt;br /&gt;
		result[v] = res.validExtraClasses[v] ~= nil&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- pionowy szablon tylko na początku artykułu&lt;br /&gt;
	if result.pionowy and navboxName then&lt;br /&gt;
		local title = mw.title.getCurrentTitle()&lt;br /&gt;
		if title and title.namespace == 0 then&lt;br /&gt;
			local content = title:getContent()&lt;br /&gt;
			if content then&lt;br /&gt;
				local navboxStart = mw.ustring.find(content, &amp;quot;{{%s*&amp;quot;..mw.ustring.gsub( navboxName, &amp;quot;([%(%)%.%%%+%-%*%?%[%^%$%]])&amp;quot;, &amp;quot;%%%1&amp;quot; )..&amp;quot;%s*}}&amp;quot;)&lt;br /&gt;
				if navboxStart then&lt;br /&gt;
					local firstSectionStart = mw.ustring.find(content, &amp;quot;\n==.-==[ \t]*\n&amp;quot;)&lt;br /&gt;
					if firstSectionStart and (firstSectionStart &amp;lt; navboxStart) then&lt;br /&gt;
						mw.logObject(result, &amp;quot;splitCustomClasses KASUJĘ pionowy bo nie jest na początku artykułu&amp;quot;)&lt;br /&gt;
						result.pionowy = false&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function priv.makeContainer(args, title, contentTag, printlog)&lt;br /&gt;
	local templateClassName = (title and (title.namespace &amp;gt; 0) and not title.isTalkPage)&lt;br /&gt;
		and priv.encodeClass(title.namespace == 10 and title.text or title.fullText)&lt;br /&gt;
		or nil&lt;br /&gt;
	local builder = mw.html.create(&amp;#039;div&amp;#039;)&lt;br /&gt;
		:addClass(res.class.navbox)&lt;br /&gt;
		:addClass(&amp;#039;do-not-make-smaller&amp;#039;)&lt;br /&gt;
	local classes = priv.splitCustomClasses(args.use(res.arg.class.name), args.peek(res.arg.name.name))&lt;br /&gt;
	for c, valid in pairs(classes) do&lt;br /&gt;
		builder:addClass((valid and res.validExtraClasses[c]) and c or nil)&lt;br /&gt;
	end&lt;br /&gt;
	if title and mw.title.equals(title, mw.title.getCurrentTitle()) or (classes[templateClassName] ~= nil) then&lt;br /&gt;
		builder:addClass(templateClassName and res.class.name..templateClassName or nil)&lt;br /&gt;
	end&lt;br /&gt;
	builder:wikitext(mw.getCurrentFrame():extensionTag( &amp;#039;templatestyles&amp;#039;, &amp;#039;&amp;#039;, {src = &amp;quot;Szablon:Navbox/styles.css&amp;quot;}))&lt;br /&gt;
	local privateCSS = false&lt;br /&gt;
	if classes[templateClassName] ~= nil then&lt;br /&gt;
		privateCSS = tostring(title.fullText..&amp;quot;/styles.css&amp;quot;)&lt;br /&gt;
		builder:wikitext(mw.getCurrentFrame():extensionTag( &amp;#039;templatestyles&amp;#039;, &amp;#039;&amp;#039;, {src = privateCSS}))&lt;br /&gt;
	end&lt;br /&gt;
	if not classes.pionowy then&lt;br /&gt;
		builder:addClass(&amp;#039;mw-collapsible&amp;#039;):attr(&amp;#039;data-expandtext&amp;#039;, res.aux.expandText):attr(&amp;#039;data-collapsetext&amp;#039;, res.aux.collapseText)&lt;br /&gt;
		&lt;br /&gt;
		local collapse = function()&lt;br /&gt;
			if mw.title.getCurrentTitle().namespace == 0 then&lt;br /&gt;
				return &amp;#039;mw-collapsed&amp;#039;&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			if args.peek(res.arg.collapsible.name) == res.arg.collapsible.collapsed then&lt;br /&gt;
				return &amp;#039;mw-collapsed&amp;#039;&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			if mw.title.getCurrentTitle().namespace ~= 10 then&lt;br /&gt;
				return &amp;#039;autocollapse&amp;#039;&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			return nil&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if title then&lt;br /&gt;
			builder:addClass(not mw.title.equals(title, mw.title.getCurrentTitle()) and collapse() or nil)&lt;br /&gt;
			priv.drawMiniNavBar(builder, title, res.navbar.mini)&lt;br /&gt;
		else&lt;br /&gt;
			builder&lt;br /&gt;
				:addClass(mw.title.getCurrentTitle().namespace ~= 10 and collapse() or nil)&lt;br /&gt;
				:tag(&amp;#039;span&amp;#039;):addClass(res.navbar.fake)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	builder:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
		:addClass(res.class.caption)&lt;br /&gt;
		:wikitext(args.get(res.arg.title.name))&lt;br /&gt;
	local content&lt;br /&gt;
	if not args.peek(res.arg.above.name) and not args.peek(res.arg.below.name) and not args.peek(res.arg.before.name) and not args.peek(res.arg.after.name) and not classes.pionowy then&lt;br /&gt;
		if contentTag == &amp;#039;table&amp;#039; then -- zwijanie tabeli gryzie się ze skórką timeless&lt;br /&gt;
			content = builder:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
				:addClass(&amp;#039;mw-collapsible-content&amp;#039;)&lt;br /&gt;
				:tag(contentTag)&lt;br /&gt;
		else&lt;br /&gt;
			content = builder:tag(contentTag)&lt;br /&gt;
				:addClass(&amp;#039;mw-collapsible-content&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
	elseif not args.peek(res.arg.above.name) and not args.peek(res.arg.below.name) and not classes.pionowy then&lt;br /&gt;
		local flex = builder:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
			:addClass(&amp;#039;mw-collapsible-content&amp;#039;)&lt;br /&gt;
			:addClass(res.class.flex)&lt;br /&gt;
		if args.peek(res.arg.before.name) then flex:tag(&amp;#039;div&amp;#039;):addClass(res.class.before):newline():wikitext(args.get(res.arg.before.name)):newline() end&lt;br /&gt;
		content = flex:tag(contentTag)&lt;br /&gt;
		if args.peek(res.arg.after.name) then flex:tag(&amp;#039;div&amp;#039;):addClass(res.class.after):newline():wikitext(args.get(res.arg.after.name)):newline() end&lt;br /&gt;
	else&lt;br /&gt;
		local content1 = builder:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
			:addClass(&amp;#039;mw-collapsible-content&amp;#039;)&lt;br /&gt;
		if args.peek(res.arg.above.name) then content1:tag(&amp;#039;div&amp;#039;):addClass(res.class.hlist):addClass(res.class.above):newline():wikitext(args.get(res.arg.above.name)):newline() end&lt;br /&gt;
		local flex = (not classes.pionowy and ((args.peek(res.arg.before.name) or args.peek(res.arg.after.name)))) and content1:tag(&amp;#039;div&amp;#039;):addClass(res.class.flex) or content1&lt;br /&gt;
		if args.peek(res.arg.before.name) then flex:tag(&amp;#039;div&amp;#039;):addClass(res.class.before):newline():wikitext(args.get(res.arg.before.name)):newline() end&lt;br /&gt;
		content = flex:tag(contentTag)&lt;br /&gt;
		if args.peek(res.arg.after.name) then flex:tag(&amp;#039;div&amp;#039;):addClass(res.class.after):newline():wikitext(args.get(res.arg.after.name)):newline() end&lt;br /&gt;
		if (title and classes.pionowy) or args.peek(res.arg.below.name) then&lt;br /&gt;
			local below = content1:tag(&amp;#039;div&amp;#039;):addClass(res.class.hlist):addClass(res.class.below)&lt;br /&gt;
			if args.peek(res.arg.below.name) then&lt;br /&gt;
				below:newline():wikitext(args.get(res.arg.below.name)):newline()&lt;br /&gt;
			end&lt;br /&gt;
			if title and classes.pionowy then&lt;br /&gt;
				if args.peek(res.arg.below.name) then&lt;br /&gt;
					below:wikitext(&amp;quot;----&amp;quot;):newline()&lt;br /&gt;
				end&lt;br /&gt;
				priv.drawMiniNavBar(below, title, res.navbar.short)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	content:addClass(res.class.main)&lt;br /&gt;
	for c, valid in pairs(classes) do&lt;br /&gt;
		content:addClass((valid and not res.validExtraClasses[c]) and c or nil)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if printlog then&lt;br /&gt;
		printlog.pionowy = classes.pionowy&lt;br /&gt;
		printlog.templateClassName = templateClassName&lt;br /&gt;
		printlog.privateCSS = privateCSS&lt;br /&gt;
		for c, valid in pairs(classes) do&lt;br /&gt;
			if not valid and (c ~= templateClassName) then&lt;br /&gt;
				local u = printlog.unknownClasses or {}&lt;br /&gt;
				table.insert(u, c)&lt;br /&gt;
				printlog.unknownClasses = u&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return builder, content&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function priv.createNavbox(args, title, printlog)&lt;br /&gt;
	local rootPrinter = priv.getPrinter(args.peek(res.arg.list.name))&lt;br /&gt;
	if rootPrinter then&lt;br /&gt;
		args.use(res.arg.list.name)&lt;br /&gt;
	end&lt;br /&gt;
	local rootTree = args.tree()&lt;br /&gt;
	local rootTag = &amp;#039;div&amp;#039;&lt;br /&gt;
	if rootTree then&lt;br /&gt;
		rootPrinter = rootPrinter or priv.getPrinter(true)&lt;br /&gt;
		rootTag = rootPrinter and (rootPrinter.root or rootPrinter.leaf) or &amp;#039;div&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	local builder, content = priv.makeContainer(args, title, rootTag, printlog)&lt;br /&gt;
	if rootTree then&lt;br /&gt;
		priv.printSubTree(content, rootTree, rootPrinter or priv.getPrinter(true), printlog)&lt;br /&gt;
	elseif not rootPrinter and args.peek(res.arg.list.name) then&lt;br /&gt;
		if printlog then printlog.notree = true end&lt;br /&gt;
		content&lt;br /&gt;
			:newline()&lt;br /&gt;
			:wikitext(args.get(res.arg.list.name))&lt;br /&gt;
			:newline()&lt;br /&gt;
	else&lt;br /&gt;
		if printlog then printlog.example = true end&lt;br /&gt;
		local exampleTree = {{&lt;br /&gt;
			address = function() return res.class.address..&amp;quot;1&amp;quot; end,&lt;br /&gt;
			peek = function(name) return nil end,&lt;br /&gt;
			use = function(name) return nil end,&lt;br /&gt;
			get = function(name) return args.get(name..&amp;quot;1&amp;quot;) end,&lt;br /&gt;
			odd = function(name) return nil end,&lt;br /&gt;
			even = function(name) return nil end,&lt;br /&gt;
		}}&lt;br /&gt;
		priv.printSubTree(content, exampleTree, rootPrinter or priv.getPrinter(true), printlog)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return not printlog and tostring(builder) or require(&amp;#039;Moduł:Navbox/diag&amp;#039;).diagnosticView(builder, args, printlog)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.Navbox(frame)&lt;br /&gt;
	local title = mw.title.new(frame:getParent():getTitle())&lt;br /&gt;
	local printlog = mw.title.equals(title,mw.title.getCurrentTitle()) and {} or nil&lt;br /&gt;
	local args = priv.loadArgsTree(frame.args, printlog)&lt;br /&gt;
	return priv.createNavbox(args, title, printlog)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.Template(frame)&lt;br /&gt;
	local rawArgs = frame:getParent().args&lt;br /&gt;
&lt;br /&gt;
	local title = frame:getParent():getTitle()&lt;br /&gt;
	mw.log(&amp;#039;\n== &amp;#039;..title..&amp;#039; ==\n&amp;#039;)&lt;br /&gt;
	local name = rawArgs[res.arg.name.name]&lt;br /&gt;
	local titleObject = (name and (#name &amp;gt; 0)) and mw.title.new(name, &amp;quot;Template&amp;quot;) or nil&lt;br /&gt;
&lt;br /&gt;
	local printlog = priv.verifyTemplateTitle(title, name, titleObject)&lt;br /&gt;
	return priv.Template(rawArgs, frame.args.context, titleObject, printlog)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function priv.verifyTemplateTitle(title, name, expectedTitle)&lt;br /&gt;
	-- specjalne traktowanie nazwy&lt;br /&gt;
	local printlog = false&lt;br /&gt;
	if expectedTitle then&lt;br /&gt;
		local currentTitle = mw.title.getCurrentTitle()&lt;br /&gt;
		if (currentTitle.namespace == expectedTitle.namespace)&lt;br /&gt;
		and (currentTitle.namespace ~= 0) -- bez artykułów&lt;br /&gt;
		and (currentTitle.namespace ~= 2) -- bez brudnopisów&lt;br /&gt;
		and not currentTitle.isTalkPage&lt;br /&gt;
		and (currentTitle.subpageText ~= res.aux.docSubpageText) -- bez opisów&lt;br /&gt;
		and (not expectedTitle.exists or not require(&amp;#039;Moduł:Navbox/diag&amp;#039;).verifyTemplateName(currentTitle, expectedTitle, title)) then&lt;br /&gt;
			printlog = {}&lt;br /&gt;
			printlog.badName = true&lt;br /&gt;
		elseif mw.title.equals(currentTitle, expectedTitle) then&lt;br /&gt;
			printlog = {}&lt;br /&gt;
		end&lt;br /&gt;
	elseif name and (#name &amp;gt; 0) then&lt;br /&gt;
		-- tutaj nie ma żadnych możliwości sprawdzenia czy to jest szablon&lt;br /&gt;
		-- czy jego transkluzja&lt;br /&gt;
		local currentTitle = mw.title.getCurrentTitle()&lt;br /&gt;
		if (currentTitle.namespace ~= 0) and not currentTitle.isTalkSpace then&lt;br /&gt;
			printlog = {}&lt;br /&gt;
			printlog.badName = true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return printlog&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function priv.Template(rawArgs, context, titleObject, printlog)&lt;br /&gt;
&lt;br /&gt;
	local status, templateContext = pcall(mw.text.jsonDecode, context or &amp;#039;[]&amp;#039;)&lt;br /&gt;
	if not status then&lt;br /&gt;
--		mw.logObject(context, templateContext)&lt;br /&gt;
		templateContext = {}&lt;br /&gt;
	end&lt;br /&gt;
--	mw.logObject(templateContext, &amp;#039;templateContext&amp;#039;)&lt;br /&gt;
	&lt;br /&gt;
	local args = priv.loadArgsTree(rawArgs, printlog, templateContext)&lt;br /&gt;
	if args.peek(res.arg.name.name) then args.use(res.arg.name.name) end&lt;br /&gt;
	--mw.logObject(mw.text.jsonDecode(args.dump()), &amp;#039;args.dump()&amp;#039;)&lt;br /&gt;
	if printlog and templateContext.list then&lt;br /&gt;
		printlog.useTemplateCategories = true&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local navbox = args.peek(res.arg.name.name)&lt;br /&gt;
		or args.peek(res.arg.title.name)&lt;br /&gt;
		or args.peek(res.arg.class.name)&lt;br /&gt;
		or args.peek(res.arg.above.name)&lt;br /&gt;
		or args.peek(res.arg.below.name)&lt;br /&gt;
		or args.peek(res.arg.before.name)&lt;br /&gt;
		or args.peek(res.arg.after.name)&lt;br /&gt;
	if navbox then&lt;br /&gt;
--		mw.log(&amp;quot;----&amp;gt; createNavbox&amp;quot;)&lt;br /&gt;
		return priv.createNavbox(args, titleObject, printlog)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
--		mw.log(&amp;quot;----&amp;gt; dump&amp;quot;)&lt;br /&gt;
	return args.dump()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>wpl&gt;Nux</name></author>
	</entry>
</feed>