<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://conductors.wiki/index.php?action=history&amp;feed=atom&amp;title=Module%3AContents_topic_list</id>
	<title>Module:Contents topic list - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://conductors.wiki/index.php?action=history&amp;feed=atom&amp;title=Module%3AContents_topic_list"/>
	<link rel="alternate" type="text/html" href="https://conductors.wiki/index.php?title=Module:Contents_topic_list&amp;action=history"/>
	<updated>2026-06-05T17:33:27Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://conductors.wiki/index.php?title=Module:Contents_topic_list&amp;diff=220&amp;oldid=prev</id>
		<title>N.Sorokin: Created page with &quot;require(&#039;strict&#039;)  local getArgs = require(&#039;Module:Arguments&#039;).getArgs local p = {}  -- Close &lt;li&gt; and &lt;ul&gt; elements enclosing deeper depths local function closePending(toClose, depth) 	local out = &#039;&#039; 	 	while #toClose &gt; 0 and (toClose[#toClose].depth &gt;= depth or depth == 0) do 		out = out .. toClose[#toClose].close 		table.remove(toClose, #toClose) 	end 	 	return out end  function p.main(frame) 	local args = getArgs(frame) 	local wikitext = frame:preprocess(args[1]) 	lo...&quot;</title>
		<link rel="alternate" type="text/html" href="https://conductors.wiki/index.php?title=Module:Contents_topic_list&amp;diff=220&amp;oldid=prev"/>
		<updated>2025-12-08T09:17:00Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;require(&amp;#039;strict&amp;#039;)  local getArgs = require(&amp;#039;Module:Arguments&amp;#039;).getArgs local p = {}  -- Close &amp;lt;li&amp;gt; and &amp;lt;ul&amp;gt; elements enclosing deeper depths local function closePending(toClose, depth) 	local out = &amp;#039;&amp;#039; 	 	while #toClose &amp;gt; 0 and (toClose[#toClose].depth &amp;gt;= depth or depth == 0) do 		out = out .. toClose[#toClose].close 		table.remove(toClose, #toClose) 	end 	 	return out end  function p.main(frame) 	local args = getArgs(frame) 	local wikitext = frame:preprocess(args[1]) 	lo...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;require(&amp;#039;strict&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
local getArgs = require(&amp;#039;Module:Arguments&amp;#039;).getArgs&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
-- Close &amp;lt;li&amp;gt; and &amp;lt;ul&amp;gt; elements enclosing deeper depths&lt;br /&gt;
local function closePending(toClose, depth)&lt;br /&gt;
	local out = &amp;#039;&amp;#039;&lt;br /&gt;
	&lt;br /&gt;
	while #toClose &amp;gt; 0 and (toClose[#toClose].depth &amp;gt;= depth or depth == 0) do&lt;br /&gt;
		out = out .. toClose[#toClose].close&lt;br /&gt;
		table.remove(toClose, #toClose)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	local args = getArgs(frame)&lt;br /&gt;
	local wikitext = frame:preprocess(args[1])&lt;br /&gt;
	local items = {}&lt;br /&gt;
	local out = &amp;#039;&amp;#039;&lt;br /&gt;
	&lt;br /&gt;
	for indent, item in wikitext:gmatch(&amp;#039;(**) *([^\n]*)\n&amp;#039;) do&lt;br /&gt;
	    table.insert(items, {#indent, item})&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Match the last line&lt;br /&gt;
	local lastIndent, lastItem = wikitext:match(&amp;#039;(**) *([^\n]*)$&amp;#039;)&lt;br /&gt;
	table.insert(items, {#lastIndent, lastItem})&lt;br /&gt;
	&lt;br /&gt;
	-- Elements that are currently open&lt;br /&gt;
	local toClose = {}&lt;br /&gt;
	-- Lowest depth of parent that forces all &amp;lt;li&amp;gt;s to be inline&lt;br /&gt;
	local forcedInline = math.huge&lt;br /&gt;
&lt;br /&gt;
	for i, item in pairs(items) do&lt;br /&gt;
		local level, text = unpack(item)&lt;br /&gt;
		out = out .. closePending(toClose, level)&lt;br /&gt;
		&lt;br /&gt;
		if level == 0 then&lt;br /&gt;
			-- Just output &lt;br /&gt;
			out = out .. text .. &amp;#039;\n&amp;#039;&lt;br /&gt;
		else&lt;br /&gt;
			-- Create a new list if needed&lt;br /&gt;
			if #toClose == 0 or toClose[#toClose].type ~= &amp;#039;ul&amp;#039; then&lt;br /&gt;
				out = out .. (forcedInline &amp;lt;= level and &amp;#039;&amp;lt;ul class=&amp;quot;content-inline-ul&amp;quot;&amp;gt;&amp;#039; or &amp;#039;&amp;lt;ul&amp;gt;&amp;#039;)&lt;br /&gt;
				&lt;br /&gt;
				toClose[#toClose + 1] = {&lt;br /&gt;
					depth = level - 1,&lt;br /&gt;
					type = &amp;#039;ul&amp;#039;,&lt;br /&gt;
					close = &amp;#039;&amp;lt;/ul&amp;gt;&amp;#039; .. (level == 1 and &amp;#039;\n&amp;#039; or &amp;#039;&amp;#039;)&lt;br /&gt;
				}&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			-- Went up a level, discard forced inline and rest block&lt;br /&gt;
			if level &amp;lt;= forcedInline then&lt;br /&gt;
				forcedInline = math.huge&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			if text:match(&amp;#039;KEEP%-INLINE$&amp;#039;) ~= nil then&lt;br /&gt;
				-- Line is marked by {{Inline sublist}}&lt;br /&gt;
				out = out .. &amp;#039;&amp;lt;li&amp;gt;&amp;#039; .. text:gsub(&amp;#039; *KEEP%-INLINE$&amp;#039;, &amp;#039;&amp;#039;)&lt;br /&gt;
				forcedInline = math.min(level, forcedInline)&lt;br /&gt;
			elseif forcedInline &amp;lt; level then&lt;br /&gt;
				-- Inline forced&lt;br /&gt;
				out = out .. &amp;#039;&amp;lt;li&amp;gt;&amp;#039; .. text&lt;br /&gt;
			elseif i &amp;lt; #items and items[i + 1][1] &amp;gt; level then&lt;br /&gt;
				-- Next item is deeper&lt;br /&gt;
				-- Remove &amp;quot;:&amp;quot; if first item is block-level&lt;br /&gt;
				out = out:gsub(&amp;quot;&amp;amp;#58; &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;lt;ul&amp;gt;$&amp;quot;, &amp;quot;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;lt;ul&amp;gt;&amp;quot;)&lt;br /&gt;
				out = out .. &amp;#039;&amp;lt;li class=&amp;quot;content-sublist&amp;quot;&amp;gt;&amp;#039; .. &amp;quot;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;quot; .. text .. &amp;quot;&amp;amp;#58; &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;quot;&lt;br /&gt;
				-- Treat remaining items in this list as block-level&lt;br /&gt;
				toClose[#toClose].restBlock = true&lt;br /&gt;
			elseif toClose[#toClose].restBlock then&lt;br /&gt;
				-- Rest of list should be block level&lt;br /&gt;
				out = out .. &amp;#039;&amp;lt;li class=&amp;quot;content-sublist&amp;quot;&amp;gt;&amp;#039; .. &amp;quot;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;quot; .. text .. &amp;quot;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;quot;&lt;br /&gt;
			else&lt;br /&gt;
				-- Normal list item&lt;br /&gt;
				out = out .. &amp;#039;&amp;lt;li&amp;gt;&amp;#039; .. text&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			toClose[#toClose + 1] = {&lt;br /&gt;
				depth = level,&lt;br /&gt;
				type = &amp;#039;li&amp;#039;,&lt;br /&gt;
				close = &amp;#039;&amp;lt;/li&amp;gt;&amp;#039;&lt;br /&gt;
			}&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	out = out .. closePending(toClose, 0)&lt;br /&gt;
	&lt;br /&gt;
	return &amp;#039;&amp;lt;div class=&amp;quot;content-list&amp;quot;&amp;gt;\n&amp;#039; .. out  .. &amp;#039;&amp;lt;/div&amp;gt;&amp;#039; .. frame:extensionTag{&lt;br /&gt;
		name = &amp;#039;templatestyles&amp;#039;, args = { src = &amp;#039;Template:Contents topic list/styles.css&amp;#039; }&lt;br /&gt;
	}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>N.Sorokin</name></author>
	</entry>
</feed>