<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl">
	<id>https://bajkowscy.pl/mw22/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://bajkowscy.pl/mw22/index.php?action=history&amp;feed=atom&amp;title=Modu%C5%82%3ANavbox"/>
	<link rel="alternate" type="text/html" href="https://bajkowscy.pl/mw22/index.php?title=Modu%C5%82:Navbox&amp;action=history"/>
	<updated>2026-04-21T02:52:01Z</updated>
	<subtitle>Historia wersji tej strony wiki</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://bajkowscy.pl/mw22/index.php?title=Modu%C5%82:Navbox&amp;diff=2055&amp;oldid=prev</id>
		<title>pl&gt;Paweł Ziemian: sprawdzam czy pionowy szablon nawigacyjny jest umieszczony na początku artykułu</title>
		<link rel="alternate" type="text/html" href="https://bajkowscy.pl/mw22/index.php?title=Modu%C5%82:Navbox&amp;diff=2055&amp;oldid=prev"/>
		<updated>2021-08-27T22:07:24Z</updated>

		<summary type="html">&lt;p&gt;sprawdzam czy pionowy szablon nawigacyjny jest umieszczony na początku artykułu&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nowa strona&lt;/b&gt;&lt;/p&gt;&lt;div&gt;require (&amp;quot;Moduł:No globals&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 function 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;
local function 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;
local function 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 = 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 = 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;
			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;
local function 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;
local function 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 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 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;
local function 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;
local function 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;
local function 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 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 = 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 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;
			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;
				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;
local function createNavbox(args, title, printlog)&lt;br /&gt;
	local rootPrinter = 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 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 = makeContainer(args, title, rootTag, printlog)&lt;br /&gt;
	if rootTree then&lt;br /&gt;
		printSubTree(content, rootTree, rootPrinter or 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;
		printSubTree(content, exampleTree, rootPrinter or 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;
return {&lt;br /&gt;
	&lt;br /&gt;
[&amp;quot;Navbox&amp;quot;] = function(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 = loadArgsTree(frame.args, printlog)&lt;br /&gt;
	return createNavbox(args, title, printlog)&lt;br /&gt;
end,&lt;br /&gt;
&lt;br /&gt;
[&amp;quot;Template&amp;quot;] = function(frame)&lt;br /&gt;
	mw.log(&amp;#039;\n== &amp;#039;..frame:getParent():getTitle()..&amp;#039; ==\n&amp;#039;)&lt;br /&gt;
	-- specjalne traktowanie nazwy&lt;br /&gt;
	local name = frame:getParent().args[res.arg.name.name]&lt;br /&gt;
	local expectedTitle = (name and (#name &amp;gt; 0)) and mw.title.new(name, &amp;quot;Template&amp;quot;) or nil&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, frame:getParent():getTitle())) 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;
	&lt;br /&gt;
	local status, templateContext = pcall(mw.text.jsonDecode, frame.args.context or &amp;#039;[]&amp;#039;)&lt;br /&gt;
	if not status then&lt;br /&gt;
--		mw.logObject(frame.args.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 = loadArgsTree(frame:getParent().args, 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 createNavbox(args, expectedTitle, 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;
}&lt;/div&gt;</summary>
		<author><name>pl&gt;Paweł Ziemian</name></author>
	</entry>
</feed>