<?xml version="1.0"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title>MicroIndex  - Recent changes [en]</title>
		<link>https://www.microindex.net/index.php/Special:RecentChanges</link>
		<description>Track the most recent changes to the wiki in this feed.</description>
		<language>en</language>
		<generator>MediaWiki 1.46.0</generator>
		<lastBuildDate>Wed, 09 Sep 2026 11:31:20 GMT</lastBuildDate>
		<item>
			<title>Module:Protected page/config</title>
			<link>https://www.microindex.net/index.php?title=Module:Protected_page/config&amp;diff=476&amp;oldid=0</link>
			<guid isPermaLink="false">https://www.microindex.net/index.php?title=Module:Protected_page/config&amp;diff=476&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php/User:Oxitain&quot; class=&quot;mw-userlink&quot; title=&quot;User:Oxitain&quot;&gt;&lt;bdi&gt;Oxitain&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Module:Protected_page/config&quot; title=&quot;Module:Protected page/config&quot;&gt;Module:Protected page/config&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;a href=&quot;https://www.microindex.net/index.php?title=Module:Protected_page/config&amp;amp;diff=476&quot;&gt;Show changes&lt;/a&gt;</description>
			<pubDate>Wed, 09 Sep 2026 09:48:29 GMT</pubDate>
			<dc:creator>Oxitain</dc:creator>
			<comments>https://www.microindex.net/index.php/Module_talk:Protected_page/config</comments>
		</item>
		<item>
			<title>Module:Protected page</title>
			<link>https://www.microindex.net/index.php?title=Module:Protected_page&amp;diff=474&amp;oldid=0</link>
			<guid isPermaLink="false">https://www.microindex.net/index.php?title=Module:Protected_page&amp;diff=474&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php/User:Oxitain&quot; class=&quot;mw-userlink&quot; title=&quot;User:Oxitain&quot;&gt;&lt;bdi&gt;Oxitain&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Module:Protected_page&quot; title=&quot;Module:Protected page&quot;&gt;Module:Protected page&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;-- This module implements {{pp-meta}} and its daughter templates such as&lt;br /&gt;
-- {{pp-dispute}}, {{pp-vandalism}} and {{pp-sock}}.&lt;br /&gt;
&lt;br /&gt;
-- Initialise necessary modules.&lt;br /&gt;
require(&amp;#039;strict&amp;#039;)&lt;br /&gt;
local makeFileLink = require(&amp;#039;Module:File link&amp;#039;)._main&lt;br /&gt;
local effectiveProtectionLevel = require(&amp;#039;Module:Effective protection level&amp;#039;)._main&lt;br /&gt;
local effectiveProtectionExpiry = require(&amp;#039;Module:Effective protection expiry&amp;#039;)._main&lt;br /&gt;
local yesno = require(&amp;#039;Module:Yesno&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
-- Lazily initialise modules and objects we don&amp;#039;t always need.&lt;br /&gt;
local getArgs, makeMessageBox, lang&lt;br /&gt;
&lt;br /&gt;
-- Set constants.&lt;br /&gt;
local CONFIG_MODULE = &amp;#039;Module:Protected page/config&amp;#039;&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Helper functions&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local function makeCategoryLink(cat, sort)&lt;br /&gt;
	if cat then&lt;br /&gt;
		return string.format(&lt;br /&gt;
			&amp;#039;[[%s:%s|%s]]&amp;#039;,&lt;br /&gt;
			mw.site.namespaces[14].name,&lt;br /&gt;
			cat,&lt;br /&gt;
			sort&lt;br /&gt;
		)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Validation function for the expiry and the protection date&lt;br /&gt;
local function validateDate(dateString, dateType)&lt;br /&gt;
	if not lang then&lt;br /&gt;
		lang = mw.language.getContentLanguage()&lt;br /&gt;
	end&lt;br /&gt;
	local success, result = pcall(lang.formatDate, lang, &amp;#039;U&amp;#039;, dateString)&lt;br /&gt;
	if success then&lt;br /&gt;
		result = tonumber(result)&lt;br /&gt;
		if result then&lt;br /&gt;
			return result&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	error(string.format(&lt;br /&gt;
		&amp;#039;invalid %s: %s&amp;#039;,&lt;br /&gt;
		dateType,&lt;br /&gt;
		tostring(dateString)&lt;br /&gt;
	), 4)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeFullUrl(page, query, display)&lt;br /&gt;
	return string.format(&lt;br /&gt;
		&amp;#039;[%s %s]&amp;#039;,&lt;br /&gt;
		tostring(mw.uri.fullUrl(page, query)),&lt;br /&gt;
		display&lt;br /&gt;
	)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Given a directed graph formatted as node -&amp;gt; table of direct successors,&lt;br /&gt;
-- get a table of all nodes reachable from a given node (though always&lt;br /&gt;
-- including the given node).&lt;br /&gt;
local function getReachableNodes(graph, start)&lt;br /&gt;
	local toWalk, retval = {[start] = true}, {}&lt;br /&gt;
	while true do&lt;br /&gt;
		-- Can&amp;#039;t use pairs() since we&amp;#039;re adding and removing things as we&amp;#039;re iterating&lt;br /&gt;
		local k = next(toWalk) -- This always gets the &amp;quot;first&amp;quot; key&lt;br /&gt;
		if k == nil then&lt;br /&gt;
			return retval&lt;br /&gt;
		end&lt;br /&gt;
		toWalk[k] = nil&lt;br /&gt;
		retval[k] = true&lt;br /&gt;
		for _,v in ipairs(graph[k]) do&lt;br /&gt;
			if not retval[v] then&lt;br /&gt;
				toWalk[v] = true&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Protection class&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local Protection = {}&lt;br /&gt;
Protection.__index = Protection&lt;br /&gt;
&lt;br /&gt;
Protection.supportedActions = {&lt;br /&gt;
	edit = true,&lt;br /&gt;
	move = true,&lt;br /&gt;
	autoreview = true,&lt;br /&gt;
	upload = true&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Protection.bannerConfigFields = {&lt;br /&gt;
	&amp;#039;text&amp;#039;,&lt;br /&gt;
	&amp;#039;explanation&amp;#039;,&lt;br /&gt;
	&amp;#039;tooltip&amp;#039;,&lt;br /&gt;
	&amp;#039;alt&amp;#039;,&lt;br /&gt;
	&amp;#039;link&amp;#039;,&lt;br /&gt;
	&amp;#039;image&amp;#039;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function Protection.new(args, cfg, title)&lt;br /&gt;
	local obj = {}&lt;br /&gt;
	obj._cfg = cfg&lt;br /&gt;
	obj.title = title or mw.title.getCurrentTitle()&lt;br /&gt;
&lt;br /&gt;
	-- Set action&lt;br /&gt;
	if not args.action then&lt;br /&gt;
		obj.action = &amp;#039;edit&amp;#039;&lt;br /&gt;
	elseif Protection.supportedActions[args.action] then&lt;br /&gt;
		obj.action = args.action&lt;br /&gt;
	else&lt;br /&gt;
		error(string.format(&lt;br /&gt;
			&amp;#039;invalid action: %s&amp;#039;,&lt;br /&gt;
			tostring(args.action)&lt;br /&gt;
		), 3)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Set level&lt;br /&gt;
	obj.level = args.demolevel or effectiveProtectionLevel(obj.action, obj.title)&lt;br /&gt;
	if not obj.level or (obj.action == &amp;#039;move&amp;#039; and obj.level == &amp;#039;autoconfirmed&amp;#039;) then&lt;br /&gt;
		-- Users need to be autoconfirmed to move pages anyway, so treat&lt;br /&gt;
		-- semi-move-protected pages as unprotected.&lt;br /&gt;
		obj.level = &amp;#039;*&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Set expiry&lt;br /&gt;
	local effectiveExpiry = effectiveProtectionExpiry(obj.action, obj.title)&lt;br /&gt;
	if effectiveExpiry == &amp;#039;infinity&amp;#039; then&lt;br /&gt;
		obj.expiry = &amp;#039;indef&amp;#039;&lt;br /&gt;
	elseif effectiveExpiry ~= &amp;#039;unknown&amp;#039; then&lt;br /&gt;
		obj.expiry = validateDate(effectiveExpiry, &amp;#039;expiry date&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Set reason&lt;br /&gt;
	if args[1] then&lt;br /&gt;
		obj.reason = mw.ustring.lower(args[1])&lt;br /&gt;
		if obj.reason:find(&amp;#039;|&amp;#039;) then&lt;br /&gt;
			error(&amp;#039;reasons cannot contain the pipe character (&amp;quot;|&amp;quot;)&amp;#039;, 3)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Set protection date&lt;br /&gt;
	if args.date then&lt;br /&gt;
		obj.protectionDate = validateDate(args.date, &amp;#039;protection date&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Set banner config&lt;br /&gt;
	do&lt;br /&gt;
		obj.bannerConfig = {}&lt;br /&gt;
		local configTables = {}&lt;br /&gt;
		if cfg.banners[obj.action] then&lt;br /&gt;
			configTables[#configTables + 1] = cfg.banners[obj.action][obj.reason]&lt;br /&gt;
		end&lt;br /&gt;
		if cfg.defaultBanners[obj.action] then&lt;br /&gt;
			configTables[#configTables + 1] = cfg.defaultBanners[obj.action][obj.level]&lt;br /&gt;
			configTables[#configTables + 1] = cfg.defaultBanners[obj.action].default&lt;br /&gt;
		end&lt;br /&gt;
		configTables[#configTables + 1] = cfg.masterBanner&lt;br /&gt;
		for i, field in ipairs(Protection.bannerConfigFields) do&lt;br /&gt;
			for j, t in ipairs(configTables) do&lt;br /&gt;
				if t[field] then&lt;br /&gt;
					obj.bannerConfig[field] = t[field]&lt;br /&gt;
					break&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return setmetatable(obj, Protection)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Protection:isUserScript()&lt;br /&gt;
	-- Whether the page is a user JavaScript or CSS page.&lt;br /&gt;
	local title = self.title&lt;br /&gt;
	return title.namespace == 2 and (&lt;br /&gt;
		title.contentModel == &amp;#039;javascript&amp;#039; or title.contentModel == &amp;#039;css&amp;#039;&lt;br /&gt;
	)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Protection:isProtected()&lt;br /&gt;
	return self.level ~= &amp;#039;*&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Protection:shouldShowLock()&lt;br /&gt;
	-- Whether we should output a banner/padlock&lt;br /&gt;
	return self:isProtected() and not self:isUserScript()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Whether this page needs a protection category.&lt;br /&gt;
Protection.shouldHaveProtectionCategory = Protection.shouldShowLock&lt;br /&gt;
&lt;br /&gt;
function Protection:isTemporary()&lt;br /&gt;
	return type(self.expiry) == &amp;#039;number&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Protection:makeProtectionCategory()&lt;br /&gt;
	if not self:shouldHaveProtectionCategory() then&lt;br /&gt;
		return &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local cfg = self._cfg&lt;br /&gt;
	local title = self.title&lt;br /&gt;
	&lt;br /&gt;
	-- Get the expiry key fragment.&lt;br /&gt;
	local expiryFragment&lt;br /&gt;
	if self.expiry == &amp;#039;indef&amp;#039; then&lt;br /&gt;
		expiryFragment = self.expiry&lt;br /&gt;
	elseif type(self.expiry) == &amp;#039;number&amp;#039; then&lt;br /&gt;
		expiryFragment = &amp;#039;temp&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Get the namespace key fragment.&lt;br /&gt;
	local namespaceFragment = cfg.categoryNamespaceKeys[title.namespace]&lt;br /&gt;
	if not namespaceFragment and title.namespace % 2 == 1 then&lt;br /&gt;
			namespaceFragment = &amp;#039;talk&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Define the order that key fragments are tested in. This is done with an&lt;br /&gt;
	-- array of tables containing the value to be tested, along with its&lt;br /&gt;
	-- position in the cfg.protectionCategories table.&lt;br /&gt;
	local order = {&lt;br /&gt;
		{val = expiryFragment,    keypos = 1},&lt;br /&gt;
		{val = namespaceFragment, keypos = 2},&lt;br /&gt;
		{val = self.reason,       keypos = 3},&lt;br /&gt;
		{val = self.level,        keypos = 4},&lt;br /&gt;
		{val = self.action,       keypos = 5}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	--[[&lt;br /&gt;
	-- The old protection templates used an ad-hoc protection category system,&lt;br /&gt;
	-- with some templates prioritising namespaces in their categories, and&lt;br /&gt;
	-- others prioritising the protection reason. To emulate this in this module&lt;br /&gt;
	-- we use the config table cfg.reasonsWithNamespacePriority to set the&lt;br /&gt;
	-- reasons for which namespaces have priority over protection reason.&lt;br /&gt;
	-- If we are dealing with one of those reasons, move the namespace table to&lt;br /&gt;
	-- the end of the order table, i.e. give it highest priority. If not, the&lt;br /&gt;
	-- reason should have highest priority, so move that to the end of the table&lt;br /&gt;
	-- instead.&lt;br /&gt;
	--]]&lt;br /&gt;
	table.insert(order, table.remove(order, self.reason and cfg.reasonsWithNamespacePriority[self.reason] and 2 or 3))&lt;br /&gt;
 &lt;br /&gt;
	--[[&lt;br /&gt;
	-- Define the attempt order. Inactive subtables (subtables with nil &amp;quot;value&amp;quot;&lt;br /&gt;
	-- fields) are moved to the end, where they will later be given the key&lt;br /&gt;
	-- &amp;quot;all&amp;quot;. This is to cut down on the number of table lookups in&lt;br /&gt;
	-- cfg.protectionCategories, which grows exponentially with the number of&lt;br /&gt;
	-- non-nil keys. We keep track of the number of active subtables with the&lt;br /&gt;
	-- noActive parameter.&lt;br /&gt;
	--]]&lt;br /&gt;
	local noActive, attemptOrder&lt;br /&gt;
	do&lt;br /&gt;
		local active, inactive = {}, {}&lt;br /&gt;
		for i, t in ipairs(order) do&lt;br /&gt;
			if t.val then&lt;br /&gt;
				active[#active + 1] = t&lt;br /&gt;
			else&lt;br /&gt;
				inactive[#inactive + 1] = t&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		noActive = #active&lt;br /&gt;
		attemptOrder = active&lt;br /&gt;
		for i, t in ipairs(inactive) do&lt;br /&gt;
			attemptOrder[#attemptOrder + 1] = t&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
 &lt;br /&gt;
	--[[&lt;br /&gt;
	-- Check increasingly generic key combinations until we find a match. If a&lt;br /&gt;
	-- specific category exists for the combination of key fragments we are&lt;br /&gt;
	-- given, that match will be found first. If not, we keep trying different&lt;br /&gt;
	-- key fragment combinations until we match using the key&lt;br /&gt;
	-- &amp;quot;all-all-all-all-all&amp;quot;.&lt;br /&gt;
	--&lt;br /&gt;
	-- To generate the keys, we index the key subtables using a binary matrix&lt;br /&gt;
	-- with indexes i and j. j is only calculated up to the number of active&lt;br /&gt;
	-- subtables. For example, if there were three active subtables, the matrix&lt;br /&gt;
	-- would look like this, with 0 corresponding to the key fragment &amp;quot;all&amp;quot;, and&lt;br /&gt;
	-- 1 corresponding to other key fragments.&lt;br /&gt;
	-- &lt;br /&gt;
	--   j 1  2  3&lt;br /&gt;
	-- i  &lt;br /&gt;
	-- 1   1  1  1&lt;br /&gt;
	-- 2   0  1  1&lt;br /&gt;
	-- 3   1  0  1&lt;br /&gt;
	-- 4   0  0  1&lt;br /&gt;
	-- 5   1  1  0&lt;br /&gt;
	-- 6   0  1  0&lt;br /&gt;
	-- 7   1  0  0&lt;br /&gt;
	-- 8   0  0  0&lt;br /&gt;
	-- &lt;br /&gt;
	-- Values of j higher than the number of active subtables are set&lt;br /&gt;
	-- to the string &amp;quot;all&amp;quot;.&lt;br /&gt;
	--&lt;br /&gt;
	-- A key for cfg.protectionCategories is constructed for each value of i.&lt;br /&gt;
	-- The position of the value in the key is determined by the keypos field in&lt;br /&gt;
	-- each subtable.&lt;br /&gt;
	--]]&lt;br /&gt;
	local cats = cfg.protectionCategories&lt;br /&gt;
	for i = 1, 2^noActive do&lt;br /&gt;
		local key = {}&lt;br /&gt;
		for j, t in ipairs(attemptOrder) do&lt;br /&gt;
			if j &amp;gt; noActive then&lt;br /&gt;
				key[t.keypos] = &amp;#039;all&amp;#039;&lt;br /&gt;
			else&lt;br /&gt;
				local quotient = i / 2 ^ (j - 1)&lt;br /&gt;
				quotient = math.ceil(quotient)&lt;br /&gt;
				if quotient % 2 == 1 then&lt;br /&gt;
					key[t.keypos] = t.val&lt;br /&gt;
				else&lt;br /&gt;
					key[t.keypos] = &amp;#039;all&amp;#039;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		key = table.concat(key, &amp;#039;|&amp;#039;)&lt;br /&gt;
		local attempt = cats[key]&lt;br /&gt;
		if attempt then&lt;br /&gt;
			return makeCategoryLink(attempt, title.text)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return &amp;#039;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Protection:isIncorrect()&lt;br /&gt;
	if not self:shouldHaveProtectionCategory() then&lt;br /&gt;
		return true&lt;br /&gt;
	end&lt;br /&gt;
	if type(self.expiry) ~= &amp;#039;number&amp;#039; then&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
	local expiry = os.date(&amp;#039;*t&amp;#039;, self.expiry)&lt;br /&gt;
	-- Avoid checking today.day or os.time(), unless close. https://phabricator.wikimedia.org/T416616&lt;br /&gt;
	local today = os.date(&amp;#039;*t&amp;#039;)&lt;br /&gt;
	return (expiry.year &amp;lt; today.year)&lt;br /&gt;
		or (expiry.year == today.year and expiry.month &amp;lt; today.month)&lt;br /&gt;
		or (expiry.year == today.year and expiry.month == today.month and expiry.day &amp;lt; today.day)&lt;br /&gt;
		or (expiry.year == today.year and expiry.month == today.month and expiry.day == today.day and self.expiry &amp;lt; os.time())&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Protection:isTemplateProtectedNonTemplate()&lt;br /&gt;
	local action, namespace = self.action, self.title.namespace&lt;br /&gt;
	return self.level == &amp;#039;templateeditor&amp;#039;&lt;br /&gt;
		and (&lt;br /&gt;
			(action ~= &amp;#039;edit&amp;#039; and action ~= &amp;#039;move&amp;#039;)&lt;br /&gt;
			or (namespace ~= 10 and namespace ~= 828)&lt;br /&gt;
		)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Protection:makeCategoryLinks()&lt;br /&gt;
	local msg = self._cfg.msg&lt;br /&gt;
	local ret = {self:makeProtectionCategory()}&lt;br /&gt;
	if self:isIncorrect() then&lt;br /&gt;
		ret[#ret + 1] = makeCategoryLink(&lt;br /&gt;
			msg[&amp;#039;tracking-category-incorrect&amp;#039;],&lt;br /&gt;
			self.title.text&lt;br /&gt;
		)&lt;br /&gt;
	end&lt;br /&gt;
	if self:isTemplateProtectedNonTemplate() then&lt;br /&gt;
		ret[#ret + 1] = makeCategoryLink(&lt;br /&gt;
			msg[&amp;#039;tracking-category-template&amp;#039;],&lt;br /&gt;
			self.title.text&lt;br /&gt;
		)&lt;br /&gt;
	end&lt;br /&gt;
	return table.concat(ret)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Blurb class&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local Blurb = {}&lt;br /&gt;
Blurb.__index = Blurb&lt;br /&gt;
&lt;br /&gt;
Blurb.bannerTextFields = {&lt;br /&gt;
	text = true,&lt;br /&gt;
	explanation = true,&lt;br /&gt;
	tooltip = true,&lt;br /&gt;
	alt = true,&lt;br /&gt;
	link = true&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function Blurb.new(protectionObj, args, cfg)&lt;br /&gt;
	return setmetatable({&lt;br /&gt;
		_cfg = cfg,&lt;br /&gt;
		_protectionObj = protectionObj,&lt;br /&gt;
		_args = args&lt;br /&gt;
	}, Blurb)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Private methods --&lt;br /&gt;
&lt;br /&gt;
function Blurb:_formatDate(num)&lt;br /&gt;
	-- Formats a Unix timestamp into dd Month, YYYY format.&lt;br /&gt;
	lang = lang or mw.language.getContentLanguage()&lt;br /&gt;
	local success, date = pcall(&lt;br /&gt;
		lang.formatDate,&lt;br /&gt;
		lang,&lt;br /&gt;
		self._cfg.msg[&amp;#039;expiry-date-format&amp;#039;] or &amp;#039;j F Y&amp;#039;,&lt;br /&gt;
		&amp;#039;@&amp;#039; .. tostring(num)&lt;br /&gt;
	)&lt;br /&gt;
	if success then&lt;br /&gt;
		return date&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Blurb:_getExpandedMessage(msgKey)&lt;br /&gt;
	return self:_substituteParameters(self._cfg.msg[msgKey])&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Blurb:_substituteParameters(msg)&lt;br /&gt;
	if not self._params then&lt;br /&gt;
		local parameterFuncs = {}&lt;br /&gt;
&lt;br /&gt;
		parameterFuncs.CURRENTVERSION     = self._makeCurrentVersionParameter&lt;br /&gt;
		parameterFuncs.EDITREQUEST        = self._makeEditRequestParameter&lt;br /&gt;
		parameterFuncs.EXPIRY             = self._makeExpiryParameter&lt;br /&gt;
		parameterFuncs.EXPLANATIONBLURB   = self._makeExplanationBlurbParameter&lt;br /&gt;
		parameterFuncs.IMAGELINK          = self._makeImageLinkParameter&lt;br /&gt;
		parameterFuncs.INTROBLURB         = self._makeIntroBlurbParameter&lt;br /&gt;
		parameterFuncs.INTROFRAGMENT      = self._makeIntroFragmentParameter&lt;br /&gt;
		parameterFuncs.PAGETYPE           = self._makePagetypeParameter&lt;br /&gt;
		parameterFuncs.PROTECTIONBLURB    = self._makeProtectionBlurbParameter&lt;br /&gt;
		parameterFuncs.PROTECTIONDATE     = self._makeProtectionDateParameter&lt;br /&gt;
		parameterFuncs.PROTECTIONLEVEL    = self._makeProtectionLevelParameter&lt;br /&gt;
		parameterFuncs.PROTECTIONLOG      = self._makeProtectionLogParameter&lt;br /&gt;
		parameterFuncs.TALKPAGE           = self._makeTalkPageParameter&lt;br /&gt;
		parameterFuncs.TOOLTIPBLURB       = self._makeTooltipBlurbParameter&lt;br /&gt;
		parameterFuncs.TOOLTIPFRAGMENT    = self._makeTooltipFragmentParameter&lt;br /&gt;
		parameterFuncs.VANDAL             = self._makeVandalTemplateParameter&lt;br /&gt;
		&lt;br /&gt;
		self._params = setmetatable({}, {&lt;br /&gt;
			__index = function (t, k)&lt;br /&gt;
				local param&lt;br /&gt;
				if parameterFuncs[k] then&lt;br /&gt;
					param = parameterFuncs[k](self)&lt;br /&gt;
				end&lt;br /&gt;
				param = param or &amp;#039;&amp;#039;&lt;br /&gt;
				t[k] = param&lt;br /&gt;
				return param&lt;br /&gt;
			end&lt;br /&gt;
		})&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	msg = msg:gsub(&amp;#039;${(%u+)}&amp;#039;, self._params)&lt;br /&gt;
	return msg&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Blurb:_makeCurrentVersionParameter()&lt;br /&gt;
	-- A link to the page history or the move log, depending on the kind of&lt;br /&gt;
	-- protection.&lt;br /&gt;
	local pagename = self._protectionObj.title.prefixedText&lt;br /&gt;
	if self._protectionObj.action == &amp;#039;move&amp;#039; then&lt;br /&gt;
		-- We need the move log link.&lt;br /&gt;
		return makeFullUrl(&lt;br /&gt;
			&amp;#039;Special:Log&amp;#039;,&lt;br /&gt;
			{type = &amp;#039;move&amp;#039;, page = pagename},&lt;br /&gt;
			self:_getExpandedMessage(&amp;#039;current-version-move-display&amp;#039;)&lt;br /&gt;
		)&lt;br /&gt;
	else&lt;br /&gt;
		-- We need the history link.&lt;br /&gt;
		return makeFullUrl(&lt;br /&gt;
			pagename,&lt;br /&gt;
			{action = &amp;#039;history&amp;#039;},&lt;br /&gt;
			self:_getExpandedMessage(&amp;#039;current-version-edit-display&amp;#039;)&lt;br /&gt;
		)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Blurb:_makeEditRequestParameter()&lt;br /&gt;
	local mEditRequest = require(&amp;#039;Module:Submit an edit request&amp;#039;)&lt;br /&gt;
	local action = self._protectionObj.action&lt;br /&gt;
	local level = self._protectionObj.level&lt;br /&gt;
	&lt;br /&gt;
	-- Get the edit request type.&lt;br /&gt;
	local requestType&lt;br /&gt;
	if action == &amp;#039;edit&amp;#039; then&lt;br /&gt;
		if level == &amp;#039;autoconfirmed&amp;#039; then&lt;br /&gt;
			requestType = &amp;#039;semi&amp;#039;&lt;br /&gt;
		elseif level == &amp;#039;extendedconfirmed&amp;#039; then&lt;br /&gt;
			requestType = &amp;#039;extended&amp;#039;&lt;br /&gt;
		elseif level == &amp;#039;templateeditor&amp;#039; then&lt;br /&gt;
			requestType = &amp;#039;template&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	requestType = requestType or &amp;#039;full&amp;#039;&lt;br /&gt;
	&lt;br /&gt;
	-- Get the display value.&lt;br /&gt;
	local display = self:_getExpandedMessage(&amp;#039;edit-request-display&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
	return mEditRequest._link{type = requestType, display = display}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Blurb:_makeExpiryParameter()&lt;br /&gt;
	local expiry = self._protectionObj.expiry&lt;br /&gt;
	if type(expiry) == &amp;#039;number&amp;#039; then&lt;br /&gt;
		return self:_formatDate(expiry)&lt;br /&gt;
	else&lt;br /&gt;
		return expiry&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Blurb:_makeExplanationBlurbParameter()&lt;br /&gt;
	-- Cover special cases first.&lt;br /&gt;
	if self._protectionObj.title.namespace == 8 then&lt;br /&gt;
		-- MediaWiki namespace&lt;br /&gt;
		return self:_getExpandedMessage(&amp;#039;explanation-blurb-nounprotect&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Get explanation blurb table keys&lt;br /&gt;
	local action = self._protectionObj.action&lt;br /&gt;
	local level = self._protectionObj.level&lt;br /&gt;
	local talkKey = self._protectionObj.title.isTalkPage and &amp;#039;talk&amp;#039; or &amp;#039;subject&amp;#039;&lt;br /&gt;
&lt;br /&gt;
	-- Find the message in the explanation blurb table and substitute any&lt;br /&gt;
	-- parameters.&lt;br /&gt;
	local explanations = self._cfg.explanationBlurbs&lt;br /&gt;
	local msg&lt;br /&gt;
	if explanations[action][level] and explanations[action][level][talkKey] then&lt;br /&gt;
		msg = explanations[action][level][talkKey]&lt;br /&gt;
	elseif explanations[action][level] and explanations[action][level].default then&lt;br /&gt;
		msg = explanations[action][level].default&lt;br /&gt;
	elseif explanations[action].default and explanations[action].default[talkKey] then&lt;br /&gt;
		msg = explanations[action].default[talkKey]&lt;br /&gt;
	elseif explanations[action].default and explanations[action].default.default then&lt;br /&gt;
		msg = explanations[action].default.default&lt;br /&gt;
	else&lt;br /&gt;
		error(string.format(&lt;br /&gt;
			&amp;#039;could not find explanation blurb for action &amp;quot;%s&amp;quot;, level &amp;quot;%s&amp;quot; and talk key &amp;quot;%s&amp;quot;&amp;#039;,&lt;br /&gt;
			action,&lt;br /&gt;
			level,&lt;br /&gt;
			talkKey&lt;br /&gt;
		), 8)&lt;br /&gt;
	end&lt;br /&gt;
	return self:_substituteParameters(msg)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Blurb:_makeImageLinkParameter()&lt;br /&gt;
	local imageLinks = self._cfg.imageLinks&lt;br /&gt;
	local action = self._protectionObj.action&lt;br /&gt;
	local level = self._protectionObj.level&lt;br /&gt;
	local msg&lt;br /&gt;
	if imageLinks[action][level] then&lt;br /&gt;
		msg = imageLinks[action][level]&lt;br /&gt;
	elseif imageLinks[action].default then&lt;br /&gt;
		msg = imageLinks[action].default&lt;br /&gt;
	else&lt;br /&gt;
		msg = imageLinks.edit.default&lt;br /&gt;
	end&lt;br /&gt;
	return self:_substituteParameters(msg)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Blurb:_makeIntroBlurbParameter()&lt;br /&gt;
	if self._protectionObj:isTemporary() then&lt;br /&gt;
		return self:_getExpandedMessage(&amp;#039;intro-blurb-expiry&amp;#039;)&lt;br /&gt;
	else&lt;br /&gt;
		return self:_getExpandedMessage(&amp;#039;intro-blurb-noexpiry&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Blurb:_makeIntroFragmentParameter()&lt;br /&gt;
	if self._protectionObj:isTemporary() then&lt;br /&gt;
		return self:_getExpandedMessage(&amp;#039;intro-fragment-expiry&amp;#039;)&lt;br /&gt;
	else&lt;br /&gt;
		return self:_getExpandedMessage(&amp;#039;intro-fragment-noexpiry&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Blurb:_makePagetypeParameter()&lt;br /&gt;
	local pagetypes = self._cfg.pagetypes&lt;br /&gt;
	return pagetypes[self._protectionObj.title.namespace]&lt;br /&gt;
		or pagetypes.default&lt;br /&gt;
		or error(&amp;#039;no default pagetype defined&amp;#039;, 8)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Blurb:_makeProtectionBlurbParameter()&lt;br /&gt;
	local protectionBlurbs = self._cfg.protectionBlurbs&lt;br /&gt;
	local action = self._protectionObj.action&lt;br /&gt;
	local level = self._protectionObj.level&lt;br /&gt;
	local msg&lt;br /&gt;
	if protectionBlurbs[action][level] then&lt;br /&gt;
		msg = protectionBlurbs[action][level]&lt;br /&gt;
	elseif protectionBlurbs[action].default then&lt;br /&gt;
		msg = protectionBlurbs[action].default&lt;br /&gt;
	elseif protectionBlurbs.edit.default then&lt;br /&gt;
		msg = protectionBlurbs.edit.default&lt;br /&gt;
	else&lt;br /&gt;
		error(&amp;#039;no protection blurb defined for protectionBlurbs.edit.default&amp;#039;, 8)&lt;br /&gt;
	end&lt;br /&gt;
	return self:_substituteParameters(msg)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Blurb:_makeProtectionDateParameter()&lt;br /&gt;
	local protectionDate = self._protectionObj.protectionDate&lt;br /&gt;
	if type(protectionDate) == &amp;#039;number&amp;#039; then&lt;br /&gt;
		return self:_formatDate(protectionDate)&lt;br /&gt;
	else&lt;br /&gt;
		return protectionDate&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Blurb:_makeProtectionLevelParameter()&lt;br /&gt;
	local protectionLevels = self._cfg.protectionLevels&lt;br /&gt;
	local action = self._protectionObj.action&lt;br /&gt;
	local level = self._protectionObj.level&lt;br /&gt;
	local msg&lt;br /&gt;
	if protectionLevels[action][level] then&lt;br /&gt;
		msg = protectionLevels[action][level]&lt;br /&gt;
	elseif protectionLevels[action].default then&lt;br /&gt;
		msg = protectionLevels[action].default&lt;br /&gt;
	elseif protectionLevels.edit.default then&lt;br /&gt;
		msg = protectionLevels.edit.default&lt;br /&gt;
	else&lt;br /&gt;
		error(&amp;#039;no protection level defined for protectionLevels.edit.default&amp;#039;, 8)&lt;br /&gt;
	end&lt;br /&gt;
	return self:_substituteParameters(msg)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Blurb:_makeProtectionLogParameter()&lt;br /&gt;
	local pagename = self._protectionObj.title.prefixedText&lt;br /&gt;
	if self._protectionObj.action == &amp;#039;autoreview&amp;#039; then&lt;br /&gt;
		-- We need the pending changes log.&lt;br /&gt;
		return makeFullUrl(&lt;br /&gt;
			&amp;#039;Special:Log&amp;#039;,&lt;br /&gt;
			{type = &amp;#039;stable&amp;#039;, page = pagename},&lt;br /&gt;
			self:_getExpandedMessage(&amp;#039;pc-log-display&amp;#039;)&lt;br /&gt;
		)&lt;br /&gt;
	else&lt;br /&gt;
		-- We need the protection log.&lt;br /&gt;
		return makeFullUrl(&lt;br /&gt;
			&amp;#039;Special:Log&amp;#039;,&lt;br /&gt;
			{type = &amp;#039;protect&amp;#039;, page = pagename},&lt;br /&gt;
			self:_getExpandedMessage(&amp;#039;protection-log-display&amp;#039;)&lt;br /&gt;
		)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Blurb:_makeTalkPageParameter()&lt;br /&gt;
	return string.format(&lt;br /&gt;
		&amp;#039;[[%s:%s#%s|%s]]&amp;#039;,&lt;br /&gt;
		mw.site.namespaces[self._protectionObj.title.namespace].talk.name,&lt;br /&gt;
		self._protectionObj.title.text,&lt;br /&gt;
		self._args.section or &amp;#039;top&amp;#039;,&lt;br /&gt;
		self:_getExpandedMessage(&amp;#039;talk-page-link-display&amp;#039;)&lt;br /&gt;
	)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Blurb:_makeTooltipBlurbParameter()&lt;br /&gt;
	if self._protectionObj:isTemporary() then&lt;br /&gt;
		return self:_getExpandedMessage(&amp;#039;tooltip-blurb-expiry&amp;#039;)&lt;br /&gt;
	else&lt;br /&gt;
		return self:_getExpandedMessage(&amp;#039;tooltip-blurb-noexpiry&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Blurb:_makeTooltipFragmentParameter()&lt;br /&gt;
	if self._protectionObj:isTemporary() then&lt;br /&gt;
		return self:_getExpandedMessage(&amp;#039;tooltip-fragment-expiry&amp;#039;)&lt;br /&gt;
	else&lt;br /&gt;
		return self:_getExpandedMessage(&amp;#039;tooltip-fragment-noexpiry&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Blurb:_makeVandalTemplateParameter()&lt;br /&gt;
	return mw.getCurrentFrame():expandTemplate{&lt;br /&gt;
		title=&amp;quot;vandal-m&amp;quot;,&lt;br /&gt;
		args={self._args.user or self._protectionObj.title.baseText}&lt;br /&gt;
	}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Public methods --&lt;br /&gt;
&lt;br /&gt;
function Blurb:makeBannerText(key)&lt;br /&gt;
	-- Validate input.&lt;br /&gt;
	if not key or not Blurb.bannerTextFields[key] then&lt;br /&gt;
		error(string.format(&lt;br /&gt;
			&amp;#039;&amp;quot;%s&amp;quot; is not a valid banner config field&amp;#039;,&lt;br /&gt;
			tostring(key)&lt;br /&gt;
		), 2)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Generate the text.&lt;br /&gt;
	local msg = self._protectionObj.bannerConfig[key]&lt;br /&gt;
	if type(msg) == &amp;#039;string&amp;#039; then&lt;br /&gt;
		return self:_substituteParameters(msg)&lt;br /&gt;
	elseif type(msg) == &amp;#039;function&amp;#039; then&lt;br /&gt;
		msg = msg(self._protectionObj, self._args)&lt;br /&gt;
		if type(msg) ~= &amp;#039;string&amp;#039; then&lt;br /&gt;
			error(string.format(&lt;br /&gt;
				&amp;#039;bad output from banner config function with key &amp;quot;%s&amp;quot;&amp;#039;&lt;br /&gt;
					.. &amp;#039; (expected string, got %s)&amp;#039;,&lt;br /&gt;
				tostring(key),&lt;br /&gt;
				type(msg)&lt;br /&gt;
			), 4)&lt;br /&gt;
		end&lt;br /&gt;
		return self:_substituteParameters(msg)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- BannerTemplate class&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local BannerTemplate = {}&lt;br /&gt;
BannerTemplate.__index = BannerTemplate&lt;br /&gt;
&lt;br /&gt;
function BannerTemplate.new(protectionObj, cfg)&lt;br /&gt;
	local obj = {}&lt;br /&gt;
	obj._cfg = cfg&lt;br /&gt;
&lt;br /&gt;
	-- Set the image filename.&lt;br /&gt;
	local imageFilename = protectionObj.bannerConfig.image&lt;br /&gt;
	if imageFilename then&lt;br /&gt;
		obj._imageFilename = imageFilename&lt;br /&gt;
	else&lt;br /&gt;
		-- If an image filename isn&amp;#039;t specified explicitly in the banner config,&lt;br /&gt;
		-- generate it from the protection status and the namespace.&lt;br /&gt;
		local action = protectionObj.action&lt;br /&gt;
		local level = protectionObj.level&lt;br /&gt;
		local namespace = protectionObj.title.namespace&lt;br /&gt;
		local reason = protectionObj.reason&lt;br /&gt;
		&lt;br /&gt;
		-- Deal with special cases first.&lt;br /&gt;
		if (&lt;br /&gt;
			namespace == 10&lt;br /&gt;
			or namespace == 828&lt;br /&gt;
			or reason and obj._cfg.indefImageReasons[reason]&lt;br /&gt;
			)&lt;br /&gt;
			and action == &amp;#039;edit&amp;#039;&lt;br /&gt;
			and level == &amp;#039;sysop&amp;#039;&lt;br /&gt;
			and not protectionObj:isTemporary()&lt;br /&gt;
		then&lt;br /&gt;
			-- Fully protected modules and templates get the special red &amp;quot;indef&amp;quot;&lt;br /&gt;
			-- padlock.&lt;br /&gt;
			obj._imageFilename = obj._cfg.msg[&amp;#039;image-filename-indef&amp;#039;]&lt;br /&gt;
		else&lt;br /&gt;
			-- Deal with regular protection types.&lt;br /&gt;
			local images = obj._cfg.images&lt;br /&gt;
			if images[action] then&lt;br /&gt;
				if images[action][level] then&lt;br /&gt;
					obj._imageFilename = images[action][level]&lt;br /&gt;
				elseif images[action].default then&lt;br /&gt;
					obj._imageFilename = images[action].default&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return setmetatable(obj, BannerTemplate)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function BannerTemplate:renderImage()&lt;br /&gt;
	local filename = self._imageFilename&lt;br /&gt;
		or self._cfg.msg[&amp;#039;image-filename-default&amp;#039;]&lt;br /&gt;
		or &amp;#039;Transparent.gif&amp;#039;&lt;br /&gt;
	return makeFileLink{&lt;br /&gt;
		file = filename,&lt;br /&gt;
		size = (self.imageWidth or 20) .. &amp;#039;px&amp;#039;,&lt;br /&gt;
		alt = self._imageAlt,&lt;br /&gt;
		link = self._imageLink,&lt;br /&gt;
		caption = self.imageCaption&lt;br /&gt;
	}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Banner class&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local Banner = setmetatable({}, BannerTemplate)&lt;br /&gt;
Banner.__index = Banner&lt;br /&gt;
&lt;br /&gt;
function Banner.new(protectionObj, blurbObj, cfg)&lt;br /&gt;
	local obj = BannerTemplate.new(protectionObj, cfg) -- This doesn&amp;#039;t need the blurb.&lt;br /&gt;
	obj.imageWidth = 40&lt;br /&gt;
	obj.imageCaption = blurbObj:makeBannerText(&amp;#039;alt&amp;#039;) -- Large banners use the alt text for the tooltip.&lt;br /&gt;
	obj._reasonText = blurbObj:makeBannerText(&amp;#039;text&amp;#039;)&lt;br /&gt;
	obj._explanationText = blurbObj:makeBannerText(&amp;#039;explanation&amp;#039;)&lt;br /&gt;
	obj._page = protectionObj.title.prefixedText -- Only makes a difference in testing.&lt;br /&gt;
	return setmetatable(obj, Banner)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Banner:__tostring()&lt;br /&gt;
	-- Renders the banner.&lt;br /&gt;
	makeMessageBox = makeMessageBox or require(&amp;#039;Module:Message box&amp;#039;).main&lt;br /&gt;
	local reasonText = self._reasonText or error(&amp;#039;no reason text set&amp;#039;, 2)&lt;br /&gt;
	local explanationText = self._explanationText&lt;br /&gt;
	local mbargs = {&lt;br /&gt;
		page = self._page,&lt;br /&gt;
		type = &amp;#039;protection&amp;#039;,&lt;br /&gt;
		image = self:renderImage(),&lt;br /&gt;
		text = string.format(&lt;br /&gt;
			&amp;quot;&amp;#039;&amp;#039;&amp;#039;%s&amp;#039;&amp;#039;&amp;#039;%s&amp;quot;,&lt;br /&gt;
			reasonText,&lt;br /&gt;
			explanationText and &amp;#039;&amp;lt;br /&amp;gt;&amp;#039; .. explanationText or &amp;#039;&amp;#039;&lt;br /&gt;
		)&lt;br /&gt;
	}&lt;br /&gt;
	return makeMessageBox(&amp;#039;mbox&amp;#039;, mbargs)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Padlock class&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local Padlock = setmetatable({}, BannerTemplate)&lt;br /&gt;
Padlock.__index = Padlock&lt;br /&gt;
&lt;br /&gt;
function Padlock.new(protectionObj, blurbObj, cfg)&lt;br /&gt;
	local obj = BannerTemplate.new(protectionObj, cfg) -- This doesn&amp;#039;t need the blurb.&lt;br /&gt;
	obj.imageWidth = 20&lt;br /&gt;
	obj.imageCaption = blurbObj:makeBannerText(&amp;#039;tooltip&amp;#039;)&lt;br /&gt;
	obj._imageAlt = blurbObj:makeBannerText(&amp;#039;alt&amp;#039;)&lt;br /&gt;
	obj._imageLink = blurbObj:makeBannerText(&amp;#039;link&amp;#039;)&lt;br /&gt;
	obj._indicatorName = cfg.padlockIndicatorNames[protectionObj.action]&lt;br /&gt;
		or cfg.padlockIndicatorNames.default&lt;br /&gt;
		or &amp;#039;pp-default&amp;#039;&lt;br /&gt;
	return setmetatable(obj, Padlock)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Padlock:__tostring()&lt;br /&gt;
	local frame = mw.getCurrentFrame()&lt;br /&gt;
	-- The nowiki tag helps prevent whitespace at the top of articles.&lt;br /&gt;
	return frame:extensionTag{name = &amp;#039;nowiki&amp;#039;} .. frame:extensionTag{&lt;br /&gt;
		name = &amp;#039;indicator&amp;#039;,&lt;br /&gt;
		args = {name = self._indicatorName},&lt;br /&gt;
		content = self:renderImage()&lt;br /&gt;
	}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Exports&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
function p._exportClasses()&lt;br /&gt;
	-- This is used for testing purposes.&lt;br /&gt;
	return {&lt;br /&gt;
		Protection = Protection,&lt;br /&gt;
		Blurb = Blurb,&lt;br /&gt;
		BannerTemplate = BannerTemplate,&lt;br /&gt;
		Banner = Banner,&lt;br /&gt;
		Padlock = Padlock,&lt;br /&gt;
	}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._main(args, cfg, title)&lt;br /&gt;
	args = args or {}&lt;br /&gt;
	cfg = cfg or require(CONFIG_MODULE)&lt;br /&gt;
&lt;br /&gt;
	local protectionObj = Protection.new(args, cfg, title)&lt;br /&gt;
&lt;br /&gt;
	local ret = {}&lt;br /&gt;
&lt;br /&gt;
	-- If a page&amp;#039;s edit protection is equally or more restrictive than its&lt;br /&gt;
	-- protection from some other action, then don&amp;#039;t bother displaying anything&lt;br /&gt;
	-- for the other action (except categories).&lt;br /&gt;
	if not yesno(args.catonly) and (protectionObj.action == &amp;#039;edit&amp;#039; or&lt;br /&gt;
		args.demolevel or&lt;br /&gt;
		not getReachableNodes(&lt;br /&gt;
			cfg.hierarchy,&lt;br /&gt;
			protectionObj.level&lt;br /&gt;
		)[effectiveProtectionLevel(&amp;#039;edit&amp;#039;, protectionObj.title)])&lt;br /&gt;
	then&lt;br /&gt;
		-- Initialise the blurb object&lt;br /&gt;
		local blurbObj = Blurb.new(protectionObj, args, cfg)&lt;br /&gt;
	&lt;br /&gt;
		-- Render the banner&lt;br /&gt;
		if protectionObj:shouldShowLock() then&lt;br /&gt;
			ret[#ret + 1] = tostring(&lt;br /&gt;
				(yesno(args.small) and Padlock or Banner)&lt;br /&gt;
				.new(protectionObj, blurbObj, cfg)&lt;br /&gt;
			)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Render the categories&lt;br /&gt;
	if yesno(args.category) ~= false then&lt;br /&gt;
		ret[#ret + 1] = protectionObj:makeCategoryLinks()&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- For arbitration enforcement, flagging [[WP:PIA]] pages to enable [[Special:AbuseFilter/1339]] to flag edits to them&lt;br /&gt;
	if protectionObj.level == &amp;quot;extendedconfirmed&amp;quot; then&lt;br /&gt;
		if require(&amp;quot;Module:TableTools&amp;quot;).inArray(protectionObj.title.talkPageTitle.categories, &amp;quot;Wikipedia pages subject to the extended confirmed restriction related to the Arab-Israeli conflict&amp;quot;) then&lt;br /&gt;
			ret[#ret + 1] = &amp;quot;&amp;lt;p class=&amp;#039;PIA-flag&amp;#039; style=&amp;#039;display:none; visibility:hidden;&amp;#039; title=&amp;#039;This page is subject to the extended confirmed restriction related to the Arab-Israeli conflict.&amp;#039;&amp;gt;&amp;lt;/p&amp;gt;&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return table.concat(ret)	&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main(frame, cfg)&lt;br /&gt;
	cfg = cfg or require(CONFIG_MODULE)&lt;br /&gt;
&lt;br /&gt;
	-- Find default args, if any.&lt;br /&gt;
	local parent = frame.getParent and frame:getParent()&lt;br /&gt;
	local defaultArgs = parent and cfg.wrappers[parent:getTitle():gsub(&amp;#039;/sandbox$&amp;#039;, &amp;#039;&amp;#039;)]&lt;br /&gt;
&lt;br /&gt;
	-- Find user args, and use the parent frame if we are being called from a&lt;br /&gt;
	-- wrapper template.&lt;br /&gt;
	getArgs = getArgs or require(&amp;#039;Module:Arguments&amp;#039;).getArgs&lt;br /&gt;
	local userArgs = getArgs(frame, {&lt;br /&gt;
		parentOnly = defaultArgs,&lt;br /&gt;
		frameOnly = not defaultArgs&lt;br /&gt;
	})&lt;br /&gt;
&lt;br /&gt;
	-- Build the args table. User-specified args overwrite default args.&lt;br /&gt;
	local args = {}&lt;br /&gt;
	for k, v in pairs(defaultArgs or {}) do&lt;br /&gt;
		args[k] = v&lt;br /&gt;
	end&lt;br /&gt;
	for k, v in pairs(userArgs) do&lt;br /&gt;
		args[k] = v&lt;br /&gt;
	end&lt;br /&gt;
	return p._main(args, cfg)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</description>
			<pubDate>Wed, 09 Sep 2026 09:48:29 GMT</pubDate>
			<dc:creator>Oxitain</dc:creator>
			<comments>https://www.microindex.net/index.php/Module_talk:Protected_page</comments>
		</item>
		<item>
			<title>Template:Param value/styles.css</title>
			<link>https://www.microindex.net/index.php?title=Template:Param_value/styles.css&amp;diff=472&amp;oldid=0</link>
			<guid isPermaLink="false">https://www.microindex.net/index.php?title=Template:Param_value/styles.css&amp;diff=472&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php/User:Oxitain&quot; class=&quot;mw-userlink&quot; title=&quot;User:Oxitain&quot;&gt;&lt;bdi&gt;Oxitain&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Template:Param_value/styles.css&quot; title=&quot;Template:Param value/styles.css&quot;&gt;Template:Param value/styles.css&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;/* {{pp-template}} */&lt;br /&gt;
.tpl-pval__code {&lt;br /&gt;
	border: thin solid var(--border-color-base, #a2a9b1);&lt;br /&gt;
	background-color: var(--color-inverted, #fff);&lt;br /&gt;
	color: inherit;&lt;br /&gt;
	white-space: nowrap;&lt;br /&gt;
}&lt;/div&gt;</description>
			<pubDate>Wed, 09 Sep 2026 09:48:29 GMT</pubDate>
			<dc:creator>Oxitain</dc:creator>
			<comments>https://www.microindex.net/index.php/Template_talk:Param_value/styles.css</comments>
		</item>
		<item>
			<title>Template:Hlist/styles.css</title>
			<link>https://www.microindex.net/index.php?title=Template:Hlist/styles.css&amp;diff=470&amp;oldid=0</link>
			<guid isPermaLink="false">https://www.microindex.net/index.php?title=Template:Hlist/styles.css&amp;diff=470&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php/User:Oxitain&quot; class=&quot;mw-userlink&quot; title=&quot;User:Oxitain&quot;&gt;&lt;bdi&gt;Oxitain&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Template:Hlist/styles.css&quot; title=&quot;Template:Hlist/styles.css&quot;&gt;Template:Hlist/styles.css&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;/* {{pp-template}} */&lt;br /&gt;
/* &lt;br /&gt;
 * hlist styles are defined in core and Minerva and differ in Minerva. The&lt;br /&gt;
 * current definitions here (2023-01-01) are sufficient to override Minerva&lt;br /&gt;
 * without use of the hlist-separated class. The most problematic styles were&lt;br /&gt;
 * related to margin, padding, and the bullet. Check files listed at&lt;br /&gt;
 * [[MediaWiki talk:Common.css/to do#hlist-separated]]&lt;br /&gt;
 */&lt;br /&gt;
/*&lt;br /&gt;
 * TODO: When the majority of readership supports it (or some beautiful world&lt;br /&gt;
 * in which grade C support is above the minimum threshold), use :is()&lt;br /&gt;
 */&lt;br /&gt;
.hlist dl,&lt;br /&gt;
.hlist ol,&lt;br /&gt;
.hlist ul {&lt;br /&gt;
	margin: 0;&lt;br /&gt;
	padding: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Display list items inline */&lt;br /&gt;
.hlist dd,&lt;br /&gt;
.hlist dt,&lt;br /&gt;
.hlist li {&lt;br /&gt;
	/*&lt;br /&gt;
	 * don&amp;#039;t trust the note that says margin doesn&amp;#039;t work with inline&lt;br /&gt;
	 * removing margin: 0 makes dds have margins again&lt;br /&gt;
	 * We also want to reset margin-right in Minerva&lt;br /&gt;
	 */&lt;br /&gt;
	margin: 0; &lt;br /&gt;
	display: inline;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Display requested top-level lists inline */&lt;br /&gt;
.hlist.inline,&lt;br /&gt;
.hlist.inline dl,&lt;br /&gt;
.hlist.inline ol,&lt;br /&gt;
.hlist.inline ul,&lt;br /&gt;
/* Display nested lists inline */&lt;br /&gt;
.hlist dl dl,&lt;br /&gt;
.hlist dl ol,&lt;br /&gt;
.hlist dl ul,&lt;br /&gt;
.hlist ol dl,&lt;br /&gt;
.hlist ol ol,&lt;br /&gt;
.hlist ol ul,&lt;br /&gt;
.hlist ul dl,&lt;br /&gt;
.hlist ul ol,&lt;br /&gt;
.hlist ul ul {&lt;br /&gt;
	display: inline;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Hide empty list items */&lt;br /&gt;
.hlist .mw-empty-li {&lt;br /&gt;
	display: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* TODO: :not() can maybe be used here to remove the later rule. naive test&lt;br /&gt;
 * seems to work. more testing needed. like so:&lt;br /&gt;
 *.hlist dt:not(:last-child)::after {&lt;br /&gt;
 *	content: &amp;quot;: &amp;quot;;&lt;br /&gt;
 *}&lt;br /&gt;
 *.hlist dd:not(:last-child)::after,&lt;br /&gt;
 *.hlist li:not(:last-child)::after {&lt;br /&gt;
 *	content: &amp;quot; · &amp;quot;;&lt;br /&gt;
 *	font-weight: bold;&lt;br /&gt;
 *}&lt;br /&gt;
 */&lt;br /&gt;
/* Generate interpuncts */&lt;br /&gt;
.hlist dt::after {&lt;br /&gt;
	content: &amp;quot;: &amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.hlist dd::after,&lt;br /&gt;
.hlist li::after {&lt;br /&gt;
	content: &amp;quot;\a0· &amp;quot;;&lt;br /&gt;
	font-weight: bold;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.hlist dd:last-child::after,&lt;br /&gt;
.hlist dt:last-child::after,&lt;br /&gt;
.hlist li:last-child::after {&lt;br /&gt;
	content: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Add parentheses around nested lists */&lt;br /&gt;
.hlist dd dd:first-child::before,&lt;br /&gt;
.hlist dd dt:first-child::before,&lt;br /&gt;
.hlist dd li:first-child::before,&lt;br /&gt;
.hlist dt dd:first-child::before,&lt;br /&gt;
.hlist dt dt:first-child::before,&lt;br /&gt;
.hlist dt li:first-child::before,&lt;br /&gt;
.hlist li dd:first-child::before,&lt;br /&gt;
.hlist li dt:first-child::before,&lt;br /&gt;
.hlist li li:first-child::before {&lt;br /&gt;
	content: &amp;quot; (&amp;quot;;&lt;br /&gt;
	font-weight: normal;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.hlist dd dd:last-child::after,&lt;br /&gt;
.hlist dd dt:last-child::after,&lt;br /&gt;
.hlist dd li:last-child::after,&lt;br /&gt;
.hlist dt dd:last-child::after,&lt;br /&gt;
.hlist dt dt:last-child::after,&lt;br /&gt;
.hlist dt li:last-child::after,&lt;br /&gt;
.hlist li dd:last-child::after,&lt;br /&gt;
.hlist li dt:last-child::after,&lt;br /&gt;
.hlist li li:last-child::after {&lt;br /&gt;
	content: &amp;quot;)&amp;quot;;&lt;br /&gt;
	font-weight: normal;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Put ordinals in front of ordered list items */&lt;br /&gt;
.hlist ol {&lt;br /&gt;
	counter-reset: listitem;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.hlist ol &amp;gt; li {&lt;br /&gt;
	counter-increment: listitem;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.hlist ol &amp;gt; li::before {&lt;br /&gt;
	content: &amp;quot; &amp;quot; counter(listitem) &amp;quot;\a0&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.hlist dd ol &amp;gt; li:first-child::before,&lt;br /&gt;
.hlist dt ol &amp;gt; li:first-child::before,&lt;br /&gt;
.hlist li ol &amp;gt; li:first-child::before {&lt;br /&gt;
	content: &amp;quot; (&amp;quot; counter(listitem) &amp;quot;\a0&amp;quot;;&lt;br /&gt;
}&lt;/div&gt;</description>
			<pubDate>Wed, 09 Sep 2026 09:48:29 GMT</pubDate>
			<dc:creator>Oxitain</dc:creator>
			<comments>https://www.microindex.net/index.php/Template_talk:Hlist/styles.css</comments>
		</item>
		<item>
			<title>Template:See also/doc</title>
			<link>https://www.microindex.net/index.php?title=Template:See_also/doc&amp;diff=468&amp;oldid=0</link>
			<guid isPermaLink="false">https://www.microindex.net/index.php?title=Template:See_also/doc&amp;diff=468&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php/User:Oxitain&quot; class=&quot;mw-userlink&quot; title=&quot;User:Oxitain&quot;&gt;&lt;bdi&gt;Oxitain&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Template:See_also/doc&quot; title=&quot;Template:See also/doc&quot;&gt;Template:See also/doc&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{documentation subpage}}&lt;br /&gt;
{{lua|Module:Labelled list hatnote}}&lt;br /&gt;
{{used in system|in [[MediaWiki:wantedpages-summary]]}}&lt;br /&gt;
&lt;br /&gt;
This template is used to create {{strong|[[WP:Hatnotes|hatnotes]] to point to a small number of other related titles}} at the {{strong|top of article &amp;#039;&amp;#039;[[Help:Section|sections]]&amp;#039;&amp;#039;}} (excluding the [[WP:LEAD|lead]]). It looks like this:&lt;br /&gt;
&lt;br /&gt;
{{See also|Wikipedia:Article title}}&lt;br /&gt;
&lt;br /&gt;
Do not use this template on top of a page, where hatnotes are for disambiguation and not for related topics (according to {{Section link|Wikipedia:Hatnote#Linking to articles that are related to the topic}}). Do not use this template inside [[Wikipedia:Manual of Style/Layout#&amp;quot;See also&amp;quot; section|the &amp;#039;&amp;#039;&amp;quot;See also&amp;quot; section&amp;#039;&amp;#039;]] at the end of an article, or for links to other articles or subsections of the same article within regular article text. Where subsections are linked to, [[Template:Section link]] may be suitable instead. For use on category pages, the corresponding template is [[Template:Category see also]].&lt;br /&gt;
&lt;br /&gt;
Refer to the examples below to see how the template handles link targets containing section links and commas.&lt;br /&gt;
&lt;br /&gt;
==Usage==&lt;br /&gt;
{{see|Wikipedia:Summary style#Hatnote}}&lt;br /&gt;
; Basic usage:&lt;br /&gt;
 &amp;amp;#123;{See also|&amp;#039;&amp;#039;page1&amp;#039;&amp;#039;|&amp;#039;&amp;#039;page2&amp;#039;&amp;#039;|&amp;#039;&amp;#039;page3&amp;#039;&amp;#039;|...}}&lt;br /&gt;
&lt;br /&gt;
; All parameters:&lt;br /&gt;
 &amp;amp;#123;{See also|&amp;#039;&amp;#039;page1&amp;#039;&amp;#039;|&amp;#039;&amp;#039;page2&amp;#039;&amp;#039;|&amp;#039;&amp;#039;page3&amp;#039;&amp;#039;| ...&lt;br /&gt;
 |label 1 = &amp;#039;&amp;#039;label 1&amp;#039;&amp;#039;|label 2 = &amp;#039;&amp;#039;label2&amp;#039;&amp;#039;|label 3 = &amp;#039;&amp;#039;label3&amp;#039;&amp;#039;| ...&lt;br /&gt;
 |l1 = &amp;#039;&amp;#039;label1&amp;#039;&amp;#039;|l2 = &amp;#039;&amp;#039;label2&amp;#039;&amp;#039;|l3 = &amp;#039;&amp;#039;label3&amp;#039;&amp;#039;| ...&lt;br /&gt;
 |selfref = &amp;#039;&amp;#039;yes&amp;#039;&amp;#039;|category = &amp;#039;&amp;#039;no&amp;#039;&amp;#039;}}&lt;br /&gt;
&lt;br /&gt;
==Parameters==&lt;br /&gt;
This template accepts the following parameters:&lt;br /&gt;
* {{para|1}}, {{para|2}}, {{para|3}}, ... – the pages to link to. At least one page name is required. Categories and files are automatically escaped with the [[Help:Colon trick|colon trick]], and links to sections are automatically formatted as &amp;#039;&amp;#039;page § section&amp;#039;&amp;#039;, rather than the MediaWiki default of &amp;#039;&amp;#039;page#section&amp;#039;&amp;#039;.&lt;br /&gt;
* {{para|label 1}}, {{para|label 2}}, {{para|label 3}}, ...; or {{para|l1}}, {{para|l2}}, {{para|l3}}, ...; optional labels for each of the pages to link to.&lt;br /&gt;
* {{para|selfref}} – if set to {{pval|yes}}, {{pval|y}}, {{pval|true}}, or {{pval|1}}, adds the CSS class &amp;lt;code&amp;gt;selfref&amp;lt;/code&amp;gt;. This is used to denote self-references to Wikipedia. See [[Template:Selfref]] for more information.&lt;br /&gt;
* {{para|category}} – if set to {{pval|no}}, {{pval|n}}, {{pval|false}}, or {{pval|0}}, suppresses the error tracking category ([[:Category:Hatnote templates with errors]]). This only has an effect if the first positional parameter (the page to link to) is omitted.&lt;br /&gt;
* {{para|ifexists}} - if set to {{pval|false}}, forgo the existence check for pages. Otherwise [[WP:EXPENSIVE|expensive parser function calls]] (theoretically 1, but empirically 2) are used to check for each target&amp;#039;s existence, omitting them if nonexistent.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
{{nowiki template demo|format=inline|code=&amp;lt;nowiki&amp;gt;{{See also|Article}}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{nowiki template demo|format=inline|code=&amp;lt;nowiki&amp;gt;{{See also|Article#Section}}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{nowiki template demo|format=inline|code=&amp;lt;nowiki&amp;gt;{{See also|Article#Section|label 1=Custom section label}}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{nowiki template demo|format=inline|code=&amp;lt;nowiki&amp;gt;{{See also|Article1|Article2|Article3}}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{nowiki template demo|format=inline|code=&amp;lt;nowiki&amp;gt;{{See also|Article1|l1=Custom label 1|Article2|l2=Custom label 2}}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{nowiki template demo|format=inline|code=&amp;lt;nowiki&amp;gt;{{See also|Veni, vidi, vici|Julius Caesar}}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{nowiki template demo|format=inline|code=&amp;lt;nowiki&amp;gt;{{See also|Veni, vidi, vici|Julius Caesar#Civil war}}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{nowiki template demo|format=inline|code=&amp;lt;nowiki&amp;gt;{{See also|Julius Caesar#Civil war|Veni, vidi, vici}}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{nowiki template demo|format=inline|code=&amp;lt;nowiki&amp;gt;{{See also|Julius Caesar#Civil war|Crossing the Rubicon}}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
==Errors==&lt;br /&gt;
If no page names are supplied, the template outputs the following message with the (help) wikilink pointing to the &amp;quot;Errors&amp;quot; section of this page: &lt;br /&gt;
*{{See also|category=no}}&lt;br /&gt;
&lt;br /&gt;
If you see this error message, it is for one of three reasons:&lt;br /&gt;
# No parameters were specified (the template code was &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{See also}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; with no pipe character nor page to link to). Please use &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{See also|&amp;lt;/nowiki&amp;gt;&amp;#039;&amp;#039;page&amp;#039;&amp;#039;&amp;lt;nowiki&amp;gt;}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; instead.&lt;br /&gt;
# Some parameters were specified, but no page names were included. For example, the template text &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{See also|selfref=yes}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; will produce this error. Please use (for example) &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{See also|&amp;lt;/nowiki&amp;gt;&amp;#039;&amp;#039;page&amp;#039;&amp;#039;&amp;lt;nowiki&amp;gt;|selfref=yes}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; instead.&lt;br /&gt;
# A page name was specified, but it contains an equals sign (&amp;quot;=&amp;quot;). The equals sign has a special meaning in template code, and because of this it cannot be used in template parameters that do not specify a parameter name. For example, the template code &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{See also|1+1=2|2+2=4}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; will produce this error. To work around this, you can specify the parameter name explicitly by using &amp;lt;code&amp;gt;1=&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;, etc., before the page name, like this: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{See also|1=1+1=2|2=2+2=4}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
If you see this error message and are unsure of what to do, please post a message on [[WP:HD|the help desk (WP:HD)]], and someone should be able to help you.&lt;br /&gt;
&lt;br /&gt;
To see a list of wikilinks to articles that contain this error message, see the [[Wikipedia:Maintenance|maintenance category]]: [[:Category:Hatnote templates with errors]].&lt;br /&gt;
&lt;br /&gt;
==TemplateData==&lt;br /&gt;
{{Collapse top|[[Wikipedia:TemplateData|TemplateData]] documentation used by [[Wikipedia:VisualEditor|VisualEditor]] and other tools}}&lt;br /&gt;
{{TemplateData header|noheader=1}}&lt;br /&gt;
&amp;lt;templatedata&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	&amp;quot;description&amp;quot;: &amp;quot;This template creates a hatnote to point to a small number of related pages. It is placed at the top of a section, directly underneath the section heading.&amp;quot;,&lt;br /&gt;
	&amp;quot;params&amp;quot;: {&lt;br /&gt;
		&amp;quot;1&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Page 1&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The name of the first page that you want to link to.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;,&lt;br /&gt;
			&amp;quot;required&amp;quot;: true,&lt;br /&gt;
			&amp;quot;example&amp;quot;: &amp;quot;Article name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;2&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Page 2&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The name of the second page that you want to link to.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;,&lt;br /&gt;
			&amp;quot;required&amp;quot;: false&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;3&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Page 3&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The name of the third page that you want to link to. More pages can be added using the parameters \&amp;quot;4\&amp;quot;, \&amp;quot;5\&amp;quot;, \&amp;quot;6\&amp;quot;, etc.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;,&lt;br /&gt;
			&amp;quot;required&amp;quot;: false&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;4&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Page 4&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The name of the fourth page that you want to link to.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;5&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Page 5&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The name of the fifth page that you want to link to.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;6&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Page 6&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The name of the sixth page that you want to link to.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;wiki-page-name&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;label 1&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Label 1&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;What the first linked article is to be displayed as. &amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;l1&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;label 2&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Label 2&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;What the second linked article is to be displayed as.&amp;quot;,&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;l2&amp;quot;&lt;br /&gt;
			]&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;label 3&amp;quot;: {&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;l3&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Label 3&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;What the third linked article is to be displayed as. Other labels can be added by using increasing numbers (starting with \&amp;quot;label 4\&amp;quot; or \&amp;quot;l4\&amp;quot; for page 4) as parameter names.&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;selfref&amp;quot;: {&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;,&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Self reference&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Set to \&amp;quot;yes\&amp;quot; if the template is a self-reference to Wikipedia that would not make sense on mirrors or forks of the Wikipedia site.&amp;quot;,&lt;br /&gt;
			&amp;quot;example&amp;quot;: &amp;quot;yes&amp;quot;,&lt;br /&gt;
			&amp;quot;default&amp;quot;: &amp;quot;no&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;category&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Category&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Set to \&amp;quot;no\&amp;quot;, \&amp;quot;n\&amp;quot;, \&amp;quot;false\&amp;quot;, or \&amp;quot;0\&amp;quot; to suppresses the error tracking category (Category:Hatnote templates with errors). This only has an effect if no page names are specified.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;,&lt;br /&gt;
			&amp;quot;default&amp;quot;: &amp;quot;yes&amp;quot;,&lt;br /&gt;
			&amp;quot;example&amp;quot;: &amp;quot;no&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;label 4&amp;quot;: {&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;l4&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Label 4&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;What the fourth linked article is to be displayed as. &amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;label 5&amp;quot;: {&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;l5&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Label 5&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;What the fifth linked article is to be displayed as. &amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;label 6&amp;quot;: {&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;l6&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Label 6&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;What the sixth linked article is to be displayed as. &amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;ifexists&amp;quot;: {&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;,&lt;br /&gt;
			&amp;quot;default&amp;quot;: &amp;quot;true&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	&amp;quot;format&amp;quot;: &amp;quot;inline&amp;quot;,&lt;br /&gt;
	&amp;quot;paramOrder&amp;quot;: [&lt;br /&gt;
		&amp;quot;1&amp;quot;,&lt;br /&gt;
		&amp;quot;2&amp;quot;,&lt;br /&gt;
		&amp;quot;3&amp;quot;,&lt;br /&gt;
		&amp;quot;4&amp;quot;,&lt;br /&gt;
		&amp;quot;5&amp;quot;,&lt;br /&gt;
		&amp;quot;6&amp;quot;,&lt;br /&gt;
		&amp;quot;label 1&amp;quot;,&lt;br /&gt;
		&amp;quot;label 2&amp;quot;,&lt;br /&gt;
		&amp;quot;label 3&amp;quot;,&lt;br /&gt;
		&amp;quot;label 4&amp;quot;,&lt;br /&gt;
		&amp;quot;label 5&amp;quot;,&lt;br /&gt;
		&amp;quot;label 6&amp;quot;,&lt;br /&gt;
		&amp;quot;selfref&amp;quot;,&lt;br /&gt;
		&amp;quot;category&amp;quot;,&lt;br /&gt;
		&amp;quot;ifexists&amp;quot;&lt;br /&gt;
	]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/templatedata&amp;gt;&lt;br /&gt;
{{Collapse bottom}}&lt;br /&gt;
&lt;br /&gt;
==Interwiki links==&lt;br /&gt;
To link to articles on foreign language Wikipedias, see [[Template:Further#Interwiki links]]&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
{{Div col|colwidth=16em}}&lt;br /&gt;
* {{Tl|Broader}}&lt;br /&gt;
* {{Tl|Category see also}}&lt;br /&gt;
* {{Tl|For}}&lt;br /&gt;
* {{Tl|For introduction}}&lt;br /&gt;
* {{Tl|For outline}}&lt;br /&gt;
* {{Tl|For timeline}}&lt;br /&gt;
* {{Tl|Further}}&lt;br /&gt;
* {{Tl|Further if exists}}&lt;br /&gt;
* {{Tl|Further interlanguage link}}&lt;br /&gt;
* {{Tl|Further-text}} (for custom text)&lt;br /&gt;
* {{Tl|Hatnote}}&lt;br /&gt;
* {{Tl|Main}}&lt;br /&gt;
* {{Tl|Main if exists}}&lt;br /&gt;
* {{Tl|Main list}}&lt;br /&gt;
* {{Tl|See also-text}} (for custom text)&lt;br /&gt;
* {{Tl|Template see also}}&lt;br /&gt;
{{Div col end}}&lt;br /&gt;
&lt;br /&gt;
{{Hatnote templates}}&lt;br /&gt;
&amp;lt;includeonly&amp;gt;{{Sandbox other||&lt;br /&gt;
&amp;lt;!-- Categories go here and interwikis go in Wikidata. --&amp;gt;&lt;br /&gt;
[[Category:Hatnote templates]]&lt;br /&gt;
[[Category:Related-topic templates]]&lt;br /&gt;
[[Category:Wikipedia page-section templates]]&lt;br /&gt;
[[Category:Wikipedia see also]]&lt;br /&gt;
[[Category:Variadic templates]]&lt;br /&gt;
}}&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</description>
			<pubDate>Wed, 09 Sep 2026 09:48:28 GMT</pubDate>
			<dc:creator>Oxitain</dc:creator>
			<comments>https://www.microindex.net/index.php/Template_talk:See_also/doc</comments>
		</item>
		<item>
			<title>Template:Nowiki template demo</title>
			<link>https://www.microindex.net/index.php?title=Template:Nowiki_template_demo&amp;diff=466&amp;oldid=0</link>
			<guid isPermaLink="false">https://www.microindex.net/index.php?title=Template:Nowiki_template_demo&amp;diff=466&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php/User:Oxitain&quot; class=&quot;mw-userlink&quot; title=&quot;User:Oxitain&quot;&gt;&lt;bdi&gt;Oxitain&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Template:Nowiki_template_demo&quot; title=&quot;Template:Nowiki template demo&quot;&gt;Template:Nowiki template demo&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;includeonly&amp;gt;{{#invoke:Template test case|main}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{documentation}}&lt;br /&gt;
&amp;lt;!-- Categories go on the /doc subpage and interwikis go on Wikidata. --&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</description>
			<pubDate>Wed, 09 Sep 2026 09:48:28 GMT</pubDate>
			<dc:creator>Oxitain</dc:creator>
			<comments>https://www.microindex.net/index.php/Template_talk:Nowiki_template_demo</comments>
		</item>
		<item>
			<title>Module:Transclusion count/data/S</title>
			<link>https://www.microindex.net/index.php?title=Module:Transclusion_count/data/S&amp;diff=464&amp;oldid=0</link>
			<guid isPermaLink="false">https://www.microindex.net/index.php?title=Module:Transclusion_count/data/S&amp;diff=464&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php/User:Oxitain&quot; class=&quot;mw-userlink&quot; title=&quot;User:Oxitain&quot;&gt;&lt;bdi&gt;Oxitain&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Module:Transclusion_count/data/S&quot; title=&quot;Module:Transclusion count/data/S&quot;&gt;Module:Transclusion count/data/S&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;return {&lt;br /&gt;
[&amp;quot;S&amp;quot;] = 4300,&lt;br /&gt;
[&amp;quot;S-aca&amp;quot;] = 6700,&lt;br /&gt;
[&amp;quot;S-ach&amp;quot;] = 17000,&lt;br /&gt;
[&amp;quot;S-aft&amp;quot;] = 230000,&lt;br /&gt;
[&amp;quot;S-aft/check&amp;quot;] = 231000,&lt;br /&gt;
[&amp;quot;S-aft/filter&amp;quot;] = 231000,&lt;br /&gt;
[&amp;quot;S-bef&amp;quot;] = 235000,&lt;br /&gt;
[&amp;quot;S-bef/check&amp;quot;] = 235000,&lt;br /&gt;
[&amp;quot;S-bef/filter&amp;quot;] = 235000,&lt;br /&gt;
[&amp;quot;S-break&amp;quot;] = 6600,&lt;br /&gt;
[&amp;quot;S-bus&amp;quot;] = 2100,&lt;br /&gt;
[&amp;quot;S-civ&amp;quot;] = 2900,&lt;br /&gt;
[&amp;quot;S-dip&amp;quot;] = 6000,&lt;br /&gt;
[&amp;quot;S-end&amp;quot;] = 262000,&lt;br /&gt;
[&amp;quot;S-gov&amp;quot;] = 8600,&lt;br /&gt;
[&amp;quot;S-hon&amp;quot;] = 4000,&lt;br /&gt;
[&amp;quot;S-hou&amp;quot;] = 9800,&lt;br /&gt;
[&amp;quot;S-inc&amp;quot;] = 13000,&lt;br /&gt;
[&amp;quot;S-legal&amp;quot;] = 9900,&lt;br /&gt;
[&amp;quot;S-line_label&amp;quot;] = 2000,&lt;br /&gt;
[&amp;quot;S-mil&amp;quot;] = 13000,&lt;br /&gt;
[&amp;quot;S-new&amp;quot;] = 17000,&lt;br /&gt;
[&amp;quot;S-non&amp;quot;] = 11000,&lt;br /&gt;
[&amp;quot;S-npo&amp;quot;] = 4200,&lt;br /&gt;
[&amp;quot;S-off&amp;quot;] = 43000,&lt;br /&gt;
[&amp;quot;S-par&amp;quot;] = 52000,&lt;br /&gt;
[&amp;quot;S-par/en&amp;quot;] = 3300,&lt;br /&gt;
[&amp;quot;S-par/gb&amp;quot;] = 3300,&lt;br /&gt;
[&amp;quot;S-par/uk&amp;quot;] = 12000,&lt;br /&gt;
[&amp;quot;S-par/us-hs&amp;quot;] = 12000,&lt;br /&gt;
[&amp;quot;S-par/us-sen&amp;quot;] = 2100,&lt;br /&gt;
[&amp;quot;S-ppo&amp;quot;] = 15000,&lt;br /&gt;
[&amp;quot;S-prec&amp;quot;] = 3200,&lt;br /&gt;
[&amp;quot;S-reg&amp;quot;] = 22000,&lt;br /&gt;
[&amp;quot;S-rel&amp;quot;] = 19000,&lt;br /&gt;
[&amp;quot;S-roy&amp;quot;] = 2800,&lt;br /&gt;
[&amp;quot;S-sports&amp;quot;] = 12000,&lt;br /&gt;
[&amp;quot;S-start&amp;quot;] = 254000,&lt;br /&gt;
[&amp;quot;S-ttl&amp;quot;] = 242000,&lt;br /&gt;
[&amp;quot;S-ttl/check&amp;quot;] = 242000,&lt;br /&gt;
[&amp;quot;S-vac&amp;quot;] = 7800,&lt;br /&gt;
[&amp;quot;SAU&amp;quot;] = 2100,&lt;br /&gt;
[&amp;quot;SCO&amp;quot;] = 3800,&lt;br /&gt;
[&amp;quot;SDcat&amp;quot;] = 6820000,&lt;br /&gt;
[&amp;quot;SECOND&amp;quot;] = 2300,&lt;br /&gt;
[&amp;quot;SGP&amp;quot;] = 2900,&lt;br /&gt;
[&amp;quot;SIA&amp;quot;] = 2500,&lt;br /&gt;
[&amp;quot;SLL&amp;quot;] = 2000,&lt;br /&gt;
[&amp;quot;SLO&amp;quot;] = 4900,&lt;br /&gt;
[&amp;quot;SMS&amp;quot;] = 6900,&lt;br /&gt;
[&amp;quot;SMU&amp;quot;] = 2400,&lt;br /&gt;
[&amp;quot;SPI_archive_notice&amp;quot;] = 85000,&lt;br /&gt;
[&amp;quot;SPIarchive_notice&amp;quot;] = 82000,&lt;br /&gt;
[&amp;quot;SPIcat&amp;quot;] = 3800,&lt;br /&gt;
[&amp;quot;SPIclose&amp;quot;] = 3300,&lt;br /&gt;
[&amp;quot;SPIpriorcases&amp;quot;] = 78000,&lt;br /&gt;
[&amp;quot;SR/Olympics_profile&amp;quot;] = 2200,&lt;br /&gt;
[&amp;quot;SRB&amp;quot;] = 4400,&lt;br /&gt;
[&amp;quot;SS&amp;quot;] = 22000,&lt;br /&gt;
[&amp;quot;SSPa&amp;quot;] = 2600,&lt;br /&gt;
[&amp;quot;STN&amp;quot;] = 11000,&lt;br /&gt;
[&amp;quot;SUBJECTSPACE_formatted&amp;quot;] = 45000,&lt;br /&gt;
[&amp;quot;SUI&amp;quot;] = 9600,&lt;br /&gt;
[&amp;quot;SVG&amp;quot;] = 2700,&lt;br /&gt;
[&amp;quot;SVG-Logo&amp;quot;] = 26000,&lt;br /&gt;
[&amp;quot;SVG-Res&amp;quot;] = 24000,&lt;br /&gt;
[&amp;quot;SVG-logo&amp;quot;] = 14000,&lt;br /&gt;
[&amp;quot;SVK&amp;quot;] = 8800,&lt;br /&gt;
[&amp;quot;SVN&amp;quot;] = 5900,&lt;br /&gt;
[&amp;quot;SWE&amp;quot;] = 14000,&lt;br /&gt;
[&amp;quot;Salts_by_element&amp;quot;] = 2200,&lt;br /&gt;
[&amp;quot;Sandbox_other&amp;quot;] = 474000,&lt;br /&gt;
[&amp;quot;Saturday&amp;quot;] = 2800,&lt;br /&gt;
[&amp;quot;Saved_book&amp;quot;] = 52000,&lt;br /&gt;
[&amp;quot;Sc&amp;quot;] = 2900,&lt;br /&gt;
[&amp;quot;Scholia&amp;quot;] = 3700,&lt;br /&gt;
[&amp;quot;School_block&amp;quot;] = 13000,&lt;br /&gt;
[&amp;quot;School_disambiguation&amp;quot;] = 3500,&lt;br /&gt;
[&amp;quot;Schoolblock&amp;quot;] = 6900,&lt;br /&gt;
[&amp;quot;Schooldis&amp;quot;] = 2700,&lt;br /&gt;
[&amp;quot;Schoolip&amp;quot;] = 12000,&lt;br /&gt;
[&amp;quot;Scientist_icon&amp;quot;] = 16000,&lt;br /&gt;
[&amp;quot;Scientist_icon2&amp;quot;] = 16000,&lt;br /&gt;
[&amp;quot;Sclass&amp;quot;] = 34000,&lt;br /&gt;
[&amp;quot;Sclass2&amp;quot;] = 11000,&lt;br /&gt;
[&amp;quot;Screen_reader-only&amp;quot;] = 108000,&lt;br /&gt;
[&amp;quot;Screen_reader-only/styles.css&amp;quot;] = 148000,&lt;br /&gt;
[&amp;quot;Script&amp;quot;] = 7600,&lt;br /&gt;
[&amp;quot;Script/Arabic&amp;quot;] = 4000,&lt;br /&gt;
[&amp;quot;Script/Hebrew&amp;quot;] = 4900,&lt;br /&gt;
[&amp;quot;Script/Nastaliq&amp;quot;] = 15000,&lt;br /&gt;
[&amp;quot;Script/doc/id-unk&amp;quot;] = 3200,&lt;br /&gt;
[&amp;quot;Script/doc/id-unk/core&amp;quot;] = 3200,&lt;br /&gt;
[&amp;quot;Script/doc/id-unk/is-iso-alpha4&amp;quot;] = 3200,&lt;br /&gt;
[&amp;quot;Script/doc/id-unk/name-to-alpha4&amp;quot;] = 3200,&lt;br /&gt;
[&amp;quot;Script/styles.css&amp;quot;] = 3400,&lt;br /&gt;
[&amp;quot;Script/styles_arabic.css&amp;quot;] = 4000,&lt;br /&gt;
[&amp;quot;Script/styles_hebrew.css&amp;quot;] = 4900,&lt;br /&gt;
[&amp;quot;Sdash&amp;quot;] = 4000,&lt;br /&gt;
[&amp;quot;Search_box&amp;quot;] = 74000,&lt;br /&gt;
[&amp;quot;Search_link&amp;quot;] = 27000,&lt;br /&gt;
[&amp;quot;Section_link&amp;quot;] = 166000,&lt;br /&gt;
[&amp;quot;Section_sizes&amp;quot;] = 4400,&lt;br /&gt;
[&amp;quot;See&amp;quot;] = 8900,&lt;br /&gt;
[&amp;quot;See_also&amp;quot;] = 218000,&lt;br /&gt;
[&amp;quot;Seealso&amp;quot;] = 8000,&lt;br /&gt;
[&amp;quot;Seiner_Majestät_Schiff&amp;quot;] = 6900,&lt;br /&gt;
[&amp;quot;Seiner_Majestät_Unterseeboot&amp;quot;] = 2400,&lt;br /&gt;
[&amp;quot;Select_skin&amp;quot;] = 5500,&lt;br /&gt;
[&amp;quot;Selected&amp;quot;] = 2000,&lt;br /&gt;
[&amp;quot;Selected_article&amp;quot;] = 2500,&lt;br /&gt;
[&amp;quot;Selected_picture&amp;quot;] = 2400,&lt;br /&gt;
[&amp;quot;Self&amp;quot;] = 44000,&lt;br /&gt;
[&amp;quot;Self-published_inline&amp;quot;] = 4700,&lt;br /&gt;
[&amp;quot;Self-published_source&amp;quot;] = 6100,&lt;br /&gt;
[&amp;quot;Self-reference&amp;quot;] = 2200,&lt;br /&gt;
[&amp;quot;Self-reference_tool&amp;quot;] = 8200,&lt;br /&gt;
[&amp;quot;Semi-protected_indefinitely&amp;quot;] = 4800,&lt;br /&gt;
[&amp;quot;Sent_off&amp;quot;] = 17000,&lt;br /&gt;
[&amp;quot;Sentoff&amp;quot;] = 6300,&lt;br /&gt;
[&amp;quot;Separated_entries&amp;quot;] = 2900,&lt;br /&gt;
[&amp;quot;Sequence&amp;quot;] = 4100,&lt;br /&gt;
[&amp;quot;Series_overview&amp;quot;] = 10000,&lt;br /&gt;
[&amp;quot;Serif&amp;quot;] = 5000,&lt;br /&gt;
[&amp;quot;Set_category&amp;quot;] = 38000,&lt;br /&gt;
[&amp;quot;Set_index_article&amp;quot;] = 6300,&lt;br /&gt;
[&amp;quot;Sets_taxobox_colour&amp;quot;] = 3400,&lt;br /&gt;
[&amp;quot;Sfn&amp;quot;] = 210000,&lt;br /&gt;
[&amp;quot;SfnRef&amp;quot;] = 165000,&lt;br /&gt;
[&amp;quot;Sfn_whitelist&amp;quot;] = 2600,&lt;br /&gt;
[&amp;quot;Sfnm&amp;quot;] = 5900,&lt;br /&gt;
[&amp;quot;Sfnp&amp;quot;] = 24000,&lt;br /&gt;
[&amp;quot;Sfnref&amp;quot;] = 18000,&lt;br /&gt;
[&amp;quot;Sfrac&amp;quot;] = 5100,&lt;br /&gt;
[&amp;quot;Sfrac/styles.css&amp;quot;] = 5200,&lt;br /&gt;
[&amp;quot;SharedIPEDU&amp;quot;] = 3300,&lt;br /&gt;
[&amp;quot;Shared_IP&amp;quot;] = 10000,&lt;br /&gt;
[&amp;quot;Shared_IP_corp&amp;quot;] = 4100,&lt;br /&gt;
[&amp;quot;Shared_IP_edu&amp;quot;] = 186000,&lt;br /&gt;
[&amp;quot;Shared_IP_gov&amp;quot;] = 2300,&lt;br /&gt;
[&amp;quot;Sharedip&amp;quot;] = 3000,&lt;br /&gt;
[&amp;quot;Sharedipedu&amp;quot;] = 3800,&lt;br /&gt;
[&amp;quot;Sherdog&amp;quot;] = 2700,&lt;br /&gt;
[&amp;quot;Ship&amp;quot;] = 42000,&lt;br /&gt;
[&amp;quot;Ship_index&amp;quot;] = 7600,&lt;br /&gt;
[&amp;quot;Shipboxflag&amp;quot;] = 21000,&lt;br /&gt;
[&amp;quot;Shipboxflag/core&amp;quot;] = 21000,&lt;br /&gt;
[&amp;quot;Shipwrecks_navbox_footer&amp;quot;] = 11000,&lt;br /&gt;
[&amp;quot;Shipwrecks_navbox_footer/link&amp;quot;] = 11000,&lt;br /&gt;
[&amp;quot;Short_description&amp;quot;] = 6960000,&lt;br /&gt;
[&amp;quot;Short_description/lowercasecheck&amp;quot;] = 6960000,&lt;br /&gt;
[&amp;quot;Shortcut&amp;quot;] = 22000,&lt;br /&gt;
[&amp;quot;Should_be_SVG&amp;quot;] = 8100,&lt;br /&gt;
[&amp;quot;Shy&amp;quot;] = 2200,&lt;br /&gt;
[&amp;quot;Sic&amp;quot;] = 39000,&lt;br /&gt;
[&amp;quot;Side_box&amp;quot;] = 1250000,&lt;br /&gt;
[&amp;quot;Sidebar&amp;quot;] = 320000,&lt;br /&gt;
[&amp;quot;Sidebar_games_events&amp;quot;] = 43000,&lt;br /&gt;
[&amp;quot;Sidebar_person&amp;quot;] = 4900,&lt;br /&gt;
[&amp;quot;Sidebar_person/styles.css&amp;quot;] = 6300,&lt;br /&gt;
[&amp;quot;Sidebar_with_collapsible_lists&amp;quot;] = 83000,&lt;br /&gt;
[&amp;quot;Sigfig&amp;quot;] = 4000,&lt;br /&gt;
[&amp;quot;Significant_figures&amp;quot;] = 5600,&lt;br /&gt;
[&amp;quot;Significant_figures/rnd&amp;quot;] = 5200,&lt;br /&gt;
[&amp;quot;Signpost-subscription&amp;quot;] = 2100,&lt;br /&gt;
[&amp;quot;Signpost-subscription/styles.css&amp;quot;] = 2100,&lt;br /&gt;
[&amp;quot;Signpost/item&amp;quot;] = 49000,&lt;br /&gt;
[&amp;quot;Signpost/item/core&amp;quot;] = 49000,&lt;br /&gt;
[&amp;quot;Signpost/snippet-nopic&amp;quot;] = 3400,&lt;br /&gt;
[&amp;quot;Signpost/snippet/styles.css&amp;quot;] = 3700,&lt;br /&gt;
[&amp;quot;Sildb_prim&amp;quot;] = 2200,&lt;br /&gt;
[&amp;quot;Silver02&amp;quot;] = 18000,&lt;br /&gt;
[&amp;quot;Silver2&amp;quot;] = 46000,&lt;br /&gt;
[&amp;quot;Silver_medal&amp;quot;] = 6700,&lt;br /&gt;
[&amp;quot;Silver_medal_icon&amp;quot;] = 60000,&lt;br /&gt;
[&amp;quot;Similar_names&amp;quot;] = 3400,&lt;br /&gt;
[&amp;quot;Single+double&amp;quot;] = 11000,&lt;br /&gt;
[&amp;quot;Single+space&amp;quot;] = 17000,&lt;br /&gt;
[&amp;quot;Single-innings_cricket_match&amp;quot;] = 4100,&lt;br /&gt;
[&amp;quot;Single_chart&amp;quot;] = 43000,&lt;br /&gt;
[&amp;quot;Single_namespace&amp;quot;] = 339000,&lt;br /&gt;
[&amp;quot;Single_source&amp;quot;] = 3000,&lt;br /&gt;
[&amp;quot;Singlechart&amp;quot;] = 12000,&lt;br /&gt;
[&amp;quot;Singles&amp;quot;] = 49000,&lt;br /&gt;
[&amp;quot;Sister-inline&amp;quot;] = 223000,&lt;br /&gt;
[&amp;quot;Sister-inline/styles.css&amp;quot;] = 223000,&lt;br /&gt;
[&amp;quot;Sister_project&amp;quot;] = 1130000,&lt;br /&gt;
[&amp;quot;Sister_project/styles.css&amp;quot;] = 1130000,&lt;br /&gt;
[&amp;quot;Sister_project_links&amp;quot;] = 14000,&lt;br /&gt;
[&amp;quot;Skip_to_talk&amp;quot;] = 12000,&lt;br /&gt;
[&amp;quot;Skip_to_talk/styles.css&amp;quot;] = 12000,&lt;br /&gt;
[&amp;quot;Sky&amp;quot;] = 3300,&lt;br /&gt;
[&amp;quot;Sky/styles.css&amp;quot;] = 3300,&lt;br /&gt;
[&amp;quot;Slink&amp;quot;] = 66000,&lt;br /&gt;
[&amp;quot;Slovak_municipality&amp;quot;] = 3000,&lt;br /&gt;
[&amp;quot;Slovak_municipality/geo&amp;quot;] = 2800,&lt;br /&gt;
[&amp;quot;Small&amp;quot;] = 652000,&lt;br /&gt;
[&amp;quot;Small_Solar_System_bodies&amp;quot;] = 3600,&lt;br /&gt;
[&amp;quot;Smallcaps&amp;quot;] = 21000,&lt;br /&gt;
[&amp;quot;Smallcaps/styles.css&amp;quot;] = 22000,&lt;br /&gt;
[&amp;quot;Smalldiv&amp;quot;] = 44000,&lt;br /&gt;
[&amp;quot;Smaller&amp;quot;] = 79000,&lt;br /&gt;
[&amp;quot;Smiley&amp;quot;] = 54000,&lt;br /&gt;
[&amp;quot;Snd&amp;quot;] = 613000,&lt;br /&gt;
[&amp;quot;Snds&amp;quot;] = 6500,&lt;br /&gt;
[&amp;quot;Soccer_icon&amp;quot;] = 124000,&lt;br /&gt;
[&amp;quot;Soccer_icon2&amp;quot;] = 124000,&lt;br /&gt;
[&amp;quot;Soccer_icon4&amp;quot;] = 3500,&lt;br /&gt;
[&amp;quot;Soccerbase&amp;quot;] = 13000,&lt;br /&gt;
[&amp;quot;Soccerbase_season&amp;quot;] = 8100,&lt;br /&gt;
[&amp;quot;Soccerway&amp;quot;] = 84000,&lt;br /&gt;
[&amp;quot;Sock&amp;quot;] = 56000,&lt;br /&gt;
[&amp;quot;Sock_list&amp;quot;] = 11000,&lt;br /&gt;
[&amp;quot;Sockcat&amp;quot;] = 2000,&lt;br /&gt;
[&amp;quot;Sockmaster&amp;quot;] = 10000,&lt;br /&gt;
[&amp;quot;Sockpuppet&amp;quot;] = 287000,&lt;br /&gt;
[&amp;quot;Sockpuppet/altmaster&amp;quot;] = 3700,&lt;br /&gt;
[&amp;quot;Sockpuppet/categorise&amp;quot;] = 287000,&lt;br /&gt;
[&amp;quot;SockpuppetCheckuser&amp;quot;] = 5500,&lt;br /&gt;
[&amp;quot;Sockpuppet_category&amp;quot;] = 52000,&lt;br /&gt;
[&amp;quot;Sockpuppet_category/confirmed&amp;quot;] = 28000,&lt;br /&gt;
[&amp;quot;Sockpuppet_category/suspected&amp;quot;] = 24000,&lt;br /&gt;
[&amp;quot;Sockpuppetcheckuser&amp;quot;] = 3600,&lt;br /&gt;
[&amp;quot;Sockpuppeteer&amp;quot;] = 29000,&lt;br /&gt;
[&amp;quot;Soft_hyphen&amp;quot;] = 2300,&lt;br /&gt;
[&amp;quot;Soft_redirect&amp;quot;] = 6500,&lt;br /&gt;
[&amp;quot;Soft_redirect_protection&amp;quot;] = 10000,&lt;br /&gt;
[&amp;quot;Softredirect&amp;quot;] = 3300,&lt;br /&gt;
[&amp;quot;Solar_luminosity&amp;quot;] = 5200,&lt;br /&gt;
[&amp;quot;Solar_mass&amp;quot;] = 6500,&lt;br /&gt;
[&amp;quot;Solar_radius&amp;quot;] = 5200,&lt;br /&gt;
[&amp;quot;Soldier_icon&amp;quot;] = 3900,&lt;br /&gt;
[&amp;quot;Soldier_icon2&amp;quot;] = 3900,&lt;br /&gt;
[&amp;quot;Songs_category&amp;quot;] = 9600,&lt;br /&gt;
[&amp;quot;Songs_category/core&amp;quot;] = 9600,&lt;br /&gt;
[&amp;quot;Sort&amp;quot;] = 122000,&lt;br /&gt;
[&amp;quot;Sort_under&amp;quot;] = 2200,&lt;br /&gt;
[&amp;quot;Sort_under/styles.css&amp;quot;] = 2200,&lt;br /&gt;
[&amp;quot;Sortname&amp;quot;] = 64000,&lt;br /&gt;
[&amp;quot;Source-attribution&amp;quot;] = 9200,&lt;br /&gt;
[&amp;quot;Source_assess&amp;quot;] = 2700,&lt;br /&gt;
[&amp;quot;Source_assess_table&amp;quot;] = 2700,&lt;br /&gt;
[&amp;quot;Source_attribution&amp;quot;] = 39000,&lt;br /&gt;
[&amp;quot;Source_check&amp;quot;] = 927000,&lt;br /&gt;
[&amp;quot;Sourcecheck&amp;quot;] = 927000,&lt;br /&gt;
[&amp;quot;Sources&amp;quot;] = 3600,&lt;br /&gt;
[&amp;quot;Sources_exist&amp;quot;] = 4300,&lt;br /&gt;
[&amp;quot;South_America_topic&amp;quot;] = 2700,&lt;br /&gt;
[&amp;quot;Sp&amp;quot;] = 165000,&lt;br /&gt;
[&amp;quot;Space&amp;quot;] = 130000,&lt;br /&gt;
[&amp;quot;Space+apostrophe+s&amp;quot;] = 27000,&lt;br /&gt;
[&amp;quot;Space+double&amp;quot;] = 7200,&lt;br /&gt;
[&amp;quot;Space+single&amp;quot;] = 15000,&lt;br /&gt;
[&amp;quot;Spaced_en_dash&amp;quot;] = 647000,&lt;br /&gt;
[&amp;quot;Spaced_en_dash_space&amp;quot;] = 6600,&lt;br /&gt;
[&amp;quot;Spaced_ndash&amp;quot;] = 22000,&lt;br /&gt;
[&amp;quot;Spaces&amp;quot;] = 735000,&lt;br /&gt;
[&amp;quot;Spain_metadata_Wikidata&amp;quot;] = 7400,&lt;br /&gt;
[&amp;quot;Spamlink&amp;quot;] = 14000,&lt;br /&gt;
[&amp;quot;Species_Latin_name_abbreviation_disambiguation&amp;quot;] = 2400,&lt;br /&gt;
[&amp;quot;Species_list&amp;quot;] = 25000,&lt;br /&gt;
[&amp;quot;Speciesbox&amp;quot;] = 394000,&lt;br /&gt;
[&amp;quot;Speciesbox/checkgenus&amp;quot;] = 392000,&lt;br /&gt;
[&amp;quot;Speciesbox/getGenus&amp;quot;] = 395000,&lt;br /&gt;
[&amp;quot;Speciesbox/getSpecies&amp;quot;] = 394000,&lt;br /&gt;
[&amp;quot;Speciesbox/name&amp;quot;] = 394000,&lt;br /&gt;
[&amp;quot;Speciesbox/parameterCheck&amp;quot;] = 394000,&lt;br /&gt;
[&amp;quot;Speciesbox/trim&amp;quot;] = 394000,&lt;br /&gt;
[&amp;quot;Specieslist&amp;quot;] = 9300,&lt;br /&gt;
[&amp;quot;Split_article&amp;quot;] = 4200,&lt;br /&gt;
[&amp;quot;Spnd&amp;quot;] = 4800,&lt;br /&gt;
[&amp;quot;Spoken_Wikipedia&amp;quot;] = 2200,&lt;br /&gt;
[&amp;quot;Sport_icon&amp;quot;] = 16000,&lt;br /&gt;
[&amp;quot;Sport_icon2&amp;quot;] = 17000,&lt;br /&gt;
[&amp;quot;SportsYearCatUSstate&amp;quot;] = 6700,&lt;br /&gt;
[&amp;quot;Sports_club_or_team_people_category_header&amp;quot;] = 14000,&lt;br /&gt;
[&amp;quot;Sports_club_or_team_people_category_header/category1&amp;quot;] = 14000,&lt;br /&gt;
[&amp;quot;Sports_club_or_team_people_category_header/club_name&amp;quot;] = 14000,&lt;br /&gt;
[&amp;quot;Sports_links&amp;quot;] = 81000,&lt;br /&gt;
[&amp;quot;Sports_reference&amp;quot;] = 5100,&lt;br /&gt;
[&amp;quot;Squad_maintenance&amp;quot;] = 3800,&lt;br /&gt;
[&amp;quot;Sronly&amp;quot;] = 49000,&lt;br /&gt;
[&amp;quot;Srt&amp;quot;] = 7300,&lt;br /&gt;
[&amp;quot;Stack&amp;quot;] = 30000,&lt;br /&gt;
[&amp;quot;Stack/styles.css&amp;quot;] = 42000,&lt;br /&gt;
[&amp;quot;Stack_begin&amp;quot;] = 12000,&lt;br /&gt;
[&amp;quot;Stack_end&amp;quot;] = 12000,&lt;br /&gt;
[&amp;quot;StaleIP&amp;quot;] = 3600,&lt;br /&gt;
[&amp;quot;StandardEbooks&amp;quot;] = 2400,&lt;br /&gt;
[&amp;quot;Standings_table_end&amp;quot;] = 64000,&lt;br /&gt;
[&amp;quot;Standings_table_entry&amp;quot;] = 25000,&lt;br /&gt;
[&amp;quot;Standings_table_entry/record&amp;quot;] = 64000,&lt;br /&gt;
[&amp;quot;Standings_table_start&amp;quot;] = 64000,&lt;br /&gt;
[&amp;quot;Standings_table_start/colheader&amp;quot;] = 64000,&lt;br /&gt;
[&amp;quot;Standings_table_start/colspan&amp;quot;] = 64000,&lt;br /&gt;
[&amp;quot;Standings_table_start/styles.css&amp;quot;] = 64000,&lt;br /&gt;
[&amp;quot;Starbox_astrometry&amp;quot;] = 5700,&lt;br /&gt;
[&amp;quot;Starbox_begin&amp;quot;] = 5800,&lt;br /&gt;
[&amp;quot;Starbox_catalog&amp;quot;] = 5700,&lt;br /&gt;
[&amp;quot;Starbox_character&amp;quot;] = 5700,&lt;br /&gt;
[&amp;quot;Starbox_detail&amp;quot;] = 5600,&lt;br /&gt;
[&amp;quot;Starbox_end&amp;quot;] = 5800,&lt;br /&gt;
[&amp;quot;Starbox_image&amp;quot;] = 4000,&lt;br /&gt;
[&amp;quot;Starbox_observe&amp;quot;] = 5800,&lt;br /&gt;
[&amp;quot;Starbox_reference&amp;quot;] = 5700,&lt;br /&gt;
[&amp;quot;Start-Class&amp;quot;] = 18000,&lt;br /&gt;
[&amp;quot;Start-date&amp;quot;] = 2300,&lt;br /&gt;
[&amp;quot;Start_and_end_dates&amp;quot;] = 3700,&lt;br /&gt;
[&amp;quot;Start_box&amp;quot;] = 5500,&lt;br /&gt;
[&amp;quot;Start_date&amp;quot;] = 548000,&lt;br /&gt;
[&amp;quot;Start_date_and_age&amp;quot;] = 188000,&lt;br /&gt;
[&amp;quot;Start_date_and_years_ago&amp;quot;] = 4000,&lt;br /&gt;
[&amp;quot;Start_date_text&amp;quot;] = 3900,&lt;br /&gt;
[&amp;quot;Start_of_course_timeline&amp;quot;] = 5800,&lt;br /&gt;
[&amp;quot;Start_of_course_week&amp;quot;] = 6000,&lt;br /&gt;
[&amp;quot;Start_tab&amp;quot;] = 6700,&lt;br /&gt;
[&amp;quot;Startflatlist&amp;quot;] = 163000,&lt;br /&gt;
[&amp;quot;Startplainlist&amp;quot;] = 2200,&lt;br /&gt;
[&amp;quot;Static_IP&amp;quot;] = 5000,&lt;br /&gt;
[&amp;quot;Static_row_numbers&amp;quot;] = 2900,&lt;br /&gt;
[&amp;quot;Static_row_numbers/styles.css&amp;quot;] = 2900,&lt;br /&gt;
[&amp;quot;Station&amp;quot;] = 22000,&lt;br /&gt;
[&amp;quot;Station_link&amp;quot;] = 19000,&lt;br /&gt;
[&amp;quot;Stdinchicite&amp;quot;] = 10000,&lt;br /&gt;
[&amp;quot;Steady&amp;quot;] = 19000,&lt;br /&gt;
[&amp;quot;Sticky_header&amp;quot;] = 9700,&lt;br /&gt;
[&amp;quot;Sticky_header/styles.css&amp;quot;] = 27000,&lt;br /&gt;
[&amp;quot;Stl&amp;quot;] = 17000,&lt;br /&gt;
[&amp;quot;Stn&amp;quot;] = 11000,&lt;br /&gt;
[&amp;quot;Stn_art_lnk&amp;quot;] = 2200,&lt;br /&gt;
[&amp;quot;Stnlnk&amp;quot;] = 35000,&lt;br /&gt;
[&amp;quot;Stop&amp;quot;] = 2000,&lt;br /&gt;
[&amp;quot;Store_norske_leksikon&amp;quot;] = 2500,&lt;br /&gt;
[&amp;quot;Storm_colour&amp;quot;] = 5800,&lt;br /&gt;
[&amp;quot;Storm_name&amp;quot;] = 2400,&lt;br /&gt;
[&amp;quot;Storm_path&amp;quot;] = 2200,&lt;br /&gt;
[&amp;quot;Stortingetbio&amp;quot;] = 2100,&lt;br /&gt;
[&amp;quot;StoryTeleplay&amp;quot;] = 3200,&lt;br /&gt;
[&amp;quot;Str_count&amp;quot;] = 166000,&lt;br /&gt;
[&amp;quot;Str_endswith&amp;quot;] = 236000,&lt;br /&gt;
[&amp;quot;Str_find&amp;quot;] = 283000,&lt;br /&gt;
[&amp;quot;Str_index&amp;quot;] = 15000,&lt;br /&gt;
[&amp;quot;Str_left&amp;quot;] = 339000,&lt;br /&gt;
[&amp;quot;Str_len&amp;quot;] = 167000,&lt;br /&gt;
[&amp;quot;Str_letter&amp;quot;] = 184000,&lt;br /&gt;
[&amp;quot;Str_letter/trim&amp;quot;] = 21000,&lt;br /&gt;
[&amp;quot;Str_number&amp;quot;] = 7200,&lt;br /&gt;
[&amp;quot;Str_number/trim&amp;quot;] = 226000,&lt;br /&gt;
[&amp;quot;Str_rep&amp;quot;] = 299000,&lt;br /&gt;
[&amp;quot;Str_right&amp;quot;] = 7100,&lt;br /&gt;
[&amp;quot;Str_startswith&amp;quot;] = 2900,&lt;br /&gt;
[&amp;quot;Str_trim&amp;quot;] = 4200,&lt;br /&gt;
[&amp;quot;Str_≠_len&amp;quot;] = 48000,&lt;br /&gt;
[&amp;quot;Str_≤_len&amp;quot;] = 2900,&lt;br /&gt;
[&amp;quot;Str_≥_len&amp;quot;] = 105000,&lt;br /&gt;
[&amp;quot;Strfind_short&amp;quot;] = 5400,&lt;br /&gt;
[&amp;quot;Strike&amp;quot;] = 2300,&lt;br /&gt;
[&amp;quot;Strikethrough&amp;quot;] = 20000,&lt;br /&gt;
[&amp;quot;String_split&amp;quot;] = 5400,&lt;br /&gt;
[&amp;quot;Strip_tags&amp;quot;] = 41000,&lt;br /&gt;
[&amp;quot;Strong&amp;quot;] = 215000,&lt;br /&gt;
[&amp;quot;Structurae&amp;quot;] = 2100,&lt;br /&gt;
[&amp;quot;Stub-Class&amp;quot;] = 18000,&lt;br /&gt;
[&amp;quot;Stub_Category&amp;quot;] = 14000,&lt;br /&gt;
[&amp;quot;Stub_category&amp;quot;] = 21000,&lt;br /&gt;
[&amp;quot;Stub_documentation&amp;quot;] = 42000,&lt;br /&gt;
[&amp;quot;Student_editor&amp;quot;] = 27000,&lt;br /&gt;
[&amp;quot;Student_sandbox&amp;quot;] = 4300,&lt;br /&gt;
[&amp;quot;Student_table_row&amp;quot;] = 7200,&lt;br /&gt;
[&amp;quot;Students_table&amp;quot;] = 7200,&lt;br /&gt;
[&amp;quot;Su&amp;quot;] = 4800,&lt;br /&gt;
[&amp;quot;Su-census1989&amp;quot;] = 4600,&lt;br /&gt;
[&amp;quot;Sub&amp;quot;] = 4600,&lt;br /&gt;
[&amp;quot;Subinfobox_bodystyle&amp;quot;] = 75000,&lt;br /&gt;
[&amp;quot;Subject_bar&amp;quot;] = 21000,&lt;br /&gt;
[&amp;quot;Suboff&amp;quot;] = 7500,&lt;br /&gt;
[&amp;quot;Subon&amp;quot;] = 7600,&lt;br /&gt;
[&amp;quot;Subpage_other&amp;quot;] = 411000,&lt;br /&gt;
[&amp;quot;Subscription_required&amp;quot;] = 35000,&lt;br /&gt;
[&amp;quot;Subsidebar_bodystyle&amp;quot;] = 6400,&lt;br /&gt;
[&amp;quot;Subst_only&amp;quot;] = 5500,&lt;br /&gt;
[&amp;quot;Substituted_comment&amp;quot;] = 19000,&lt;br /&gt;
[&amp;quot;Succession_box&amp;quot;] = 119000,&lt;br /&gt;
[&amp;quot;Succession_box/check&amp;quot;] = 119000,&lt;br /&gt;
[&amp;quot;Succession_links&amp;quot;] = 218000,&lt;br /&gt;
[&amp;quot;Summer_Olympics_by_year_category_navigation&amp;quot;] = 2600,&lt;br /&gt;
[&amp;quot;Summer_Olympics_by_year_category_navigation/core&amp;quot;] = 2600,&lt;br /&gt;
[&amp;quot;Sunday&amp;quot;] = 2800,&lt;br /&gt;
[&amp;quot;Sup&amp;quot;] = 95000,&lt;br /&gt;
[&amp;quot;Suppress_categories&amp;quot;] = 6600,&lt;br /&gt;
[&amp;quot;Surname&amp;quot;] = 81000,&lt;br /&gt;
[&amp;quot;Swiss_metadata_Wikidata&amp;quot;] = 2900,&lt;br /&gt;
[&amp;quot;Swiss_populations&amp;quot;] = 2400,&lt;br /&gt;
[&amp;quot;Swiss_populations_NC&amp;quot;] = 3000,&lt;br /&gt;
[&amp;quot;Swiss_populations_YM&amp;quot;] = 2300,&lt;br /&gt;
[&amp;quot;Swiss_populations_ref&amp;quot;] = 2400,&lt;br /&gt;
[&amp;quot;Switcher&amp;quot;] = 8400,&lt;br /&gt;
[&amp;quot;Sz&amp;quot;] = 2500,&lt;br /&gt;
[&amp;quot;Module:SDcat&amp;quot;] = 6820000,&lt;br /&gt;
[&amp;quot;Module:SPI_archive_notice&amp;quot;] = 39000,&lt;br /&gt;
[&amp;quot;Module:SST&amp;quot;] = 13000,&lt;br /&gt;
[&amp;quot;Module:SST/hosts&amp;quot;] = 13000,&lt;br /&gt;
[&amp;quot;Module:SST/registry&amp;quot;] = 275000,&lt;br /&gt;
[&amp;quot;Module:SST/shards/sets/COLLEDGE_SHIPS_RN&amp;quot;] = 3000,&lt;br /&gt;
[&amp;quot;Module:SST/shards/sets/TALBERT_BARRINGTON_ATLAS&amp;quot;] = 2100,&lt;br /&gt;
[&amp;quot;Module:Science_redirect&amp;quot;] = 322000,&lt;br /&gt;
[&amp;quot;Module:Science_redirect/conf&amp;quot;] = 322000,&lt;br /&gt;
[&amp;quot;Module:Section_link&amp;quot;] = 166000,&lt;br /&gt;
[&amp;quot;Module:Section_sizes&amp;quot;] = 5900,&lt;br /&gt;
[&amp;quot;Module:See_also_if_exists&amp;quot;] = 95000,&lt;br /&gt;
[&amp;quot;Module:Self&amp;quot;] = 44000,&lt;br /&gt;
[&amp;quot;Module:Self/license_migration_data.json&amp;quot;] = 23000,&lt;br /&gt;
[&amp;quot;Module:Self/styles.css&amp;quot;] = 44000,&lt;br /&gt;
[&amp;quot;Module:Separated_entries&amp;quot;] = 2770000,&lt;br /&gt;
[&amp;quot;Module:Series_overview&amp;quot;] = 10000,&lt;br /&gt;
[&amp;quot;Module:Settlement_Wikidata&amp;quot;] = 52000,&lt;br /&gt;
[&amp;quot;Module:Settlement_short_description&amp;quot;] = 729000,&lt;br /&gt;
[&amp;quot;Module:Shortcut&amp;quot;] = 29000,&lt;br /&gt;
[&amp;quot;Module:Shortcut/config&amp;quot;] = 29000,&lt;br /&gt;
[&amp;quot;Module:Shortcut/styles.css&amp;quot;] = 29000,&lt;br /&gt;
[&amp;quot;Module:Side_box&amp;quot;] = 1280000,&lt;br /&gt;
[&amp;quot;Module:Side_box/styles.css&amp;quot;] = 1280000,&lt;br /&gt;
[&amp;quot;Module:Sidebar&amp;quot;] = 435000,&lt;br /&gt;
[&amp;quot;Module:Sidebar/configuration&amp;quot;] = 435000,&lt;br /&gt;
[&amp;quot;Module:Sidebar/styles.css&amp;quot;] = 441000,&lt;br /&gt;
[&amp;quot;Module:Sidebar_games_events&amp;quot;] = 43000,&lt;br /&gt;
[&amp;quot;Module:Sidebar_games_events/styles.css&amp;quot;] = 43000,&lt;br /&gt;
[&amp;quot;Module:Singles&amp;quot;] = 49000,&lt;br /&gt;
[&amp;quot;Module:Sister_project_links&amp;quot;] = 21000,&lt;br /&gt;
[&amp;quot;Module:Sister_project_links/bar/styles.css&amp;quot;] = 7300,&lt;br /&gt;
[&amp;quot;Module:Sister_project_links/config&amp;quot;] = 21000,&lt;br /&gt;
[&amp;quot;Module:Sister_project_links/styles.css&amp;quot;] = 14000,&lt;br /&gt;
[&amp;quot;Module:Sister_project_logo&amp;quot;] = 1360000,&lt;br /&gt;
[&amp;quot;Module:Sister_project_logo/data&amp;quot;] = 1360000,&lt;br /&gt;
[&amp;quot;Module:Slovak_municipality&amp;quot;] = 3000,&lt;br /&gt;
[&amp;quot;Module:Sock_list&amp;quot;] = 11000,&lt;br /&gt;
[&amp;quot;Module:Sort&amp;quot;] = 156000,&lt;br /&gt;
[&amp;quot;Module:Sort_title&amp;quot;] = 40000,&lt;br /&gt;
[&amp;quot;Module:Sortkey&amp;quot;] = 105000,&lt;br /&gt;
[&amp;quot;Module:Split_article&amp;quot;] = 4200,&lt;br /&gt;
[&amp;quot;Module:Spoken_Wikipedia&amp;quot;] = 2200,&lt;br /&gt;
[&amp;quot;Module:Spoken_Wikipedia/configuration&amp;quot;] = 2200,&lt;br /&gt;
[&amp;quot;Module:Spoken_Wikipedia/styles.css&amp;quot;] = 2200,&lt;br /&gt;
[&amp;quot;Module:Sports_career&amp;quot;] = 21000,&lt;br /&gt;
[&amp;quot;Module:Sports_color&amp;quot;] = 79000,&lt;br /&gt;
[&amp;quot;Module:Sports_color/baseball&amp;quot;] = 36000,&lt;br /&gt;
[&amp;quot;Module:Sports_color/basketball&amp;quot;] = 19000,&lt;br /&gt;
[&amp;quot;Module:Sports_color/ice_hockey&amp;quot;] = 3400,&lt;br /&gt;
[&amp;quot;Module:Sports_color/international_football&amp;quot;] = 43000,&lt;br /&gt;
[&amp;quot;Module:Sports_rbr_table&amp;quot;] = 15000,&lt;br /&gt;
[&amp;quot;Module:Sports_rbr_table/styles.css&amp;quot;] = 15000,&lt;br /&gt;
[&amp;quot;Module:Sports_reference&amp;quot;] = 5100,&lt;br /&gt;
[&amp;quot;Module:Sports_results&amp;quot;] = 19000,&lt;br /&gt;
[&amp;quot;Module:Sports_results/styles.css&amp;quot;] = 11000,&lt;br /&gt;
[&amp;quot;Module:Sports_table&amp;quot;] = 74000,&lt;br /&gt;
[&amp;quot;Module:Sports_table/Volleyball&amp;quot;] = 2500,&lt;br /&gt;
[&amp;quot;Module:Sports_table/WDL&amp;quot;] = 64000,&lt;br /&gt;
[&amp;quot;Module:Sports_table/WDL_OT&amp;quot;] = 4000,&lt;br /&gt;
[&amp;quot;Module:Sports_table/WL&amp;quot;] = 5500,&lt;br /&gt;
[&amp;quot;Module:Sports_table/WL_OT&amp;quot;] = 3100,&lt;br /&gt;
[&amp;quot;Module:Sports_table/argcheck&amp;quot;] = 74000,&lt;br /&gt;
[&amp;quot;Module:Sports_table/styles.css&amp;quot;] = 74000,&lt;br /&gt;
[&amp;quot;Module:Sports_table/sub&amp;quot;] = 74000,&lt;br /&gt;
[&amp;quot;Module:Sports_table/totalscheck&amp;quot;] = 52000,&lt;br /&gt;
[&amp;quot;Module:Stock_tickers/NYSE&amp;quot;] = 2000,&lt;br /&gt;
[&amp;quot;Module:Storm_categories&amp;quot;] = 5900,&lt;br /&gt;
[&amp;quot;Module:Storm_categories/categories&amp;quot;] = 5900,&lt;br /&gt;
[&amp;quot;Module:Storm_categories/colors&amp;quot;] = 5900,&lt;br /&gt;
[&amp;quot;Module:Storm_categories/icons&amp;quot;] = 5900,&lt;br /&gt;
[&amp;quot;Module:String&amp;quot;] = 14200000,&lt;br /&gt;
[&amp;quot;Module:String2&amp;quot;] = 2090000,&lt;br /&gt;
[&amp;quot;Module:Su&amp;quot;] = 14000,&lt;br /&gt;
[&amp;quot;Module:Subject_bar&amp;quot;] = 21000,&lt;br /&gt;
[&amp;quot;Module:Suppress_categories&amp;quot;] = 6600,&lt;br /&gt;
[&amp;quot;Module:Switcher&amp;quot;] = 8400,&lt;br /&gt;
}&lt;/div&gt;</description>
			<pubDate>Wed, 09 Sep 2026 09:48:28 GMT</pubDate>
			<dc:creator>Oxitain</dc:creator>
			<comments>https://www.microindex.net/index.php/Module_talk:Transclusion_count/data/S</comments>
		</item>
		<item>
			<title>Template:Hatnote templates</title>
			<link>https://www.microindex.net/index.php?title=Template:Hatnote_templates&amp;diff=462&amp;oldid=0</link>
			<guid isPermaLink="false">https://www.microindex.net/index.php?title=Template:Hatnote_templates&amp;diff=462&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php/User:Oxitain&quot; class=&quot;mw-userlink&quot; title=&quot;User:Oxitain&quot;&gt;&lt;bdi&gt;Oxitain&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Template:Hatnote_templates&quot; title=&quot;Template:Hatnote templates&quot;&gt;Template:Hatnote templates&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Navbox&lt;br /&gt;
| name = Hatnote templates&lt;br /&gt;
| state = {{{state|expanded}}}&lt;br /&gt;
| bodyclass = hlist&lt;br /&gt;
| belowclass = hlist&lt;br /&gt;
| title  = [[WP:Hatnote#Hatnote templates|Hatnote templates]]&lt;br /&gt;
&lt;br /&gt;
| above =&lt;br /&gt;
*[[Wikipedia:Hatnote]]&lt;br /&gt;
*[[Wikipedia:Disambiguation]]&lt;br /&gt;
*[[Wikipedia:Redirect]]&lt;br /&gt;
&lt;br /&gt;
| group1 = Generic&lt;br /&gt;
| list1 =&lt;br /&gt;
*{{tl|Hatnote}}&lt;br /&gt;
*{{tl|Hatnote group}}&lt;br /&gt;
*{{tl|Self-reference}}&lt;br /&gt;
&lt;br /&gt;
| group2 = For and about&lt;br /&gt;
| list2 =&lt;br /&gt;
*{{tl|For}}&lt;br /&gt;
*{{tl|For-text}} (for custom text)&lt;br /&gt;
*{{tl|For-multi}} (for multiple uses)&lt;br /&gt;
*{{tl|About}}&lt;br /&gt;
{{navbox|subgroup|&lt;br /&gt;
 | group1 = Variations&lt;br /&gt;
 | list1 = *{{tl|Other uses}}&lt;br /&gt;
*{{tl|Other uses of}}&lt;br /&gt;
*{{tl|Redirect-distinguish-for}}&lt;br /&gt;
*{{tl|About-distinguish}}&lt;br /&gt;
*{{tl|About-distinguish-text}}&lt;br /&gt;
}}&lt;br /&gt;
| group3 = Other topics&lt;br /&gt;
| list3 =&lt;br /&gt;
*{{tl|Other people}}&lt;br /&gt;
*{{tl|About other people}} (adds &amp;quot;about&amp;quot; description)&lt;br /&gt;
*{{tl|Similar names}}&lt;br /&gt;
*{{tl|Other storms}}&lt;br /&gt;
*{{tl|Other stars by Bayer designation}}&lt;br /&gt;
*{{tl|Other places}}&lt;br /&gt;
*{{tl|Other ships}}&lt;br /&gt;
&lt;br /&gt;
| group4 = Redirect&lt;br /&gt;
| list4 =&lt;br /&gt;
*{{tl|Redirect}}&lt;br /&gt;
*{{tl|Redirect2}} (for two redirects)&lt;br /&gt;
*{{tl|Redirect-multi}} (for multiple redirects)&lt;br /&gt;
*{{tl|Redirect-several}} (for several redirects, without listing each)&lt;br /&gt;
*{{tl|Redirect-synonym}}&lt;br /&gt;
*{{tl|Redirect-distinguish}}&lt;br /&gt;
*{{tl|Redirect-distinguish-text}}&lt;br /&gt;
*{{tl|Redirect-distinguish-for}}&lt;br /&gt;
*{{tl|Technical reasons}}&lt;br /&gt;
&lt;br /&gt;
| group5 = Distinguish&lt;br /&gt;
| list5 =&lt;br /&gt;
*{{tl|Distinguish}} (supports custom text)&lt;br /&gt;
*{{tl|About-distinguish}}&lt;br /&gt;
*{{tl|About-distinguish-text}} (for custom text)&lt;br /&gt;
*{{tl|Redirect-distinguish}}&lt;br /&gt;
*{{tl|Redirect-distinguish-text}} (for custom text)&lt;br /&gt;
*{{tl|Redirect-distinguish-for}}&lt;br /&gt;
&lt;br /&gt;
| group6 = For use in sections&lt;br /&gt;
| list6 =&lt;br /&gt;
*{{tl|Main}}&lt;br /&gt;
*{{tl|Main if exists}}&lt;br /&gt;
*{{tl|Main list}}&lt;br /&gt;
*{{tl|Further}}&lt;br /&gt;
*{{tl|Further-text}} (for custom text)&lt;br /&gt;
*{{tl|Further interlanguage link}}&lt;br /&gt;
*{{tl|See also}}&lt;br /&gt;
*{{tl|See also-text}} (for custom text)&lt;br /&gt;
*{{tl|For outline}}&lt;br /&gt;
*{{tl|For timeline}}&lt;br /&gt;
&lt;br /&gt;
| group7 = Special&lt;br /&gt;
| list7 =&lt;br /&gt;
*{{tl|Broader}}&lt;br /&gt;
*{{tl|For introduction}}&lt;br /&gt;
*{{tl|On Wikipedia}}&lt;br /&gt;
*{{tl|See Wiktionary}}&lt;br /&gt;
*{{tl|Transcluding article}}&lt;br /&gt;
*{{tl|Transcluded section}}&lt;br /&gt;
&lt;br /&gt;
| group8 = Subject specific&lt;br /&gt;
| list8 = &lt;br /&gt;
*{{tl|About year}}&lt;br /&gt;
*{{tl|Highway detail hatnote}}&lt;br /&gt;
*{{tl|For LMST}}&lt;br /&gt;
*{{tl|WikiIPA}}&lt;br /&gt;
&lt;br /&gt;
| below =&lt;br /&gt;
*{{Icon|cat}} [[:Category:Hatnote templates]]&lt;br /&gt;
**[[:Category:Hatnote modules|modules]]&lt;br /&gt;
**[[:Category:Hatnote templates for names|for [family] names]]&lt;br /&gt;
**[[:Category:Hatnote templates for lists|for lists]]&lt;br /&gt;
*[[Template:Category hatnote templates|hatnote templates for category pages]]&lt;br /&gt;
}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Navbox documentation|expanded|hatnotes=&lt;br /&gt;
{{See also|Wikipedia:Hatnote#Hatnote templates}}&lt;br /&gt;
}}&lt;br /&gt;
{{Sandbox other||&lt;br /&gt;
&amp;lt;!-- Add categories below this line, and interwikis at Wikidata --&amp;gt;&lt;br /&gt;
[[Category:Hatnote templates| ]]&lt;br /&gt;
[[Category:Documentation see also templates]]&lt;br /&gt;
}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</description>
			<pubDate>Wed, 09 Sep 2026 09:48:28 GMT</pubDate>
			<dc:creator>Oxitain</dc:creator>
			<comments>https://www.microindex.net/index.php/Template_talk:Hatnote_templates</comments>
		</item>
		<item>
			<title>Template:Used in system</title>
			<link>https://www.microindex.net/index.php?title=Template:Used_in_system&amp;diff=460&amp;oldid=0</link>
			<guid isPermaLink="false">https://www.microindex.net/index.php?title=Template:Used_in_system&amp;diff=460&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php/User:Oxitain&quot; class=&quot;mw-userlink&quot; title=&quot;User:Oxitain&quot;&gt;&lt;bdi&gt;Oxitain&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Template:Used_in_system&quot; title=&quot;Template:Used in system&quot;&gt;Template:Used in system&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{#invoke:High-use|main|1=|2={{{2|}}}|system={{#if:{{{1|}}}|{{{1}}}|in system messages}}&amp;lt;noinclude&amp;gt;|nocat=true&amp;lt;/noinclude&amp;gt;}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{documentation}}&amp;lt;!-- Add categories and interwikis to the /doc subpage, not here! --&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</description>
			<pubDate>Wed, 09 Sep 2026 09:48:27 GMT</pubDate>
			<dc:creator>Oxitain</dc:creator>
			<comments>https://www.microindex.net/index.php/Template_talk:Used_in_system</comments>
		</item>
		<item>
			<title>Template:Pval</title>
			<link>https://www.microindex.net/index.php?title=Template:Pval&amp;diff=458&amp;oldid=0</link>
			<guid isPermaLink="false">https://www.microindex.net/index.php?title=Template:Pval&amp;diff=458&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php/User:Oxitain&quot; class=&quot;mw-userlink&quot; title=&quot;User:Oxitain&quot;&gt;&lt;bdi&gt;Oxitain&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Template:Pval&quot; class=&quot;mw-redirect&quot; title=&quot;Template:Pval&quot;&gt;Template:Pval&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;#REDIRECT [[Template:Param value]]&lt;br /&gt;
&lt;br /&gt;
{{Rcat shell|&lt;br /&gt;
{{R shortcut}}&lt;br /&gt;
}}&lt;/div&gt;</description>
			<pubDate>Wed, 09 Sep 2026 09:48:27 GMT</pubDate>
			<dc:creator>Oxitain</dc:creator>
			<comments>https://www.microindex.net/index.php/Template_talk:Pval</comments>
		</item>
		<item>
			<title>Template:Param value</title>
			<link>https://www.microindex.net/index.php?title=Template:Param_value&amp;diff=456&amp;oldid=0</link>
			<guid isPermaLink="false">https://www.microindex.net/index.php?title=Template:Param_value&amp;diff=456&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php/User:Oxitain&quot; class=&quot;mw-userlink&quot; title=&quot;User:Oxitain&quot;&gt;&lt;bdi&gt;Oxitain&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Template:Param_value&quot; title=&quot;Template:Param value&quot;&gt;Template:Param value&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;templatestyles src=&amp;quot;Template:Param value/styles.css&amp;quot;/&amp;gt;&amp;lt;span class=&amp;quot;tpl-pval__wrapper&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;tpl-pval__code&amp;quot; style=&amp;quot;{{#if:{{{border|{{{b|}}}}}}|border:{{{border|{{{b|}}}}}};}} {{#if:{{{bg-color|}}}|background-color: {{{bg-color}}}; color: {{Greater color contrast ratio|{{{bg-color}}}}};}} {{#if:{{{bg|}}}|color: {{Greater color contrast ratio|{{{bg}}}}};}} {{#ifexpr:{{str len|{{{1|}}}}} &amp;gt; 25|white-space: wrap;|}} {{{style|}}}&amp;quot;&amp;gt;{{replace|{{replace|{{replace|{{replace|{{replace|&amp;lt;includeonly&amp;gt;⊗ϑ{{{1|}}}⊗ϑ&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;value&amp;lt;/noinclude&amp;gt;| |{{{space|{{{sp|&amp;amp;nbsp;}}}}}}}}|#|&amp;amp;#35;}}|*|&amp;amp;#42;}}|:|&amp;amp;#58;}}|⊗ϑ|}}&amp;lt;/code&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Documentation}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</description>
			<pubDate>Wed, 09 Sep 2026 09:48:27 GMT</pubDate>
			<dc:creator>Oxitain</dc:creator>
			<comments>https://www.microindex.net/index.php/Template_talk:Param_value</comments>
		</item>
		<item>
			<title>Module:Template invocation</title>
			<link>https://www.microindex.net/index.php?title=Module:Template_invocation&amp;diff=454&amp;oldid=0</link>
			<guid isPermaLink="false">https://www.microindex.net/index.php?title=Module:Template_invocation&amp;diff=454&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php/User:Oxitain&quot; class=&quot;mw-userlink&quot; title=&quot;User:Oxitain&quot;&gt;&lt;bdi&gt;Oxitain&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Module:Template_invocation&quot; title=&quot;Module:Template invocation&quot;&gt;Module:Template invocation&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;-- This module provides functions for making MediaWiki template invocations.&lt;br /&gt;
&lt;br /&gt;
local checkType = require(&amp;#039;libraryUtil&amp;#039;).checkType&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------------------------------&lt;br /&gt;
--         Name:  p.name&lt;br /&gt;
--      Purpose:  Find a template invocation name from a page name or a&lt;br /&gt;
--                mw.title object.&lt;br /&gt;
--  Description:  This function detects whether a string or a mw.title&lt;br /&gt;
--                object has been passed in, and uses that to find a&lt;br /&gt;
--                template name as it is used in template invocations.&lt;br /&gt;
--   Parameters:  title - full page name or mw.title object for the&lt;br /&gt;
--                template (string or mw.title object)&lt;br /&gt;
--      Returns:  String&lt;br /&gt;
------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function p.name(title)&lt;br /&gt;
	if type(title) == &amp;#039;string&amp;#039; then&lt;br /&gt;
		title = mw.title.new(title)&lt;br /&gt;
		if not title or #title.prefixedText == 0 or #title.interwiki &amp;gt; 0 then&lt;br /&gt;
			error(&amp;quot;invalid title in parameter #1 of function &amp;#039;name&amp;#039;&amp;quot;, 2)&lt;br /&gt;
		end&lt;br /&gt;
	elseif type(title) ~= &amp;#039;table&amp;#039; or type(title.getContent) ~= &amp;#039;function&amp;#039; then&lt;br /&gt;
		error(&amp;quot;parameter #1 of function &amp;#039;name&amp;#039; must be a string or a mw.title object&amp;quot;, 2)&lt;br /&gt;
	end&lt;br /&gt;
	if title.namespace == 10 then&lt;br /&gt;
		local text = title.text&lt;br /&gt;
		local check = mw.title.new(text, 10)&lt;br /&gt;
		-- Exclude the prefix, unless we have something like &amp;quot;Template:Category:Foo&amp;quot;, which can&amp;#039;t be abbreviated to &amp;quot;Category:Foo&amp;quot;.&lt;br /&gt;
		return check and mw.title.equals(title, check) and text or title.prefixedText&lt;br /&gt;
	elseif title.namespace == 0 then&lt;br /&gt;
		return &amp;#039;:&amp;#039; .. title.prefixedText&lt;br /&gt;
	else&lt;br /&gt;
		return title.prefixedText&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
------------------------------------------------------------------------&lt;br /&gt;
--         Name:  p.invocation&lt;br /&gt;
--      Purpose:  Construct a MediaWiki template invocation.&lt;br /&gt;
--  Description:  This function makes a template invocation from the&lt;br /&gt;
--                name and the arguments given. Note that it isn&amp;#039;t&lt;br /&gt;
--                perfect: we have no way of knowing what whitespace was&lt;br /&gt;
--                in the original invocation, the named parameters will be&lt;br /&gt;
--                alphabetically sorted, and any parameters with duplicate keys&lt;br /&gt;
--                will be removed.&lt;br /&gt;
--   Parameters:  name - the template name, formatted as it will appear&lt;br /&gt;
--                    in the invocation. (string)&lt;br /&gt;
--                args - a table of template arguments. (table)&lt;br /&gt;
--                format - formatting options. (string, optional)&lt;br /&gt;
--                    Set to &amp;quot;nowiki&amp;quot; to escape, curly braces, pipes and&lt;br /&gt;
--                    equals signs with their HTML entities. The default&lt;br /&gt;
--                    is unescaped.&lt;br /&gt;
--      Returns:  String&lt;br /&gt;
------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function p.invocation(name, args, format)&lt;br /&gt;
	checkType(&amp;#039;invocation&amp;#039;, 1, name, &amp;#039;string&amp;#039;)&lt;br /&gt;
	checkType(&amp;#039;invocation&amp;#039;, 2, args, &amp;#039;table&amp;#039;)&lt;br /&gt;
	checkType(&amp;#039;invocation&amp;#039;, 3, format, &amp;#039;string&amp;#039;, true)&lt;br /&gt;
&lt;br /&gt;
	-- Validate the args table and make a copy to work from. We need to&lt;br /&gt;
	-- make a copy of the table rather than just using the original, as&lt;br /&gt;
	-- some of the values may be erased when building the invocation.&lt;br /&gt;
	local invArgs = {}&lt;br /&gt;
	for k, v in pairs(args) do&lt;br /&gt;
		local typek = type(k)&lt;br /&gt;
		local typev = type(v)&lt;br /&gt;
		if typek ~= &amp;#039;string&amp;#039; and typek ~= &amp;#039;number&amp;#039;&lt;br /&gt;
			or typev ~= &amp;#039;string&amp;#039; and typev ~= &amp;#039;number&amp;#039;&lt;br /&gt;
		then&lt;br /&gt;
			error(&amp;quot;invalid arguments table in parameter #2 of &amp;quot; ..&lt;br /&gt;
			&amp;quot;&amp;#039;invocation&amp;#039; (keys and values must be strings or numbers)&amp;quot;, 2)&lt;br /&gt;
		end&lt;br /&gt;
		invArgs[k] = v&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Get the separators to use.&lt;br /&gt;
	local seps = {&lt;br /&gt;
		openb = &amp;#039;{{&amp;#039;,&lt;br /&gt;
		closeb = &amp;#039;}}&amp;#039;,&lt;br /&gt;
		pipe = &amp;#039;|&amp;#039;,&lt;br /&gt;
		equals = &amp;#039;=&amp;#039;&lt;br /&gt;
	}&lt;br /&gt;
	if format == &amp;#039;nowiki&amp;#039; then&lt;br /&gt;
		for k, v in pairs(seps) do&lt;br /&gt;
			seps[k] = mw.text.nowiki(v)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Build the invocation body with numbered args first, then named.&lt;br /&gt;
	local ret = {}&lt;br /&gt;
	ret[#ret + 1] = seps.openb&lt;br /&gt;
	ret[#ret + 1] = name&lt;br /&gt;
	for k, v in ipairs(invArgs) do&lt;br /&gt;
		if type(v) == &amp;#039;string&amp;#039; and v:find(&amp;#039;=&amp;#039;, 1, true) then&lt;br /&gt;
			-- Likely something like 1=foo=bar which needs to be displayed as a named arg.&lt;br /&gt;
		else&lt;br /&gt;
			ret[#ret + 1] = seps.pipe&lt;br /&gt;
			ret[#ret + 1] = v&lt;br /&gt;
			invArgs[k] = nil -- Erase the key so that we don&amp;#039;t add the value twice&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local keys = {} -- sort parameter list; better than arbitrary order&lt;br /&gt;
	for k, _ in pairs(invArgs) do&lt;br /&gt;
		keys[#keys + 1] = k&lt;br /&gt;
	end&lt;br /&gt;
	table.sort(keys,&lt;br /&gt;
		function (a, b)&lt;br /&gt;
			-- Sort with keys of type number first, then string.&lt;br /&gt;
			if type(a) == type(b) then&lt;br /&gt;
				return a &amp;lt; b&lt;br /&gt;
			elseif type(a) == &amp;#039;number&amp;#039; then&lt;br /&gt;
				return true&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	)&lt;br /&gt;
	&lt;br /&gt;
	local maybeSpace = &amp;#039;&amp;#039; -- First named parameter should not be separated by a space&lt;br /&gt;
	for _, v in ipairs(keys) do -- Add named args based on sorted parameter list&lt;br /&gt;
		ret[#ret + 1] = maybeSpace .. seps.pipe&lt;br /&gt;
		ret[#ret + 1] = tostring(v)&lt;br /&gt;
		ret[#ret + 1] = seps.equals&lt;br /&gt;
		ret[#ret + 1] = invArgs[v]&lt;br /&gt;
		maybeSpace = &amp;#039; &amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	ret[#ret + 1] = seps.closeb&lt;br /&gt;
&lt;br /&gt;
	return table.concat(ret)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</description>
			<pubDate>Wed, 09 Sep 2026 09:48:27 GMT</pubDate>
			<dc:creator>Oxitain</dc:creator>
			<comments>https://www.microindex.net/index.php/Module_talk:Template_invocation</comments>
		</item>
		<item>
			<title>Module:Template test case/config</title>
			<link>https://www.microindex.net/index.php?title=Module:Template_test_case/config&amp;diff=452&amp;oldid=0</link>
			<guid isPermaLink="false">https://www.microindex.net/index.php?title=Module:Template_test_case/config&amp;diff=452&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php/User:Oxitain&quot; class=&quot;mw-userlink&quot; title=&quot;User:Oxitain&quot;&gt;&lt;bdi&gt;Oxitain&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Module:Template_test_case/config&quot; title=&quot;Module:Template test case/config&quot;&gt;Module:Template test case/config&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;-------------------------------------------------------------------------------&lt;br /&gt;
--                    Module:Template test case/config&lt;br /&gt;
-- This module holds configuration data for [[Module:Template test case]].&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
return {&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- Options&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- The magic word used in place of the template name when making nowiki&lt;br /&gt;
-- invocations.&lt;br /&gt;
templateNameMagicWord = &amp;#039;__TEMPLATENAME__&amp;#039;,&lt;br /&gt;
&lt;br /&gt;
-- The subpage that sandboxes are typically stored on. Used when loading&lt;br /&gt;
-- wrapper template config and when guessing the sandbox template name.&lt;br /&gt;
sandboxSubpage = &amp;#039;sandbox&amp;#039;,&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- Messages&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
msg = {&lt;br /&gt;
&lt;br /&gt;
-- The default header for test cases rendered in columns.&lt;br /&gt;
[&amp;#039;columns-header&amp;#039;] = &amp;#039;Side by side comparison&amp;#039;,&lt;br /&gt;
&lt;br /&gt;
-- The error message to use if a template option is missing.&lt;br /&gt;
-- $1 - the number of the missing template option.&lt;br /&gt;
[&amp;#039;missing-template-option-error&amp;#039;] = &amp;quot;one or more options ending in &amp;#039;$1&amp;#039; &amp;quot; ..&lt;br /&gt;
	&amp;quot;were detected, but no &amp;#039;template$1&amp;#039; option was found&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
-- The error message to use if a nowiki invocation is used but the template&lt;br /&gt;
-- name magic word is not found.&lt;br /&gt;
-- $1 - the value of the template name magic word&lt;br /&gt;
[&amp;#039;nowiki-magic-word-error&amp;#039;] = &amp;quot;the template invocation must include &amp;#039;$1&amp;#039; in &amp;quot; ..&lt;br /&gt;
	&amp;quot;place of the template name&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- Wrapper template config.&lt;br /&gt;
-- The wrapper template config is a table with wrapper template names as keys,&lt;br /&gt;
-- and subtables containing two fields:&lt;br /&gt;
--   func - the function name to be used with that template. This must be a&lt;br /&gt;
--       function exported by the main module. This is optional: the default&lt;br /&gt;
--       value is &amp;quot;table&amp;quot;.&lt;br /&gt;
--   args - a table of default arguments to be used with that template. This is&lt;br /&gt;
--       is optional.&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
wrappers = {&lt;br /&gt;
	[&amp;#039;Template:Test case&amp;#039;] = {},&lt;br /&gt;
	[&amp;#039;Template:Testcase table&amp;#039;] = {&lt;br /&gt;
		args = {_format = &amp;#039;columns&amp;#039;}&lt;br /&gt;
	},&lt;br /&gt;
	[&amp;#039;Template:Testcase rows&amp;#039;] = {&lt;br /&gt;
		args = {_format = &amp;#039;rows&amp;#039;}&lt;br /&gt;
	},&lt;br /&gt;
	[&amp;#039;Template:Test case nowiki&amp;#039;] = {&lt;br /&gt;
		func = &amp;#039;nowiki&amp;#039;&lt;br /&gt;
	},&lt;br /&gt;
	[&amp;#039;Template:Nowiki template demo&amp;#039;] = {&lt;br /&gt;
		func = &amp;#039;nowiki&amp;#039;,&lt;br /&gt;
		args = {showheader = false, showtemplate2 = false}&lt;br /&gt;
	},&lt;br /&gt;
	[&amp;#039;Template:Collapsible test case&amp;#039;] = {&lt;br /&gt;
		args = {_collapsible = true}&lt;br /&gt;
	},&lt;br /&gt;
	[&amp;#039;Template:Collapsible 2 test case&amp;#039;] = {&lt;br /&gt;
		args = {_collapsible = true, _wantdiff = true}&lt;br /&gt;
	},&lt;br /&gt;
	[&amp;#039;Template:Inline test case&amp;#039;] = {&lt;br /&gt;
		args = {_format = &amp;#039;inline&amp;#039;, _showcode = true}&lt;br /&gt;
	},&lt;br /&gt;
},&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- End config&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
}&lt;/div&gt;</description>
			<pubDate>Wed, 09 Sep 2026 09:48:27 GMT</pubDate>
			<dc:creator>Oxitain</dc:creator>
			<comments>https://www.microindex.net/index.php/Module_talk:Template_test_case/config</comments>
		</item>
		<item>
			<title>Module:Template test case/data</title>
			<link>https://www.microindex.net/index.php?title=Module:Template_test_case/data&amp;diff=450&amp;oldid=0</link>
			<guid isPermaLink="false">https://www.microindex.net/index.php?title=Module:Template_test_case/data&amp;diff=450&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php/User:Oxitain&quot; class=&quot;mw-userlink&quot; title=&quot;User:Oxitain&quot;&gt;&lt;bdi&gt;Oxitain&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Module:Template_test_case/data&quot; title=&quot;Module:Template test case/data&quot;&gt;Module:Template test case/data&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;-- This module processes configuration data for use in&lt;br /&gt;
-- [[Module:Template test case]]. It is loaded from the main module with&lt;br /&gt;
-- mw.loadData.&lt;br /&gt;
&lt;br /&gt;
local cfg = require(&amp;#039;Module:Template test case/config&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
local function escapePattern(s)&lt;br /&gt;
	s = s:gsub(&amp;#039;%p&amp;#039;, &amp;#039;%%%0&amp;#039;)&lt;br /&gt;
	return s&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Escape config items that need to be used as patterns. Doing it here is more&lt;br /&gt;
-- efficient, as mw.loadData saves them from having to be computed for every&lt;br /&gt;
-- test case on a page.&lt;br /&gt;
cfg.templateNameMagicWordPattern = escapePattern(cfg.templateNameMagicWord)&lt;br /&gt;
cfg.sandboxSubpagePattern = &amp;#039;/&amp;#039; .. escapePattern(cfg.sandboxSubpage) .. &amp;#039;$&amp;#039;&lt;br /&gt;
&lt;br /&gt;
return cfg&lt;/div&gt;</description>
			<pubDate>Wed, 09 Sep 2026 09:48:27 GMT</pubDate>
			<dc:creator>Oxitain</dc:creator>
			<comments>https://www.microindex.net/index.php/Module_talk:Template_test_case/data</comments>
		</item>
		<item>
			<title>Module:Template test case</title>
			<link>https://www.microindex.net/index.php?title=Module:Template_test_case&amp;diff=448&amp;oldid=0</link>
			<guid isPermaLink="false">https://www.microindex.net/index.php?title=Module:Template_test_case&amp;diff=448&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php/User:Oxitain&quot; class=&quot;mw-userlink&quot; title=&quot;User:Oxitain&quot;&gt;&lt;bdi&gt;Oxitain&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Module:Template_test_case&quot; title=&quot;Module:Template test case&quot;&gt;Module:Template test case&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;--[[&lt;br /&gt;
   A module for generating test case templates.&lt;br /&gt;
&lt;br /&gt;
   This module incorporates code from the English Wikipedia&amp;#039;s &amp;quot;Testcase table&amp;quot;&lt;br /&gt;
   module,[1] written by Frietjes [2] with contributions by Mr. Stradivarius [3]&lt;br /&gt;
   and Jackmcbarn,[4] and the English Wikipedia&amp;#039;s &amp;quot;Testcase rows&amp;quot; module,[5]&lt;br /&gt;
   written by Mr. Stradivarius.&lt;br /&gt;
&lt;br /&gt;
   The &amp;quot;Testcase table&amp;quot; and &amp;quot;Testcase rows&amp;quot; modules are released under the&lt;br /&gt;
   CC BY-SA 3.0 License [6] and the GFDL.[7]&lt;br /&gt;
&lt;br /&gt;
   License: CC BY-SA 3.0 and the GFDL&lt;br /&gt;
   Author: Mr. Stradivarius&lt;br /&gt;
&lt;br /&gt;
   [1] https://en.wikipedia.org/wiki/Module:Testcase_table&lt;br /&gt;
   [2] https://en.wikipedia.org/wiki/User:Frietjes&lt;br /&gt;
   [3] https://en.wikipedia.org/wiki/User:Mr._Stradivarius&lt;br /&gt;
   [4] https://en.wikipedia.org/wiki/User:Jackmcbarn&lt;br /&gt;
   [5] https://en.wikipedia.org/wiki/Module:Testcase_rows&lt;br /&gt;
   [6] https://en.wikipedia.org/wiki/Wikipedia:Text_of_Creative_Commons_Attribution-ShareAlike_3.0_Unported_License&lt;br /&gt;
   [7] https://en.wikipedia.org/wiki/Wikipedia:Text_of_the_GNU_Free_Documentation_License&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
-- Load required modules&lt;br /&gt;
local yesno = require(&amp;#039;Module:Yesno&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
-- Set constants&lt;br /&gt;
local DATA_MODULE = &amp;#039;Module:Template test case/data&amp;#039;&lt;br /&gt;
local SYNTAXHIGHLIGHT_IS_PRESENT = mw.getCurrentFrame():preprocess( &amp;quot;&amp;lt;syntaxhighlight lang=\&amp;quot;text\&amp;quot;&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&amp;quot; ) ~= &amp;quot;&amp;lt;syntaxhighlight lang=\&amp;quot;text\&amp;quot;&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- Shared methods&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local function message(self, key, ...)&lt;br /&gt;
	-- This method is added to classes that need to deal with messages from the&lt;br /&gt;
	-- config module.&lt;br /&gt;
	local msg = self.cfg.msg[key]&lt;br /&gt;
	if select(1, ...) then&lt;br /&gt;
		return mw.message.newRawMessage(msg, ...):plain()&lt;br /&gt;
	else&lt;br /&gt;
		return msg&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- Template class&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local Template = {}&lt;br /&gt;
&lt;br /&gt;
Template.memoizedMethods = {&lt;br /&gt;
	-- Names of methods to be memoized in each object. This table should only&lt;br /&gt;
	-- hold methods with no parameters.&lt;br /&gt;
	getFullPage = true,&lt;br /&gt;
	getName = true,&lt;br /&gt;
	makeHeader = true,&lt;br /&gt;
	getOutput = true&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function Template.new(invocationObj, options)&lt;br /&gt;
	local obj = {}&lt;br /&gt;
&lt;br /&gt;
	-- Set input&lt;br /&gt;
	for k, v in pairs(options or {}) do&lt;br /&gt;
		if not Template[k] then&lt;br /&gt;
			obj[k] = v&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	obj._invocation = invocationObj&lt;br /&gt;
&lt;br /&gt;
	-- Validate input&lt;br /&gt;
	if not obj.template and not obj.title then&lt;br /&gt;
		error(&amp;#039;no template or title specified&amp;#039;, 2)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Memoize expensive method calls&lt;br /&gt;
	local memoFuncs = {}&lt;br /&gt;
	return setmetatable(obj, {&lt;br /&gt;
		__index = function (t, key)&lt;br /&gt;
			if Template.memoizedMethods[key] then&lt;br /&gt;
				local func = memoFuncs[key]&lt;br /&gt;
				if not func then&lt;br /&gt;
					local val = Template[key](t)&lt;br /&gt;
					func = function () return val end&lt;br /&gt;
					memoFuncs[key] = func&lt;br /&gt;
				end&lt;br /&gt;
				return func&lt;br /&gt;
			else&lt;br /&gt;
				return Template[key]&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Template:getFullPage()&lt;br /&gt;
	if not self.template then&lt;br /&gt;
		return self.title.prefixedText&lt;br /&gt;
	elseif self.template:sub(1, 7) == &amp;#039;#invoke&amp;#039; then&lt;br /&gt;
		return &amp;#039;Module&amp;#039; .. self.template:sub(8):gsub(&amp;#039;|.*&amp;#039;, &amp;#039;&amp;#039;)&lt;br /&gt;
	else&lt;br /&gt;
		local strippedTemplate, hasColon = self.template:gsub(&amp;#039;^:&amp;#039;, &amp;#039;&amp;#039;, 1)&lt;br /&gt;
		hasColon = hasColon &amp;gt; 0&lt;br /&gt;
		local ns = strippedTemplate:match(&amp;#039;^(.-):&amp;#039;)&lt;br /&gt;
		ns = ns and mw.site.namespaces[ns]&lt;br /&gt;
		if ns then&lt;br /&gt;
			return strippedTemplate&lt;br /&gt;
		elseif hasColon then&lt;br /&gt;
			return strippedTemplate -- Main namespace&lt;br /&gt;
		else&lt;br /&gt;
			return mw.site.namespaces[10].name .. &amp;#039;:&amp;#039; .. strippedTemplate&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Template:getName()&lt;br /&gt;
	if self.template then&lt;br /&gt;
		return self.template&lt;br /&gt;
	else&lt;br /&gt;
		return require(&amp;#039;Module:Template invocation&amp;#039;).name(self.title)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Template:makeLink(display)&lt;br /&gt;
	if display then&lt;br /&gt;
		return string.format(&amp;#039;[[:%s|%s]]&amp;#039;, self:getFullPage(), display)&lt;br /&gt;
	else&lt;br /&gt;
		return string.format(&amp;#039;[[:%s]]&amp;#039;, self:getFullPage())&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Template:makeBraceLink(display)&lt;br /&gt;
	display = display or self:getName()&lt;br /&gt;
	local link = self:makeLink(display)&lt;br /&gt;
	return mw.text.nowiki(&amp;#039;{{&amp;#039;) .. link .. mw.text.nowiki(&amp;#039;}}&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Template:makeHeader()&lt;br /&gt;
	return self.heading or self:makeBraceLink()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Template:getInvocation(format)&lt;br /&gt;
	format = format or &amp;#039;&amp;#039;&lt;br /&gt;
	local invocation = self._invocation:getInvocation{&lt;br /&gt;
		template = self:getName(),&lt;br /&gt;
		requireMagicWord = self.requireMagicWord,&lt;br /&gt;
	}&lt;br /&gt;
	if format == &amp;#039;code&amp;#039; or (not SYNTAXHIGHLIGHT_IS_PRESENT and format == &amp;#039;inline&amp;#039;) then&lt;br /&gt;
		-- if syntaxhighlight not present and inline required use code&lt;br /&gt;
		invocation = &amp;#039;&amp;lt;code&amp;gt;&amp;#039; .. mw.text.nowiki(invocation) .. &amp;#039;&amp;lt;/code&amp;gt;&amp;#039;&lt;br /&gt;
	elseif format == &amp;#039;kbd&amp;#039; then&lt;br /&gt;
		invocation = &amp;#039;&amp;lt;kbd&amp;gt;&amp;#039; .. mw.text.nowiki(invocation) .. &amp;#039;&amp;lt;/kbd&amp;gt;&amp;#039;&lt;br /&gt;
	elseif format == &amp;#039;plain&amp;#039; then&lt;br /&gt;
		invocation = mw.text.nowiki(invocation)&lt;br /&gt;
	elseif format == &amp;#039;pre&amp;#039; or not SYNTAXHIGHLIGHT_IS_PRESENT then&lt;br /&gt;
		-- if syntaxhighlight not present and block required use pre&lt;br /&gt;
		invocation = mw.text.encode(invocation, &amp;#039;&amp;amp;&amp;#039;)&lt;br /&gt;
		invocation = &amp;#039;&amp;lt;pre style=&amp;quot;white-space: pre-wrap;&amp;quot;&amp;gt;&amp;#039; .. invocation .. &amp;#039;&amp;lt;/pre&amp;gt;&amp;#039;&lt;br /&gt;
		invocation = mw.getCurrentFrame():preprocess(invocation)&lt;br /&gt;
	else&lt;br /&gt;
		-- use syntaxhighlight as default if present&lt;br /&gt;
		invocation = mw.text.encode(invocation, &amp;#039;&amp;amp;&amp;#039;)&lt;br /&gt;
		invocation = mw.getCurrentFrame():preprocess( &amp;#039;&amp;lt;syntaxhighlight lang=&amp;quot;wikitext&amp;quot;&amp;#039; .. ( format == &amp;#039;inline&amp;#039; and &amp;#039; inline&amp;#039; or &amp;#039;&amp;#039;) .. &amp;#039;&amp;gt;&amp;#039; .. invocation .. &amp;#039;&amp;lt;/syntaxhighlight&amp;gt;&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
	return invocation&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Template:getOutput()&lt;br /&gt;
	local protect = require(&amp;#039;Module:Protect&amp;#039;)&lt;br /&gt;
	-- calling self._invocation:getOutput{...}&lt;br /&gt;
	return protect(self._invocation.getOutput)(self._invocation, {&lt;br /&gt;
		template = self:getName(),&lt;br /&gt;
		requireMagicWord = self.requireMagicWord,&lt;br /&gt;
	})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- TestCase class&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local TestCase = {}&lt;br /&gt;
TestCase.__index = TestCase&lt;br /&gt;
TestCase.message = message -- add the message method&lt;br /&gt;
&lt;br /&gt;
TestCase.renderMethods = {&lt;br /&gt;
	-- Keys in this table are values of the &amp;quot;format&amp;quot; option, values are the&lt;br /&gt;
	-- method for rendering that format.&lt;br /&gt;
	columns = &amp;#039;renderColumns&amp;#039;,&lt;br /&gt;
	rows = &amp;#039;renderRows&amp;#039;,&lt;br /&gt;
	tablerows = &amp;#039;renderRows&amp;#039;,&lt;br /&gt;
	inline = &amp;#039;renderInline&amp;#039;,&lt;br /&gt;
	cells = &amp;#039;renderCells&amp;#039;,&lt;br /&gt;
	default = &amp;#039;renderDefault&amp;#039;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function TestCase.new(invocationObj, options, cfg)&lt;br /&gt;
	local obj = setmetatable({}, TestCase)&lt;br /&gt;
	obj.cfg = cfg&lt;br /&gt;
&lt;br /&gt;
	-- Separate general options from template options. Template options are&lt;br /&gt;
	-- numbered, whereas general options are not.&lt;br /&gt;
	local generalOptions, templateOptions = {}, {}&lt;br /&gt;
	for k, v in pairs(options) do&lt;br /&gt;
		local prefix, num&lt;br /&gt;
		if type(k) == &amp;#039;string&amp;#039; then&lt;br /&gt;
			prefix, num = k:match(&amp;#039;^(.-)([1-9][0-9]*)$&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
		if prefix then&lt;br /&gt;
			num = tonumber(num)&lt;br /&gt;
			templateOptions[num] = templateOptions[num] or {}&lt;br /&gt;
			templateOptions[num][prefix] = v&lt;br /&gt;
		else&lt;br /&gt;
			generalOptions[k] = v&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Set general options&lt;br /&gt;
	generalOptions.showcode = yesno(generalOptions.showcode)&lt;br /&gt;
	generalOptions.showheader = yesno(generalOptions.showheader) ~= false&lt;br /&gt;
	generalOptions.showcaption = yesno(generalOptions.showcaption) ~= false&lt;br /&gt;
	generalOptions.collapsible = yesno(generalOptions.collapsible)&lt;br /&gt;
	generalOptions.notcollapsed = yesno(generalOptions.notcollapsed)&lt;br /&gt;
	generalOptions.wantdiff = yesno(generalOptions.wantdiff) &lt;br /&gt;
	obj.options = generalOptions&lt;br /&gt;
&lt;br /&gt;
	-- Preprocess template args&lt;br /&gt;
	for num, t in pairs(templateOptions) do&lt;br /&gt;
		if t.showtemplate ~= nil then&lt;br /&gt;
			t.showtemplate = yesno(t.showtemplate)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Set up first two template options tables, so that if only the&lt;br /&gt;
	-- &amp;quot;template3&amp;quot; is specified it isn&amp;#039;t made the first template when the&lt;br /&gt;
	-- the table options array is compressed.&lt;br /&gt;
	templateOptions[1] = templateOptions[1] or {}&lt;br /&gt;
	templateOptions[2] = templateOptions[2] or {}&lt;br /&gt;
&lt;br /&gt;
	-- Allow the &amp;quot;template&amp;quot; option to override the &amp;quot;template1&amp;quot; option for&lt;br /&gt;
	-- backwards compatibility with [[Module:Testcase table]].&lt;br /&gt;
	if generalOptions.template then&lt;br /&gt;
		templateOptions[1].template = generalOptions.template&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Add default template options&lt;br /&gt;
	if templateOptions[1].template and not templateOptions[2].template then&lt;br /&gt;
		templateOptions[2].template = templateOptions[1].template ..&lt;br /&gt;
			&amp;#039;/&amp;#039; .. obj.cfg.sandboxSubpage&lt;br /&gt;
	end&lt;br /&gt;
	if not templateOptions[1].template then&lt;br /&gt;
		templateOptions[1].title = mw.title.getCurrentTitle().basePageTitle&lt;br /&gt;
	end&lt;br /&gt;
	if not templateOptions[2].template then&lt;br /&gt;
		templateOptions[2].title = templateOptions[1].title:subPageTitle(&lt;br /&gt;
			obj.cfg.sandboxSubpage&lt;br /&gt;
		)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Remove template options for any templates where the showtemplate&lt;br /&gt;
	-- argument is false. This prevents any output for that template.&lt;br /&gt;
	for num, t in pairs(templateOptions) do&lt;br /&gt;
		if t.showtemplate == false then&lt;br /&gt;
			templateOptions[num] = nil&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Check for missing template names.&lt;br /&gt;
	for num, t in pairs(templateOptions) do&lt;br /&gt;
		if not t.template and not t.title then&lt;br /&gt;
			error(obj:message(&lt;br /&gt;
				&amp;#039;missing-template-option-error&amp;#039;,&lt;br /&gt;
				num, num&lt;br /&gt;
			), 2)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Compress templateOptions table so we can iterate over it with ipairs.&lt;br /&gt;
	templateOptions = (function (t)&lt;br /&gt;
		local nums = {}&lt;br /&gt;
		for num in pairs(t) do&lt;br /&gt;
			nums[#nums + 1] = num&lt;br /&gt;
		end&lt;br /&gt;
		table.sort(nums)&lt;br /&gt;
		local ret = {}&lt;br /&gt;
		for i, num in ipairs(nums) do&lt;br /&gt;
			ret[i] = t[num]&lt;br /&gt;
		end&lt;br /&gt;
		return ret&lt;br /&gt;
	end)(templateOptions)&lt;br /&gt;
&lt;br /&gt;
	-- Don&amp;#039;t require the __TEMPLATENAME__ magic word for nowiki invocations if&lt;br /&gt;
	-- there is only one template being output.&lt;br /&gt;
	if #templateOptions &amp;lt;= 1 then&lt;br /&gt;
		templateOptions[1].requireMagicWord = false&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	mw.logObject(templateOptions)&lt;br /&gt;
&lt;br /&gt;
	-- Make the template objects&lt;br /&gt;
	obj.templates = {}&lt;br /&gt;
	for i, options in ipairs(templateOptions) do&lt;br /&gt;
		table.insert(obj.templates, Template.new(invocationObj, options))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Add tracking categories. At the moment we are only tracking templates&lt;br /&gt;
	-- that use any &amp;quot;heading&amp;quot; parameters or an &amp;quot;output&amp;quot; parameter.&lt;br /&gt;
	obj.categories = {}&lt;br /&gt;
	for k, v in pairs(options) do&lt;br /&gt;
		if type(k) == &amp;#039;string&amp;#039; and k:find(&amp;#039;heading&amp;#039;) then&lt;br /&gt;
			obj.categories[&amp;#039;Test cases using heading parameters&amp;#039;] = true&lt;br /&gt;
		elseif k == &amp;#039;output&amp;#039; then&lt;br /&gt;
			obj.categories[&amp;#039;Test cases using output parameter&amp;#039;] = true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return obj&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function TestCase:getTemplateOutput(templateObj)&lt;br /&gt;
	local output = templateObj:getOutput()&lt;br /&gt;
	if self.options.resetRefs then&lt;br /&gt;
		mw.getCurrentFrame():extensionTag(&amp;#039;references&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	return output&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function TestCase:templateOutputIsEqual()&lt;br /&gt;
	-- Returns a boolean showing whether all of the template outputs are equal.&lt;br /&gt;
	-- The random parts of strip markers (see [[Help:Strip markers]]) are&lt;br /&gt;
	-- removed before comparison. This means a strip marker can contain anything&lt;br /&gt;
	-- and still be treated as equal, but it solves the problem of otherwise&lt;br /&gt;
	-- identical wikitext not returning as exactly equal.&lt;br /&gt;
	local function normaliseOutput(obj)&lt;br /&gt;
		local out = obj:getOutput()&lt;br /&gt;
		-- Remove the random parts from strip markers.&lt;br /&gt;
		out = out:gsub(&amp;#039;(\127[^\127]*UNIQ%-%-%l+%-)%x+(%-%-?QINU[^\127]*\127)&amp;#039;, &amp;#039;%1%2&amp;#039;)&lt;br /&gt;
		return out&lt;br /&gt;
	end&lt;br /&gt;
	local firstOutput = normaliseOutput(self.templates[1])&lt;br /&gt;
	for i = 2, #self.templates do&lt;br /&gt;
		local output = normaliseOutput(self.templates[i])&lt;br /&gt;
		if output ~= firstOutput then&lt;br /&gt;
			return false&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return true&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function TestCase:makeCollapsible(s)&lt;br /&gt;
	local title = self.options.title or self.templates[1]:makeHeader()&lt;br /&gt;
	if self.options.titlecode then&lt;br /&gt;
		title = self.templates[1]:getInvocation(&amp;#039;kbd&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	local isEqual = self:templateOutputIsEqual()&lt;br /&gt;
	local root = mw.html.create(&amp;#039;div&amp;#039;)&lt;br /&gt;
	root&lt;br /&gt;
		:wikitext(mw.getCurrentFrame():extensionTag{&lt;br /&gt;
			name = &amp;#039;templatestyles&amp;#039;,&lt;br /&gt;
			args = { src = &amp;#039;Module:Template test case/styles.css&amp;#039; },&lt;br /&gt;
		})&lt;br /&gt;
		:addClass(&amp;#039;mw-collapsible&amp;#039;)&lt;br /&gt;
		:addClass(&amp;#039;test-case-collapsible&amp;#039;)&lt;br /&gt;
		:addClass(self.options.notcollapsed == false and &amp;#039;mw-collapsed&amp;#039; or nil)&lt;br /&gt;
	if self.options.wantdiff then&lt;br /&gt;
		root&lt;br /&gt;
			:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
				:addClass(isEqual and &amp;#039;test-case-collapsible-b1&amp;#039; or &amp;#039;test-case-collapsible-b2&amp;#039;)&lt;br /&gt;
				:wikitext(title)&lt;br /&gt;
				:done()&lt;br /&gt;
	else&lt;br /&gt;
		if self.options.notcollapsed ~= true or false then&lt;br /&gt;
			root&lt;br /&gt;
				:addClass(isEqual and &amp;#039;mw-collapsed&amp;#039; or nil)&lt;br /&gt;
		end&lt;br /&gt;
		root&lt;br /&gt;
			:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
				:addClass(isEqual and &amp;#039;test-case-collapsible-b3&amp;#039; or &amp;#039;test-case-collapsible-b1&amp;#039;)&lt;br /&gt;
				:wikitext(title)&lt;br /&gt;
				:done()&lt;br /&gt;
	end&lt;br /&gt;
	root&lt;br /&gt;
		:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
			:addClass(&amp;#039;mw-collapsible-content&amp;#039;)&lt;br /&gt;
			:newline()&lt;br /&gt;
			:wikitext(s)&lt;br /&gt;
			:newline()&lt;br /&gt;
	return tostring(root)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function TestCase:renderColumns()&lt;br /&gt;
	local root = mw.html.create()&lt;br /&gt;
	if self.options.showcode then&lt;br /&gt;
		root&lt;br /&gt;
			:wikitext(self.templates[1]:getInvocation())&lt;br /&gt;
			:newline()&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local tableroot = root:tag(&amp;#039;table&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
	if self.options.showheader then&lt;br /&gt;
		-- Caption&lt;br /&gt;
		if self.options.showcaption then&lt;br /&gt;
			tableroot&lt;br /&gt;
				:addClass(self.options.class)&lt;br /&gt;
				:cssText(self.options.style)&lt;br /&gt;
				:tag(&amp;#039;caption&amp;#039;)&lt;br /&gt;
					:wikitext(self.options.caption or self:message(&amp;#039;columns-header&amp;#039;))&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		-- Headers&lt;br /&gt;
		local headerRow = tableroot:tag(&amp;#039;tr&amp;#039;)&lt;br /&gt;
		if self.options.rowheader then&lt;br /&gt;
			-- rowheader is correct here. We need to add another th cell if&lt;br /&gt;
			-- rowheader is set further down, even if heading0 is missing.&lt;br /&gt;
			headerRow:tag(&amp;#039;th&amp;#039;):wikitext(self.options.heading0)&lt;br /&gt;
		end&lt;br /&gt;
		local width&lt;br /&gt;
		if #self.templates &amp;gt; 0 then&lt;br /&gt;
			width = tostring(math.floor(100 / #self.templates)) .. &amp;#039;%&amp;#039;&lt;br /&gt;
		else&lt;br /&gt;
			width = &amp;#039;100%&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
		for i, obj in ipairs(self.templates) do&lt;br /&gt;
			headerRow&lt;br /&gt;
				:tag(&amp;#039;th&amp;#039;)&lt;br /&gt;
					:css(&amp;#039;width&amp;#039;, width)&lt;br /&gt;
					:wikitext(obj:makeHeader())&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Row header&lt;br /&gt;
	local dataRow = tableroot:tag(&amp;#039;tr&amp;#039;):css(&amp;#039;vertical-align&amp;#039;, &amp;#039;top&amp;#039;)&lt;br /&gt;
	if self.options.rowheader then&lt;br /&gt;
		dataRow:tag(&amp;#039;th&amp;#039;)&lt;br /&gt;
			:attr(&amp;#039;scope&amp;#039;, &amp;#039;row&amp;#039;)&lt;br /&gt;
			:wikitext(self.options.rowheader)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Template output&lt;br /&gt;
	for i, obj in ipairs(self.templates) do&lt;br /&gt;
		if self.options.output == &amp;#039;nowiki+&amp;#039; then&lt;br /&gt;
			dataRow:tag(&amp;#039;td&amp;#039;)&lt;br /&gt;
				:newline()&lt;br /&gt;
				:wikitext(self.options.before)&lt;br /&gt;
				:wikitext(self:getTemplateOutput(obj))&lt;br /&gt;
				:wikitext(self.options.after)&lt;br /&gt;
				:wikitext(&amp;#039;&amp;lt;pre style=&amp;quot;white-space: pre-wrap;&amp;quot;&amp;gt;&amp;#039;)&lt;br /&gt;
				:wikitext(mw.text.nowiki(self.options.before or &amp;quot;&amp;quot;))&lt;br /&gt;
				:wikitext(mw.text.nowiki(self:getTemplateOutput(obj)))&lt;br /&gt;
				:wikitext(mw.text.nowiki(self.options.after or &amp;quot;&amp;quot;))&lt;br /&gt;
				:wikitext(&amp;#039;&amp;lt;/pre&amp;gt;&amp;#039;)&lt;br /&gt;
		elseif self.options.output == &amp;#039;nowiki&amp;#039; then&lt;br /&gt;
			dataRow:tag(&amp;#039;td&amp;#039;)&lt;br /&gt;
				:newline()&lt;br /&gt;
				:wikitext(mw.text.nowiki(self.options.before or &amp;quot;&amp;quot;))&lt;br /&gt;
				:wikitext(mw.text.nowiki(self:getTemplateOutput(obj)))&lt;br /&gt;
				:wikitext(mw.text.nowiki(self.options.after or &amp;quot;&amp;quot;))&lt;br /&gt;
		else&lt;br /&gt;
			dataRow:tag(&amp;#039;td&amp;#039;)&lt;br /&gt;
				:newline()&lt;br /&gt;
				:wikitext(self.options.before)&lt;br /&gt;
				:wikitext(self:getTemplateOutput(obj))&lt;br /&gt;
				:wikitext(self.options.after)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return tostring(root)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function TestCase:renderRows()&lt;br /&gt;
	local root = mw.html.create()&lt;br /&gt;
	if self.options.showcode then&lt;br /&gt;
		root&lt;br /&gt;
			:wikitext(self.templates[1]:getInvocation())&lt;br /&gt;
			:newline()&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local tableroot = root:tag(&amp;#039;table&amp;#039;)&lt;br /&gt;
	tableroot&lt;br /&gt;
		:addClass(self.options.class)&lt;br /&gt;
		:cssText(self.options.style)&lt;br /&gt;
&lt;br /&gt;
	if self.options.caption then&lt;br /&gt;
		tableroot&lt;br /&gt;
			:tag(&amp;#039;caption&amp;#039;)&lt;br /&gt;
				:wikitext(self.options.caption)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	for _, obj in ipairs(self.templates) do&lt;br /&gt;
		local dataRow = tableroot:tag(&amp;#039;tr&amp;#039;)&lt;br /&gt;
		&lt;br /&gt;
		-- Header&lt;br /&gt;
		if self.options.showheader then&lt;br /&gt;
			if self.options.format == &amp;#039;tablerows&amp;#039; then&lt;br /&gt;
				dataRow:tag(&amp;#039;th&amp;#039;)&lt;br /&gt;
					:attr(&amp;#039;scope&amp;#039;, &amp;#039;row&amp;#039;)&lt;br /&gt;
					:css(&amp;#039;vertical-align&amp;#039;, &amp;#039;top&amp;#039;)&lt;br /&gt;
					:css(&amp;#039;text-align&amp;#039;, &amp;#039;left&amp;#039;)&lt;br /&gt;
					:wikitext(obj:makeHeader())&lt;br /&gt;
				dataRow:tag(&amp;#039;td&amp;#039;)&lt;br /&gt;
					:css(&amp;#039;vertical-align&amp;#039;, &amp;#039;top&amp;#039;)&lt;br /&gt;
					:css(&amp;#039;padding&amp;#039;, &amp;#039;0 1em&amp;#039;)&lt;br /&gt;
					:wikitext(&amp;#039;→&amp;#039;)&lt;br /&gt;
			else&lt;br /&gt;
				dataRow:tag(&amp;#039;td&amp;#039;)&lt;br /&gt;
					:css(&amp;#039;text-align&amp;#039;, &amp;#039;center&amp;#039;)&lt;br /&gt;
					:css(&amp;#039;font-weight&amp;#039;, &amp;#039;bold&amp;#039;)&lt;br /&gt;
					:wikitext(obj:makeHeader())&lt;br /&gt;
				dataRow = tableroot:tag(&amp;#039;tr&amp;#039;)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		-- Template output&lt;br /&gt;
		if self.options.output == &amp;#039;nowiki+&amp;#039; then&lt;br /&gt;
			dataRow:tag(&amp;#039;td&amp;#039;)&lt;br /&gt;
				:newline()&lt;br /&gt;
                :wikitext(self.options.before)&lt;br /&gt;
                :wikitext(self:getTemplateOutput(obj))&lt;br /&gt;
                :wikitext(self.options.after)&lt;br /&gt;
                :wikitext(&amp;#039;&amp;lt;pre style=&amp;quot;white-space: pre-wrap;&amp;quot;&amp;gt;&amp;#039;)&lt;br /&gt;
                :wikitext(mw.text.nowiki(self.options.before or &amp;quot;&amp;quot;))&lt;br /&gt;
                :wikitext(mw.text.nowiki(self:getTemplateOutput(obj)))&lt;br /&gt;
                :wikitext(mw.text.nowiki(self.options.after or &amp;quot;&amp;quot;))&lt;br /&gt;
                :wikitext(&amp;#039;&amp;lt;/pre&amp;gt;&amp;#039;)&lt;br /&gt;
		elseif self.options.output == &amp;#039;nowiki&amp;#039; then&lt;br /&gt;
			dataRow:tag(&amp;#039;td&amp;#039;)&lt;br /&gt;
				:newline()&lt;br /&gt;
				:wikitext(mw.text.nowiki(self.options.before or &amp;quot;&amp;quot;))&lt;br /&gt;
				:wikitext(mw.text.nowiki(self:getTemplateOutput(obj)))&lt;br /&gt;
				:wikitext(mw.text.nowiki(self.options.after or &amp;quot;&amp;quot;))&lt;br /&gt;
		else&lt;br /&gt;
			dataRow:tag(&amp;#039;td&amp;#039;)&lt;br /&gt;
				:newline()&lt;br /&gt;
				:wikitext(self.options.before)&lt;br /&gt;
				:wikitext(self:getTemplateOutput(obj))&lt;br /&gt;
				:wikitext(self.options.after)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return tostring(root)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function TestCase:renderInline()&lt;br /&gt;
	local arrow = mw.language.getContentLanguage():getArrow(&amp;#039;forwards&amp;#039;)&lt;br /&gt;
	local ret = {}&lt;br /&gt;
	for i, obj in ipairs(self.templates) do&lt;br /&gt;
		local line = {}&lt;br /&gt;
		line[#line + 1] = self.options.prefix or &amp;#039;* &amp;#039;&lt;br /&gt;
		if self.options.showcode then&lt;br /&gt;
			line[#line + 1] = obj:getInvocation(&amp;#039;inline&amp;#039;)&lt;br /&gt;
			line[#line + 1] = &amp;#039; &amp;#039;&lt;br /&gt;
			line[#line + 1] = arrow&lt;br /&gt;
			line[#line + 1] = &amp;#039; &amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
		if self.options.output == &amp;#039;nowiki+&amp;#039; then&lt;br /&gt;
			line[#line + 1] = self.options.before or &amp;quot;&amp;quot;&lt;br /&gt;
			line[#line + 1] = self:getTemplateOutput(obj)&lt;br /&gt;
			line[#line + 1] = self.options.after or &amp;quot;&amp;quot;&lt;br /&gt;
			line[#line + 1] = &amp;#039;&amp;lt;pre style=&amp;quot;white-space: pre-wrap;&amp;quot;&amp;gt;&amp;#039;&lt;br /&gt;
			line[#line + 1] = mw.text.nowiki(self.options.before or &amp;quot;&amp;quot;)&lt;br /&gt;
			line[#line + 1] = mw.text.nowiki(self:getTemplateOutput(obj))&lt;br /&gt;
			line[#line + 1] = mw.text.nowiki(self.options.after or &amp;quot;&amp;quot;)&lt;br /&gt;
			line[#line + 1] = &amp;#039;&amp;lt;/pre&amp;gt;&amp;#039;&lt;br /&gt;
		elseif self.options.output == &amp;#039;nowiki&amp;#039; then&lt;br /&gt;
			line[#line + 1] = mw.text.nowiki(self.options.before or &amp;quot;&amp;quot;)&lt;br /&gt;
			line[#line + 1] = mw.text.nowiki(self:getTemplateOutput(obj))&lt;br /&gt;
			line[#line + 1] = mw.text.nowiki(self.options.after or &amp;quot;&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			line[#line + 1] = self.options.before or &amp;quot;&amp;quot;&lt;br /&gt;
			line[#line + 1] = self:getTemplateOutput(obj)&lt;br /&gt;
			line[#line + 1] = self.options.after or &amp;quot;&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
		ret[#ret + 1] = table.concat(line)&lt;br /&gt;
	end&lt;br /&gt;
	if self.options.addline then&lt;br /&gt;
		local line = {}&lt;br /&gt;
		line[#line + 1] = self.options.prefix or &amp;#039;* &amp;#039;&lt;br /&gt;
		line[#line + 1] = self.options.addline&lt;br /&gt;
		ret[#ret + 1] = table.concat(line)&lt;br /&gt;
	end&lt;br /&gt;
	return table.concat(ret, &amp;#039;\n&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function TestCase:renderCells()&lt;br /&gt;
	local root = mw.html.create()&lt;br /&gt;
	local dataRow = root:tag(&amp;#039;tr&amp;#039;)&lt;br /&gt;
	dataRow&lt;br /&gt;
		:css(&amp;#039;vertical-align&amp;#039;, &amp;#039;top&amp;#039;)&lt;br /&gt;
		:addClass(self.options.class)&lt;br /&gt;
		:cssText(self.options.style)&lt;br /&gt;
&lt;br /&gt;
	-- Row header&lt;br /&gt;
	if self.options.rowheader then&lt;br /&gt;
		dataRow:tag(&amp;#039;th&amp;#039;)&lt;br /&gt;
			:attr(&amp;#039;scope&amp;#039;, &amp;#039;row&amp;#039;)&lt;br /&gt;
			:newline()&lt;br /&gt;
			:wikitext(self.options.rowheader or self:message(&amp;#039;row-header&amp;#039;))&lt;br /&gt;
	end&lt;br /&gt;
	-- Caption&lt;br /&gt;
	if self.options.showcaption then&lt;br /&gt;
		dataRow:tag(&amp;#039;th&amp;#039;)&lt;br /&gt;
			:attr(&amp;#039;scope&amp;#039;, &amp;#039;row&amp;#039;)&lt;br /&gt;
			:newline()&lt;br /&gt;
			:wikitext(self.options.caption or self:message(&amp;#039;columns-header&amp;#039;))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Show code&lt;br /&gt;
	if self.options.showcode then&lt;br /&gt;
		dataRow:tag(&amp;#039;td&amp;#039;)&lt;br /&gt;
			:newline()&lt;br /&gt;
			:wikitext(self:getInvocation(&amp;#039;inline&amp;#039;))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Template output&lt;br /&gt;
	for i, obj in ipairs(self.templates) do&lt;br /&gt;
		if self.options.output == &amp;#039;nowiki+&amp;#039; then&lt;br /&gt;
			dataRow:tag(&amp;#039;td&amp;#039;)&lt;br /&gt;
				:newline()&lt;br /&gt;
				:wikitext(self.options.before)&lt;br /&gt;
				:wikitext(self:getTemplateOutput(obj))&lt;br /&gt;
				:wikitext(self.options.after)&lt;br /&gt;
				:wikitext(&amp;#039;&amp;lt;pre style=&amp;quot;white-space: pre-wrap;&amp;quot;&amp;gt;&amp;#039;)&lt;br /&gt;
				:wikitext(mw.text.nowiki(self.options.before or &amp;quot;&amp;quot;))&lt;br /&gt;
				:wikitext(mw.text.nowiki(self:getTemplateOutput(obj)))&lt;br /&gt;
				:wikitext(mw.text.nowiki(self.options.after or &amp;quot;&amp;quot;))&lt;br /&gt;
				:wikitext(&amp;#039;&amp;lt;/pre&amp;gt;&amp;#039;)&lt;br /&gt;
		elseif self.options.output == &amp;#039;nowiki&amp;#039; then&lt;br /&gt;
			dataRow:tag(&amp;#039;td&amp;#039;)&lt;br /&gt;
				:newline()&lt;br /&gt;
				:wikitext(mw.text.nowiki(self.options.before or &amp;quot;&amp;quot;))&lt;br /&gt;
				:wikitext(mw.text.nowiki(self:getTemplateOutput(obj)))&lt;br /&gt;
				:wikitext(mw.text.nowiki(self.options.after or &amp;quot;&amp;quot;))&lt;br /&gt;
		else&lt;br /&gt;
			dataRow:tag(&amp;#039;td&amp;#039;)&lt;br /&gt;
				:newline()&lt;br /&gt;
				:wikitext(self.options.before)&lt;br /&gt;
				:wikitext(self:getTemplateOutput(obj))&lt;br /&gt;
				:wikitext(self.options.after)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return tostring(root)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function TestCase:renderDefault()&lt;br /&gt;
	local ret = {}&lt;br /&gt;
	if self.options.showcode then&lt;br /&gt;
		ret[#ret + 1] = self.templates[1]:getInvocation()&lt;br /&gt;
	end&lt;br /&gt;
	for i, obj in ipairs(self.templates) do&lt;br /&gt;
		ret[#ret + 1] = &amp;#039;&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;#039;&lt;br /&gt;
		if self.options.showheader then&lt;br /&gt;
			ret[#ret + 1] = obj:makeHeader()&lt;br /&gt;
		end&lt;br /&gt;
		if self.options.output == &amp;#039;nowiki+&amp;#039; then&lt;br /&gt;
			ret[#ret + 1] = (self.options.before or &amp;quot;&amp;quot;) ..&lt;br /&gt;
			self:getTemplateOutput(obj) ..&lt;br /&gt;
			(self.options.after or &amp;quot;&amp;quot;) ..&lt;br /&gt;
			&amp;#039;&amp;lt;pre style=&amp;quot;white-space: pre-wrap;&amp;quot;&amp;gt;&amp;#039; ..&lt;br /&gt;
			mw.text.nowiki(self.options.before or &amp;quot;&amp;quot;) ..&lt;br /&gt;
			mw.text.nowiki(self:getTemplateOutput(obj)) ..&lt;br /&gt;
			mw.text.nowiki(self.options.after or &amp;quot;&amp;quot;) .. &amp;#039;&amp;lt;/pre&amp;gt;&amp;#039;&lt;br /&gt;
		elseif self.options.output == &amp;#039;nowiki&amp;#039; then&lt;br /&gt;
			ret[#ret + 1] = mw.text.nowiki(self.options.before or &amp;quot;&amp;quot;) ..&lt;br /&gt;
			mw.text.nowiki(self:getTemplateOutput(obj)) ..&lt;br /&gt;
			mw.text.nowiki(self.options.after or &amp;quot;&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			ret[#ret + 1] = (self.options.before or &amp;quot;&amp;quot;) ..&lt;br /&gt;
			self:getTemplateOutput(obj) ..&lt;br /&gt;
			(self.options.after or &amp;quot;&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return table.concat(ret, &amp;#039;\n\n&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function TestCase:__tostring()&lt;br /&gt;
	local format = self.options.format&lt;br /&gt;
	local method = format and TestCase.renderMethods[format] or &amp;#039;renderDefault&amp;#039;&lt;br /&gt;
	local ret = self[method](self)&lt;br /&gt;
	if self.options.collapsible then&lt;br /&gt;
		ret = self:makeCollapsible(ret)&lt;br /&gt;
	end&lt;br /&gt;
	for cat in pairs(self.categories) do&lt;br /&gt;
		ret = ret .. string.format(&amp;#039;[[Category:%s]]&amp;#039;, cat)&lt;br /&gt;
	end&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- Nowiki invocation class&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local NowikiInvocation = {}&lt;br /&gt;
NowikiInvocation.__index = NowikiInvocation&lt;br /&gt;
NowikiInvocation.message = message -- Add the message method&lt;br /&gt;
&lt;br /&gt;
function NowikiInvocation.new(invocation, cfg)&lt;br /&gt;
	local obj = setmetatable({}, NowikiInvocation)&lt;br /&gt;
	obj.cfg = cfg&lt;br /&gt;
	invocation = mw.text.unstrip(invocation)&lt;br /&gt;
	-- Decode HTML entities for &amp;lt;, &amp;gt;, and &amp;quot;. This means that HTML entities in&lt;br /&gt;
	-- the original code must be escaped as e.g. &amp;amp;amp;lt;, which is unfortunate,&lt;br /&gt;
	-- but it is the best we can do as the distinction between &amp;lt;, &amp;gt;, &amp;quot; and &amp;amp;lt;,&lt;br /&gt;
	-- &amp;amp;gt;, &amp;amp;quot; is lost during the original nowiki operation.&lt;br /&gt;
	invocation = invocation:gsub(&amp;#039;&amp;amp;lt;&amp;#039;, &amp;#039;&amp;lt;&amp;#039;)&lt;br /&gt;
	invocation = invocation:gsub(&amp;#039;&amp;amp;gt;&amp;#039;, &amp;#039;&amp;gt;&amp;#039;)&lt;br /&gt;
	invocation = invocation:gsub(&amp;#039;&amp;amp;quot;&amp;#039;, &amp;#039;&amp;quot;&amp;#039;)&lt;br /&gt;
	obj.invocation = invocation&lt;br /&gt;
	return obj&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NowikiInvocation:getInvocation(options)&lt;br /&gt;
	local template = options.template:gsub(&amp;#039;%%&amp;#039;, &amp;#039;%%%%&amp;#039;) -- Escape &amp;quot;%&amp;quot; with &amp;quot;%%&amp;quot;&lt;br /&gt;
	local invocation, count = self.invocation:gsub(&lt;br /&gt;
		self.cfg.templateNameMagicWordPattern,&lt;br /&gt;
		template&lt;br /&gt;
	)&lt;br /&gt;
	if options.requireMagicWord ~= false and count &amp;lt; 1 then&lt;br /&gt;
		error(self:message(&lt;br /&gt;
			&amp;#039;nowiki-magic-word-error&amp;#039;,&lt;br /&gt;
			self.cfg.templateNameMagicWord&lt;br /&gt;
		))&lt;br /&gt;
	end&lt;br /&gt;
	return invocation&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function NowikiInvocation:getOutput(options)&lt;br /&gt;
	local invocation = self:getInvocation(options)&lt;br /&gt;
	return mw.getCurrentFrame():preprocess(invocation)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- Table invocation class&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local TableInvocation = {}&lt;br /&gt;
TableInvocation.__index = TableInvocation&lt;br /&gt;
TableInvocation.message = message -- Add the message method&lt;br /&gt;
&lt;br /&gt;
function TableInvocation.new(invokeArgs, nowikiCode, cfg)&lt;br /&gt;
	local obj = setmetatable({}, TableInvocation)&lt;br /&gt;
	obj.cfg = cfg&lt;br /&gt;
	obj.invokeArgs = invokeArgs&lt;br /&gt;
	obj.code = nowikiCode&lt;br /&gt;
	return obj&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function TableInvocation:getInvocation(options)&lt;br /&gt;
	if self.code then&lt;br /&gt;
		local nowikiObj = NowikiInvocation.new(self.code, self.cfg)&lt;br /&gt;
		return nowikiObj:getInvocation(options)&lt;br /&gt;
	else&lt;br /&gt;
		return require(&amp;#039;Module:Template invocation&amp;#039;).invocation(&lt;br /&gt;
			options.template,&lt;br /&gt;
			self.invokeArgs&lt;br /&gt;
		)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function TableInvocation:getOutput(options)&lt;br /&gt;
	if (options.template:sub(1, 7) == &amp;#039;#invoke&amp;#039;) then&lt;br /&gt;
		local moduleCall = mw.text.split(options.template, &amp;#039;|&amp;#039;, true)&lt;br /&gt;
		local args = mw.clone(self.invokeArgs)&lt;br /&gt;
		table.insert(args, 1, moduleCall[2])&lt;br /&gt;
		return mw.getCurrentFrame():callParserFunction(moduleCall[1], args)&lt;br /&gt;
	end&lt;br /&gt;
	return mw.getCurrentFrame():expandTemplate{&lt;br /&gt;
		title = options.template,&lt;br /&gt;
		args = self.invokeArgs&lt;br /&gt;
	}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- Bridge functions&lt;br /&gt;
--&lt;br /&gt;
-- These functions translate template arguments into forms that can be accepted&lt;br /&gt;
-- by the different classes, and return the results.&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local bridge = {}&lt;br /&gt;
&lt;br /&gt;
function bridge.table(args, cfg)&lt;br /&gt;
	cfg = cfg or mw.loadData(DATA_MODULE)&lt;br /&gt;
&lt;br /&gt;
	local options, invokeArgs = {}, {}&lt;br /&gt;
	for k, v in pairs(args) do&lt;br /&gt;
		local optionKey = type(k) == &amp;#039;string&amp;#039; and k:match(&amp;#039;^_(.*)$&amp;#039;)&lt;br /&gt;
		if optionKey then&lt;br /&gt;
			if type(v) == &amp;#039;string&amp;#039; then&lt;br /&gt;
				v = v:match(&amp;#039;^%s*(.-)%s*$&amp;#039;) -- trim whitespace&lt;br /&gt;
			end&lt;br /&gt;
			if v ~= &amp;#039;&amp;#039; then&lt;br /&gt;
				options[optionKey] = v&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			invokeArgs[k] = v&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Allow passing a nowiki invocation as an option. While this means users&lt;br /&gt;
	-- have to pass in the code twice, whitespace is preserved and &amp;amp;lt; etc.&lt;br /&gt;
	-- will work as intended.&lt;br /&gt;
	local nowikiCode = options.code&lt;br /&gt;
	options.code = nil&lt;br /&gt;
&lt;br /&gt;
	local invocationObj = TableInvocation.new(invokeArgs, nowikiCode, cfg)&lt;br /&gt;
	local testCaseObj = TestCase.new(invocationObj, options, cfg)&lt;br /&gt;
	return tostring(testCaseObj)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function bridge.nowiki(args, cfg)&lt;br /&gt;
	cfg = cfg or mw.loadData(DATA_MODULE)&lt;br /&gt;
	&lt;br /&gt;
	-- Convert args beginning with _ for consistency with the normal bridge&lt;br /&gt;
	local newArgs = {}&lt;br /&gt;
	for k, v in pairs(args) do&lt;br /&gt;
		local normalName = type(k) == &amp;quot;string&amp;quot; and string.match(k, &amp;quot;^_(.*)$&amp;quot;)&lt;br /&gt;
		if normalName then&lt;br /&gt;
			newArgs[normalName] = v&lt;br /&gt;
		else&lt;br /&gt;
			newArgs[k] = v&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local code = newArgs.code or newArgs[1]&lt;br /&gt;
	local invocationObj = NowikiInvocation.new(code, cfg)&lt;br /&gt;
	newArgs.code = nil&lt;br /&gt;
	newArgs[1] = nil&lt;br /&gt;
	-- Assume we want to see the code as we already passed it in.&lt;br /&gt;
	newArgs.showcode = newArgs.showcode or true&lt;br /&gt;
	local testCaseObj = TestCase.new(invocationObj, newArgs, cfg)&lt;br /&gt;
	return tostring(testCaseObj)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- Exports&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
function p.main(frame, cfg)&lt;br /&gt;
	cfg = cfg or mw.loadData(DATA_MODULE)&lt;br /&gt;
&lt;br /&gt;
	-- Load the wrapper config, if any.&lt;br /&gt;
	local wrapperConfig&lt;br /&gt;
	if frame.getParent then&lt;br /&gt;
		local title = frame:getParent():getTitle()&lt;br /&gt;
		local template = title:gsub(cfg.sandboxSubpagePattern, &amp;#039;&amp;#039;)&lt;br /&gt;
		wrapperConfig = cfg.wrappers[template]&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Work out the function we will call, use it to generate the config for&lt;br /&gt;
	-- Module:Arguments, and use Module:Arguments to find the arguments passed&lt;br /&gt;
	-- by the user.&lt;br /&gt;
	local func = wrapperConfig and wrapperConfig.func or &amp;#039;table&amp;#039;&lt;br /&gt;
	local userArgs = require(&amp;#039;Module:Arguments&amp;#039;).getArgs(frame, {&lt;br /&gt;
		parentOnly = wrapperConfig,&lt;br /&gt;
		frameOnly = not wrapperConfig,&lt;br /&gt;
		trim = func ~= &amp;#039;table&amp;#039;,&lt;br /&gt;
		removeBlanks = func ~= &amp;#039;table&amp;#039;&lt;br /&gt;
	})&lt;br /&gt;
&lt;br /&gt;
	-- Get default args and build the args table. User-specified args overwrite&lt;br /&gt;
	-- default args.&lt;br /&gt;
	local defaultArgs = wrapperConfig and wrapperConfig.args or {}&lt;br /&gt;
	local args = {}&lt;br /&gt;
	for k, v in pairs(defaultArgs) do&lt;br /&gt;
		args[k] = v&lt;br /&gt;
	end&lt;br /&gt;
	for k, v in pairs(userArgs) do&lt;br /&gt;
		args[k] = v&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return bridge[func](args, cfg)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._exportClasses() -- For testing&lt;br /&gt;
	return {&lt;br /&gt;
		Template = Template,&lt;br /&gt;
		TestCase = TestCase,&lt;br /&gt;
		NowikiInvocation = NowikiInvocation,&lt;br /&gt;
		TableInvocation = TableInvocation&lt;br /&gt;
	}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</description>
			<pubDate>Wed, 09 Sep 2026 09:48:27 GMT</pubDate>
			<dc:creator>Oxitain</dc:creator>
			<comments>https://www.microindex.net/index.php/Module_talk:Template_test_case</comments>
		</item>
		<item>
			<title>Module:High-use</title>
			<link>https://www.microindex.net/index.php?title=Module:High-use&amp;diff=446&amp;oldid=0</link>
			<guid isPermaLink="false">https://www.microindex.net/index.php?title=Module:High-use&amp;diff=446&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php/User:Oxitain&quot; class=&quot;mw-userlink&quot; title=&quot;User:Oxitain&quot;&gt;&lt;bdi&gt;Oxitain&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Module:High-use&quot; title=&quot;Module:High-use&quot;&gt;Module:High-use&lt;/a&gt; by file upload (1 revision)&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 p = {}&lt;br /&gt;
local getArgs = require(&amp;#039;Module:Arguments&amp;#039;).getArgs&lt;br /&gt;
&lt;br /&gt;
local _fetch = require(&amp;#039;Module:Transclusion_count&amp;#039;)._fetch -- _fetch looks at the &amp;#039;demo&amp;#039; argument&lt;br /&gt;
local yesno = require(&amp;#039;Module:Yesno&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
local lang_obj = mw.getContentLanguage() -- this here because the language object is used multiple places in the module&lt;br /&gt;
local large_count_cutoff = 100000&lt;br /&gt;
local approx_num_total_pages = 66000000&lt;br /&gt;
&lt;br /&gt;
local user_subpage_info_page = &amp;#039;Wikipedia:User pages#SUB&amp;#039;&lt;br /&gt;
local sandbox_module_page = &amp;#039;Module:Sandbox&amp;#039;&lt;br /&gt;
local system_messages_cat = &amp;#039;Pages used in system messages needing protection&amp;#039;&lt;br /&gt;
local sandbox_word = &amp;#039;sandbox&amp;#039;&lt;br /&gt;
local testcases_word = &amp;#039;testcases&amp;#039;&lt;br /&gt;
local doc_word = &amp;#039;doc&amp;#039;&lt;br /&gt;
&lt;br /&gt;
local function count_from_args(args)&lt;br /&gt;
	if tonumber(args.count) then -- check if function has already been used&lt;br /&gt;
		return tonumber(args.count) -- early exit if so&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local count&lt;br /&gt;
	&lt;br /&gt;
	if yesno(args[&amp;#039;fetch&amp;#039;]) ~= false then&lt;br /&gt;
		count = _fetch(args) -- fetch transclusion count&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- use explicitly-provided count when fetch fails&lt;br /&gt;
	if count == nil and args[1] ~= nil and args[1] ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		-- convert local language number string to a number understandable by Lua&lt;br /&gt;
		count = mw.ustring.gsub(args[1], &amp;#039;+$&amp;#039;, &amp;#039;&amp;#039;)&lt;br /&gt;
		count = lang_obj:parseFormattedNumber(args[1])&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- in case someone writes a non-positive number&lt;br /&gt;
	if count and count &amp;gt; 0 then&lt;br /&gt;
		return count&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Actions if there is a large (greater than or equal to 100,000) transclusion count&lt;br /&gt;
local function risk_boolean(args)&lt;br /&gt;
	if args.risk == true or args.risk == false then&lt;br /&gt;
		return args.risk&lt;br /&gt;
	elseif args[1]  == &amp;#039;risk&amp;#039; then&lt;br /&gt;
		return true&lt;br /&gt;
	else&lt;br /&gt;
		local count = count_from_args(args)&lt;br /&gt;
		if count and count &amp;gt;= large_count_cutoff 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;
-- function retained for backwards compatibility&lt;br /&gt;
function p._risk(args)&lt;br /&gt;
	return risk_boolean(args) and &amp;#039;risk&amp;#039; or &amp;#039;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- function retained for backwards compatibility&lt;br /&gt;
function p.risk(frame)&lt;br /&gt;
	return p._risk(getArgs(frame))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- count and no_percent arguments retained for backwards compatibility&lt;br /&gt;
function p._num(args, count, no_percent)&lt;br /&gt;
	if count == nil then&lt;br /&gt;
		count = count_from_args(args)&lt;br /&gt;
	end&lt;br /&gt;
	args.count = count&lt;br /&gt;
	args.risk = risk_boolean(args)&lt;br /&gt;
	&lt;br /&gt;
	-- Build output string&lt;br /&gt;
	local return_value = &amp;#039;&amp;#039;&lt;br /&gt;
	if args.count == nil and args.risk then&lt;br /&gt;
		return &amp;#039;a very large number of&amp;#039;&lt;br /&gt;
	elseif args.count == nil then&lt;br /&gt;
		return &amp;#039;many&amp;#039;&lt;br /&gt;
	else&lt;br /&gt;
		-- Use 2 significant figures for smaller numbers and 3 for larger ones&lt;br /&gt;
		local sigfig = 2&lt;br /&gt;
		if args.count &amp;gt;= large_count_cutoff then&lt;br /&gt;
			sigfig = 3&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		-- Prepare to round to appropriate number of sigfigs&lt;br /&gt;
		local f = math.floor(math.log10(args.count)) - sigfig + 1&lt;br /&gt;
		&lt;br /&gt;
		-- Round and insert &amp;#039;approximately&amp;#039; or &amp;#039;+&amp;#039; when appropriate&lt;br /&gt;
		if yesno(args[2]) == true or (type(args[1]) == &amp;#039;string&amp;#039; and (mw.ustring.sub(args[1], -1) == &amp;#039;+&amp;#039;)) then&lt;br /&gt;
			-- Round down&lt;br /&gt;
			return_value = string.format(&amp;#039;%s+&amp;#039;, lang_obj:formatNum(math.floor( (args.count / 10^(f)) ) * (10^(f))) )&lt;br /&gt;
		else&lt;br /&gt;
			-- Round to nearest&lt;br /&gt;
			return_value = string.format(&amp;#039;approximately&amp;amp;#x20;%s&amp;#039;, lang_obj:formatNum(math.floor( (args.count / 10^(f)) + 0.5) * (10^(f))) )&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		-- Insert percentage of pages if that is likely to be &amp;gt;= 1% and when |no-percent= not set to yes&lt;br /&gt;
		no_percent = yesno(no_percent or args[&amp;#039;no-percent&amp;#039;])&lt;br /&gt;
		if args.count and args.count &amp;gt;= approx_num_total_pages/100 and not no_percent then&lt;br /&gt;
			local num_total_pages = mw.getCurrentFrame():callParserFunction(&amp;#039;NUMBEROFPAGES&amp;#039;, &amp;#039;R&amp;#039;)&lt;br /&gt;
			local total_percent = math.floor( ( ( args.count/num_total_pages ) * 100) + 0.5)&lt;br /&gt;
			&lt;br /&gt;
			if total_percent &amp;gt;= 1 then&lt;br /&gt;
				return_value = string.format(&amp;#039;%s&amp;amp;#x20;pages, or roughly %s%% of all&amp;#039;, return_value, total_percent)&lt;br /&gt;
			end&lt;br /&gt;
		end	&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return return_value&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- used by [[Template:Stub documentation]] and other pages&lt;br /&gt;
-- count argument retained for backwards compatibility&lt;br /&gt;
function p.num(frame, count)&lt;br /&gt;
	return p._num(getArgs(frame), count)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- count argument retained for backwards compatibility&lt;br /&gt;
function p._text(args, count)&lt;br /&gt;
	--[=[&lt;br /&gt;
		Only show the information about how this template gets updated&lt;br /&gt;
		if someone is actually editing the page and maybe trying to update the count.&lt;br /&gt;
	]=]&lt;br /&gt;
	local bot_text = (mw.getCurrentFrame():preprocess(&amp;#039;{{REVISIONID}}&amp;#039;) == &amp;#039;&amp;#039;) and (&amp;quot;\n\n----\n&amp;#039;&amp;#039;&amp;#039;Preview message&amp;#039;&amp;#039;&amp;#039;:&amp;quot; .. &amp;#039; Transclusion count updated automatically ([[Template:High-use/doc#Technical details|see documentation]]).&amp;#039;) or &amp;#039;&amp;#039;&lt;br /&gt;
	&lt;br /&gt;
	if count == nil then&lt;br /&gt;
		count = count_from_args(args)&lt;br /&gt;
	end&lt;br /&gt;
	args.count = count&lt;br /&gt;
	args.risk = risk_boolean(args)&lt;br /&gt;
	&lt;br /&gt;
	-- trim /doc, /sandbox and /testcases&lt;br /&gt;
	local title = args.title or (args.demo and args.demo ~= &amp;#039;&amp;#039; and mw.title.new(args.demo, &amp;#039;Template&amp;#039;)) or mw.title.getCurrentTitle()&lt;br /&gt;
	if title.subpageText == doc_word or title.subpageText == sandbox_word or title.subpageText == testcases_word then&lt;br /&gt;
		title = title.basePageTitle&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- use /testcases of base template&lt;br /&gt;
	local testcases_page = mw.title.new(title.prefixedText .. &amp;#039;/&amp;#039; .. testcases_word)&lt;br /&gt;
	-- exists is expensive&lt;br /&gt;
	while testcases_page.basePageTitle.isSubpage and not testcases_page.exists do&lt;br /&gt;
		testcases_page = mw.title.new(testcases_page.basePageTitle.basePageTitle.prefixedText .. &amp;#039;/&amp;#039; .. testcases_word)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local systemMessages = (args[&amp;#039;system&amp;#039;] or &amp;#039;&amp;#039;) ~= &amp;#039;&amp;#039;&lt;br /&gt;
	&lt;br /&gt;
	-- This retrieves the project URL automatically to simplify localization.&lt;br /&gt;
	local templateCount = (&amp;#039;on [https://linkcount.toolforge.org/?project=%s&amp;amp;page=%s#transclusions %s pages]&amp;#039;):format(&lt;br /&gt;
		title:fullUrl():gsub(&amp;#039;//(.-)/.*&amp;#039;, &amp;#039;%1&amp;#039;),&lt;br /&gt;
		mw.uri.encode(title.fullText), p._num(args))&lt;br /&gt;
	local used_on_text = &amp;quot;&amp;#039;&amp;#039;&amp;#039;This &amp;quot; .. (title:inNamespace(&amp;#039;Module&amp;#039;) and &amp;#039;Lua module&amp;#039; or &amp;#039;template&amp;#039;) .. &amp;#039; is used &amp;#039;&lt;br /&gt;
	if systemMessages then&lt;br /&gt;
		used_on_text = used_on_text .. args[&amp;#039;system&amp;#039;] ..&lt;br /&gt;
			((args.count and args.count &amp;gt; 2000) and (&amp;quot;&amp;#039;&amp;#039;&amp;#039;, and &amp;quot; .. templateCount) or (&amp;quot;&amp;#039;&amp;#039;&amp;#039;&amp;quot;))&lt;br /&gt;
	else&lt;br /&gt;
		used_on_text = used_on_text .. templateCount .. &amp;quot;&amp;#039;&amp;#039;&amp;#039;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local sandbox_text = (&amp;#039;%s\&amp;#039;s [[%s/sandbox|/sandbox]] or [[%s|/testcases]] subpages, or in your own [[%s]]. &amp;#039;):format(&lt;br /&gt;
		title:inNamespace(&amp;#039;Module&amp;#039;) and &amp;#039;module&amp;#039; or &amp;#039;template&amp;#039;,&lt;br /&gt;
		title.fullText,&lt;br /&gt;
		testcases_page.fullText,&lt;br /&gt;
		title:inNamespace(&amp;#039;Module&amp;#039;) and (sandbox_module_page .. &amp;#039;|module sandbox&amp;#039;) or (user_subpage_info_page .. &amp;#039;|user subpage&amp;#039;)&lt;br /&gt;
	)&lt;br /&gt;
	&lt;br /&gt;
	local infoArg = args[&amp;#039;info&amp;#039;] ~= &amp;#039;&amp;#039; and args[&amp;#039;info&amp;#039;]&lt;br /&gt;
	if (systemMessages or args.risk) then&lt;br /&gt;
		local info = &amp;#039;.&amp;#039;&lt;br /&gt;
		if systemMessages then&lt;br /&gt;
			info = info .. &amp;#039;&amp;lt;br /&amp;gt;Changes to it can cause immediate changes to the &amp;#039; .. mw.site.namespaces.Project.name .. &amp;#039; user interface.&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
		if infoArg then&lt;br /&gt;
			info = info .. &amp;#039;&amp;lt;br /&amp;gt;&amp;#039; .. infoArg&lt;br /&gt;
		end&lt;br /&gt;
		sandbox_text = info .. &amp;#039;&amp;lt;br /&amp;gt; To avoid major disruption&amp;#039; ..&lt;br /&gt;
			(args.count and args.count &amp;gt;= large_count_cutoff and &amp;#039; and server load&amp;#039; or &amp;#039;&amp;#039;) .. -- should this use args.risk?&lt;br /&gt;
			&amp;#039;, any changes should be tested in the &amp;#039; .. sandbox_text ..&lt;br /&gt;
			&amp;#039;The tested changes can be added to this page in a single edit. &amp;#039;&lt;br /&gt;
	else&lt;br /&gt;
		sandbox_text = (infoArg and (&amp;#039;.&amp;lt;br /&amp;gt;&amp;#039; .. infoArg .. &amp;#039; C&amp;#039;) or &amp;#039; and c&amp;#039;) ..&lt;br /&gt;
			&amp;#039;hanges may be widely noticed. Test changes in the &amp;#039; .. sandbox_text&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local discussion_text = systemMessages and &amp;#039;Please discuss changes &amp;#039; or &amp;#039;Consider discussing changes &amp;#039;&lt;br /&gt;
	if args[2] ~= nil and args[2] ~= &amp;#039;&amp;#039; and yesno(args[2]) == nil then&lt;br /&gt;
		discussion_text = string.format(&amp;#039;%sat [[%s]]&amp;#039;, discussion_text, args[2])&lt;br /&gt;
	else&lt;br /&gt;
		discussion_text = string.format(&amp;#039;%son the [[%s|talk page]]&amp;#039;, discussion_text, title.talkPageTitle.fullText)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return used_on_text .. sandbox_text .. discussion_text .. &amp;#039; before implementing them.&amp;#039; .. bot_text&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- used by [[Template:R from high-use template]]&lt;br /&gt;
-- count argument retained for backwards compatibility&lt;br /&gt;
function p.text(frame, count)&lt;br /&gt;
	return p._text(getArgs(frame), count)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- nocat argument retained for backwards compatibility&lt;br /&gt;
function p._main(args, nocat)&lt;br /&gt;
	args.count = count_from_args(args)&lt;br /&gt;
	args.risk = risk_boolean(args)&lt;br /&gt;
	args.title = (args.demo and args.demo ~= &amp;#039;&amp;#039; and mw.title.new(args.demo, &amp;#039;Template&amp;#039;)) or mw.title.getCurrentTitle()&lt;br /&gt;
	&lt;br /&gt;
	local image = &amp;#039;Ambox warning yellow.svg&amp;#039;&lt;br /&gt;
	local type_param = &amp;#039;style&amp;#039;&lt;br /&gt;
	local epilogue = &amp;#039;&amp;#039;&lt;br /&gt;
	&lt;br /&gt;
	if args[&amp;#039;system&amp;#039;] and args[&amp;#039;system&amp;#039;] ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		image = &amp;#039;Ambox important.svg&amp;#039;&lt;br /&gt;
		type_param = &amp;#039;content&amp;#039;&lt;br /&gt;
		if yesno(nocat or args[&amp;#039;nocat&amp;#039;]) ~= true and not args.title.isRedirect then&lt;br /&gt;
			local protection_action = (args.title:inNamespace(&amp;#039;File&amp;#039;) and &amp;#039;upload&amp;#039;) or &amp;#039;edit&amp;#039;&lt;br /&gt;
			local protection_level = require(&amp;#039;Module:Effective protection level&amp;#039;)._main(protection_action, args.title.fullText)&lt;br /&gt;
			&lt;br /&gt;
			if protection_level ~= &amp;#039;sysop&amp;#039; and protection_level ~= &amp;#039;templateeditor&amp;#039; and protection_level ~= &amp;#039;interfaceadmin&amp;#039; then&lt;br /&gt;
				epilogue = mw.getCurrentFrame():expandTemplate {&lt;br /&gt;
					title = &amp;#039;sandbox other&amp;#039;,&lt;br /&gt;
					args = {&lt;br /&gt;
						[2] = &amp;#039;[[Category:&amp;#039; .. system_messages_cat .. &amp;#039;]]&amp;#039;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	elseif args.risk then&lt;br /&gt;
		image = &amp;#039;Ambox warning orange.svg&amp;#039;&lt;br /&gt;
		type_param = &amp;#039;content&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	image = &amp;#039;[[File:&amp;#039; .. image .. &amp;#039;|40px|alt=Warning|link=]]&amp;#039;&lt;br /&gt;
	if args[&amp;#039;form&amp;#039;] == &amp;#039;editnotice&amp;#039; then&lt;br /&gt;
		return mw.getCurrentFrame():expandTemplate{&lt;br /&gt;
				title = &amp;#039;editnotice&amp;#039;,&lt;br /&gt;
				args = {&lt;br /&gt;
						[&amp;#039;image&amp;#039;] = image,&lt;br /&gt;
						[&amp;#039;text&amp;#039;] = p._text(args),&lt;br /&gt;
						[&amp;#039;expiry&amp;#039;] = (args[&amp;#039;expiry&amp;#039;] or &amp;#039;&amp;#039;)&lt;br /&gt;
				}&lt;br /&gt;
		} .. epilogue&lt;br /&gt;
	else&lt;br /&gt;
		return require(&amp;#039;Module:Message box&amp;#039;).main(&amp;#039;ombox&amp;#039;, {&lt;br /&gt;
			type = type_param,&lt;br /&gt;
			image = image,&lt;br /&gt;
			text = p._text(args),&lt;br /&gt;
			expiry = (args[&amp;#039;expiry&amp;#039;] or &amp;#039;&amp;#039;)&lt;br /&gt;
		}) .. epilogue&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	return p._main(getArgs(frame))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</description>
			<pubDate>Wed, 09 Sep 2026 09:48:27 GMT</pubDate>
			<dc:creator>Oxitain</dc:creator>
			<comments>https://www.microindex.net/index.php/Module_talk:High-use</comments>
		</item>
		<item>
			<title>Template:Str len</title>
			<link>https://www.microindex.net/index.php?title=Template:Str_len&amp;diff=444&amp;oldid=0</link>
			<guid isPermaLink="false">https://www.microindex.net/index.php?title=Template:Str_len&amp;diff=444&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php/User:Oxitain&quot; class=&quot;mw-userlink&quot; title=&quot;User:Oxitain&quot;&gt;&lt;bdi&gt;Oxitain&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Template:Str_len&quot; title=&quot;Template:Str len&quot;&gt;Template:Str len&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{&amp;lt;includeonly&amp;gt;safesubst:&amp;lt;/includeonly&amp;gt;#invoke:String|len|s={{{1|}}}}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{documentation}}&lt;br /&gt;
&amp;lt;!-- Add categories to the /doc subpage, not here! --&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</description>
			<pubDate>Wed, 09 Sep 2026 09:48:27 GMT</pubDate>
			<dc:creator>Oxitain</dc:creator>
			<comments>https://www.microindex.net/index.php/Template_talk:Str_len</comments>
		</item>
		<item>
			<title>Template:See</title>
			<link>https://www.microindex.net/index.php?title=Template:See&amp;diff=442&amp;oldid=0</link>
			<guid isPermaLink="false">https://www.microindex.net/index.php?title=Template:See&amp;diff=442&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php/User:Oxitain&quot; class=&quot;mw-userlink&quot; title=&quot;User:Oxitain&quot;&gt;&lt;bdi&gt;Oxitain&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Template:See&quot; class=&quot;mw-redirect&quot; title=&quot;Template:See&quot;&gt;Template:See&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;#REDIRECT [[Template:Further]]&lt;/div&gt;</description>
			<pubDate>Wed, 09 Sep 2026 09:48:27 GMT</pubDate>
			<dc:creator>Oxitain</dc:creator>
			<comments>https://www.microindex.net/index.php/Template_talk:See</comments>
		</item>
		<item>
			<title>Module:Protect</title>
			<link>https://www.microindex.net/index.php?title=Module:Protect&amp;diff=440&amp;oldid=0</link>
			<guid isPermaLink="false">https://www.microindex.net/index.php?title=Module:Protect&amp;diff=440&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php/User:Oxitain&quot; class=&quot;mw-userlink&quot; title=&quot;User:Oxitain&quot;&gt;&lt;bdi&gt;Oxitain&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Module:Protect&quot; title=&quot;Module:Protect&quot;&gt;Module:Protect&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local function processResult(options, success, ...)&lt;br /&gt;
	if not success then&lt;br /&gt;
		local message = tostring(... or &amp;#039;(no message)&amp;#039;)&lt;br /&gt;
		if options.removeLocation then&lt;br /&gt;
			message = string.gsub(message, &amp;#039;^Module:[^:]+:%d+: &amp;#039;, &amp;#039;&amp;#039;, 1)&lt;br /&gt;
		end&lt;br /&gt;
		return string.format(options.errFormat, message)&lt;br /&gt;
	end&lt;br /&gt;
	return ...&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function protect(func, errFormat, options)&lt;br /&gt;
	if type(errFormat) == &amp;#039;table&amp;#039; then&lt;br /&gt;
		options = options or errFormat&lt;br /&gt;
		errFormat = nil&lt;br /&gt;
	end&lt;br /&gt;
	options = mw.clone(options) or {}&lt;br /&gt;
	options.errFormat = errFormat or options.errFormat or &amp;#039;Error: %s&amp;#039;&lt;br /&gt;
	if not options.raw then&lt;br /&gt;
		options.errFormat = &amp;#039;&amp;lt;strong class=&amp;quot;error&amp;quot;&amp;gt;&amp;#039; .. options.errFormat .. &amp;#039;&amp;lt;/strong&amp;gt;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	options.removeLocation = options.removeLocation == nil or options.removeLocation&lt;br /&gt;
	&lt;br /&gt;
	return function (...)&lt;br /&gt;
		return processResult(options, pcall(func, ...))&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return protect&lt;/div&gt;</description>
			<pubDate>Wed, 09 Sep 2026 09:48:27 GMT</pubDate>
			<dc:creator>Oxitain</dc:creator>
			<comments>https://www.microindex.net/index.php/Module_talk:Protect</comments>
		</item>
		<item>
			<title>Module:Color contrast/colors</title>
			<link>https://www.microindex.net/index.php?title=Module:Color_contrast/colors&amp;diff=438&amp;oldid=0</link>
			<guid isPermaLink="false">https://www.microindex.net/index.php?title=Module:Color_contrast/colors&amp;diff=438&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php/User:Oxitain&quot; class=&quot;mw-userlink&quot; title=&quot;User:Oxitain&quot;&gt;&lt;bdi&gt;Oxitain&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Module:Color_contrast/colors&quot; title=&quot;Module:Color contrast/colors&quot;&gt;Module:Color contrast/colors&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;return {&lt;br /&gt;
	aliceblue            = 0.92880068253475,&lt;br /&gt;
	antiquewhite         = 0.84646951707754,&lt;br /&gt;
	aqua                 = 0.7874,&lt;br /&gt;
	aquamarine           = 0.8078549208338,&lt;br /&gt;
	azure                = 0.97265264954166,&lt;br /&gt;
	beige                = 0.8988459998705,&lt;br /&gt;
	bisque               = 0.80732327372979,&lt;br /&gt;
	black                = 0,&lt;br /&gt;
	blanchedalmond       = 0.85084439608156,&lt;br /&gt;
	blue                 = 0.0722,&lt;br /&gt;
	blueviolet           = 0.12622014321946,&lt;br /&gt;
	brown                = 0.098224287876511,&lt;br /&gt;
	burlywood            = 0.51559844533893,&lt;br /&gt;
	cadetblue            = 0.29424681085422,&lt;br /&gt;
	chartreuse           = 0.76032025902623,&lt;br /&gt;
	chocolate            = 0.23898526114557,&lt;br /&gt;
	coral                = 0.37017930872924,&lt;br /&gt;
	cornflowerblue       = 0.30318641994179,&lt;br /&gt;
	cornsilk             = 0.93562110372965,&lt;br /&gt;
	crimson              = 0.16042199953026,&lt;br /&gt;
	cyan                 = 0.7874,&lt;br /&gt;
	darkblue             = 0.018640801980939,&lt;br /&gt;
	darkcyan             = 0.20329317839046,&lt;br /&gt;
	darkgoldenrod        = 0.27264703559993,&lt;br /&gt;
	darkgray             = 0.39675523072563,&lt;br /&gt;
	darkgreen            = 0.091143429047575,&lt;br /&gt;
	darkgrey             = 0.39675523072563,&lt;br /&gt;
	darkkhaki            = 0.45747326349994,&lt;br /&gt;
	darkmagenta          = 0.07353047651207,&lt;br /&gt;
	darkolivegreen       = 0.12651920884889,&lt;br /&gt;
	darkorange           = 0.40016167026524,&lt;br /&gt;
	darkorchid           = 0.13413142174857,&lt;br /&gt;
	darkred              = 0.054889674531132,&lt;br /&gt;
	darksalmon           = 0.40541471563381,&lt;br /&gt;
	darkseagreen         = 0.43789249325969,&lt;br /&gt;
	darkslateblue        = 0.065792846227988,&lt;br /&gt;
	darkslategray        = 0.067608151928044,&lt;br /&gt;
	darkslategrey        = 0.067608151928044,&lt;br /&gt;
	darkturquoise        = 0.4874606277449,&lt;br /&gt;
	darkviolet           = 0.10999048339343,&lt;br /&gt;
	deeppink             = 0.23866895828276,&lt;br /&gt;
	deepskyblue          = 0.44481603395575,&lt;br /&gt;
	dimgray              = 0.14126329114027,&lt;br /&gt;
	dimgrey              = 0.14126329114027,&lt;br /&gt;
	dodgerblue           = 0.27442536991456,&lt;br /&gt;
	firebrick            = 0.10724525535015,&lt;br /&gt;
	floralwhite          = 0.95922484825004,&lt;br /&gt;
	forestgreen          = 0.18920812076002,&lt;br /&gt;
	fuchsia              = 0.2848,&lt;br /&gt;
	gainsboro            = 0.71569350050648,&lt;br /&gt;
	ghostwhite           = 0.94311261886323,&lt;br /&gt;
	gold                 = 0.69860877428159,&lt;br /&gt;
	goldenrod            = 0.41919977809569,&lt;br /&gt;
	gray                 = 0.2158605001139,&lt;br /&gt;
	green                = 0.15438342968146,&lt;br /&gt;
	greenyellow          = 0.80609472611453,&lt;br /&gt;
	grey                 = 0.2158605001139,&lt;br /&gt;
	honeydew             = 0.96336535554782,&lt;br /&gt;
	hotpink              = 0.34658438169715,&lt;br /&gt;
	indianred            = 0.21406134963884,&lt;br /&gt;
	indigo               = 0.03107561486337,&lt;br /&gt;
	ivory                = 0.99071270600615,&lt;br /&gt;
	khaki                = 0.77012343394121,&lt;br /&gt;
	lavender             = 0.80318750514521,&lt;br /&gt;
	lavenderblush        = 0.90172748631046,&lt;br /&gt;
	lawngreen            = 0.73905893124963,&lt;br /&gt;
	lemonchiffon         = 0.94038992245622,&lt;br /&gt;
	lightblue            = 0.63709141280807,&lt;br /&gt;
	lightcoral           = 0.35522120733135,&lt;br /&gt;
	lightcyan            = 0.94587293494829,&lt;br /&gt;
	lightgoldenrodyellow = 0.93348351018297,&lt;br /&gt;
	lightgray            = 0.65140563741982,&lt;br /&gt;
	lightgreen           = 0.69091979956865,&lt;br /&gt;
	lightgrey            = 0.65140563741982,&lt;br /&gt;
	lightpink            = 0.58566152734898,&lt;br /&gt;
	lightsalmon          = 0.4780675225206,&lt;br /&gt;
	lightseagreen        = 0.35050145117042,&lt;br /&gt;
	lightskyblue         = 0.56195637618331,&lt;br /&gt;
	lightslategray       = 0.23830165007287,&lt;br /&gt;
	lightslategrey       = 0.23830165007287,&lt;br /&gt;
	lightsteelblue       = 0.53983888284666,&lt;br /&gt;
	lightyellow          = 0.98161818392882,&lt;br /&gt;
	lime                 = 0.7152,&lt;br /&gt;
	limegreen            = 0.44571042246098,&lt;br /&gt;
	linen                = 0.88357340984379,&lt;br /&gt;
	magenta              = 0.2848,&lt;br /&gt;
	maroon               = 0.045891942324215,&lt;br /&gt;
	mediumaquamarine     = 0.49389703310801,&lt;br /&gt;
	mediumblue           = 0.044077780212328,&lt;br /&gt;
	mediumorchid         = 0.21639251153773,&lt;br /&gt;
	mediumpurple         = 0.22905858091648,&lt;br /&gt;
	mediumseagreen       = 0.34393112338131,&lt;br /&gt;
	mediumslateblue      = 0.20284629471622,&lt;br /&gt;
	mediumspringgreen    = 0.70704308194184,&lt;br /&gt;
	mediumturquoise      = 0.5133827926448,&lt;br /&gt;
	mediumvioletred      = 0.14371899849357,&lt;br /&gt;
	midnightblue         = 0.02071786635086,&lt;br /&gt;
	mintcream            = 0.97834604947588,&lt;br /&gt;
	mistyrose            = 0.82183047859185,&lt;br /&gt;
	moccasin             = 0.80083000991567,&lt;br /&gt;
	navajowhite          = 0.76519682342785,&lt;br /&gt;
	navy                 = 0.015585128108224,&lt;br /&gt;
	oldlace              = 0.91900633405549,&lt;br /&gt;
	olive                = 0.20027537200568,&lt;br /&gt;
	olivedrab            = 0.22593150951929,&lt;br /&gt;
	orange               = 0.4817026703631,&lt;br /&gt;
	orangered            = 0.25516243753416,&lt;br /&gt;
	orchid               = 0.31348806761439,&lt;br /&gt;
	palegoldenrod        = 0.78792647887614,&lt;br /&gt;
	palegreen            = 0.77936759006353,&lt;br /&gt;
	paleturquoise        = 0.76436077921714,&lt;br /&gt;
	palevioletred        = 0.28754994117889,&lt;br /&gt;
	papayawhip           = 0.87797100199835,&lt;br /&gt;
	peachpuff            = 0.74905589878251,&lt;br /&gt;
	peru                 = 0.30113074877936,&lt;br /&gt;
	pink                 = 0.63271070702466,&lt;br /&gt;
	plum                 = 0.45734221587969,&lt;br /&gt;
	powderblue           = 0.68254586500605,&lt;br /&gt;
	purple               = 0.061477070432439,&lt;br /&gt;
	rebeccapurple        = 0.07492341159447,&lt;br /&gt;
	red                  = 0.2126,&lt;br /&gt;
	rosybrown            = 0.32319457649407,&lt;br /&gt;
	royalblue            = 0.16663210743188,&lt;br /&gt;
	saddlebrown          = 0.097922285020521,&lt;br /&gt;
	salmon               = 0.36977241527596,&lt;br /&gt;
	sandybrown           = 0.46628543696283,&lt;br /&gt;
	seagreen             = 0.19734199706275,&lt;br /&gt;
	seashell             = 0.92737862206922,&lt;br /&gt;
	sienna               = 0.13697631337098,&lt;br /&gt;
	silver               = 0.52711512570581,&lt;br /&gt;
	skyblue              = 0.55291668518184,&lt;br /&gt;
	slateblue            = 0.14784278062136,&lt;br /&gt;
	slategray            = 0.20896704076536,&lt;br /&gt;
	slategrey            = 0.20896704076536,&lt;br /&gt;
	snow                 = 0.96533341834849,&lt;br /&gt;
	springgreen          = 0.73052306068529,&lt;br /&gt;
	steelblue            = 0.20562642207625,&lt;br /&gt;
	tan                  = 0.48237604163921,&lt;br /&gt;
	teal                 = 0.16996855778968,&lt;br /&gt;
	thistle              = 0.56818401093733,&lt;br /&gt;
	tomato               = 0.30638612719415,&lt;br /&gt;
	turquoise            = 0.5895536427578,&lt;br /&gt;
	violet               = 0.40315452986676,&lt;br /&gt;
	wheat                = 0.74909702820482,&lt;br /&gt;
	white                = 1,&lt;br /&gt;
	whitesmoke           = 0.91309865179342,&lt;br /&gt;
	yellow               = 0.9278,&lt;br /&gt;
	yellowgreen          = 0.50762957208707,&lt;br /&gt;
}&lt;/div&gt;</description>
			<pubDate>Wed, 09 Sep 2026 09:48:26 GMT</pubDate>
			<dc:creator>Oxitain</dc:creator>
			<comments>https://www.microindex.net/index.php/Module_talk:Color_contrast/colors</comments>
		</item>
		<item>
			<title>Module:Color contrast</title>
			<link>https://www.microindex.net/index.php?title=Module:Color_contrast&amp;diff=436&amp;oldid=0</link>
			<guid isPermaLink="false">https://www.microindex.net/index.php?title=Module:Color_contrast&amp;diff=436&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php/User:Oxitain&quot; class=&quot;mw-userlink&quot; title=&quot;User:Oxitain&quot;&gt;&lt;bdi&gt;Oxitain&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Module:Color_contrast&quot; title=&quot;Module:Color contrast&quot;&gt;Module:Color contrast&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;--&lt;br /&gt;
-- This module implements&lt;br /&gt;
--  {{Color contrast ratio}}&lt;br /&gt;
--  {{Greater color contrast ratio}}&lt;br /&gt;
--  {{ColorToLum}}&lt;br /&gt;
--  {{RGBColorToLum}}&lt;br /&gt;
--&lt;br /&gt;
local p = {}&lt;br /&gt;
local HTMLcolor = mw.loadData( &amp;#039;Module:Color contrast/colors&amp;#039; )&lt;br /&gt;
&lt;br /&gt;
local function sRGB (v)&lt;br /&gt;
	if (v &amp;lt;= 0.03928) then&lt;br /&gt;
		v = v / 12.92&lt;br /&gt;
	else&lt;br /&gt;
		v = math.pow((v+0.055)/1.055, 2.4)&lt;br /&gt;
	end&lt;br /&gt;
	return v&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function rgbdec2lum(R, G, B)&lt;br /&gt;
	if ( 0 &amp;lt;= R and R &amp;lt; 256 and 0 &amp;lt;= G and G &amp;lt; 256 and 0 &amp;lt;= B and B &amp;lt; 256 ) then&lt;br /&gt;
		return 0.2126 * sRGB(R/255) + 0.7152 * sRGB(G/255) + 0.0722 * sRGB(B/255)&lt;br /&gt;
	else&lt;br /&gt;
		return &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function hsl2lum(h, s, l)&lt;br /&gt;
	if ( 0 &amp;lt;= h and h &amp;lt; 360 and 0 &amp;lt;= s and s &amp;lt;= 1 and 0 &amp;lt;= l and l &amp;lt;= 1 ) then&lt;br /&gt;
		local c = (1 - math.abs(2*l - 1))*s&lt;br /&gt;
		local x = c*(1 - math.abs( math.fmod(h/60, 2) - 1) )&lt;br /&gt;
		local m = l - c/2&lt;br /&gt;
&lt;br /&gt;
		local r, g, b = m, m, m&lt;br /&gt;
		if( 0 &amp;lt;= h and h &amp;lt; 60 ) then&lt;br /&gt;
			r = r + c&lt;br /&gt;
			g = g + x&lt;br /&gt;
		elseif( 60 &amp;lt;= h and h &amp;lt; 120 ) then&lt;br /&gt;
			r = r + x&lt;br /&gt;
			g = g + c&lt;br /&gt;
		elseif( 120 &amp;lt;= h and h &amp;lt; 180 ) then&lt;br /&gt;
			g = g + c&lt;br /&gt;
			b = b + x&lt;br /&gt;
		elseif( 180 &amp;lt;= h and h &amp;lt; 240 ) then&lt;br /&gt;
			g = g + x&lt;br /&gt;
			b = b + c&lt;br /&gt;
		elseif( 240 &amp;lt;= h and h &amp;lt; 300 ) then&lt;br /&gt;
			r = r + x&lt;br /&gt;
			b = b + c&lt;br /&gt;
		elseif( 300 &amp;lt;= h and h &amp;lt; 360 ) then&lt;br /&gt;
			r = r + c&lt;br /&gt;
			b = b + x&lt;br /&gt;
		end&lt;br /&gt;
		return rgbdec2lum(255*r, 255*g, 255*b)&lt;br /&gt;
	else&lt;br /&gt;
		return &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function color2lum(c)&lt;br /&gt;
&lt;br /&gt;
	if (c == nil) then&lt;br /&gt;
		return &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- html &amp;#039;#&amp;#039; entity&lt;br /&gt;
	c = c:gsub(&amp;quot;&amp;amp;#35;&amp;quot;, &amp;quot;#&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
	-- whitespace&lt;br /&gt;
	c = c:match( &amp;#039;^%s*(.-)[%s;]*$&amp;#039; )&lt;br /&gt;
&lt;br /&gt;
	-- unstrip nowiki strip markers&lt;br /&gt;
	c = mw.text.unstripNoWiki(c)&lt;br /&gt;
&lt;br /&gt;
	-- lowercase&lt;br /&gt;
	c = c:lower()&lt;br /&gt;
&lt;br /&gt;
	-- first try to look it up&lt;br /&gt;
	local L = HTMLcolor[c]&lt;br /&gt;
	if (L ~= nil) then&lt;br /&gt;
		return L&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- convert from hsl&lt;br /&gt;
	if mw.ustring.match(c,&amp;#039;^hsl%([%s]*[0-9][0-9%.]*[%s]*,[%s]*[0-9][0-9%.]*%%[%s]*,[%s]*[0-9][0-9%.]*%%[%s]*%)$&amp;#039;) then&lt;br /&gt;
		local h, s, l = mw.ustring.match(c,&amp;#039;^hsl%([%s]*([0-9][0-9%.]*)[%s]*,[%s]*([0-9][0-9%.]*)%%[%s]*,[%s]*([0-9][0-9%.]*)%%[%s]*%)$&amp;#039;)&lt;br /&gt;
		return hsl2lum(tonumber(h), tonumber(s)/100, tonumber(l)/100)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- convert from rgb&lt;br /&gt;
	if mw.ustring.match(c,&amp;#039;^rgb%([%s]*[0-9][0-9]*[%s]*,[%s]*[0-9][0-9]*[%s]*,[%s]*[0-9][0-9]*[%s]*%)$&amp;#039;) then&lt;br /&gt;
		local R, G, B = mw.ustring.match(c,&amp;#039;^rgb%([%s]*([0-9][0-9]*)[%s]*,[%s]*([0-9][0-9]*)[%s]*,[%s]*([0-9][0-9]*)[%s]*%)$&amp;#039;)&lt;br /&gt;
		return rgbdec2lum(tonumber(R), tonumber(G), tonumber(B))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- convert from rgb percent&lt;br /&gt;
	if mw.ustring.match(c,&amp;#039;^rgb%([%s]*[0-9][0-9%.]*%%[%s]*,[%s]*[0-9][0-9%.]*%%[%s]*,[%s]*[0-9][0-9%.]*%%[%s]*%)$&amp;#039;) then&lt;br /&gt;
		local R, G, B = mw.ustring.match(c,&amp;#039;^rgb%([%s]*([0-9][0-9%.]*)%%[%s]*,[%s]*([0-9][0-9%.]*)%%[%s]*,[%s]*([0-9][0-9%.]*)%%[%s]*%)$&amp;#039;)&lt;br /&gt;
		return rgbdec2lum(255*tonumber(R)/100, 255*tonumber(G)/100, 255*tonumber(B)/100)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- remove leading # (if there is one) and whitespace&lt;br /&gt;
	c = mw.ustring.match(c, &amp;#039;^[%s#]*([a-f0-9]*)[%s]*$&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
	-- split into rgb&lt;br /&gt;
	local cs = mw.text.split(c or &amp;#039;&amp;#039;, &amp;#039;&amp;#039;)&lt;br /&gt;
	if( #cs == 6 ) then&lt;br /&gt;
		local R = 16*tonumber(&amp;#039;0x&amp;#039; .. cs[1]) + tonumber(&amp;#039;0x&amp;#039; .. cs[2])&lt;br /&gt;
		local G = 16*tonumber(&amp;#039;0x&amp;#039; .. cs[3]) + tonumber(&amp;#039;0x&amp;#039; .. cs[4])&lt;br /&gt;
		local B = 16*tonumber(&amp;#039;0x&amp;#039; .. cs[5]) + tonumber(&amp;#039;0x&amp;#039; .. cs[6])&lt;br /&gt;
&lt;br /&gt;
		return rgbdec2lum(R, G, B)&lt;br /&gt;
	elseif ( #cs == 3 ) then&lt;br /&gt;
		local R = 16*tonumber(&amp;#039;0x&amp;#039; .. cs[1]) + tonumber(&amp;#039;0x&amp;#039; .. cs[1])&lt;br /&gt;
		local G = 16*tonumber(&amp;#039;0x&amp;#039; .. cs[2]) + tonumber(&amp;#039;0x&amp;#039; .. cs[2])&lt;br /&gt;
		local B = 16*tonumber(&amp;#039;0x&amp;#039; .. cs[3]) + tonumber(&amp;#039;0x&amp;#039; .. cs[3])&lt;br /&gt;
&lt;br /&gt;
		return rgbdec2lum(R, G, B)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- failure, return blank&lt;br /&gt;
	return &amp;#039;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- This exports the function for use in other modules.&lt;br /&gt;
-- The colour is passed as a string.&lt;br /&gt;
function p._lum(color)&lt;br /&gt;
	return color2lum(color)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._greatercontrast(args)&lt;br /&gt;
	local bias = tonumber(args[&amp;#039;bias&amp;#039;] or &amp;#039;0&amp;#039;) or 0&lt;br /&gt;
	local css = (args[&amp;#039;css&amp;#039;] and args[&amp;#039;css&amp;#039;] ~= &amp;#039;&amp;#039;) and true or false&lt;br /&gt;
	local v1 = color2lum(args[1] or &amp;#039;&amp;#039;)&lt;br /&gt;
	local c2 = args[2] or &amp;#039;white&amp;#039;&lt;br /&gt;
	local v2 = color2lum(c2)&lt;br /&gt;
	local c3 = args[3] or &amp;#039;black&amp;#039;&lt;br /&gt;
	local v3 = color2lum(c3)&lt;br /&gt;
	local ratio1 = -1;&lt;br /&gt;
	local ratio2 = -1;&lt;br /&gt;
	if (type(v1) == &amp;#039;number&amp;#039; and type(v2) == &amp;#039;number&amp;#039;) then&lt;br /&gt;
		ratio1 = (v2 + 0.05)/(v1 + 0.05)&lt;br /&gt;
		ratio1 = (ratio1 &amp;lt; 1) and 1/ratio1 or ratio1&lt;br /&gt;
	end&lt;br /&gt;
	if (type(v1) == &amp;#039;number&amp;#039; and type(v3) == &amp;#039;number&amp;#039;) then&lt;br /&gt;
		ratio2 = (v3 + 0.05)/(v1 + 0.05)&lt;br /&gt;
		ratio2 = (ratio2 &amp;lt; 1) and 1/ratio2 or ratio2&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if css then&lt;br /&gt;
		local c1 = args[1] or &amp;#039;&amp;#039;&lt;br /&gt;
		if mw.ustring.match(c1, &amp;#039;^[A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9]$&amp;#039;) or&lt;br /&gt;
			mw.ustring.match(c1, &amp;#039;^[A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9]$&amp;#039;) then&lt;br /&gt;
				c1 = &amp;#039;#&amp;#039; .. c1&lt;br /&gt;
		end&lt;br /&gt;
		if mw.ustring.match(c2, &amp;#039;^[A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9]$&amp;#039;) or&lt;br /&gt;
			mw.ustring.match(c2, &amp;#039;^[A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9]$&amp;#039;) then&lt;br /&gt;
				c2 = &amp;#039;#&amp;#039; .. c2&lt;br /&gt;
		end&lt;br /&gt;
		if mw.ustring.match(v3, &amp;#039;^[A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9]$&amp;#039;) or&lt;br /&gt;
			mw.ustring.match(v3, &amp;#039;^[A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9]$&amp;#039;) then&lt;br /&gt;
				c3 = &amp;#039;#&amp;#039; .. c3&lt;br /&gt;
		end&lt;br /&gt;
		return &amp;#039;background-color:&amp;#039; .. c1 .. &amp;#039;; color:&amp;#039; .. ((ratio1 &amp;gt; 0) and (ratio2 &amp;gt; 0) and ((ratio1 + bias &amp;gt; ratio2) and c2 or c3) or &amp;#039;&amp;#039;) .. &amp;#039;;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return (ratio1 &amp;gt; 0) and (ratio2 &amp;gt; 0) and ((ratio1 + bias &amp;gt; ratio2) and c2 or c3) or &amp;#039;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._ratio(args)&lt;br /&gt;
	local v1 = color2lum(args[1])&lt;br /&gt;
	local v2 = color2lum(args[2])&lt;br /&gt;
	if (type(v1) == &amp;#039;number&amp;#039; and type(v2) == &amp;#039;number&amp;#039;) then&lt;br /&gt;
		-- v1 should be the brighter of the two.&lt;br /&gt;
		if v2 &amp;gt; v1 then&lt;br /&gt;
			v1, v2 = v2, v1&lt;br /&gt;
		end&lt;br /&gt;
		return (v1 + 0.05)/(v2 + 0.05)&lt;br /&gt;
	else&lt;br /&gt;
		return args[&amp;#039;error&amp;#039;] or &amp;#039;?&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._styleratio(args)&lt;br /&gt;
	local style = (args[1] or &amp;#039;&amp;#039;):lower()&lt;br /&gt;
	local bg, fg = &amp;#039;white&amp;#039;, &amp;#039;black&amp;#039;&lt;br /&gt;
	local lum_bg, lum_fg = 1, 0&lt;br /&gt;
&lt;br /&gt;
	if args[2] then&lt;br /&gt;
		local lum = color2lum(args[2])&lt;br /&gt;
		if lum ~= &amp;#039;&amp;#039; then bg, lum_bg = args[2], lum end&lt;br /&gt;
	end&lt;br /&gt;
	if args[3] then&lt;br /&gt;
		local lum = color2lum(args[3])&lt;br /&gt;
		if lum ~= &amp;#039;&amp;#039; then fg, lum_fg = args[3], lum end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local slist = mw.text.split(mw.ustring.gsub(mw.ustring.gsub(style or &amp;#039;&amp;#039;, &amp;#039;&amp;amp;#[Xx]23;&amp;#039;, &amp;#039;#&amp;#039;), &amp;#039;&amp;amp;#35;&amp;#039;, &amp;#039;#&amp;#039;), &amp;#039;;&amp;#039;)&lt;br /&gt;
	for k = 1,#slist do&lt;br /&gt;
		local s = slist[k]&lt;br /&gt;
		local k,v = s:match( &amp;#039;^[%s]*([^:]-):([^:]-)[%s;]*$&amp;#039; )&lt;br /&gt;
		k = k or &amp;#039;&amp;#039;&lt;br /&gt;
		v = v or &amp;#039;&amp;#039;&lt;br /&gt;
		if (k:match(&amp;#039;^[%s]*(background)[%s]*$&amp;#039;) or k:match(&amp;#039;^[%s]*(background%-color)[%s]*$&amp;#039;)) then&lt;br /&gt;
			local lum = color2lum(v)&lt;br /&gt;
			if( lum ~= &amp;#039;&amp;#039; ) then bg, lum_bg = v, lum end&lt;br /&gt;
		elseif (k:match(&amp;#039;^[%s]*(color)[%s]*$&amp;#039;)) then&lt;br /&gt;
			local lum = color2lum(v)&lt;br /&gt;
			if( lum ~= &amp;#039;&amp;#039; ) then bg, lum_fg = v, lum end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if lum_bg &amp;gt; lum_fg then&lt;br /&gt;
		return (lum_bg + 0.05)/(lum_fg + 0.05)&lt;br /&gt;
	else&lt;br /&gt;
		return (lum_fg + 0.05)/(lum_bg + 0.05)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
Use {{#invoke:Color contrast|somecolor}} directly or&lt;br /&gt;
{{#invoke:Color contrast}} from a wrapper template.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
	-- |1=	— required; A color to check.&lt;br /&gt;
--]]&lt;br /&gt;
function p.lum(frame)&lt;br /&gt;
	local color = frame.args[1] or frame:getParent().args[1]&lt;br /&gt;
	return p._lum(color)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.ratio(frame)&lt;br /&gt;
	local args = frame.args[1] and frame.args or frame:getParent().args&lt;br /&gt;
	return p._ratio(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.styleratio(frame)&lt;br /&gt;
	local args = frame.args[1] and frame.args or frame:getParent().args&lt;br /&gt;
	return p._styleratio(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.greatercontrast(frame)&lt;br /&gt;
	local args = frame.args[1] and frame.args or frame:getParent().args&lt;br /&gt;
	return p._greatercontrast(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</description>
			<pubDate>Wed, 09 Sep 2026 09:48:26 GMT</pubDate>
			<dc:creator>Oxitain</dc:creator>
			<comments>https://www.microindex.net/index.php/Module_talk:Color_contrast</comments>
		</item>
		<item>
			<title>Template:Replace</title>
			<link>https://www.microindex.net/index.php?title=Template:Replace&amp;diff=434&amp;oldid=0</link>
			<guid isPermaLink="false">https://www.microindex.net/index.php?title=Template:Replace&amp;diff=434&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php/User:Oxitain&quot; class=&quot;mw-userlink&quot; title=&quot;User:Oxitain&quot;&gt;&lt;bdi&gt;Oxitain&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Template:Replace&quot; title=&quot;Template:Replace&quot;&gt;Template:Replace&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;includeonly&amp;gt;{{safesubst:#invoke:String|replace|source={{{1}}}|{{{2}}}|{{{3}}}|plain={{safesubst:#if:{{{plain|}}}|{{{plain}}}|true}}|count={{{count|}}}}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{documentation}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</description>
			<pubDate>Wed, 09 Sep 2026 09:48:26 GMT</pubDate>
			<dc:creator>Oxitain</dc:creator>
			<comments>https://www.microindex.net/index.php/Template_talk:Replace</comments>
		</item>
		<item>
			<title>Template:Strong</title>
			<link>https://www.microindex.net/index.php?title=Template:Strong&amp;diff=432&amp;oldid=0</link>
			<guid isPermaLink="false">https://www.microindex.net/index.php?title=Template:Strong&amp;diff=432&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php/User:Oxitain&quot; class=&quot;mw-userlink&quot; title=&quot;User:Oxitain&quot;&gt;&lt;bdi&gt;Oxitain&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Template:Strong&quot; title=&quot;Template:Strong&quot;&gt;Template:Strong&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;strong {{#if:{{{role|}}}|role=&amp;quot;{{{role}}}&amp;quot;}} {{#if:{{{class|}}}|class=&amp;quot;{{{class}}}&amp;quot;}} {{#if:{{{id|}}}|id=&amp;quot;{{{id}}}&amp;quot;}} {{#if:{{{style|}}}|style=&amp;quot;{{{style}}}&amp;quot;}} {{#if:{{{title|}}}|title=&amp;quot;{{{title}}}&amp;quot;}}&amp;gt;{{{1}}}&amp;lt;/strong&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{documentation}}&lt;br /&gt;
&amp;lt;!-- Add cats and interwikis to the /doc subpage, not here! --&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</description>
			<pubDate>Wed, 09 Sep 2026 09:48:26 GMT</pubDate>
			<dc:creator>Oxitain</dc:creator>
			<comments>https://www.microindex.net/index.php/Template_talk:Strong</comments>
		</item>
		<item>
			<title>Template:Div col end</title>
			<link>https://www.microindex.net/index.php?title=Template:Div_col_end&amp;diff=430&amp;oldid=0</link>
			<guid isPermaLink="false">https://www.microindex.net/index.php?title=Template:Div_col_end&amp;diff=430&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php/User:Oxitain&quot; class=&quot;mw-userlink&quot; title=&quot;User:Oxitain&quot;&gt;&lt;bdi&gt;Oxitain&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Template:Div_col_end&quot; title=&quot;Template:Div col end&quot;&gt;Template:Div col end&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;includeonly&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Documentation|Template:Div col/doc}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</description>
			<pubDate>Wed, 09 Sep 2026 09:48:26 GMT</pubDate>
			<dc:creator>Oxitain</dc:creator>
			<comments>https://www.microindex.net/index.php/Template_talk:Div_col_end</comments>
		</item>
		<item>
			<title>Template:Div col/styles.css</title>
			<link>https://www.microindex.net/index.php?title=Template:Div_col/styles.css&amp;diff=428&amp;oldid=0</link>
			<guid isPermaLink="false">https://www.microindex.net/index.php?title=Template:Div_col/styles.css&amp;diff=428&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php/User:Oxitain&quot; class=&quot;mw-userlink&quot; title=&quot;User:Oxitain&quot;&gt;&lt;bdi&gt;Oxitain&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Template:Div_col/styles.css&quot; title=&quot;Template:Div col/styles.css&quot;&gt;Template:Div col/styles.css&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;/* {{pp|small=yes}} */&lt;br /&gt;
.div-col {&lt;br /&gt;
	margin-top: 0.3em;&lt;br /&gt;
	column-width: 30em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.div-col-small {&lt;br /&gt;
	font-size: 90%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.div-col-rules {&lt;br /&gt;
	column-rule: 1px solid #aaa;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Reset top margin for lists in div col */&lt;br /&gt;
.div-col dl,&lt;br /&gt;
.div-col ol,&lt;br /&gt;
.div-col ul {&lt;br /&gt;
	margin-top: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Avoid elements breaking between columns&lt;br /&gt;
   See also Template:No col break */&lt;br /&gt;
.div-col li,&lt;br /&gt;
.div-col dd {&lt;br /&gt;
	page-break-inside: avoid; /* Removed from CSS in favor of break-inside c. 2020 */&lt;br /&gt;
	break-inside: avoid-column;&lt;br /&gt;
}&lt;/div&gt;</description>
			<pubDate>Wed, 09 Sep 2026 09:48:26 GMT</pubDate>
			<dc:creator>Oxitain</dc:creator>
			<comments>https://www.microindex.net/index.php/Template_talk:Div_col/styles.css</comments>
		</item>
		<item>
			<title>Template:Div col</title>
			<link>https://www.microindex.net/index.php?title=Template:Div_col&amp;diff=426&amp;oldid=0</link>
			<guid isPermaLink="false">https://www.microindex.net/index.php?title=Template:Div_col&amp;diff=426&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php/User:Oxitain&quot; class=&quot;mw-userlink&quot; title=&quot;User:Oxitain&quot;&gt;&lt;bdi&gt;Oxitain&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Template:Div_col&quot; title=&quot;Template:Div col&quot;&gt;Template:Div col&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;includeonly&amp;gt;&amp;lt;templatestyles src=&amp;quot;Div col/styles.css&amp;quot;/&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;div class=&amp;quot;div-col {{#ifeq:{{{small|}}}|yes|div-col-small}} {{#ifeq:{{{rules|}}}|yes|div-col-rules}} {{{class|}}}&amp;quot; &amp;lt;!--&lt;br /&gt;
--&amp;gt;{{#if:{{{colwidth|}}}{{{gap|}}}{{{style|}}}|&amp;lt;!--&lt;br /&gt;
--&amp;gt;style=&amp;quot;{{#if:{{{colwidth|}}}|column-width: {{{colwidth}}};}}{{#if:{{{gap|}}}|column-gap: {{{gap}}};}}{{#if:{{{style|}}}|{{{style}}}}}&amp;quot;&amp;lt;!--&lt;br /&gt;
--&amp;gt;}}&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;{{#if:{{{content|}}}|{{{content}}}&amp;lt;/div&amp;gt;}}&amp;lt;!-- Inventory how many pages use small=yes &lt;br /&gt;
--&amp;gt;{{#ifeq:{{{small|}}}|yes|[[Category:Pages using div col with small parameter]]}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;/includeonly&amp;gt;{{#invoke:Check for unknown parameters|check|unknown={{main other|[[Category:Pages using div col with unknown parameters|_VALUE_{{PAGENAME}}]]}}|preview=Page using [[Template:Div col]] with unknown parameter &amp;quot;_VALUE_&amp;quot;; use colwidth= to specify column size |ignoreblank=y | class | colwidth | content | gap | rules | small | style }}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Documentation}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</description>
			<pubDate>Wed, 09 Sep 2026 09:48:26 GMT</pubDate>
			<dc:creator>Oxitain</dc:creator>
			<comments>https://www.microindex.net/index.php/Template_talk:Div_col</comments>
		</item>
		<item>
			<title>Module:Protection banner</title>
			<link>https://www.microindex.net/index.php?title=Module:Protection_banner&amp;diff=424&amp;oldid=0</link>
			<guid isPermaLink="false">https://www.microindex.net/index.php?title=Module:Protection_banner&amp;diff=424&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php/User:Oxitain&quot; class=&quot;mw-userlink&quot; title=&quot;User:Oxitain&quot;&gt;&lt;bdi&gt;Oxitain&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Module:Protection_banner&quot; class=&quot;mw-redirect&quot; title=&quot;Module:Protection banner&quot;&gt;Module:Protection banner&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;return require [[Module:Protected page]]&lt;/div&gt;</description>
			<pubDate>Wed, 09 Sep 2026 09:48:26 GMT</pubDate>
			<dc:creator>Oxitain</dc:creator>
			<comments>https://www.microindex.net/index.php/Module_talk:Protection_banner</comments>
		</item>
		<item>
			<title>Module:Navbox/styles.css</title>
			<link>https://www.microindex.net/index.php?title=Module:Navbox/styles.css&amp;diff=422&amp;oldid=0</link>
			<guid isPermaLink="false">https://www.microindex.net/index.php?title=Module:Navbox/styles.css&amp;diff=422&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php/User:Oxitain&quot; class=&quot;mw-userlink&quot; title=&quot;User:Oxitain&quot;&gt;&lt;bdi&gt;Oxitain&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Module:Navbox/styles.css&quot; title=&quot;Module:Navbox/styles.css&quot;&gt;Module:Navbox/styles.css&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;/* {{pp|small=y}} */&lt;br /&gt;
.navbox {&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
	border: 1px solid #a2a9b1;&lt;br /&gt;
	width: 100%;&lt;br /&gt;
	clear: both;&lt;br /&gt;
	font-size: 88%;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
	padding: 1px;&lt;br /&gt;
	margin: 1em auto 0; /* Prevent preceding content from clinging to navboxes */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox .navbox {&lt;br /&gt;
	margin-top: 0; /* No top margin for nested navboxes */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox + .navbox-styles + .navbox,&lt;br /&gt;
/* category positions are wrapped in an &amp;quot;empty&amp;quot; span in Parsoid [[phab:T378906]] */ &lt;br /&gt;
.navbox + span.mw-empty-elt + .navbox-styles + .navbox {&lt;br /&gt;
	margin-top: -1px; /* Single pixel border between adjacent navboxes */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox-inner,&lt;br /&gt;
.navbox-subgroup {&lt;br /&gt;
	width: 100%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox-group,&lt;br /&gt;
.navbox-title,&lt;br /&gt;
.navbox-abovebelow {&lt;br /&gt;
	padding: 0.25em 1em;&lt;br /&gt;
	line-height: 1.5em;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox-group {&lt;br /&gt;
	white-space: nowrap;&lt;br /&gt;
	/* @noflip */&lt;br /&gt;
	text-align: right;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox,&lt;br /&gt;
.navbox-subgroup {&lt;br /&gt;
	background-color: #fdfdfd;&lt;br /&gt;
    color:inherit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox-list {&lt;br /&gt;
	line-height: 1.5em;&lt;br /&gt;
	border-color: #fdfdfd; /* Must match background color */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox-list-with-group {&lt;br /&gt;
	text-align: left;&lt;br /&gt;
	border-left-width: 2px;&lt;br /&gt;
	border-left-style: solid;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* cell spacing for navbox cells */&lt;br /&gt;
/* Borders above 2nd, 3rd, etc. rows */&lt;br /&gt;
/* TODO: figure out how to replace tr as structure;&lt;br /&gt;
 * with div structure it should be just a matter of first-child */&lt;br /&gt;
tr + tr &amp;gt; .navbox-abovebelow,&lt;br /&gt;
tr + tr &amp;gt; .navbox-group,&lt;br /&gt;
tr + tr &amp;gt; .navbox-image,&lt;br /&gt;
tr + tr &amp;gt; .navbox-list {&lt;br /&gt;
	border-top: 2px solid #fdfdfd; /* Must match background color */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox-title {&lt;br /&gt;
	background-color: #ccf; /* Level 1 color */&lt;br /&gt;
    color:inherit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox-abovebelow,&lt;br /&gt;
.navbox-group,&lt;br /&gt;
.navbox-subgroup .navbox-title {&lt;br /&gt;
	background-color: #ddf; /* Level 2 color */&lt;br /&gt;
    color:inherit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox-subgroup .navbox-group,&lt;br /&gt;
.navbox-subgroup .navbox-abovebelow {&lt;br /&gt;
	background-color: #e6e6ff; /* Level 3 color */&lt;br /&gt;
    color:inherit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox-even {&lt;br /&gt;
	background-color: #f7f7f7;&lt;br /&gt;
    color:inherit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox-odd {&lt;br /&gt;
	background-color: transparent;&lt;br /&gt;
    color:inherit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* TODO: figure out how to remove reliance on td as structure */&lt;br /&gt;
.navbox .hlist td dl,&lt;br /&gt;
.navbox .hlist td ol,&lt;br /&gt;
.navbox .hlist td ul,&lt;br /&gt;
.navbox td.hlist dl,&lt;br /&gt;
.navbox td.hlist ol,&lt;br /&gt;
.navbox td.hlist ul {&lt;br /&gt;
	padding: 0.125em 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox .navbar {&lt;br /&gt;
	display: block;&lt;br /&gt;
	font-size: 100%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox-title .navbar {&lt;br /&gt;
	/* @noflip */&lt;br /&gt;
	float: left;&lt;br /&gt;
	/* @noflip */&lt;br /&gt;
	text-align: left;&lt;br /&gt;
	/* @noflip */&lt;br /&gt;
	margin-right: 0.5em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/** T367463 */&lt;br /&gt;
body.skin--responsive .navbox-image img {&lt;br /&gt;
	max-width: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media print {&lt;br /&gt;
	body.ns-0 .navbox {&lt;br /&gt;
		display: none !important;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;/div&gt;</description>
			<pubDate>Wed, 09 Sep 2026 09:48:26 GMT</pubDate>
			<dc:creator>Oxitain</dc:creator>
			<comments>https://www.microindex.net/index.php/Module_talk:Navbox/styles.css</comments>
		</item>
		<item>
			<title>Module:Navbox/configuration</title>
			<link>https://www.microindex.net/index.php?title=Module:Navbox/configuration&amp;diff=420&amp;oldid=0</link>
			<guid isPermaLink="false">https://www.microindex.net/index.php?title=Module:Navbox/configuration&amp;diff=420&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php/User:Oxitain&quot; class=&quot;mw-userlink&quot; title=&quot;User:Oxitain&quot;&gt;&lt;bdi&gt;Oxitain&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Module:Navbox/configuration&quot; title=&quot;Module:Navbox/configuration&quot;&gt;Module:Navbox/configuration&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;return {&lt;br /&gt;
	aria_label = &amp;#039;Navbox&amp;#039;,&lt;br /&gt;
	nowrap_item = &amp;#039;%s&amp;lt;span class=&amp;quot;nowrap&amp;quot;&amp;gt;%s&amp;lt;/span&amp;gt;&amp;#039;,&lt;br /&gt;
	templatestyles = mw.getCurrentFrame():extensionTag{&lt;br /&gt;
		name = &amp;#039;templatestyles&amp;#039;, args = { src = &amp;#039;Module:Navbox/styles.css&amp;#039; }&lt;br /&gt;
	},&lt;br /&gt;
	hlist_templatestyles = &amp;#039;Hlist/styles.css&amp;#039;,&lt;br /&gt;
	plainlist_templatestyles = &amp;#039;Plainlist/styles.css&amp;#039;,&lt;br /&gt;
	-- do not localize marker table&lt;br /&gt;
	marker = {&lt;br /&gt;
		oddeven = &amp;#039;\127_ODDEVEN_\127&amp;#039;,&lt;br /&gt;
		restart = &amp;#039;\127_ODDEVEN0_\127&amp;#039;,&lt;br /&gt;
		regex = &amp;#039;\127_ODDEVEN(%d?)_\127&amp;#039;&lt;br /&gt;
	},&lt;br /&gt;
	category = {&lt;br /&gt;
		orphan = &amp;#039;[[Category:Navbox orphans]]&amp;#039;,&lt;br /&gt;
		horizontal_lists = &amp;#039;Navigational boxes without horizontal lists&amp;#039;,&lt;br /&gt;
		background_colors = &amp;#039;Navboxes using background colours&amp;#039;,&lt;br /&gt;
		illegible = &amp;#039;Potentially illegible navboxes&amp;#039;,&lt;br /&gt;
		borders = &amp;#039;Navboxes using borders&amp;#039;,&lt;br /&gt;
		without_first_col = &amp;#039;[[Category:Pages using navbox columns without the first column]]&amp;#039;&lt;br /&gt;
	},&lt;br /&gt;
	keyword = {&lt;br /&gt;
		border_subgroup = &amp;#039;subgroup&amp;#039;,&lt;br /&gt;
		border_child = &amp;#039;child&amp;#039;,&lt;br /&gt;
		border_none = &amp;#039;none&amp;#039;,&lt;br /&gt;
		evenodd_swap = &amp;#039;swap&amp;#039;,&lt;br /&gt;
		navbar_off = &amp;#039;off&amp;#039;,&lt;br /&gt;
		navbar_plain = &amp;#039;plain&amp;#039;,&lt;br /&gt;
		nocat_false = &amp;#039;false&amp;#039;,&lt;br /&gt;
		nowrapitems_yes = &amp;#039;yes&amp;#039;,&lt;br /&gt;
		orphan_yes = &amp;#039;yes&amp;#039;,&lt;br /&gt;
		state_collapsed = &amp;#039;collapsed&amp;#039;,&lt;br /&gt;
		state_off = &amp;#039;off&amp;#039;,&lt;br /&gt;
		state_plain = &amp;#039;plain&amp;#039;,&lt;br /&gt;
		state_uncollapsed = &amp;#039;uncollapsed&amp;#039;,&lt;br /&gt;
		subgroups = {&amp;#039;subgroup&amp;#039;, &amp;#039;child&amp;#039;, &amp;#039;&amp;#039;},&lt;br /&gt;
		subpage_doc = &amp;#039;doc&amp;#039;,&lt;br /&gt;
		subpage_sandbox = &amp;#039;sandbox&amp;#039;,&lt;br /&gt;
		subpage_testcases = &amp;#039;testcases&amp;#039;,&lt;br /&gt;
		tracking_no = &amp;#039;no&amp;#039;,&lt;br /&gt;
		with_collapsible_groups = &amp;#039;with collapsible groups&amp;#039;,&lt;br /&gt;
		with_collapsible_groups_short = &amp;#039;collapsible&amp;#039;,&lt;br /&gt;
		with_columns = &amp;#039;with columns&amp;#039;,&lt;br /&gt;
		with_columns_short = &amp;#039;columns&amp;#039;,&lt;br /&gt;
	},&lt;br /&gt;
	class = {&lt;br /&gt;
		autocollapse = &amp;#039;autocollapse&amp;#039;,&lt;br /&gt;
		collapsible = &amp;#039;mw-collapsible&amp;#039;,&lt;br /&gt;
		collapsed = &amp;#039;mw-collapsed&amp;#039;,&lt;br /&gt;
		-- Warning&lt;br /&gt;
		navbox = &amp;#039;navbox&amp;#039;, -- WMF currently hides &amp;#039;navbox&amp;#039; from mobile,&lt;br /&gt;
		-- so you probably shouldn&amp;#039;t change the navbox class.&lt;br /&gt;
		navbox_abovebelow = &amp;#039;navbox-abovebelow&amp;#039;,&lt;br /&gt;
		navbox_group = &amp;#039;navbox-group&amp;#039;,&lt;br /&gt;
		navbox_image = &amp;#039;navbox-image&amp;#039;,&lt;br /&gt;
		navbox_inner = &amp;#039;navbox-inner&amp;#039;,&lt;br /&gt;
		navbox_list = &amp;#039;navbox-list&amp;#039;,&lt;br /&gt;
		navbox_list_with_group = &amp;#039;navbox-list-with-group&amp;#039;,&lt;br /&gt;
		navbox_part = &amp;#039;navbox-&amp;#039;, -- do not l10n&lt;br /&gt;
		navbox_styles = &amp;#039;navbox-styles&amp;#039;,&lt;br /&gt;
		navbox_subgroup = &amp;#039;navbox-subgroup&amp;#039;,&lt;br /&gt;
		navbox_title = &amp;#039;navbox-title&amp;#039;, -- l10n only if you change pattern.navbox_title below&lt;br /&gt;
		navbox_odd_part = &amp;#039;odd&amp;#039;, -- do not l10n&lt;br /&gt;
		navbox_even_part = &amp;#039;even&amp;#039;, -- do not l10n&lt;br /&gt;
		nomobile = &amp;#039;nomobile&amp;#039;,&lt;br /&gt;
		nowraplinks = &amp;#039;nowraplinks&amp;#039;,&lt;br /&gt;
		noviewer = &amp;#039;noviewer&amp;#039;, -- used to remove images from MediaViewer&lt;br /&gt;
		notheme = &amp;#039;notheme&amp;#039;&lt;br /&gt;
	},&lt;br /&gt;
	pattern = {&lt;br /&gt;
		class = &amp;#039;class&amp;#039;,&lt;br /&gt;
		colnum = &amp;#039;^col(%d+)$&amp;#039;,&lt;br /&gt;
		colheadernum = &amp;#039;^col(%d+)header$&amp;#039;,&lt;br /&gt;
		colfooternum = &amp;#039;^col(%d+)footer$&amp;#039;,&lt;br /&gt;
		contentnum = &amp;#039;^content(%d+)$&amp;#039;,&lt;br /&gt;
		groupnum = &amp;#039;^group(%d+)$&amp;#039;,&lt;br /&gt;
		hlist = &amp;#039;hlist&amp;#039;,&lt;br /&gt;
		listnum = &amp;#039;^list(%d+)$&amp;#039;,&lt;br /&gt;
		navbox = &amp;#039;Template:Navbox&amp;#039;,&lt;br /&gt;
		navbox_title = &amp;#039;&amp;lt;th[^&amp;gt;]*&amp;quot;navbox%-title&amp;quot;&amp;#039;,&lt;br /&gt;
		nowrap = &amp;#039;^&amp;lt;span class=&amp;quot;nowrap&amp;quot;&amp;gt;&amp;#039;,&lt;br /&gt;
		num = &amp;#039;^%a+(%d+)$&amp;#039;,&lt;br /&gt;
		plainlist = &amp;#039;plainlist&amp;#039;,&lt;br /&gt;
		sandbox = &amp;#039;/sandbox$&amp;#039;,&lt;br /&gt;
		sectionnum = &amp;#039;^section(%d+)$&amp;#039;,&lt;br /&gt;
		sectnum = &amp;#039;^sect(%d+)$&amp;#039;,&lt;br /&gt;
		style = &amp;#039;style$&amp;#039;,&lt;br /&gt;
		with_collapsible_groups = &amp;#039;Template:Navbox with collapsible groups&amp;#039;,&lt;br /&gt;
		with_columns = &amp;#039;Template:Navbox with columns&amp;#039;,&lt;br /&gt;
	},&lt;br /&gt;
	arg = {&lt;br /&gt;
		abbr_and_num = &amp;#039;abbr%d&amp;#039;,&lt;br /&gt;
		above = &amp;#039;above&amp;#039;,&lt;br /&gt;
		aboveclass = &amp;#039;aboveclass&amp;#039;,&lt;br /&gt;
		abovestyle = &amp;#039;abovestyle&amp;#039;,&lt;br /&gt;
		basestyle = &amp;#039;basestyle&amp;#039;,&lt;br /&gt;
		below = &amp;#039;below&amp;#039;,&lt;br /&gt;
		belowclass = &amp;#039;belowclass&amp;#039;,&lt;br /&gt;
		belowstyle = &amp;#039;belowstyle&amp;#039;,&lt;br /&gt;
		bodyclass = &amp;#039;bodyclass&amp;#039;,&lt;br /&gt;
		bodystyle = &amp;#039;bodystyle&amp;#039;,&lt;br /&gt;
		border = &amp;#039;border&amp;#039;,&lt;br /&gt;
		content_and_num = &amp;#039;content%d&amp;#039;,&lt;br /&gt;
		contentstyle = &amp;#039;contentstyle&amp;#039;,&lt;br /&gt;
		contentstyle_and_num = &amp;#039;content%dstyle&amp;#039;,&lt;br /&gt;
		colheaderstyle = &amp;#039;colheaderstyle&amp;#039;,&lt;br /&gt;
		colheader_and_num = &amp;#039;col%dheader&amp;#039;,&lt;br /&gt;
		colheaderstyle_and_num = &amp;#039;col%dheaderstyle&amp;#039;,&lt;br /&gt;
		colheadercolspan_and_num = &amp;#039;col%dheadercolspan&amp;#039;,&lt;br /&gt;
		colstyle = &amp;#039;colstyle&amp;#039;,&lt;br /&gt;
		col_and_num = &amp;#039;col%d&amp;#039;,&lt;br /&gt;
		colstyle_and_num = &amp;#039;col%dstyle&amp;#039;,&lt;br /&gt;
		colwidth = &amp;#039;colwidth&amp;#039;,&lt;br /&gt;
		colwidth_and_num = &amp;#039;col%dwidth&amp;#039;,&lt;br /&gt;
		colfooterstyle = &amp;#039;colfooterstyle&amp;#039;,&lt;br /&gt;
		colfooter_and_num = &amp;#039;col%dfooter&amp;#039;,&lt;br /&gt;
		colfooterstyle_and_num = &amp;#039;col%dfooterstyle&amp;#039;,&lt;br /&gt;
		colfootercolspan_and_num = &amp;#039;col%dfootercolspan&amp;#039;,&lt;br /&gt;
		coltablestyle = &amp;#039;coltablestyle&amp;#039;,&lt;br /&gt;
		evencolstyle = &amp;#039;evencolstyle&amp;#039;,&lt;br /&gt;
		evenodd = &amp;#039;evenodd&amp;#039;,&lt;br /&gt;
		evenstyle = &amp;#039;evenstyle&amp;#039;,&lt;br /&gt;
		fullwidth = &amp;#039;fullwidth&amp;#039;,&lt;br /&gt;
		group1 = &amp;#039;group1&amp;#039;,&lt;br /&gt;
		group2 = &amp;#039;group2&amp;#039;,&lt;br /&gt;
		group_and_num = &amp;#039;group%d&amp;#039;,&lt;br /&gt;
		groupclass = &amp;#039;groupclass&amp;#039;,&lt;br /&gt;
		groupstyle = &amp;#039;groupstyle&amp;#039;,&lt;br /&gt;
		groupstyle_and_num = &amp;#039;group%dstyle&amp;#039;,&lt;br /&gt;
		groupwidth = &amp;#039;groupwidth&amp;#039;,&lt;br /&gt;
		image = &amp;#039;image&amp;#039;,&lt;br /&gt;
		image_and_num = &amp;#039;image%d&amp;#039;,&lt;br /&gt;
		imageclass = &amp;#039;imageclass&amp;#039;,&lt;br /&gt;
		imageleft = &amp;#039;imageleft&amp;#039;,&lt;br /&gt;
		imageleft_and_num = &amp;#039;imageleft%d&amp;#039;,&lt;br /&gt;
		imageleftstyle = &amp;#039;imageleftstyle&amp;#039;,&lt;br /&gt;
		imagestyle = &amp;#039;imagestyle&amp;#039;,&lt;br /&gt;
		innerstyle = &amp;#039;innerstyle&amp;#039;,&lt;br /&gt;
		list1padding = &amp;#039;list1padding&amp;#039;,&lt;br /&gt;
		list_and_num = &amp;#039;list%d&amp;#039;,&lt;br /&gt;
		listclass = &amp;#039;listclass&amp;#039;,&lt;br /&gt;
		listclass_and_num = &amp;#039;list%dclass&amp;#039;,&lt;br /&gt;
		listpadding = &amp;#039;listpadding&amp;#039;,&lt;br /&gt;
		liststyle = &amp;#039;liststyle&amp;#039;,&lt;br /&gt;
		liststyle_and_num = &amp;#039;list%dstyle&amp;#039;,&lt;br /&gt;
		name = &amp;#039;name&amp;#039;,&lt;br /&gt;
		navbar = &amp;#039;navbar&amp;#039;,&lt;br /&gt;
		navboxclass = &amp;#039;navboxclass&amp;#039;,&lt;br /&gt;
		nocat = &amp;#039;nocat&amp;#039;,&lt;br /&gt;
		nowrapitems = &amp;#039;nowrapitems&amp;#039;,&lt;br /&gt;
		oddcolstyle = &amp;#039;oddcolstyle&amp;#039;,&lt;br /&gt;
		oddstyle = &amp;#039;oddstyle&amp;#039;,&lt;br /&gt;
		orphan = &amp;#039;orphan&amp;#039;,&lt;br /&gt;
		padding = &amp;#039;padding&amp;#039;,&lt;br /&gt;
		sect_and_num = &amp;#039;sect%d&amp;#039;,&lt;br /&gt;
		section_and_num = &amp;#039;section%d&amp;#039;,&lt;br /&gt;
		sectiontitlestyle_and_num = &amp;#039;section%dtitlestyle&amp;#039;,&lt;br /&gt;
		secttitlestyle = &amp;#039;secttitlestyle&amp;#039;,&lt;br /&gt;
		selected = &amp;#039;selected&amp;#039;,&lt;br /&gt;
		state = &amp;#039;state&amp;#039;,&lt;br /&gt;
		state_and_num = &amp;#039;state%d&amp;#039;,&lt;br /&gt;
		style = &amp;#039;style&amp;#039;,&lt;br /&gt;
		subgroups_and_num = {&amp;#039;subgroup%d&amp;#039;, &amp;#039;child%d&amp;#039;, &amp;#039;%d&amp;#039;},&lt;br /&gt;
		templatestyles = &amp;#039;templatestyles&amp;#039;,&lt;br /&gt;
		child_templatestyles = &amp;#039;child templatestyles&amp;#039;,&lt;br /&gt;
		title = &amp;#039;title&amp;#039;,&lt;br /&gt;
		titleclass = &amp;#039;titleclass&amp;#039;,&lt;br /&gt;
		titlestyle = &amp;#039;titlestyle&amp;#039;,&lt;br /&gt;
		tracking = &amp;#039;tracking&amp;#039;,&lt;br /&gt;
	},&lt;br /&gt;
	-- names of navbar arguments&lt;br /&gt;
	navbar = {&lt;br /&gt;
		name = 1,&lt;br /&gt;
		fontstyle = &amp;#039;fontstyle&amp;#039;,&lt;br /&gt;
		mini = &amp;#039;mini&amp;#039;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;/div&gt;</description>
			<pubDate>Wed, 09 Sep 2026 09:48:26 GMT</pubDate>
			<dc:creator>Oxitain</dc:creator>
			<comments>https://www.microindex.net/index.php/Module_talk:Navbox/configuration</comments>
		</item>
		<item>
			<title>Module:Navbox</title>
			<link>https://www.microindex.net/index.php?title=Module:Navbox&amp;diff=418&amp;oldid=0</link>
			<guid isPermaLink="false">https://www.microindex.net/index.php?title=Module:Navbox&amp;diff=418&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php/User:Oxitain&quot; class=&quot;mw-userlink&quot; title=&quot;User:Oxitain&quot;&gt;&lt;bdi&gt;Oxitain&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Module:Navbox&quot; title=&quot;Module:Navbox&quot;&gt;Module:Navbox&lt;/a&gt; by file upload (1 revision)&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;
local p = {}&lt;br /&gt;
local cfg = mw.loadData(&amp;#039;Module:Navbox/configuration&amp;#039;)&lt;br /&gt;
local inArray = require(&amp;quot;Module:TableTools&amp;quot;).inArray&lt;br /&gt;
local getArgs -- lazily initialized&lt;br /&gt;
local hiding_templatestyles = {} &lt;br /&gt;
&lt;br /&gt;
-- global passthrough variables&lt;br /&gt;
local passthrough = {&lt;br /&gt;
	[cfg.arg.above]=true,[cfg.arg.aboveclass]=true,[cfg.arg.abovestyle]=true,&lt;br /&gt;
	[cfg.arg.basestyle]=true,&lt;br /&gt;
	[cfg.arg.below]=true,[cfg.arg.belowclass]=true,[cfg.arg.belowstyle]=true,&lt;br /&gt;
	[cfg.arg.bodyclass]=true,&lt;br /&gt;
	[cfg.arg.groupclass]=true,&lt;br /&gt;
	[cfg.arg.image]=true,[cfg.arg.imageclass]=true,[cfg.arg.imagestyle]=true,&lt;br /&gt;
	[cfg.arg.imageleft]=true,[cfg.arg.imageleftstyle]=true,&lt;br /&gt;
	[cfg.arg.listclass]=true,&lt;br /&gt;
	[cfg.arg.name]=true,&lt;br /&gt;
	[cfg.arg.navbar]=true,&lt;br /&gt;
	[cfg.arg.state]=true,&lt;br /&gt;
	[cfg.arg.title]=true,[cfg.arg.titleclass]=true,[cfg.arg.titlestyle]=true,&lt;br /&gt;
	argHash=true&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- helper functions&lt;br /&gt;
local andnum = function(s, n) return string.format(cfg.arg[s .. &amp;#039;_and_num&amp;#039;], n) end&lt;br /&gt;
local isblank = function(v) return (v or &amp;#039;&amp;#039;) == &amp;#039;&amp;#039; end&lt;br /&gt;
&lt;br /&gt;
local function concatstrings(s)&lt;br /&gt;
	local r = table.concat(s, &amp;#039;&amp;#039;)&lt;br /&gt;
	if r:match(&amp;#039;^%s*$&amp;#039;) then return nil end&lt;br /&gt;
	return r&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function concatstyles(s)&lt;br /&gt;
	local r = &amp;#039;&amp;#039;&lt;br /&gt;
	for _, v in ipairs(s) do&lt;br /&gt;
		v = mw.text.trim(v, &amp;quot;%s;&amp;quot;)&lt;br /&gt;
		if not isblank(v) then r = r .. v .. &amp;#039;;&amp;#039; end&lt;br /&gt;
	end&lt;br /&gt;
	if isblank(r) then return nil end&lt;br /&gt;
	return r&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getSubgroup(args, listnum, listText, prefix)&lt;br /&gt;
	local subArgs = {&lt;br /&gt;
		[cfg.arg.border] = cfg.keyword.border_subgroup,&lt;br /&gt;
		[cfg.arg.navbar] = cfg.keyword.navbar_plain,&lt;br /&gt;
		argHash = 0&lt;br /&gt;
	}&lt;br /&gt;
	local hasSubArgs = false&lt;br /&gt;
	local subgroups_and_num = prefix and {prefix} or cfg.arg.subgroups_and_num&lt;br /&gt;
	for k, v in pairs(args) do&lt;br /&gt;
		k = tostring(k)&lt;br /&gt;
		for _, w in ipairs(subgroups_and_num) do&lt;br /&gt;
			w = string.format(w, listnum) .. &amp;quot;_&amp;quot;&lt;br /&gt;
			if (#k &amp;gt; #w) and (k:sub(1, #w) == w) then&lt;br /&gt;
				subArgs[k:sub(#w + 1)] = v&lt;br /&gt;
				hasSubArgs = true&lt;br /&gt;
				subArgs.argHash = subArgs.argHash + (v and #v or 0)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return hasSubArgs and p._navbox(subArgs) or listText&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Main functions&lt;br /&gt;
function p._navbox(args)&lt;br /&gt;
	if args.type == cfg.keyword.with_collapsible_groups then&lt;br /&gt;
		return p._withCollapsibleGroups(args)&lt;br /&gt;
	elseif args.type == cfg.keyword.with_columns then&lt;br /&gt;
		return p._withColumns(args)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function striped(wikitext, border)&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 = cfg.category.orphan&lt;br /&gt;
		if border == cfg.keyword.border_subgroup and args[cfg.arg.orphan] ~= cfg.keyword.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 = cfg.class.navbox_odd_part, cfg.class.navbox_even_part&lt;br /&gt;
		if args[cfg.arg.evenodd] then&lt;br /&gt;
			if args[cfg.arg.evenodd] == cfg.keyword.evenodd_swap then&lt;br /&gt;
				first, second = second, first&lt;br /&gt;
			else&lt;br /&gt;
				first = args[cfg.arg.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 == &amp;#039;0&amp;#039; 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(&amp;#039;([%[%]])&amp;#039;, &amp;#039;%%%1&amp;#039;)&lt;br /&gt;
		return (wikitext:gsub(regex, &amp;#039;&amp;#039;):gsub(cfg.marker.regex, changer)) -- () omits gsub count&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function processItem(item, nowrapitems)&lt;br /&gt;
		if item:sub(1, 2) == &amp;#039;{|&amp;#039; then&lt;br /&gt;
			-- Applying nowrap to lines in a table does not make sense.&lt;br /&gt;
			-- Add newlines to compensate for trim of x in |parm=x in a template.&lt;br /&gt;
			return &amp;#039;\n&amp;#039; .. item .. &amp;#039;\n&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
		if nowrapitems == cfg.keyword.nowrapitems_yes then&lt;br /&gt;
			local lines = {}&lt;br /&gt;
			for line in (item .. &amp;#039;\n&amp;#039;):gmatch(&amp;#039;([^\n]*)\n&amp;#039;) do&lt;br /&gt;
				local prefix, content = line:match(&amp;#039;^([*:;#]+)%s*(.*)&amp;#039;)&lt;br /&gt;
				if prefix and not content:match(cfg.pattern.nowrap) then&lt;br /&gt;
					line = string.format(cfg.nowrap_item, prefix, content)&lt;br /&gt;
				end&lt;br /&gt;
				table.insert(lines, line)&lt;br /&gt;
			end&lt;br /&gt;
			item = table.concat(lines, &amp;#039;\n&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
		if item:match(&amp;#039;^[*:;#]&amp;#039;) then&lt;br /&gt;
			return &amp;#039;\n&amp;#039; .. item .. &amp;#039;\n&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
		return item&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function has_navbar()&lt;br /&gt;
		return args[cfg.arg.navbar] ~= cfg.keyword.navbar_off&lt;br /&gt;
			and args[cfg.arg.navbar] ~= cfg.keyword.navbar_plain&lt;br /&gt;
			and (&lt;br /&gt;
				args[cfg.arg.name]&lt;br /&gt;
				or mw.getCurrentFrame():getParent():getTitle():gsub(cfg.pattern.sandbox, &amp;#039;&amp;#039;)&lt;br /&gt;
					~= cfg.pattern.navbox&lt;br /&gt;
			)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- extract text color from css, which is the only permitted inline CSS for the navbar&lt;br /&gt;
	local function extract_color(css_str)&lt;br /&gt;
		-- return nil because navbar takes its argument into mw.html which handles&lt;br /&gt;
		-- nil gracefully, removing the associated style attribute&lt;br /&gt;
		return mw.ustring.match(&amp;#039;;&amp;#039; .. css_str .. &amp;#039;;&amp;#039;, &amp;#039;.*;%s*([Cc][Oo][Ll][Oo][Rr]%s*:%s*.-)%s*;&amp;#039;) or nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function renderNavBar(titleCell)&lt;br /&gt;
		if has_navbar() then&lt;br /&gt;
			local navbar = require(&amp;#039;Module:Navbar&amp;#039;)._navbar&lt;br /&gt;
			titleCell:wikitext(navbar{&lt;br /&gt;
				[cfg.navbar.name] = args[cfg.arg.name],&lt;br /&gt;
				[cfg.navbar.mini] = 1,&lt;br /&gt;
				[cfg.navbar.fontstyle] = extract_color(&lt;br /&gt;
					(args[cfg.arg.basestyle] or &amp;#039;&amp;#039;) .. &amp;#039;;&amp;#039; .. (args[cfg.arg.titlestyle] or &amp;#039;&amp;#039;)&lt;br /&gt;
				)&lt;br /&gt;
			})&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function renderTitleRow(tbl)&lt;br /&gt;
		if not args[cfg.arg.title] then return end&lt;br /&gt;
&lt;br /&gt;
		local titleRow = tbl:tag(&amp;#039;tr&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
		local titleCell = titleRow:tag(&amp;#039;th&amp;#039;):attr(&amp;#039;scope&amp;#039;, &amp;#039;col&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
		local titleColspan = 2&lt;br /&gt;
		if args[cfg.arg.imageleft] then titleColspan = titleColspan + 1 end&lt;br /&gt;
		if args[cfg.arg.image] then titleColspan = titleColspan + 1 end&lt;br /&gt;
&lt;br /&gt;
		titleCell&lt;br /&gt;
			:cssText(args[cfg.arg.basestyle])&lt;br /&gt;
			:cssText(args[cfg.arg.titlestyle])&lt;br /&gt;
			:addClass(cfg.class.navbox_title)&lt;br /&gt;
			:attr(&amp;#039;colspan&amp;#039;, titleColspan)&lt;br /&gt;
&lt;br /&gt;
		renderNavBar(titleCell)&lt;br /&gt;
&lt;br /&gt;
		titleCell&lt;br /&gt;
			:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
				-- id for aria-labelledby attribute&lt;br /&gt;
				:attr(&amp;#039;id&amp;#039;, mw.uri.anchorEncode(args[cfg.arg.title]) .. args.argHash)&lt;br /&gt;
				:addClass(args[cfg.arg.titleclass])&lt;br /&gt;
				:css(&amp;#039;font-size&amp;#039;, &amp;#039;114%&amp;#039;)&lt;br /&gt;
				:css(&amp;#039;margin&amp;#039;, &amp;#039;0 4em&amp;#039;)&lt;br /&gt;
				:wikitext(processItem(args[cfg.arg.title]))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function getAboveBelowColspan()&lt;br /&gt;
		local ret = 2&lt;br /&gt;
		if args[cfg.arg.imageleft] then ret = ret + 1 end&lt;br /&gt;
		if args[cfg.arg.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)&lt;br /&gt;
		if not args[cfg.arg.above] then return end&lt;br /&gt;
&lt;br /&gt;
		tbl:tag(&amp;#039;tr&amp;#039;)&lt;br /&gt;
			:tag(&amp;#039;td&amp;#039;)&lt;br /&gt;
				:addClass(cfg.class.navbox_abovebelow)&lt;br /&gt;
				:addClass(args[cfg.arg.aboveclass])&lt;br /&gt;
				:cssText(args[cfg.arg.basestyle])&lt;br /&gt;
				:cssText(args[cfg.arg.abovestyle])&lt;br /&gt;
				:attr(&amp;#039;colspan&amp;#039;, getAboveBelowColspan())&lt;br /&gt;
				:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
					-- id for aria-labelledby attribute, if no title&lt;br /&gt;
					:attr(&amp;#039;id&amp;#039;, (not args[cfg.arg.title]) and &lt;br /&gt;
						(mw.uri.anchorEncode(args[cfg.arg.above]) .. args.argHash)&lt;br /&gt;
						or nil)&lt;br /&gt;
					:wikitext(processItem(args[cfg.arg.above], args[cfg.arg.nowrapitems]))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function renderBelowRow(tbl)&lt;br /&gt;
		if not args[cfg.arg.below] then return end&lt;br /&gt;
&lt;br /&gt;
		tbl:tag(&amp;#039;tr&amp;#039;)&lt;br /&gt;
			:tag(&amp;#039;td&amp;#039;)&lt;br /&gt;
				:addClass(cfg.class.navbox_abovebelow)&lt;br /&gt;
				:addClass(args[cfg.arg.belowclass])&lt;br /&gt;
				:cssText(args[cfg.arg.basestyle])&lt;br /&gt;
				:cssText(args[cfg.arg.belowstyle])&lt;br /&gt;
				:attr(&amp;#039;colspan&amp;#039;, getAboveBelowColspan())&lt;br /&gt;
				:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
					:wikitext(processItem(args[cfg.arg.below], args[cfg.arg.nowrapitems]))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function renderListRow(tbl, index, listnum, listnums_size)&lt;br /&gt;
		local row = tbl:tag(&amp;#039;tr&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
		if index == 1 and args[cfg.arg.imageleft] then&lt;br /&gt;
			row&lt;br /&gt;
				:tag(&amp;#039;td&amp;#039;)&lt;br /&gt;
					:addClass(cfg.class.noviewer)&lt;br /&gt;
					:addClass(cfg.class.navbox_image)&lt;br /&gt;
					:addClass(args[cfg.arg.imageclass])&lt;br /&gt;
					:css(&amp;#039;width&amp;#039;, &amp;#039;1px&amp;#039;)               -- Minimize width&lt;br /&gt;
					:css(&amp;#039;padding&amp;#039;, &amp;#039;0 2px 0 0&amp;#039;)&lt;br /&gt;
					:cssText(args[cfg.arg.imageleftstyle])&lt;br /&gt;
					:attr(&amp;#039;rowspan&amp;#039;, listnums_size)&lt;br /&gt;
					:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
						:wikitext(processItem(args[cfg.arg.imageleft]))&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		local group_and_num = andnum(&amp;#039;group&amp;#039;, listnum)&lt;br /&gt;
		local groupstyle_and_num = andnum(&amp;#039;groupstyle&amp;#039;, listnum)&lt;br /&gt;
		if args[group_and_num] then&lt;br /&gt;
			local groupCell = row:tag(&amp;#039;th&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
			-- id for aria-labelledby attribute, if lone group with no title or above&lt;br /&gt;
			if listnum == 1 and not (args[cfg.arg.title] or args[cfg.arg.above] or args[cfg.arg.group2]) then&lt;br /&gt;
				groupCell&lt;br /&gt;
					:attr(&amp;#039;id&amp;#039;, mw.uri.anchorEncode(args[cfg.arg.group1]) .. args.argHash)&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			groupCell&lt;br /&gt;
				:attr(&amp;#039;scope&amp;#039;, &amp;#039;row&amp;#039;)&lt;br /&gt;
				:addClass(cfg.class.navbox_group)&lt;br /&gt;
				:addClass(args[cfg.arg.groupclass])&lt;br /&gt;
				:cssText(args[cfg.arg.basestyle])&lt;br /&gt;
				-- If groupwidth not specified, minimize width&lt;br /&gt;
				:css(&amp;#039;width&amp;#039;, args[cfg.arg.groupwidth] or &amp;#039;1%&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
			groupCell&lt;br /&gt;
				:cssText(args[cfg.arg.groupstyle])&lt;br /&gt;
				:cssText(args[groupstyle_and_num])&lt;br /&gt;
				:wikitext(args[group_and_num])&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		local listCell = row:tag(&amp;#039;td&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
		if args[group_and_num] then&lt;br /&gt;
			listCell&lt;br /&gt;
				:addClass(cfg.class.navbox_list_with_group)&lt;br /&gt;
		else&lt;br /&gt;
			listCell:attr(&amp;#039;colspan&amp;#039;, 2)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if not args[cfg.arg.groupwidth] then&lt;br /&gt;
			listCell:css(&amp;#039;width&amp;#039;, &amp;#039;100%&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		local rowstyle  -- usually nil so cssText(rowstyle) usually adds nothing&lt;br /&gt;
		if index % 2 == 1 then&lt;br /&gt;
			rowstyle = args[cfg.arg.oddstyle]&lt;br /&gt;
		else&lt;br /&gt;
			rowstyle = args[cfg.arg.evenstyle]&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		local list_and_num = andnum(&amp;#039;list&amp;#039;, listnum)&lt;br /&gt;
		local listText = inArray(cfg.keyword.subgroups, args[list_and_num])&lt;br /&gt;
			and getSubgroup(args, listnum, args[list_and_num]) or args[list_and_num]&lt;br /&gt;
&lt;br /&gt;
		local oddEven = cfg.marker.oddeven&lt;br /&gt;
		if listText:sub(1, 12) == &amp;#039;&amp;lt;/div&amp;gt;&amp;lt;table&amp;#039; 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(cfg.pattern.navbox_title) and cfg.marker.restart or cfg.class.navbox_odd_part&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		local liststyle_and_num = andnum(&amp;#039;liststyle&amp;#039;, listnum)&lt;br /&gt;
		local listclass_and_num = andnum(&amp;#039;listclass&amp;#039;, listnum)&lt;br /&gt;
		listCell&lt;br /&gt;
			:css(&amp;#039;padding&amp;#039;, &amp;#039;0&amp;#039;)&lt;br /&gt;
			:cssText(args[cfg.arg.liststyle])&lt;br /&gt;
			:cssText(rowstyle)&lt;br /&gt;
			:cssText(args[liststyle_and_num])&lt;br /&gt;
			:addClass(cfg.class.navbox_list)&lt;br /&gt;
			:addClass(cfg.class.navbox_part .. oddEven)&lt;br /&gt;
			:addClass(args[cfg.arg.listclass])&lt;br /&gt;
			:addClass(args[listclass_and_num])&lt;br /&gt;
			:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
				:css(&amp;#039;padding&amp;#039;,&lt;br /&gt;
					(index == 1 and args[cfg.arg.list1padding]) or args[cfg.arg.listpadding] or &amp;#039;0 0.25em&amp;#039;&lt;br /&gt;
				)&lt;br /&gt;
				:wikitext(processItem(listText, args[cfg.arg.nowrapitems]))&lt;br /&gt;
&lt;br /&gt;
		if index == 1 and args[cfg.arg.image] then&lt;br /&gt;
			row&lt;br /&gt;
				:tag(&amp;#039;td&amp;#039;)&lt;br /&gt;
					:addClass(cfg.class.noviewer)&lt;br /&gt;
					:addClass(cfg.class.navbox_image)&lt;br /&gt;
					:addClass(args[cfg.arg.imageclass])&lt;br /&gt;
					:css(&amp;#039;width&amp;#039;, &amp;#039;1px&amp;#039;)               -- Minimize width&lt;br /&gt;
					:css(&amp;#039;padding&amp;#039;, &amp;#039;0 0 0 2px&amp;#039;)&lt;br /&gt;
					:cssText(args[cfg.arg.imagestyle])&lt;br /&gt;
					:attr(&amp;#039;rowspan&amp;#039;, listnums_size)&lt;br /&gt;
					:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
						:wikitext(processItem(args[cfg.arg.image]))&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function has_list_class(htmlclass)&lt;br /&gt;
		local patterns = {&lt;br /&gt;
			&amp;#039;^&amp;#039; .. htmlclass .. &amp;#039;$&amp;#039;,&lt;br /&gt;
			&amp;#039;%s&amp;#039; .. htmlclass .. &amp;#039;$&amp;#039;,&lt;br /&gt;
			&amp;#039;^&amp;#039; .. htmlclass .. &amp;#039;%s&amp;#039;,&lt;br /&gt;
			&amp;#039;%s&amp;#039; .. htmlclass .. &amp;#039;%s&amp;#039;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		for arg, _ in pairs(args) do&lt;br /&gt;
			if type(arg) == &amp;#039;string&amp;#039; and mw.ustring.find(arg, cfg.pattern.class) then&lt;br /&gt;
				for _, pattern in ipairs(patterns) do&lt;br /&gt;
					if mw.ustring.find(args[arg] or &amp;#039;&amp;#039;, pattern) then&lt;br /&gt;
						return true&lt;br /&gt;
					end&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;
	-- there are a lot of list classes in the wild, so we add their TemplateStyles&lt;br /&gt;
	local function add_list_styles()&lt;br /&gt;
		local frame = mw.getCurrentFrame()&lt;br /&gt;
		local function add_list_templatestyles(htmlclass, templatestyles)&lt;br /&gt;
			if has_list_class(htmlclass) then&lt;br /&gt;
				return frame:extensionTag{&lt;br /&gt;
					name = &amp;#039;templatestyles&amp;#039;, args = { src = templatestyles }&lt;br /&gt;
				}&lt;br /&gt;
			else&lt;br /&gt;
				return &amp;#039;&amp;#039;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		local hlist_styles = add_list_templatestyles(&amp;#039;hlist&amp;#039;, cfg.hlist_templatestyles)&lt;br /&gt;
		local plainlist_styles = add_list_templatestyles(&amp;#039;plainlist&amp;#039;, cfg.plainlist_templatestyles)&lt;br /&gt;
&lt;br /&gt;
		-- a second workaround for [[phab:T303378]]&lt;br /&gt;
		-- when that issue is fixed, we can actually use has_navbar not to emit the&lt;br /&gt;
		-- tag here if we want&lt;br /&gt;
		if has_navbar() and hlist_styles == &amp;#039;&amp;#039; then&lt;br /&gt;
			hlist_styles = frame:extensionTag{&lt;br /&gt;
				name = &amp;#039;templatestyles&amp;#039;, args = { src = cfg.hlist_templatestyles }&lt;br /&gt;
			}&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		-- hlist -&amp;gt; plainlist is best-effort to preserve old Common.css ordering.&lt;br /&gt;
		-- this ordering is not a guarantee because most navboxes will emit only&lt;br /&gt;
		-- one of these classes [hlist_note]&lt;br /&gt;
		return hlist_styles .. plainlist_styles&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function needsHorizontalLists(border)&lt;br /&gt;
		if border == cfg.keyword.border_subgroup or args[cfg.arg.tracking] == cfg.keyword.tracking_no then&lt;br /&gt;
			return false&lt;br /&gt;
		end&lt;br /&gt;
		return not has_list_class(cfg.pattern.hlist) and not has_list_class(cfg.pattern.plainlist)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function hasBackgroundColors()&lt;br /&gt;
		for _, key in ipairs({cfg.arg.titlestyle, cfg.arg.groupstyle,&lt;br /&gt;
			cfg.arg.basestyle, cfg.arg.abovestyle, cfg.arg.belowstyle}) do&lt;br /&gt;
			if tostring(args[key]):find(&amp;#039;background&amp;#039;, 1, true) 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 hasBorders()&lt;br /&gt;
		for _, key in ipairs({cfg.arg.groupstyle, cfg.arg.basestyle,&lt;br /&gt;
			cfg.arg.abovestyle, cfg.arg.belowstyle}) do&lt;br /&gt;
			if tostring(args[key]):find(&amp;#039;border&amp;#039;, 1, true) 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 isIllegible()&lt;br /&gt;
		local styleratio = require(&amp;#039;Module:Color contrast&amp;#039;)._styleratio&lt;br /&gt;
		for key, style in pairs(args) do&lt;br /&gt;
			if tostring(key):match(cfg.pattern.style) 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(border)&lt;br /&gt;
		local cats = {}&lt;br /&gt;
		if needsHorizontalLists(border) then table.insert(cats, cfg.category.horizontal_lists) end&lt;br /&gt;
		if hasBackgroundColors() then table.insert(cats, cfg.category.background_colors) end&lt;br /&gt;
		if isIllegible() then table.insert(cats, cfg.category.illegible) end&lt;br /&gt;
		if hasBorders() then table.insert(cats, cfg.category.borders) end&lt;br /&gt;
		return cats&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function renderTrackingCategories(builder, border)&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 == cfg.keyword.subpage_doc or subpage == cfg.keyword.subpage_sandbox&lt;br /&gt;
			or subpage == cfg.keyword.subpage_testcases then return end&lt;br /&gt;
&lt;br /&gt;
		for _, cat in ipairs(getTrackingCategories(border)) do&lt;br /&gt;
			builder:wikitext(&amp;#039;[[Category:&amp;#039; .. cat .. &amp;#039;]]&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function renderMainTable(border, listnums)&lt;br /&gt;
		local tbl = mw.html.create(&amp;#039;table&amp;#039;)&lt;br /&gt;
			:addClass(cfg.class.nowraplinks)&lt;br /&gt;
			:addClass(args[cfg.arg.bodyclass])&lt;br /&gt;
&lt;br /&gt;
		local state = args[cfg.arg.state]&lt;br /&gt;
		if args[cfg.arg.title] and state ~= cfg.keyword.state_plain and state ~= cfg.keyword.state_off then&lt;br /&gt;
			if state == cfg.keyword.state_collapsed then&lt;br /&gt;
				state = cfg.class.collapsed&lt;br /&gt;
			end&lt;br /&gt;
			tbl&lt;br /&gt;
				:addClass(cfg.class.collapsible)&lt;br /&gt;
				:addClass(state or cfg.class.autocollapse)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		tbl:css(&amp;#039;border-spacing&amp;#039;, 0)&lt;br /&gt;
		if border == cfg.keyword.border_subgroup or border == cfg.keyword.border_none then&lt;br /&gt;
			tbl&lt;br /&gt;
				:addClass(cfg.class.navbox_subgroup)&lt;br /&gt;
				:cssText(args[cfg.arg.bodystyle])&lt;br /&gt;
				:cssText(args[cfg.arg.style])&lt;br /&gt;
		else  -- regular navbox - bodystyle and style will be applied to the wrapper table&lt;br /&gt;
			tbl&lt;br /&gt;
				:addClass(cfg.class.navbox_inner)&lt;br /&gt;
				:css(&amp;#039;background&amp;#039;, &amp;#039;transparent&amp;#039;)&lt;br /&gt;
				:css(&amp;#039;color&amp;#039;, &amp;#039;inherit&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
		tbl:cssText(args[cfg.arg.innerstyle])&lt;br /&gt;
&lt;br /&gt;
		renderTitleRow(tbl)&lt;br /&gt;
		renderAboveRow(tbl)&lt;br /&gt;
		local listnums_size = #listnums&lt;br /&gt;
		for i, listnum in ipairs(listnums) do&lt;br /&gt;
			renderListRow(tbl, i, listnum, listnums_size)&lt;br /&gt;
		end&lt;br /&gt;
		renderBelowRow(tbl)&lt;br /&gt;
&lt;br /&gt;
		return tbl&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function add_navbox_styles(hiding_templatestyles)&lt;br /&gt;
		local frame = mw.getCurrentFrame()&lt;br /&gt;
		-- This is a lambda so that it doesn&amp;#039;t need the frame as a parameter&lt;br /&gt;
		local function add_user_styles(templatestyles)&lt;br /&gt;
			if not isblank(templatestyles) then&lt;br /&gt;
				return frame:extensionTag{&lt;br /&gt;
					name = &amp;#039;templatestyles&amp;#039;, args = { src = templatestyles }&lt;br /&gt;
				}&lt;br /&gt;
			end&lt;br /&gt;
			return &amp;#039;&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		-- get templatestyles. load base from config so that Lua only needs to do&lt;br /&gt;
		-- the work once of parser tag expansion&lt;br /&gt;
		local base_templatestyles = cfg.templatestyles&lt;br /&gt;
		local templatestyles = add_user_styles(args[cfg.arg.templatestyles])&lt;br /&gt;
		local child_templatestyles = add_user_styles(args[cfg.arg.child_templatestyles])&lt;br /&gt;
&lt;br /&gt;
		-- The &amp;#039;navbox-styles&amp;#039; div exists to wrap the styles to work around T200206&lt;br /&gt;
		-- more elegantly. Instead of combinatorial rules, this ends up being linear&lt;br /&gt;
		-- number of CSS rules.&lt;br /&gt;
		return mw.html.create(&amp;#039;div&amp;#039;)&lt;br /&gt;
			:addClass(cfg.class.navbox_styles)&lt;br /&gt;
			:wikitext(&lt;br /&gt;
				add_list_styles() .. -- see [hlist_note] applied to &amp;#039;before base_templatestyles&amp;#039;&lt;br /&gt;
				base_templatestyles ..&lt;br /&gt;
				templatestyles ..&lt;br /&gt;
				child_templatestyles ..&lt;br /&gt;
				table.concat(hiding_templatestyles)&lt;br /&gt;
			)&lt;br /&gt;
			:done()&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- work around [[phab:T303378]]&lt;br /&gt;
	-- for each arg: find all the templatestyles strip markers, insert them into a&lt;br /&gt;
	-- table. then remove all templatestyles markers from the arg&lt;br /&gt;
	local strip_marker_pattern = &amp;#039;(\127[^\127]*UNIQ%-%-templatestyles%-%x+%-QINU[^\127]*\127)&amp;#039;&lt;br /&gt;
	local argHash = 0&lt;br /&gt;
	for k, arg in pairs(args) do&lt;br /&gt;
		if type(arg) == &amp;#039;string&amp;#039; then&lt;br /&gt;
			for marker in string.gfind(arg, strip_marker_pattern) do&lt;br /&gt;
				table.insert(hiding_templatestyles, marker)&lt;br /&gt;
			end&lt;br /&gt;
			argHash = argHash + #arg&lt;br /&gt;
			args[k] = string.gsub(arg, strip_marker_pattern, &amp;#039;&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if not args.argHash then args.argHash = argHash end&lt;br /&gt;
&lt;br /&gt;
	local listnums = {}&lt;br /&gt;
&lt;br /&gt;
	for k, _ in pairs(args) do&lt;br /&gt;
		if type(k) == &amp;#039;string&amp;#039; then&lt;br /&gt;
			local listnum = k:match(cfg.pattern.listnum)&lt;br /&gt;
			if listnum and args[andnum(&amp;#039;list&amp;#039;, tonumber(listnum))] then&lt;br /&gt;
				table.insert(listnums, tonumber(listnum))&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	table.sort(listnums)&lt;br /&gt;
&lt;br /&gt;
	local border = mw.text.trim(args[cfg.arg.border] or args[1] or &amp;#039;&amp;#039;)&lt;br /&gt;
	if border == cfg.keyword.border_child then&lt;br /&gt;
		border = cfg.keyword.border_subgroup&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- render the main body of the navbox&lt;br /&gt;
	local tbl = renderMainTable(border, listnums)&lt;br /&gt;
&lt;br /&gt;
	local res = mw.html.create()&lt;br /&gt;
	-- render the appropriate wrapper for the navbox, based on the border param&lt;br /&gt;
&lt;br /&gt;
	if border == cfg.keyword.border_none then&lt;br /&gt;
		res:node(add_navbox_styles(hiding_templatestyles))&lt;br /&gt;
		local nav = res:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
			:attr(&amp;#039;role&amp;#039;, &amp;#039;navigation&amp;#039;)&lt;br /&gt;
			:node(tbl)&lt;br /&gt;
		-- aria-labelledby title, otherwise above, otherwise lone group&lt;br /&gt;
		if args[cfg.arg.title] or args[cfg.arg.above] or (args[cfg.arg.group1]&lt;br /&gt;
			and not args[cfg.arg.group2]) then&lt;br /&gt;
			nav:attr(&lt;br /&gt;
				&amp;#039;aria-labelledby&amp;#039;,&lt;br /&gt;
				mw.uri.anchorEncode(&lt;br /&gt;
					args[cfg.arg.title] or args[cfg.arg.above] or args[cfg.arg.group1]&lt;br /&gt;
				) .. args.argHash&lt;br /&gt;
			)&lt;br /&gt;
		else&lt;br /&gt;
			nav:attr(&amp;#039;aria-label&amp;#039;, cfg.aria_label .. args.argHash)&lt;br /&gt;
		end&lt;br /&gt;
	elseif border == cfg.keyword.border_subgroup then&lt;br /&gt;
		-- We assume that this navbox is being rendered in a list cell of a&lt;br /&gt;
		-- parent navbox, and is therefore inside a div with padding:0em 0.25em.&lt;br /&gt;
		-- We start with a &amp;lt;/div&amp;gt; to avoid the padding being applied, and at the&lt;br /&gt;
		-- end add a &amp;lt;div&amp;gt; to balance out the parent&amp;#039;s &amp;lt;/div&amp;gt;&lt;br /&gt;
		res&lt;br /&gt;
			:wikitext(&amp;#039;&amp;lt;/div&amp;gt;&amp;#039;)&lt;br /&gt;
			:node(tbl)&lt;br /&gt;
			:wikitext(&amp;#039;&amp;lt;div&amp;gt;&amp;#039;)&lt;br /&gt;
	else&lt;br /&gt;
		res:node(add_navbox_styles(hiding_templatestyles))&lt;br /&gt;
		local nav = res:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
			:attr(&amp;#039;role&amp;#039;, &amp;#039;navigation&amp;#039;)&lt;br /&gt;
			:addClass(cfg.class.navbox)&lt;br /&gt;
			:addClass(args[cfg.arg.navboxclass])&lt;br /&gt;
			:cssText(args[cfg.arg.bodystyle])&lt;br /&gt;
			:cssText(args[cfg.arg.style])&lt;br /&gt;
			:css(&amp;#039;padding&amp;#039;, &amp;#039;3px&amp;#039;)&lt;br /&gt;
			:node(tbl)&lt;br /&gt;
		-- aria-labelledby title, otherwise above, otherwise lone group&lt;br /&gt;
		if args[cfg.arg.title] or args[cfg.arg.above]&lt;br /&gt;
			or (args[cfg.arg.group1] and not args[cfg.arg.group2]) then&lt;br /&gt;
			nav:attr(&lt;br /&gt;
				&amp;#039;aria-labelledby&amp;#039;,&lt;br /&gt;
				mw.uri.anchorEncode(&lt;br /&gt;
					args[cfg.arg.title] or args[cfg.arg.above] or args[cfg.arg.group1]&lt;br /&gt;
				) .. args.argHash&lt;br /&gt;
			)&lt;br /&gt;
		else&lt;br /&gt;
			nav:attr(&amp;#039;aria-label&amp;#039;, cfg.aria_label .. args.argHash)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if (args[cfg.arg.nocat] or cfg.keyword.nocat_false):lower() == cfg.keyword.nocat_false then&lt;br /&gt;
		renderTrackingCategories(res, border)&lt;br /&gt;
	end&lt;br /&gt;
	return striped(tostring(res), border)&lt;br /&gt;
end --p._navbox&lt;br /&gt;
&lt;br /&gt;
function p._withCollapsibleGroups(pargs)&lt;br /&gt;
	-- table for args passed to navbox&lt;br /&gt;
	local targs = {}&lt;br /&gt;
&lt;br /&gt;
	-- process args&lt;br /&gt;
	local passthroughLocal = {&lt;br /&gt;
		[cfg.arg.bodystyle] = true,&lt;br /&gt;
		[cfg.arg.border] = true,&lt;br /&gt;
		[cfg.arg.style] = true,&lt;br /&gt;
	}&lt;br /&gt;
	for k,v in pairs(pargs) do&lt;br /&gt;
		if k and type(k) == &amp;#039;string&amp;#039; then&lt;br /&gt;
			if passthrough[k] or passthroughLocal[k] then&lt;br /&gt;
				targs[k] = v&lt;br /&gt;
			elseif (k:match(cfg.pattern.num)) then&lt;br /&gt;
				local n = k:match(cfg.pattern.num)&lt;br /&gt;
				local list_and_num = andnum(&amp;#039;list&amp;#039;, n)&lt;br /&gt;
				if ((k:match(cfg.pattern.listnum) or k:match(cfg.pattern.contentnum))&lt;br /&gt;
						and targs[list_and_num] == nil&lt;br /&gt;
						and pargs[andnum(&amp;#039;group&amp;#039;, n)] == nil&lt;br /&gt;
						and pargs[andnum(&amp;#039;sect&amp;#039;, n)] == nil&lt;br /&gt;
						and pargs[andnum(&amp;#039;section&amp;#039;, n)] == nil) then&lt;br /&gt;
					targs[list_and_num] = concatstrings({&lt;br /&gt;
						pargs[list_and_num] or &amp;#039;&amp;#039;,&lt;br /&gt;
						pargs[andnum(&amp;#039;content&amp;#039;, n)] or &amp;#039;&amp;#039;&lt;br /&gt;
					})&lt;br /&gt;
					if (targs[list_and_num] and inArray(cfg.keyword.subgroups, targs[list_and_num])) then&lt;br /&gt;
						targs[list_and_num] = getSubgroup(pargs, n, targs[list_and_num])&lt;br /&gt;
					end&lt;br /&gt;
				elseif ((k:match(cfg.pattern.groupnum) or k:match(cfg.pattern.sectnum) or k:match(cfg.pattern.sectionnum))&lt;br /&gt;
						and targs[list_and_num] == nil) then&lt;br /&gt;
					local titlestyle = concatstyles({&lt;br /&gt;
						pargs[cfg.arg.groupstyle] or &amp;#039;&amp;#039;,&lt;br /&gt;
						pargs[cfg.arg.secttitlestyle] or &amp;#039;&amp;#039;, &lt;br /&gt;
						pargs[andnum(&amp;#039;groupstyle&amp;#039;, n)] or &amp;#039;&amp;#039;, &lt;br /&gt;
						pargs[andnum(&amp;#039;sectiontitlestyle&amp;#039;, n)] or &amp;#039;&amp;#039;&lt;br /&gt;
					})&lt;br /&gt;
					local liststyle = concatstyles({&lt;br /&gt;
						pargs[cfg.arg.liststyle] or &amp;#039;&amp;#039;,&lt;br /&gt;
						pargs[cfg.arg.contentstyle] or &amp;#039;&amp;#039;, &lt;br /&gt;
						pargs[andnum(&amp;#039;liststyle&amp;#039;, n)] or &amp;#039;&amp;#039;, &lt;br /&gt;
						pargs[andnum(&amp;#039;contentstyle&amp;#039;, n)] or &amp;#039;&amp;#039;&lt;br /&gt;
					})&lt;br /&gt;
					local title = concatstrings({&lt;br /&gt;
						pargs[andnum(&amp;#039;group&amp;#039;, n)] or &amp;#039;&amp;#039;,&lt;br /&gt;
						pargs[andnum(&amp;#039;sect&amp;#039;, n)] or &amp;#039;&amp;#039;,&lt;br /&gt;
						pargs[andnum(&amp;#039;section&amp;#039;, n)] or &amp;#039;&amp;#039;&lt;br /&gt;
					})&lt;br /&gt;
					local list = concatstrings({&lt;br /&gt;
						pargs[list_and_num] or &amp;#039;&amp;#039;, &lt;br /&gt;
						pargs[andnum(&amp;#039;content&amp;#039;, n)] or &amp;#039;&amp;#039;&lt;br /&gt;
					})&lt;br /&gt;
					if list and inArray(cfg.keyword.subgroups, list) then&lt;br /&gt;
						list = getSubgroup(pargs, n, list)&lt;br /&gt;
					end&lt;br /&gt;
					local abbr_and_num = andnum(&amp;#039;abbr&amp;#039;, n)&lt;br /&gt;
					local state = (pargs[abbr_and_num] and pargs[abbr_and_num] == pargs[cfg.arg.selected]) &lt;br /&gt;
						and cfg.keyword.state_uncollapsed&lt;br /&gt;
						or (pargs[andnum(&amp;#039;state&amp;#039;, n)] or cfg.keyword.state_collapsed)&lt;br /&gt;
					&lt;br /&gt;
					targs[list_and_num] =p._navbox({&lt;br /&gt;
						cfg.keyword.border_child,&lt;br /&gt;
						[cfg.arg.navbar] = cfg.keyword.navbar_plain,&lt;br /&gt;
						[cfg.arg.state] = state,&lt;br /&gt;
						[cfg.arg.basestyle] = pargs[cfg.arg.basestyle],&lt;br /&gt;
						[cfg.arg.title] = title,&lt;br /&gt;
						[cfg.arg.titlestyle] = titlestyle,&lt;br /&gt;
						[andnum(&amp;#039;list&amp;#039;, 1)] = list,&lt;br /&gt;
						[cfg.arg.liststyle] = liststyle,&lt;br /&gt;
						[cfg.arg.listclass] = pargs[andnum(&amp;#039;listclass&amp;#039;, n)],&lt;br /&gt;
						[cfg.arg.image] = pargs[andnum(&amp;#039;image&amp;#039;, n)],&lt;br /&gt;
						[cfg.arg.imageleft] = pargs[andnum(&amp;#039;imageleft&amp;#039;, n)],&lt;br /&gt;
						[cfg.arg.listpadding] = pargs[cfg.arg.listpadding],&lt;br /&gt;
						argHash = pargs.argHash&lt;br /&gt;
					})&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	-- ordering of style and bodystyle&lt;br /&gt;
	targs[cfg.arg.style] = concatstyles({targs[cfg.arg.style] or &amp;#039;&amp;#039;, targs[cfg.arg.bodystyle] or &amp;#039;&amp;#039;})&lt;br /&gt;
	targs[cfg.arg.bodystyle] = nil&lt;br /&gt;
&lt;br /&gt;
	-- child or subgroup&lt;br /&gt;
	if targs[cfg.arg.border] == nil then targs[cfg.arg.border] = pargs[1] end&lt;br /&gt;
&lt;br /&gt;
	return p._navbox(targs)&lt;br /&gt;
end --p._withCollapsibleGroups&lt;br /&gt;
&lt;br /&gt;
function p._withColumns(pargs)&lt;br /&gt;
	-- table for args passed to navbox&lt;br /&gt;
	local targs = {}&lt;br /&gt;
&lt;br /&gt;
	-- tables of column numbers&lt;br /&gt;
	local colheadernums = {}&lt;br /&gt;
	local colnums = {}&lt;br /&gt;
	local colfooternums = {}&lt;br /&gt;
&lt;br /&gt;
	-- process args&lt;br /&gt;
	local passthroughLocal = {&lt;br /&gt;
		[cfg.arg.evenstyle]=true,&lt;br /&gt;
		[cfg.arg.groupstyle]=true,&lt;br /&gt;
		[cfg.arg.liststyle]=true,&lt;br /&gt;
		[cfg.arg.oddstyle]=true,&lt;br /&gt;
		[cfg.arg.state]=true,&lt;br /&gt;
	}&lt;br /&gt;
	for k,v in pairs(pargs) do&lt;br /&gt;
		if passthrough[k] or passthroughLocal[k] then&lt;br /&gt;
			targs[k] = v&lt;br /&gt;
		elseif type(k) == &amp;#039;string&amp;#039; then&lt;br /&gt;
			if k:match(cfg.pattern.listnum) then&lt;br /&gt;
				local n = k:match(cfg.pattern.listnum)&lt;br /&gt;
				targs[andnum(&amp;#039;liststyle&amp;#039;, n + 2)] = pargs[andnum(&amp;#039;liststyle&amp;#039;, n)]&lt;br /&gt;
				targs[andnum(&amp;#039;group&amp;#039;, n + 2)] = pargs[andnum(&amp;#039;group&amp;#039;, n)]&lt;br /&gt;
				targs[andnum(&amp;#039;groupstyle&amp;#039;, n + 2)] = pargs[andnum(&amp;#039;groupstyle&amp;#039;, n)]&lt;br /&gt;
				if v and inArray(cfg.keyword.subgroups, v) then&lt;br /&gt;
					targs[andnum(&amp;#039;list&amp;#039;, n + 2)] = getSubgroup(pargs, n, v)&lt;br /&gt;
				else&lt;br /&gt;
					targs[andnum(&amp;#039;list&amp;#039;, n + 2)] = v&lt;br /&gt;
				end&lt;br /&gt;
			elseif (k:match(cfg.pattern.colheadernum) and v ~= &amp;#039;&amp;#039;) then&lt;br /&gt;
				table.insert(colheadernums, tonumber(k:match(cfg.pattern.colheadernum)))&lt;br /&gt;
			elseif (k:match(cfg.pattern.colnum) and v ~= &amp;#039;&amp;#039;) then&lt;br /&gt;
				table.insert(colnums, tonumber(k:match(cfg.pattern.colnum)))&lt;br /&gt;
			elseif (k:match(cfg.pattern.colfooternum) and v ~= &amp;#039;&amp;#039;) then&lt;br /&gt;
				table.insert(colfooternums, tonumber(k:match(cfg.pattern.colfooternum)))&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	table.sort(colheadernums)&lt;br /&gt;
	table.sort(colnums)&lt;br /&gt;
	table.sort(colfooternums)&lt;br /&gt;
&lt;br /&gt;
	-- HTML table for list1&lt;br /&gt;
	local coltable = mw.html.create( &amp;#039;table&amp;#039; ):addClass(&amp;#039;navbox-columns-table&amp;#039;)&lt;br /&gt;
	local row, col&lt;br /&gt;
&lt;br /&gt;
	local tablestyle = ( (#colheadernums &amp;gt; 0) or (not isblank(pargs[cfg.arg.fullwidth])) )&lt;br /&gt;
		and &amp;#039;width:100%&amp;#039;&lt;br /&gt;
		or &amp;#039;width:auto; margin-left:auto; margin-right:auto&amp;#039;&lt;br /&gt;
&lt;br /&gt;
	coltable:cssText(concatstyles({&lt;br /&gt;
		&amp;#039;border-spacing: 0px; text-align:left&amp;#039;,&lt;br /&gt;
		tablestyle,&lt;br /&gt;
		pargs[cfg.arg.coltablestyle] or &amp;#039;&amp;#039;&lt;br /&gt;
	}))&lt;br /&gt;
&lt;br /&gt;
	--- Header row ---&lt;br /&gt;
	if (#colheadernums &amp;gt; 0) then&lt;br /&gt;
		row = coltable:tag(&amp;#039;tr&amp;#039;)&lt;br /&gt;
		for k, n in ipairs(colheadernums) do&lt;br /&gt;
			col = row:tag(&amp;#039;th&amp;#039;):addClass(&amp;#039;navbox-abovebelow&amp;#039;)&lt;br /&gt;
			col:cssText(concatstyles({&lt;br /&gt;
				(k &amp;gt; 1) and &amp;#039;border-left:2px solid #fdfdfd&amp;#039; or &amp;#039;&amp;#039;,&lt;br /&gt;
				&amp;#039;font-weight:bold&amp;#039;,&lt;br /&gt;
				pargs[cfg.arg.colheaderstyle] or &amp;#039;&amp;#039;,&lt;br /&gt;
				pargs[andnum(&amp;#039;colheaderstyle&amp;#039;, n)] or &amp;#039;&amp;#039;&lt;br /&gt;
			}))&lt;br /&gt;
			col:attr(&amp;#039;colspan&amp;#039;, tonumber(pargs[andnum(&amp;#039;colheadercolspan&amp;#039;, n)]))&lt;br /&gt;
			col:wikitext(pargs[andnum(&amp;#039;colheader&amp;#039;, n)])&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	--- Main columns ---&lt;br /&gt;
	row = coltable:tag(&amp;#039;tr&amp;#039;):css(&amp;#039;vertical-align&amp;#039;, &amp;#039;top&amp;#039;)&lt;br /&gt;
	for k, n in ipairs(colnums) do&lt;br /&gt;
		if k == 1 and isblank(pargs[andnum(&amp;#039;colheader&amp;#039;, 1)])&lt;br /&gt;
				and isblank(pargs[andnum(&amp;#039;colfooter&amp;#039;, 1)])&lt;br /&gt;
				and isblank(pargs[cfg.arg.fullwidth]) then&lt;br /&gt;
			local nopad = inArray(&lt;br /&gt;
				{&amp;#039;off&amp;#039;, &amp;#039;0&amp;#039;, &amp;#039;0em&amp;#039;, &amp;#039;0px&amp;#039;},&lt;br /&gt;
				mw.ustring.gsub(pargs[cfg.arg.padding] or &amp;#039;&amp;#039;, &amp;#039;[;%%]&amp;#039;, &amp;#039;&amp;#039;))&lt;br /&gt;
			if not nopad then&lt;br /&gt;
				row:tag(&amp;#039;td&amp;#039;):wikitext(&amp;#039;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;#039;)&lt;br /&gt;
					:css(&amp;#039;width&amp;#039;, (pargs[cfg.arg.padding] or &amp;#039;5em&amp;#039;))&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		col = row:tag(&amp;#039;td&amp;#039;):addClass(&amp;#039;navbox-list&amp;#039;)&lt;br /&gt;
		col:cssText(concatstyles({&lt;br /&gt;
			(k &amp;gt; 1) and &amp;#039;border-left:2px solid #fdfdfd&amp;#039; or &amp;#039;&amp;#039;,&lt;br /&gt;
			&amp;#039;padding:0px&amp;#039;,&lt;br /&gt;
			pargs[cfg.arg.colstyle] or &amp;#039;&amp;#039;,&lt;br /&gt;
			((n%2 == 0) and pargs[cfg.arg.evencolstyle] or pargs[cfg.arg.oddcolstyle]) or &amp;#039;&amp;#039;,&lt;br /&gt;
			pargs[andnum(&amp;#039;colstyle&amp;#039;, n)] or &amp;#039;&amp;#039;,&lt;br /&gt;
			&amp;#039;width:&amp;#039; .. (pargs[andnum(&amp;#039;colwidth&amp;#039;, n)] or pargs[cfg.arg.colwidth] or &amp;#039;10em&amp;#039;)&lt;br /&gt;
		}))&lt;br /&gt;
		local wt = pargs[andnum(&amp;#039;col&amp;#039;, n)]&lt;br /&gt;
		if wt and inArray(cfg.keyword.subgroups, wt) then&lt;br /&gt;
			wt = getSubgroup(pargs, n, wt, cfg.arg.col_and_num)&lt;br /&gt;
		end&lt;br /&gt;
		col:tag(&amp;#039;div&amp;#039;):newline():wikitext(wt):newline()&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	--- Footer row ---&lt;br /&gt;
	if (#colfooternums &amp;gt; 0) then&lt;br /&gt;
		row = coltable:tag(&amp;#039;tr&amp;#039;)&lt;br /&gt;
		for k, n in ipairs(colfooternums) do&lt;br /&gt;
			col = row:tag(&amp;#039;td&amp;#039;):addClass(&amp;#039;navbox-abovebelow&amp;#039;)&lt;br /&gt;
			col:cssText(concatstyles({&lt;br /&gt;
				(k &amp;gt; 1) and &amp;#039;border-left:2px solid #fdfdfd&amp;#039; or &amp;#039;&amp;#039;,&lt;br /&gt;
				&amp;#039;font-weight:bold&amp;#039;,&lt;br /&gt;
				pargs[cfg.arg.colfooterstyle] or &amp;#039;&amp;#039;,&lt;br /&gt;
				pargs[andnum(&amp;#039;colfooterstyle&amp;#039;, n)] or &amp;#039;&amp;#039;&lt;br /&gt;
			}))&lt;br /&gt;
			col:attr(&amp;#039;colspan&amp;#039;, tonumber(pargs[andnum(&amp;#039;colfootercolspan&amp;#039;, n)]))&lt;br /&gt;
			col:wikitext(pargs[andnum(&amp;#039;colfooter&amp;#039;, n)])&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- assign table to list1&lt;br /&gt;
	targs[andnum(&amp;#039;list&amp;#039;, 1)] = tostring(coltable)&lt;br /&gt;
	if isblank(pargs[andnum(&amp;#039;colheader&amp;#039;, 1)]) &lt;br /&gt;
			and isblank(pargs[andnum(&amp;#039;col&amp;#039;, 1)])&lt;br /&gt;
			and isblank(pargs[andnum(&amp;#039;colfooter&amp;#039;, 1)]) then&lt;br /&gt;
		targs[andnum(&amp;#039;list&amp;#039;, 1)] = targs[andnum(&amp;#039;list&amp;#039;, 1)] ..&lt;br /&gt;
			cfg.category.without_first_col&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Other parameters&lt;br /&gt;
	targs[cfg.arg.border] = pargs[cfg.arg.border] or pargs[1]&lt;br /&gt;
	targs[cfg.arg.evenodd] = (not isblank(pargs[cfg.arg.evenodd])) and pargs[cfg.arg.evenodd] or nil&lt;br /&gt;
	targs[cfg.arg.list1padding] = &amp;#039;0px&amp;#039;&lt;br /&gt;
	targs[andnum(&amp;#039;liststyle&amp;#039;, 1)] = &amp;#039;background:transparent;color:inherit;&amp;#039;&lt;br /&gt;
	targs[cfg.arg.style] = concatstyles({pargs[cfg.arg.style], pargs[cfg.arg.bodystyle]})&lt;br /&gt;
	targs[cfg.arg.tracking] = &amp;#039;no&amp;#039;&lt;br /&gt;
	&lt;br /&gt;
	return p._navbox(targs)&lt;br /&gt;
end --p._withColumns&lt;br /&gt;
&lt;br /&gt;
-- Template entry points&lt;br /&gt;
function p.navbox (frame, boxtype)&lt;br /&gt;
	local function readArgs(args, prefix)&lt;br /&gt;
		local function readSubgroups(element, i)&lt;br /&gt;
			if inArray(cfg.keyword.subgroups, args[prefix .. andnum(element, i)]) then&lt;br /&gt;
				for _, v in ipairs(cfg.arg.subgroups_and_num) do&lt;br /&gt;
					readArgs(args, prefix .. string.format(v, i) .. &amp;quot;_&amp;quot;)&lt;br /&gt;
				end&lt;br /&gt;
				readArgs(args, prefix .. andnum(&amp;#039;col&amp;#039;, i) .. &amp;quot;_&amp;quot;)&lt;br /&gt;
			end&lt;br /&gt;
		end	&lt;br /&gt;
		-- Read the arguments in the order they&amp;#039;ll be output in, to make references&lt;br /&gt;
		-- number in the right order.&lt;br /&gt;
		local _&lt;br /&gt;
		_ = args[prefix .. cfg.arg.title]&lt;br /&gt;
		_ = args[prefix .. cfg.arg.above]&lt;br /&gt;
		-- Limit this to 20 as covering &amp;#039;most&amp;#039; cases (that&amp;#039;s a SWAG) and because&lt;br /&gt;
		-- iterator approach won&amp;#039;t work here&lt;br /&gt;
		local boxtype = args.type or cfg.keyword[boxtype]&lt;br /&gt;
		if boxtype == cfg.keyword.with_columns then&lt;br /&gt;
			for i = 1, 20 do&lt;br /&gt;
				_ = args[prefix .. andnum(&amp;#039;colheader&amp;#039;, i)]&lt;br /&gt;
			end		&lt;br /&gt;
			for i = 1, 20 do&lt;br /&gt;
				readSubgroups(&amp;#039;col&amp;#039;, i)&lt;br /&gt;
			end		&lt;br /&gt;
			for i = 1, 20 do&lt;br /&gt;
				_ = args[prefix .. andnum(&amp;#039;colfooter&amp;#039;, i)]&lt;br /&gt;
			end		&lt;br /&gt;
		end&lt;br /&gt;
		for i = 1, 20 do&lt;br /&gt;
			_ = args[prefix .. andnum(&amp;#039;group&amp;#039;, i)]&lt;br /&gt;
			readSubgroups(&amp;#039;list&amp;#039;, i)&lt;br /&gt;
		end&lt;br /&gt;
		_ = args[prefix .. cfg.arg.below]&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if not getArgs then&lt;br /&gt;
		getArgs = require(&amp;#039;Module:Arguments&amp;#039;).getArgs&lt;br /&gt;
	end&lt;br /&gt;
	local args = getArgs(frame, {wrappers = {cfg.pattern[boxtype or &amp;#039;navbox&amp;#039;]}})&lt;br /&gt;
	readArgs(args, &amp;quot;&amp;quot;)&lt;br /&gt;
	args.argHash = nil -- we shouldn&amp;#039;t accept argHash passed from a template&lt;br /&gt;
	args.type = args.type or cfg.keyword[boxtype]&lt;br /&gt;
	return p[&amp;#039;_navbox&amp;#039;](args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p[cfg.keyword.with_collapsible_groups] = function (frame)&lt;br /&gt;
	return p.navbox(frame, &amp;#039;with_collapsible_groups&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p[cfg.keyword.with_columns] = function (frame)&lt;br /&gt;
	return p.navbox(frame, &amp;#039;with_columns&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</description>
			<pubDate>Wed, 09 Sep 2026 09:48:26 GMT</pubDate>
			<dc:creator>Oxitain</dc:creator>
			<comments>https://www.microindex.net/index.php/Module_talk:Navbox</comments>
		</item>
		<item>
			<title>Module:Navbar/styles.css</title>
			<link>https://www.microindex.net/index.php?title=Module:Navbar/styles.css&amp;diff=416&amp;oldid=0</link>
			<guid isPermaLink="false">https://www.microindex.net/index.php?title=Module:Navbar/styles.css&amp;diff=416&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php/User:Oxitain&quot; class=&quot;mw-userlink&quot; title=&quot;User:Oxitain&quot;&gt;&lt;bdi&gt;Oxitain&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Module:Navbar/styles.css&quot; title=&quot;Module:Navbar/styles.css&quot;&gt;Module:Navbar/styles.css&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;/* {{pp|small=yes}} */&lt;br /&gt;
.navbar {&lt;br /&gt;
	display: inline;&lt;br /&gt;
	font-size: 88%;&lt;br /&gt;
	font-weight: normal;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbar-collapse {&lt;br /&gt;
	float: left;&lt;br /&gt;
	text-align: left;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbar-boxtext {&lt;br /&gt;
	word-spacing: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbar ul {&lt;br /&gt;
	display: inline-block;&lt;br /&gt;
	white-space: nowrap;&lt;br /&gt;
	line-height: inherit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbar-brackets::before {&lt;br /&gt;
	margin-right: -0.125em;&lt;br /&gt;
	content: &amp;#039;[ &amp;#039;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbar-brackets::after {&lt;br /&gt;
	margin-left: -0.125em;&lt;br /&gt;
	content: &amp;#039; ]&amp;#039;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbar li {&lt;br /&gt;
	word-spacing: -0.125em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbar a &amp;gt; span,&lt;br /&gt;
.navbar a &amp;gt; abbr {&lt;br /&gt;
	text-decoration: inherit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbar-mini abbr {&lt;br /&gt;
	font-variant: small-caps;&lt;br /&gt;
	border-bottom: none;&lt;br /&gt;
	text-decoration: none;&lt;br /&gt;
	cursor: inherit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbar-ct-full {&lt;br /&gt;
	font-size: 114%;&lt;br /&gt;
	margin: 0 7em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbar-ct-mini {&lt;br /&gt;
	font-size: 114%;&lt;br /&gt;
	margin: 0 4em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* not the usual @media screen, we simply remove navbar in @media print */&lt;br /&gt;
html.skin-theme-clientpref-night .navbar li a abbr {&lt;br /&gt;
	color: var(--color-base) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media (prefers-color-scheme: dark) {&lt;br /&gt;
	html.skin-theme-clientpref-os .navbar li a abbr {&lt;br /&gt;
		color: var(--color-base) !important;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media print {&lt;br /&gt;
	.navbar {&lt;br /&gt;
		display: none !important;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;/div&gt;</description>
			<pubDate>Wed, 09 Sep 2026 09:48:26 GMT</pubDate>
			<dc:creator>Oxitain</dc:creator>
			<comments>https://www.microindex.net/index.php/Module_talk:Navbar/styles.css</comments>
		</item>
		<item>
			<title>Module:Navbar/configuration</title>
			<link>https://www.microindex.net/index.php?title=Module:Navbar/configuration&amp;diff=414&amp;oldid=0</link>
			<guid isPermaLink="false">https://www.microindex.net/index.php?title=Module:Navbar/configuration&amp;diff=414&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php/User:Oxitain&quot; class=&quot;mw-userlink&quot; title=&quot;User:Oxitain&quot;&gt;&lt;bdi&gt;Oxitain&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Module:Navbar/configuration&quot; title=&quot;Module:Navbar/configuration&quot;&gt;Module:Navbar/configuration&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;return {&lt;br /&gt;
	[&amp;#039;templatestyles&amp;#039;] = &amp;#039;Module:Navbar/styles.css&amp;#039;,&lt;br /&gt;
	[&amp;#039;hlist_templatestyles&amp;#039;] = &amp;#039;Hlist/styles.css&amp;#039;,&lt;br /&gt;
	[&amp;#039;box_text&amp;#039;] = &amp;#039;This box: &amp;#039;,			-- default text box when not plain or mini&lt;br /&gt;
	[&amp;#039;title_namespace&amp;#039;] = &amp;#039;Template&amp;#039;,		-- namespace to default to for title&lt;br /&gt;
	[&amp;#039;invalid_title&amp;#039;] = &amp;#039;Invalid title &amp;#039;,&lt;br /&gt;
	[&amp;#039;classes&amp;#039;] = { -- set a line to nil if you don&amp;#039;t want it&lt;br /&gt;
		[&amp;#039;navbar&amp;#039;] = &amp;#039;navbar&amp;#039;,&lt;br /&gt;
		[&amp;#039;plainlinks&amp;#039;] = &amp;#039;plainlinks&amp;#039;, -- plainlinks&lt;br /&gt;
		[&amp;#039;horizontal_list&amp;#039;] = &amp;#039;hlist&amp;#039;, -- horizontal list class&lt;br /&gt;
		[&amp;#039;mini&amp;#039;] = &amp;#039;navbar-mini&amp;#039;, -- class indicating small links in the navbar&lt;br /&gt;
		[&amp;#039;box_text&amp;#039;] = &amp;#039;navbar-boxtext&amp;#039;,&lt;br /&gt;
		[&amp;#039;brackets&amp;#039;] = &amp;#039;navbar-brackets&amp;#039;,&lt;br /&gt;
		-- &amp;#039;collapsible&amp;#039; is the key for a class to indicate the navbar is&lt;br /&gt;
		-- setting up the collapsible element in addition to the normal&lt;br /&gt;
		-- navbar.&lt;br /&gt;
		[&amp;#039;collapsible&amp;#039;] = &amp;#039;navbar-collapse&amp;#039;,&lt;br /&gt;
		[&amp;#039;collapsible_title_mini&amp;#039;] = &amp;#039;navbar-ct-mini&amp;#039;,&lt;br /&gt;
		[&amp;#039;collapsible_title_full&amp;#039;] = &amp;#039;navbar-ct-full&amp;#039;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;/div&gt;</description>
			<pubDate>Wed, 09 Sep 2026 09:48:26 GMT</pubDate>
			<dc:creator>Oxitain</dc:creator>
			<comments>https://www.microindex.net/index.php/Module_talk:Navbar/configuration</comments>
		</item>
		<item>
			<title>Module:Navbar</title>
			<link>https://www.microindex.net/index.php?title=Module:Navbar&amp;diff=412&amp;oldid=0</link>
			<guid isPermaLink="false">https://www.microindex.net/index.php?title=Module:Navbar&amp;diff=412&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php/User:Oxitain&quot; class=&quot;mw-userlink&quot; title=&quot;User:Oxitain&quot;&gt;&lt;bdi&gt;Oxitain&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Module:Navbar&quot; title=&quot;Module:Navbar&quot;&gt;Module:Navbar&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local p = {}&lt;br /&gt;
local cfg = mw.loadData(&amp;#039;Module:Navbar/configuration&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
local function get_title_arg(is_collapsible, template)&lt;br /&gt;
	local title_arg = 1&lt;br /&gt;
	if is_collapsible then title_arg = 2 end&lt;br /&gt;
	if template then title_arg = &amp;#039;template&amp;#039; end&lt;br /&gt;
	return title_arg&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function choose_links(template, args)&lt;br /&gt;
	-- The show table indicates the default displayed items.&lt;br /&gt;
	-- view, talk, edit, hist, move, watch&lt;br /&gt;
	-- TODO: Move to configuration.&lt;br /&gt;
	local show = {true, true, true, false, false, false}&lt;br /&gt;
	if template then&lt;br /&gt;
		show[2] = false&lt;br /&gt;
		show[3] = false&lt;br /&gt;
		local index = {t = 2, d = 2, e = 3, h = 4, m = 5, w = 6,&lt;br /&gt;
			talk = 2, edit = 3, hist = 4, move = 5, watch = 6}&lt;br /&gt;
		-- TODO: Consider removing TableTools dependency.&lt;br /&gt;
		for _, v in ipairs(require (&amp;#039;Module:TableTools&amp;#039;).compressSparseArray(args)) do&lt;br /&gt;
			local num = index[v]&lt;br /&gt;
			if num then show[num] = true end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local remove_edit_link = args.noedit&lt;br /&gt;
	if remove_edit_link then show[3] = false end&lt;br /&gt;
	&lt;br /&gt;
	return show&lt;br /&gt;
	&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function add_link(link_description, ul, is_mini, font_style)&lt;br /&gt;
	local l&lt;br /&gt;
	if link_description.url then&lt;br /&gt;
		l = {&amp;#039;[&amp;#039;, &amp;#039;&amp;#039;, &amp;#039;]&amp;#039;}&lt;br /&gt;
	else&lt;br /&gt;
		l = {&amp;#039;[[&amp;#039;, &amp;#039;|&amp;#039;, &amp;#039;]]&amp;#039;}&lt;br /&gt;
	end&lt;br /&gt;
	ul:tag(&amp;#039;li&amp;#039;)&lt;br /&gt;
		:addClass(&amp;#039;nv-&amp;#039; .. link_description.full)&lt;br /&gt;
		:wikitext(l[1] .. link_description.link .. l[2])&lt;br /&gt;
		:tag(is_mini and &amp;#039;abbr&amp;#039; or &amp;#039;span&amp;#039;)&lt;br /&gt;
			:attr(&amp;#039;title&amp;#039;, link_description.html_title)&lt;br /&gt;
			:cssText(font_style)&lt;br /&gt;
			:wikitext(is_mini and link_description.mini or link_description.full)&lt;br /&gt;
			:done()&lt;br /&gt;
		:wikitext(l[3])&lt;br /&gt;
		:done()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function make_list(title_text, has_brackets, displayed_links, is_mini, font_style)&lt;br /&gt;
	&lt;br /&gt;
	local title = mw.title.new(mw.text.trim(title_text), cfg.title_namespace)&lt;br /&gt;
	if not title then&lt;br /&gt;
		error(cfg.invalid_title .. title_text)&lt;br /&gt;
	end&lt;br /&gt;
	local talkpage = title.talkPageTitle and title.talkPageTitle.fullText or &amp;#039;&amp;#039;&lt;br /&gt;
	&lt;br /&gt;
	-- TODO: Get link_descriptions and show into the configuration module.&lt;br /&gt;
	-- link_descriptions should be easier...&lt;br /&gt;
	local link_descriptions = {&lt;br /&gt;
		{ [&amp;#039;mini&amp;#039;] = &amp;#039;v&amp;#039;, [&amp;#039;full&amp;#039;] = &amp;#039;view&amp;#039;, [&amp;#039;html_title&amp;#039;] = &amp;#039;View this template&amp;#039;,&lt;br /&gt;
			[&amp;#039;link&amp;#039;] = title.fullText, [&amp;#039;url&amp;#039;] = false },&lt;br /&gt;
		{ [&amp;#039;mini&amp;#039;] = &amp;#039;t&amp;#039;, [&amp;#039;full&amp;#039;] = &amp;#039;talk&amp;#039;, [&amp;#039;html_title&amp;#039;] = &amp;#039;Discuss this template&amp;#039;,&lt;br /&gt;
			[&amp;#039;link&amp;#039;] = talkpage, [&amp;#039;url&amp;#039;] = false },&lt;br /&gt;
		{ [&amp;#039;mini&amp;#039;] = &amp;#039;e&amp;#039;, [&amp;#039;full&amp;#039;] = &amp;#039;edit&amp;#039;, [&amp;#039;html_title&amp;#039;] = &amp;#039;Edit this template&amp;#039;,&lt;br /&gt;
			[&amp;#039;link&amp;#039;] = &amp;#039;Special:EditPage/&amp;#039; .. title.fullText, [&amp;#039;url&amp;#039;] = false },&lt;br /&gt;
		{ [&amp;#039;mini&amp;#039;] = &amp;#039;h&amp;#039;, [&amp;#039;full&amp;#039;] = &amp;#039;hist&amp;#039;, [&amp;#039;html_title&amp;#039;] = &amp;#039;History of this template&amp;#039;,&lt;br /&gt;
			[&amp;#039;link&amp;#039;] = &amp;#039;Special:PageHistory/&amp;#039; .. title.fullText, [&amp;#039;url&amp;#039;] = false },&lt;br /&gt;
		{ [&amp;#039;mini&amp;#039;] = &amp;#039;m&amp;#039;, [&amp;#039;full&amp;#039;] = &amp;#039;move&amp;#039;, [&amp;#039;html_title&amp;#039;] = &amp;#039;Move this template&amp;#039;,&lt;br /&gt;
			[&amp;#039;link&amp;#039;] = mw.title.new(&amp;#039;Special:Movepage&amp;#039;):fullUrl(&amp;#039;target=&amp;#039;..title.fullText), [&amp;#039;url&amp;#039;] = true },&lt;br /&gt;
		{ [&amp;#039;mini&amp;#039;] = &amp;#039;w&amp;#039;, [&amp;#039;full&amp;#039;] = &amp;#039;watch&amp;#039;, [&amp;#039;html_title&amp;#039;] = &amp;#039;Watch this template&amp;#039;, &lt;br /&gt;
			[&amp;#039;link&amp;#039;] = title:fullUrl(&amp;#039;action=watch&amp;#039;), [&amp;#039;url&amp;#039;] = true }&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	local ul = mw.html.create(&amp;#039;ul&amp;#039;)&lt;br /&gt;
	if has_brackets then&lt;br /&gt;
		ul:addClass(cfg.classes.brackets)&lt;br /&gt;
			:cssText(font_style)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	for i, _ in ipairs(displayed_links) do&lt;br /&gt;
		if displayed_links[i] then add_link(link_descriptions[i], ul, is_mini, font_style) end&lt;br /&gt;
	end&lt;br /&gt;
	return ul:done()&lt;br /&gt;
	&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._navbar(args)&lt;br /&gt;
	&lt;br /&gt;
	-- TODO: We probably don&amp;#039;t need both fontstyle and fontcolor...&lt;br /&gt;
	local font_style = args.fontstyle&lt;br /&gt;
	local font_color = args.fontcolor&lt;br /&gt;
	local is_collapsible = args.collapsible&lt;br /&gt;
	local is_mini = args.mini&lt;br /&gt;
	local is_plain = args.plain&lt;br /&gt;
	&lt;br /&gt;
	local collapsible_class = nil&lt;br /&gt;
	if is_collapsible then&lt;br /&gt;
		collapsible_class = cfg.classes.collapsible&lt;br /&gt;
		if not is_plain then is_mini = 1 end&lt;br /&gt;
		if font_color then&lt;br /&gt;
			font_style = (font_style or &amp;#039;&amp;#039;) .. &amp;#039;; color: &amp;#039; .. font_color .. &amp;#039;;&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local navbar_style = args.style&lt;br /&gt;
	local div = mw.html.create():tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
	div&lt;br /&gt;
		:addClass(cfg.classes.navbar)&lt;br /&gt;
		:addClass(cfg.classes.plainlinks)&lt;br /&gt;
		:addClass(cfg.classes.horizontal_list)&lt;br /&gt;
		:addClass(collapsible_class) -- we made the determination earlier&lt;br /&gt;
		:cssText(navbar_style)&lt;br /&gt;
&lt;br /&gt;
	if is_mini then div:addClass(cfg.classes.mini) end&lt;br /&gt;
&lt;br /&gt;
	local box_text = (args.text or cfg.box_text) .. &amp;#039; &amp;#039;&lt;br /&gt;
	 -- the concatenated space guarantees the box text is separated&lt;br /&gt;
	if not (is_mini or is_plain) then&lt;br /&gt;
		div&lt;br /&gt;
			:tag(&amp;#039;span&amp;#039;)&lt;br /&gt;
				:addClass(cfg.classes.box_text)&lt;br /&gt;
				:cssText(font_style)&lt;br /&gt;
				:wikitext(box_text)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local template = args.template&lt;br /&gt;
	local displayed_links = choose_links(template, args)&lt;br /&gt;
	local has_brackets = args.brackets&lt;br /&gt;
	local title_arg = get_title_arg(is_collapsible, template)&lt;br /&gt;
	local title_text = args[title_arg] or (&amp;#039;:&amp;#039; .. mw.getCurrentFrame():getParent():getTitle())&lt;br /&gt;
	local list = make_list(title_text, has_brackets, displayed_links, is_mini, font_style)&lt;br /&gt;
	div:node(list)&lt;br /&gt;
&lt;br /&gt;
	if is_collapsible then&lt;br /&gt;
		local title_text_class&lt;br /&gt;
		if is_mini then&lt;br /&gt;
			title_text_class = cfg.classes.collapsible_title_mini&lt;br /&gt;
		else&lt;br /&gt;
			title_text_class = cfg.classes.collapsible_title_full&lt;br /&gt;
		end&lt;br /&gt;
		div:done()&lt;br /&gt;
			:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
			:addClass(title_text_class)&lt;br /&gt;
			:cssText(font_style)&lt;br /&gt;
			:wikitext(args[1])&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local frame = mw.getCurrentFrame()&lt;br /&gt;
	-- hlist -&amp;gt; navbar is best-effort to preserve old Common.css ordering.&lt;br /&gt;
	return frame:extensionTag{&lt;br /&gt;
		name = &amp;#039;templatestyles&amp;#039;, args = { src = cfg.hlist_templatestyles }&lt;br /&gt;
	} .. frame:extensionTag{&lt;br /&gt;
		name = &amp;#039;templatestyles&amp;#039;, args = { src = cfg.templatestyles }&lt;br /&gt;
	} .. tostring(div:done())&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.navbar(frame)&lt;br /&gt;
	return p._navbar(require(&amp;#039;Module:Arguments&amp;#039;).getArgs(frame))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</description>
			<pubDate>Wed, 09 Sep 2026 09:48:26 GMT</pubDate>
			<dc:creator>Oxitain</dc:creator>
			<comments>https://www.microindex.net/index.php/Module_talk:Navbar</comments>
		</item>
		<item>
			<title>Module:Icon/data</title>
			<link>https://www.microindex.net/index.php?title=Module:Icon/data&amp;diff=410&amp;oldid=0</link>
			<guid isPermaLink="false">https://www.microindex.net/index.php?title=Module:Icon/data&amp;diff=410&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php/User:Oxitain&quot; class=&quot;mw-userlink&quot; title=&quot;User:Oxitain&quot;&gt;&lt;bdi&gt;Oxitain&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Module:Icon/data&quot; title=&quot;Module:Icon/data&quot;&gt;Module:Icon/data&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;-- This module stores icon data for [[Module:Icon]].&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Icon data&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local data = {&lt;br /&gt;
	fa = {&lt;br /&gt;
		image = &amp;quot;Featured article star.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Featured article&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	far = {&lt;br /&gt;
		image = &amp;quot;Cscr-star piece.png&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Featured article review&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	farc = {&lt;br /&gt;
		image = &amp;quot;Cscr-star piece.png&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Featured article removal candidate&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	ffa = {&lt;br /&gt;
		aliases = {&amp;quot;dfa&amp;quot;},&lt;br /&gt;
		image = &amp;quot;Featured article star - cross.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Former featured article&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	fac = {&lt;br /&gt;
		aliases = {&amp;quot;fan&amp;quot;},&lt;br /&gt;
		image = &amp;quot;Cscr-candidate.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Featured article candidate&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	ffac = {&lt;br /&gt;
		aliases = {&amp;quot;nofa&amp;quot;},&lt;br /&gt;
		image = &amp;quot;Cscr-former.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Former featured article candidate&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	fl = {&lt;br /&gt;
		image = &amp;quot;Featured article star.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Featured list&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	flrc = {&lt;br /&gt;
		aliases = {&amp;quot;flr&amp;quot;},&lt;br /&gt;
		image = &amp;quot;Cscr-star piece.png&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Featured list removal candidate&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	ffl = {&lt;br /&gt;
		aliases = {&amp;quot;dfl&amp;quot;},&lt;br /&gt;
		image = &amp;quot;Featured article star - cross.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Former featured list&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	flc = {&lt;br /&gt;
		aliases = {&amp;quot;fln&amp;quot;},&lt;br /&gt;
		image = &amp;quot;Cscr-candidate.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Featured list candidate&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	fflc = {&lt;br /&gt;
		aliases = {&amp;quot;nofl&amp;quot;},&lt;br /&gt;
		image = &amp;quot;Cscr-former.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Former featured list candidate&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	a = {&lt;br /&gt;
		image = &amp;quot;Symbol a class.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;A-Class article&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	admin = {&lt;br /&gt;
		aliases = {&amp;quot;mop&amp;quot;},&lt;br /&gt;
		image = &amp;quot;Wikipedia Administrator.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Administrator&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	dac = {&lt;br /&gt;
		aliases = {&amp;quot;daa&amp;quot;},&lt;br /&gt;
		image = &amp;quot;Symbol unsupport A vote.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Demoted A-Class article&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	acc = {&lt;br /&gt;
		aliases = {&amp;quot;acn&amp;quot;, &amp;quot;aac&amp;quot;},&lt;br /&gt;
		image = &amp;quot;A candidate.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;A-Class article candidate&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	noac = {&lt;br /&gt;
		aliases = {&amp;quot;faac&amp;quot;},&lt;br /&gt;
		image = &amp;quot;Symbol unsupport A vote.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Failed A-Class article candidate&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	ga = {&lt;br /&gt;
		image = &amp;quot;Symbol support vote.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Good article&amp;quot;,&lt;br /&gt;
		link = false,&lt;br /&gt;
	},&lt;br /&gt;
	gar = {&lt;br /&gt;
		image = &amp;quot;GA Candidate Neutral vote(ChaosNil).svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Good article reassessment&amp;quot;,&lt;br /&gt;
		link = false,&lt;br /&gt;
	},&lt;br /&gt;
	dga = {&lt;br /&gt;
		image = &amp;quot;Symbol unsupport vote.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Delisted good article&amp;quot;,&lt;br /&gt;
		link = false,&lt;br /&gt;
	},&lt;br /&gt;
	gan = {&lt;br /&gt;
		aliases = {&amp;quot;gac&amp;quot;},&lt;br /&gt;
		image = &amp;quot;GA candidate.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Good article nominee&amp;quot;,&lt;br /&gt;
		link = false,&lt;br /&gt;
	},&lt;br /&gt;
	ga2 = {&lt;br /&gt;
		image = &amp;quot;Symbol neutral vote.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Good article, 2nd opinion&amp;quot;,&lt;br /&gt;
		link = false,&lt;br /&gt;
	},&lt;br /&gt;
	gah = {&lt;br /&gt;
		image = &amp;quot;Symbol wait.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Good article on hold&amp;quot;,&lt;br /&gt;
		link = false,&lt;br /&gt;
	},&lt;br /&gt;
	fgan = {&lt;br /&gt;
		aliases = {&amp;quot;noga&amp;quot;, &amp;quot;gaf&amp;quot;, &amp;quot;gf&amp;quot;},&lt;br /&gt;
		image = &amp;quot;Symbol oppose vote.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Former good article nominee&amp;quot;,&lt;br /&gt;
		link = false,&lt;br /&gt;
	},&lt;br /&gt;
	fp = {&lt;br /&gt;
		image = &amp;quot;Cscr-featured.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Featured picture&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	fpc = {&lt;br /&gt;
		aliases = {&amp;quot;fpn&amp;quot;},&lt;br /&gt;
		image = &amp;quot;Cscr-candidate.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Featured picture candidate&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	ffp = {&lt;br /&gt;
		image = &amp;quot;Cscr-former.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Former featured picture&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	vp = {&lt;br /&gt;
		image = &amp;quot;ENWP VP Logo.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Valued picture&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	vpc = {&lt;br /&gt;
		image = &amp;quot;Valued pics 1.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Valued picture candidate&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	fs = {&lt;br /&gt;
		image = &amp;quot;Cscr-featured.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Featured sound&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	ffs = {&lt;br /&gt;
		image = &amp;quot;Cscr-former.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Former featured sound&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	fsc = {&lt;br /&gt;
		image = &amp;quot;Cscr-candidate.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Featured sound candidate&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	fpo = {&lt;br /&gt;
		image = &amp;quot;Linecons big-star.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Before the featured portal process ceased in 2017, this had been designated as a featured portal.&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	fpor = {&lt;br /&gt;
		image = &amp;quot;Cscr-star piece.png&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Featured portal review&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	ffpo = {&lt;br /&gt;
		image = &amp;quot;Featured article star - cross.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Former featured portal&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	fpoc = {&lt;br /&gt;
		image = &amp;quot;Cscr-candidate.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Featured portal candidate&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	ft = {&lt;br /&gt;
		image = &amp;quot;Cscr-featuredtopic.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Featured topic&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	ftrc = {&lt;br /&gt;
		image = &amp;quot;Cscr-star piece.png&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Featured topic removal candidate&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	fft = {&lt;br /&gt;
		aliases = {&amp;quot;dft&amp;quot;},&lt;br /&gt;
		image = &amp;quot;DFT candidate_cluster.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Former featured topic&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	ftc = {&lt;br /&gt;
		aliases = {&amp;quot;ftn&amp;quot;},&lt;br /&gt;
		image = &amp;quot;FT candidate cluster.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Featured topic candidate&amp;quot;,&lt;br /&gt;
		link = false,&lt;br /&gt;
	},&lt;br /&gt;
	gt = {&lt;br /&gt;
		image = &amp;quot;Support cluster.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Good topic&amp;quot;,&lt;br /&gt;
		link = false,&lt;br /&gt;
	},&lt;br /&gt;
	gtrc = {&lt;br /&gt;
		image = &amp;quot;Symbol unsupport vote.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Good topic removal candidate&amp;quot;,&lt;br /&gt;
		link = false,&lt;br /&gt;
	},&lt;br /&gt;
	gtc = {&lt;br /&gt;
		aliases = {&amp;quot;gtn&amp;quot;},&lt;br /&gt;
		image = &amp;quot;GA candidate cluster.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Good topic candidate&amp;quot;,&lt;br /&gt;
		link = false,&lt;br /&gt;
	},&lt;br /&gt;
	bplus = {&lt;br /&gt;
		aliases = {&amp;quot;b+&amp;quot;},&lt;br /&gt;
		image = &amp;quot;Symbol bplus class.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Bplus-Class article&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	b = {&lt;br /&gt;
		image = &amp;quot;Symbol b class.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;B-Class article&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	br = {&lt;br /&gt;
		aliases = {&amp;quot;bcr&amp;quot;},&lt;br /&gt;
		image = &amp;quot;Bclass-checklist.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;B-Class review&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	c = {&lt;br /&gt;
		image = &amp;quot;Symbol c class.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;C-Class article&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	start = {&lt;br /&gt;
		image = &amp;quot;Symbol start class.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Start-Class article&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	stub = {&lt;br /&gt;
		image = &amp;quot;Symbol stub class.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Stub-Class article&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	list = {&lt;br /&gt;
		aliases = {&amp;quot;comparison&amp;quot;},&lt;br /&gt;
		image = &amp;quot;Symbol list class.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;List-Class article&amp;quot;,&lt;br /&gt;
		link = false,&lt;br /&gt;
	},&lt;br /&gt;
	no = {&lt;br /&gt;
		image = &amp;quot;Crystal button cancel.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Unknown-Class article&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	book = {&lt;br /&gt;
		image = &amp;quot;Symbol book class2.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Wikipedia book&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	category = {&lt;br /&gt;
		aliases = {&amp;quot;cat&amp;quot;, &amp;quot;categ&amp;quot;},&lt;br /&gt;
		image = &amp;quot;Symbol category class.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Category&amp;quot;,&lt;br /&gt;
		link = false,&lt;br /&gt;
	},&lt;br /&gt;
	disambiguation = {&lt;br /&gt;
		aliases = {&amp;quot;dab&amp;quot;, &amp;quot;disamb&amp;quot;, &amp;quot;disambig&amp;quot;},&lt;br /&gt;
		image = &amp;quot;Symbol dab class.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Disambiguation page&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	image = {&lt;br /&gt;
		aliases = {&amp;quot;file&amp;quot;},&lt;br /&gt;
		image = &amp;quot;Symbol file class.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;File&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	needed = {&lt;br /&gt;
		image = &amp;quot;Symbol needed class.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Needed article&amp;quot;,&lt;br /&gt;
		link = false,&lt;br /&gt;
	},&lt;br /&gt;
	outline = {&lt;br /&gt;
		image = &amp;quot;Global thinking.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Outline&amp;quot;,&lt;br /&gt;
		link = false,&lt;br /&gt;
	},&lt;br /&gt;
	portal = {&lt;br /&gt;
		image = &amp;quot;Symbol portal class.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Portal&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	project = {&lt;br /&gt;
		image = &amp;quot;Symbol project class.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Project page&amp;quot;,&lt;br /&gt;
		link = false,&lt;br /&gt;
	},&lt;br /&gt;
	redirect = {&lt;br /&gt;
		aliases = {&amp;quot;red&amp;quot;, &amp;quot;redir&amp;quot;},&lt;br /&gt;
		image = &amp;quot;Symbol redirect vote2.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Redirect&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	template = {&lt;br /&gt;
		aliases = {&amp;quot;temp&amp;quot;, &amp;quot;templ&amp;quot;},&lt;br /&gt;
		image = &amp;quot;Symbol template class pink.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Template&amp;quot;,&lt;br /&gt;
		link = false,&lt;br /&gt;
	},&lt;br /&gt;
	essay = {&lt;br /&gt;
		image = &amp;quot;Essay.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Essay&amp;quot;,&lt;br /&gt;
		link = false,&lt;br /&gt;
	},&lt;br /&gt;
	na = {&lt;br /&gt;
		image = &amp;quot;Symbol na class.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Non-article page&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	aa = {&lt;br /&gt;
		image = &amp;quot;Yes check.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Audited article of limited subject matter&amp;quot;,&lt;br /&gt;
		link = false,&lt;br /&gt;
	},&lt;br /&gt;
	da = {&lt;br /&gt;
		image = &amp;quot;Symbol oppose vote.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Demoted article&amp;quot;,&lt;br /&gt;
		link = false,&lt;br /&gt;
	},&lt;br /&gt;
	dyk = {&lt;br /&gt;
		image = &amp;quot;Symbol question.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Did You Know?&amp;quot;,&lt;br /&gt;
		link = false,&lt;br /&gt;
	},&lt;br /&gt;
	dyk2 = {&lt;br /&gt;
		image = &amp;quot;DYK questionmark icon.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Did You Know?&amp;quot;,&lt;br /&gt;
		link = false,&lt;br /&gt;
	},&lt;br /&gt;
	pr = {&lt;br /&gt;
		image = &amp;quot;Nuvola apps kedit.png&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Peer review&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	ppr = {&lt;br /&gt;
		image = &amp;quot;Nuvola apps kedit.png&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Portal peer review&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	q = {&lt;br /&gt;
		aliases = {&amp;quot;question&amp;quot;},&lt;br /&gt;
		image = &amp;quot;Symbol question.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Question&amp;quot;,&lt;br /&gt;
		link = false,&lt;br /&gt;
	},&lt;br /&gt;
	cleanup = {&lt;br /&gt;
		image = &amp;quot;Edit-clear.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Cleanup work&amp;quot;,&lt;br /&gt;
		link = false,&lt;br /&gt;
	},&lt;br /&gt;
	qi = {&lt;br /&gt;
		image = &amp;quot;Quality images logo.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Quality image on Wikimedia Commons&amp;quot;,&lt;br /&gt;
		link = false,&lt;br /&gt;
	},&lt;br /&gt;
	vi = {&lt;br /&gt;
		image = &amp;quot;Valued image seal.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Valued image on Wikimedia Commons&amp;quot;,&lt;br /&gt;
		link = false,&lt;br /&gt;
	},&lt;br /&gt;
	tfa = {&lt;br /&gt;
		image = &amp;quot;Wikipedia-logo.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Today&amp;#039;s Featured Article&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	tfl = {&lt;br /&gt;
		image = &amp;quot;Wikipedia-logo.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Today&amp;#039;s Featured List&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	itn = {&lt;br /&gt;
		image = &amp;quot;Globe current.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;In The News&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	otd = {&lt;br /&gt;
		image = &amp;quot;Nuvola apps date.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;On This Day&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	wikiproject = {&lt;br /&gt;
		image = &amp;quot;People icon.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;WikiProject&amp;quot;,&lt;br /&gt;
		link = false,&lt;br /&gt;
	},&lt;br /&gt;
	goce = {&lt;br /&gt;
		image = &amp;quot;Writing Magnifying.PNG&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Guild of Copy Editors&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	wikipedia = {&lt;br /&gt;
		image = &amp;quot;Wikipedia-logo.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Wikipedia page&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	commons = {&lt;br /&gt;
		image = &amp;quot;Commons-logo.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Commons page&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	wikiquote = {&lt;br /&gt;
		image = &amp;quot;Wikiquote-logo.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Wikiquote page&amp;quot;,&lt;br /&gt;
		link = false,&lt;br /&gt;
	},&lt;br /&gt;
	wikiversity = {&lt;br /&gt;
		image = &amp;quot;Wikiversity logo 2017.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Wikiversity page&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	wikibooks = {&lt;br /&gt;
		image = &amp;quot;Wikibooks-logo.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Wikibooks page&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	wikisource = {&lt;br /&gt;
		image = &amp;quot;Wikisource-logo.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Wikisource page&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	wiktionary = {&lt;br /&gt;
		image = &amp;quot;Wiktionary-logo.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Wiktionary page&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	wikinews = {&lt;br /&gt;
		image = &amp;quot;Wikinews-logo.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Wikinews page&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	wikispecies = {&lt;br /&gt;
		image = &amp;quot;Wikispecies-logo.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Wikispecies page&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	wikidata = {&lt;br /&gt;
		image = &amp;quot;Wikidata-logo.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Wikidata page&amp;quot;,&lt;br /&gt;
		link = false,&lt;br /&gt;
	},&lt;br /&gt;
	wikivoyage = {&lt;br /&gt;
		image = &amp;quot;Wikivoyage-logo.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Wikivoyage page&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	 mediawiki = {&lt;br /&gt;
		 image = &amp;quot;MediaWiki-2020-icon.svg&amp;quot;,&lt;br /&gt;
		 tooltip = &amp;quot;MediaWiki&amp;quot;,&lt;br /&gt;
		 link = true,&lt;br /&gt;
	 },&lt;br /&gt;
	 phabricator = {&lt;br /&gt;
		 aliases = {&amp;quot;phab&amp;quot;},&lt;br /&gt;
		 image = &amp;quot;Favicon-Phabricator-WM.svg&amp;quot;,&lt;br /&gt;
		 tooltip = &amp;quot;Phabricator&amp;quot;,&lt;br /&gt;
		 link = false,&lt;br /&gt;
	 },&lt;br /&gt;
	 wikitech = {&lt;br /&gt;
		 image = &amp;quot;Wikitech-2021-blue-icon.svg&amp;quot;,&lt;br /&gt;
		 tooltip = &amp;quot;Wikitech&amp;quot;,&lt;br /&gt;
		 link = true,&lt;br /&gt;
	 },&lt;br /&gt;
	meta = {&lt;br /&gt;
		image = &amp;quot;Wikimedia Community Logo.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Meta-wiki page&amp;quot;,&lt;br /&gt;
		link = false,&lt;br /&gt;
	},&lt;br /&gt;
	four = {&lt;br /&gt;
		aliases = {&amp;quot;4a&amp;quot;},&lt;br /&gt;
		image = &amp;quot;Four Award with draft icon.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Four Award&amp;quot;,&lt;br /&gt;
		link = false,&lt;br /&gt;
	},&lt;br /&gt;
	million = {&lt;br /&gt;
		image = &amp;quot;Million award logo.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Million Award&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	module = {&lt;br /&gt;
		image = &amp;quot;Lua-logo-nolabel.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Module&amp;quot;,&lt;br /&gt;
		link = false,&lt;br /&gt;
	},&lt;br /&gt;
	vital = {&lt;br /&gt;
		image = &amp;quot;Círculos_Concéntricos.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Vital article&amp;quot;,&lt;br /&gt;
		link = false,&lt;br /&gt;
	},&lt;br /&gt;
	potd  = {&lt;br /&gt;
		image = &amp;quot;Wikipedia-logo.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Picture of the Day&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	draft = {&lt;br /&gt;
		image = &amp;quot;Symbol draft class.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Draft-Class article&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	user = {&lt;br /&gt;
		image = &amp;quot;Symbol user class.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;User-Class article&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	info = {&lt;br /&gt;
		image = &amp;quot;Information icon.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Information&amp;quot;,&lt;br /&gt;
		link = false,&lt;br /&gt;
	},&lt;br /&gt;
	discussionnotificaion = {&lt;br /&gt;
		image = &amp;quot;Echo edit-user-talk icon.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Discussion&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	alert = {&lt;br /&gt;
		image = &amp;quot;OOjs UI icon alert.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Black alert&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	[&amp;#039;alert-imagewarning&amp;#039;] = {&lt;br /&gt;
		image = &amp;quot;OOjs UI icon alert image warning.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Alert&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	[&amp;#039;alert-constructive&amp;#039;] = {&lt;br /&gt;
		image = &amp;quot;OOjs UI icon alert-constructive.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Green alert&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	[&amp;#039;alert-blackred&amp;#039;] = {&lt;br /&gt;
		image = &amp;quot;OOjs UI icon alert destructive black-darkred.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Black, white, and red alert&amp;quot;,&lt;br /&gt;
		link = true,&lt;br /&gt;
	},&lt;br /&gt;
	barnstar2 = {&lt;br /&gt;
		image = &amp;quot;Original Barnstar Hires.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Original barnstar hires&amp;quot;,&lt;br /&gt;
		link = false,&lt;br /&gt;
	},&lt;br /&gt;
	barnstar = {&lt;br /&gt;
		image = &amp;quot;Original Barnstar.png&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Original barnstar&amp;quot;,&lt;br /&gt;
		link = false,&lt;br /&gt;
	},&lt;br /&gt;
	gareview = {&lt;br /&gt;
		aliases = {&amp;quot;ganrv&amp;quot;},&lt;br /&gt;
		image = &amp;quot;Good article review icon.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;Good article review&amp;quot;,&lt;br /&gt;
		link = false,&lt;br /&gt;
	},&lt;br /&gt;
	new = {&lt;br /&gt;
		aliases = {&amp;quot;stork&amp;quot;},&lt;br /&gt;
		image = &amp;quot;Symbol Stork.svg&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;New&amp;quot;,&lt;br /&gt;
		link = true&lt;br /&gt;
	},&lt;br /&gt;
	_DEFAULT = {&lt;br /&gt;
		image = &amp;quot;Symbol question.svg&amp;quot;,&lt;br /&gt;
		link = false,&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- End icon data&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Make aliases work the same as normal keys, and remove the &amp;quot;aliases&amp;quot; subtables.&lt;br /&gt;
local ret= {}&lt;br /&gt;
for code, iconData in pairs(data) do&lt;br /&gt;
	iconData.canonicalCode = code&lt;br /&gt;
	if iconData.aliases then&lt;br /&gt;
		for _, alias in ipairs(iconData.aliases) do&lt;br /&gt;
			ret[alias] = iconData&lt;br /&gt;
		end&lt;br /&gt;
		iconData.aliases = nil&lt;br /&gt;
	end&lt;br /&gt;
	ret[code] = iconData&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return ret&lt;/div&gt;</description>
			<pubDate>Wed, 09 Sep 2026 09:48:25 GMT</pubDate>
			<dc:creator>Oxitain</dc:creator>
			<comments>https://www.microindex.net/index.php/Module_talk:Icon/data</comments>
		</item>
		<item>
			<title>Module:Icon</title>
			<link>https://www.microindex.net/index.php?title=Module:Icon&amp;diff=408&amp;oldid=0</link>
			<guid isPermaLink="false">https://www.microindex.net/index.php?title=Module:Icon&amp;diff=408&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php/User:Oxitain&quot; class=&quot;mw-userlink&quot; title=&quot;User:Oxitain&quot;&gt;&lt;bdi&gt;Oxitain&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Module:Icon&quot; title=&quot;Module:Icon&quot;&gt;Module:Icon&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;-- This module implements [[Template:Icon]].&lt;br /&gt;
&lt;br /&gt;
require(&amp;quot;strict&amp;quot;)&lt;br /&gt;
local yesNo = require(&amp;quot;Module:Yesno&amp;quot;)&lt;br /&gt;
local getArgs = require(&amp;quot;Module:Arguments&amp;quot;).getArgs&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
-- Determine whether we&amp;#039;re being called from a sandbox&lt;br /&gt;
local sandbox = mw.getCurrentFrame():getTitle():find(&amp;#039;sandbox&amp;#039;, 1, true) and &amp;#039;/sandbox&amp;#039; or &amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
-- Implements [[Template:Icon]]&lt;br /&gt;
-- Returns the icon image corresponding to a string (like &amp;#039;B&amp;#039;)&lt;br /&gt;
function p._main(args, data)&lt;br /&gt;
	local data_module = &amp;#039;Module:Icon/data&amp;#039;..sandbox&lt;br /&gt;
	data = data or mw.loadData(data_module)&lt;br /&gt;
	local code = args.class or args[1]&lt;br /&gt;
	local iconData&lt;br /&gt;
	if code then&lt;br /&gt;
		code = code:match(&amp;#039;^%s*(.-)%s*$&amp;#039;):lower() -- trim whitespace and put in lower case&lt;br /&gt;
		iconData = data[code]&lt;br /&gt;
	end&lt;br /&gt;
	if not iconData then&lt;br /&gt;
		iconData = data._DEFAULT&lt;br /&gt;
	end&lt;br /&gt;
	return string.format(&lt;br /&gt;
		&amp;#039;[[File:%s%s%s|%s|class=noviewer|alt=%s]]&amp;#039;,&lt;br /&gt;
		iconData.image,&lt;br /&gt;
		iconData.tooltip and &amp;#039;|&amp;#039; .. iconData.tooltip or &amp;#039;&amp;#039;,&lt;br /&gt;
		iconData.link == false and &amp;#039;|link=&amp;#039; or &amp;#039;&amp;#039;,&lt;br /&gt;
		args.size or &amp;#039;16x16px&amp;#039;,&lt;br /&gt;
		iconData.alt or &amp;#039;&amp;#039;&lt;br /&gt;
	)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Implements [[Template:Icon link]], a superset of [[Template:Icon]]&lt;br /&gt;
-- Returns an icon, plus a suitably formatted wikilink&lt;br /&gt;
function p._link(args, data)&lt;br /&gt;
	args.size = args.size or args.iconsize&lt;br /&gt;
	local icon = p._main(args, data)&lt;br /&gt;
	-- If no link given in args[2], default back to [[Template:Icon]]&lt;br /&gt;
	if not args[2] then&lt;br /&gt;
		return icon&lt;br /&gt;
	end&lt;br /&gt;
	-- Strip wiki markup out of link&lt;br /&gt;
	local getPlain = require(&amp;quot;Module:Text&amp;quot;).Text().getPlain&lt;br /&gt;
	local link = getPlain(args[2])&lt;br /&gt;
	local display = args[3] or args[2]&lt;br /&gt;
	-- italicize display string, if requested&lt;br /&gt;
	if yesNo(args.i) or yesNo(args.italic) or yesNo(args.italics) then&lt;br /&gt;
		display = &amp;#039;&amp;lt;i&amp;gt;&amp;#039;..display..&amp;#039;&amp;lt;/i&amp;gt;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	-- if display is link, just use standard wlink&lt;br /&gt;
	if link == display then&lt;br /&gt;
		return &amp;#039;&amp;lt;span class=&amp;quot;nowrap&amp;quot;&amp;gt;&amp;#039;..icon..&amp;#039; &amp;lt;/span&amp;gt;[[&amp;#039;..link..&amp;#039;]]&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	return &amp;#039;&amp;lt;span class=&amp;quot;nowrap&amp;quot;&amp;gt;&amp;#039;..icon..&amp;#039; &amp;lt;/span&amp;gt;[[&amp;#039;..link..&amp;#039;|&amp;#039;..display..&amp;#039;]]&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	local args = getArgs(frame,{parentFirst=true})&lt;br /&gt;
	return p._main(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.link(frame)&lt;br /&gt;
	local args = getArgs(frame,{parentFirst=true})&lt;br /&gt;
	return p._link(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p[&amp;#039;&amp;#039;] = function (frame) return p._main(frame.args) end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</description>
			<pubDate>Wed, 09 Sep 2026 09:48:25 GMT</pubDate>
			<dc:creator>Oxitain</dc:creator>
			<comments>https://www.microindex.net/index.php/Module_talk:Icon</comments>
		</item>
		<item>
			<title>Module:Hatnote/styles.css</title>
			<link>https://www.microindex.net/index.php?title=Module:Hatnote/styles.css&amp;diff=406&amp;oldid=0</link>
			<guid isPermaLink="false">https://www.microindex.net/index.php?title=Module:Hatnote/styles.css&amp;diff=406&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php/User:Oxitain&quot; class=&quot;mw-userlink&quot; title=&quot;User:Oxitain&quot;&gt;&lt;bdi&gt;Oxitain&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Module:Hatnote/styles.css&quot; title=&quot;Module:Hatnote/styles.css&quot;&gt;Module:Hatnote/styles.css&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;/* {{pp|small=y}} */&lt;br /&gt;
.hatnote {&lt;br /&gt;
	font-style: italic;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Limit structure CSS to divs because of [[Module:Hatnote inline]] */&lt;br /&gt;
div.hatnote {&lt;br /&gt;
	/* @noflip */&lt;br /&gt;
	padding-left: 1.6em;&lt;br /&gt;
	margin-bottom: 0.5em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.hatnote i {&lt;br /&gt;
	font-style: normal;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Templatestyles causes an &amp;#039;empty&amp;#039; span between hatnotes.&lt;br /&gt;
 * See also [[phab:T200206]] for later */&lt;br /&gt;
.hatnote + .mw-empty-elt + .hatnote {&lt;br /&gt;
	margin-top: -0.5em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media print {&lt;br /&gt;
	body.ns-0 .hatnote {&lt;br /&gt;
		display: none !important;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;/div&gt;</description>
			<pubDate>Wed, 09 Sep 2026 09:48:25 GMT</pubDate>
			<dc:creator>Oxitain</dc:creator>
			<comments>https://www.microindex.net/index.php/Module_talk:Hatnote/styles.css</comments>
		</item>
		<item>
			<title>Template:Navbox</title>
			<link>https://www.microindex.net/index.php?title=Template:Navbox&amp;diff=404&amp;oldid=0</link>
			<guid isPermaLink="false">https://www.microindex.net/index.php?title=Template:Navbox&amp;diff=404&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php/User:Oxitain&quot; class=&quot;mw-userlink&quot; title=&quot;User:Oxitain&quot;&gt;&lt;bdi&gt;Oxitain&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Template:Navbox&quot; title=&quot;Template:Navbox&quot;&gt;Template:Navbox&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;includeonly&amp;gt;{{#invoke:Navbox|navbox}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Documentation}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</description>
			<pubDate>Wed, 09 Sep 2026 09:48:25 GMT</pubDate>
			<dc:creator>Oxitain</dc:creator>
			<comments>https://www.microindex.net/index.php/Template_talk:Navbox</comments>
		</item>
		<item>
			<title>Template:Icon</title>
			<link>https://www.microindex.net/index.php?title=Template:Icon&amp;diff=402&amp;oldid=0</link>
			<guid isPermaLink="false">https://www.microindex.net/index.php?title=Template:Icon&amp;diff=402&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php/User:Oxitain&quot; class=&quot;mw-userlink&quot; title=&quot;User:Oxitain&quot;&gt;&lt;bdi&gt;Oxitain&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Template:Icon&quot; title=&quot;Template:Icon&quot;&gt;Template:Icon&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{#invoke:Icon|main}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{documentation}}&lt;br /&gt;
&amp;lt;!-- Categories go on the /doc subpage, and interwikis go on Wikidata. --&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</description>
			<pubDate>Wed, 09 Sep 2026 09:48:25 GMT</pubDate>
			<dc:creator>Oxitain</dc:creator>
			<comments>https://www.microindex.net/index.php/Template_talk:Icon</comments>
		</item>
		<item>
			<title>Module:List</title>
			<link>https://www.microindex.net/index.php?title=Module:List&amp;diff=400&amp;oldid=0</link>
			<guid isPermaLink="false">https://www.microindex.net/index.php?title=Module:List&amp;diff=400&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php/User:Oxitain&quot; class=&quot;mw-userlink&quot; title=&quot;User:Oxitain&quot;&gt;&lt;bdi&gt;Oxitain&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Module:List&quot; title=&quot;Module:List&quot;&gt;Module:List&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local libUtil = require(&amp;#039;libraryUtil&amp;#039;)&lt;br /&gt;
local checkType = libUtil.checkType&lt;br /&gt;
local mTableTools = require(&amp;#039;Module:TableTools&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local listTypes = {&lt;br /&gt;
	[&amp;#039;bulleted&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;unbulleted&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;horizontal&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;ordered&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;horizontal_ordered&amp;#039;] = true&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function p.makeListData(listType, args)&lt;br /&gt;
	-- Constructs a data table to be passed to p.renderList.&lt;br /&gt;
	local data = {}&lt;br /&gt;
&lt;br /&gt;
	-- Classes and TemplateStyles&lt;br /&gt;
	data.classes = {}&lt;br /&gt;
	data.templatestyles = &amp;#039;&amp;#039;&lt;br /&gt;
	if listType == &amp;#039;horizontal&amp;#039; or listType == &amp;#039;horizontal_ordered&amp;#039; then&lt;br /&gt;
		table.insert(data.classes, &amp;#039;hlist&amp;#039;)&lt;br /&gt;
		data.templatestyles = mw.getCurrentFrame():extensionTag{&lt;br /&gt;
			name = &amp;#039;templatestyles&amp;#039;, args = { src = &amp;#039;Hlist/styles.css&amp;#039; }&lt;br /&gt;
		}&lt;br /&gt;
	elseif listType == &amp;#039;unbulleted&amp;#039; then&lt;br /&gt;
		table.insert(data.classes, &amp;#039;plainlist&amp;#039;)&lt;br /&gt;
		data.templatestyles = mw.getCurrentFrame():extensionTag{&lt;br /&gt;
			name = &amp;#039;templatestyles&amp;#039;, args = { src = &amp;#039;Plainlist/styles.css&amp;#039; }&lt;br /&gt;
		}&lt;br /&gt;
	end&lt;br /&gt;
	table.insert(data.classes, args.class)&lt;br /&gt;
&lt;br /&gt;
	-- Main div style&lt;br /&gt;
	data.style = args.style&lt;br /&gt;
&lt;br /&gt;
	-- Indent for horizontal lists&lt;br /&gt;
	if listType == &amp;#039;horizontal&amp;#039; or listType == &amp;#039;horizontal_ordered&amp;#039; then&lt;br /&gt;
		local indent = tonumber(args.indent)&lt;br /&gt;
		indent = indent and indent * 1.6 or 0&lt;br /&gt;
		if indent &amp;gt; 0 then&lt;br /&gt;
			data.marginLeft = indent .. &amp;#039;em&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- List style types for ordered lists&lt;br /&gt;
	-- This could be &amp;quot;1, 2, 3&amp;quot;, &amp;quot;a, b, c&amp;quot;, or a number of others. The list style&lt;br /&gt;
	-- type is either set by the &amp;quot;type&amp;quot; attribute or the &amp;quot;list-style-type&amp;quot; CSS&lt;br /&gt;
	-- property.&lt;br /&gt;
	if listType == &amp;#039;ordered&amp;#039; or listType == &amp;#039;horizontal_ordered&amp;#039; then &lt;br /&gt;
		data.listStyleType = args.list_style_type or args[&amp;#039;list-style-type&amp;#039;]&lt;br /&gt;
		data.type = args[&amp;#039;type&amp;#039;]&lt;br /&gt;
&lt;br /&gt;
		-- Detect invalid type attributes and attempt to convert them to&lt;br /&gt;
		-- list-style-type CSS properties.&lt;br /&gt;
		if data.type &lt;br /&gt;
			and not data.listStyleType&lt;br /&gt;
			and not tostring(data.type):find(&amp;#039;^%s*[1AaIi]%s*$&amp;#039;)&lt;br /&gt;
		then&lt;br /&gt;
			data.listStyleType = data.type&lt;br /&gt;
			data.type = nil&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- List tag type&lt;br /&gt;
	if listType == &amp;#039;ordered&amp;#039; or listType == &amp;#039;horizontal_ordered&amp;#039; then&lt;br /&gt;
		data.listTag = &amp;#039;ol&amp;#039;&lt;br /&gt;
	else&lt;br /&gt;
		data.listTag = &amp;#039;ul&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Start number for ordered lists&lt;br /&gt;
	data.start = args.start&lt;br /&gt;
	if listType == &amp;#039;horizontal_ordered&amp;#039; then&lt;br /&gt;
		-- Apply fix to get start numbers working with horizontal ordered lists.&lt;br /&gt;
		local startNum = tonumber(data.start)&lt;br /&gt;
		if startNum then&lt;br /&gt;
			data.counterReset = &amp;#039;listitem &amp;#039; .. tostring(startNum - 1)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- List style&lt;br /&gt;
	 -- ul_style and ol_style are included for backwards compatibility. No&lt;br /&gt;
	 -- distinction is made for ordered or unordered lists.&lt;br /&gt;
	data.listStyle = args.list_style&lt;br /&gt;
&lt;br /&gt;
	-- List items&lt;br /&gt;
	-- li_style is included for backwards compatibility. item_style was included&lt;br /&gt;
	-- to be easier to understand for non-coders.&lt;br /&gt;
	data.itemStyle = args.item_style or args.li_style&lt;br /&gt;
	data.items = {}&lt;br /&gt;
	for _, num in ipairs(mTableTools.numKeys(args)) do&lt;br /&gt;
		local item = {}&lt;br /&gt;
		item.content = args[num]&lt;br /&gt;
		item.style = args[&amp;#039;item&amp;#039; .. tostring(num) .. &amp;#039;_style&amp;#039;]&lt;br /&gt;
			or args[&amp;#039;item_style&amp;#039; .. tostring(num)]&lt;br /&gt;
		item.value = args[&amp;#039;item&amp;#039; .. tostring(num) .. &amp;#039;_value&amp;#039;]&lt;br /&gt;
			or args[&amp;#039;item_value&amp;#039; .. tostring(num)]&lt;br /&gt;
		table.insert(data.items, item)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return data&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.renderList(data)&lt;br /&gt;
	-- Renders the list HTML.&lt;br /&gt;
	&lt;br /&gt;
	-- Return the blank string if there are no list items.&lt;br /&gt;
	if type(data.items) ~= &amp;#039;table&amp;#039; or #data.items &amp;lt; 1 then&lt;br /&gt;
		return &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Render the main div tag.&lt;br /&gt;
	local root = mw.html.create(&amp;#039;div&amp;#039;)&lt;br /&gt;
	for _, class in ipairs(data.classes or {}) do&lt;br /&gt;
		root:addClass(class)&lt;br /&gt;
	end&lt;br /&gt;
	root:css{[&amp;#039;margin-left&amp;#039;] = data.marginLeft}&lt;br /&gt;
	if data.style then&lt;br /&gt;
		root:cssText(data.style)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Render the list tag.&lt;br /&gt;
	local list = root:tag(data.listTag or &amp;#039;ul&amp;#039;)&lt;br /&gt;
	list&lt;br /&gt;
		:attr{start = data.start, type = data.type}&lt;br /&gt;
		:css{&lt;br /&gt;
			[&amp;#039;counter-reset&amp;#039;] = data.counterReset,&lt;br /&gt;
			[&amp;#039;list-style-type&amp;#039;] = data.listStyleType&lt;br /&gt;
		}&lt;br /&gt;
	if data.listStyle then&lt;br /&gt;
		list:cssText(data.listStyle)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Render the list items&lt;br /&gt;
	for _, t in ipairs(data.items or {}) do&lt;br /&gt;
		local item = list:tag(&amp;#039;li&amp;#039;)&lt;br /&gt;
		if data.itemStyle then&lt;br /&gt;
			item:cssText(data.itemStyle)&lt;br /&gt;
		end&lt;br /&gt;
		if t.style then&lt;br /&gt;
			item:cssText(t.style)&lt;br /&gt;
		end&lt;br /&gt;
		item&lt;br /&gt;
			:attr{value = t.value}&lt;br /&gt;
			:wikitext(t.content)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return data.templatestyles .. tostring(root)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.makeList(listType, args)&lt;br /&gt;
	if not listType or not listTypes[listType] then&lt;br /&gt;
		error(string.format(&lt;br /&gt;
			&amp;quot;bad argument #1 to &amp;#039;makeList&amp;#039; (&amp;#039;%s&amp;#039; is not a valid list type)&amp;quot;,&lt;br /&gt;
			tostring(listType)&lt;br /&gt;
		), 2)&lt;br /&gt;
	end&lt;br /&gt;
	checkType(&amp;#039;makeList&amp;#039;, 2, args, &amp;#039;table&amp;#039;)&lt;br /&gt;
	local data = p.makeListData(listType, args)&lt;br /&gt;
	local list = p.renderList(data)&lt;br /&gt;
	return list&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
for listType in pairs(listTypes) do&lt;br /&gt;
	p[listType] = function (frame)&lt;br /&gt;
		local mArguments = require(&amp;#039;Module:Arguments&amp;#039;)&lt;br /&gt;
		local origArgs = mArguments.getArgs(frame, {&lt;br /&gt;
			frameOnly = ((frame and frame.args and frame.args.frameonly or &amp;#039;&amp;#039;) ~= &amp;#039;&amp;#039;),&lt;br /&gt;
			valueFunc = function (key, value)&lt;br /&gt;
			if not value or not mw.ustring.find(value, &amp;#039;%S&amp;#039;) then return nil end&lt;br /&gt;
			if mw.ustring.find(value, &amp;#039;^%s*[%*#;:]&amp;#039;) then&lt;br /&gt;
				return value&lt;br /&gt;
			else&lt;br /&gt;
				return value:match(&amp;#039;^%s*(.-)%s*$&amp;#039;)&lt;br /&gt;
			end&lt;br /&gt;
			return nil&lt;br /&gt;
		end&lt;br /&gt;
		})&lt;br /&gt;
		-- Copy all the arguments to a new table, for faster indexing.&lt;br /&gt;
		local args = {}&lt;br /&gt;
		for k, v in pairs(origArgs) do&lt;br /&gt;
			args[k] = v&lt;br /&gt;
		end&lt;br /&gt;
		return p.makeList(listType, args)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</description>
			<pubDate>Wed, 09 Sep 2026 09:48:25 GMT</pubDate>
			<dc:creator>Oxitain</dc:creator>
			<comments>https://www.microindex.net/index.php/Module_talk:List</comments>
		</item>
		<item>
			<title>Template:See also</title>
			<link>https://www.microindex.net/index.php?title=Template:See_also&amp;diff=398&amp;oldid=0</link>
			<guid isPermaLink="false">https://www.microindex.net/index.php?title=Template:See_also&amp;diff=398&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php/User:Oxitain&quot; class=&quot;mw-userlink&quot; title=&quot;User:Oxitain&quot;&gt;&lt;bdi&gt;Oxitain&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Template:See_also&quot; title=&quot;Template:See also&quot;&gt;Template:See also&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;includeonly&amp;gt;{{#invoke:Labelled list hatnote|labelledList|See also|ifexists={{{ifexists|true}}}}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{documentation}}&lt;br /&gt;
&amp;lt;!-- Categories go on the /doc subpage, and interwikis go on Wikidata. --&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</description>
			<pubDate>Wed, 09 Sep 2026 09:48:25 GMT</pubDate>
			<dc:creator>Oxitain</dc:creator>
			<comments>https://www.microindex.net/index.php/Template_talk:See_also</comments>
		</item>
		<item>
			<title>File:Flag of Discord logo.svg</title>
			<link>https://www.microindex.net/index.php?title=File:Flag_of_Discord_logo.svg&amp;diff=396&amp;oldid=0</link>
			<guid isPermaLink="false">https://www.microindex.net/index.php?title=File:Flag_of_Discord_logo.svg&amp;diff=396&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php/User:Oxitain&quot; class=&quot;mw-userlink&quot; title=&quot;User:Oxitain&quot;&gt;&lt;bdi&gt;Oxitain&lt;/bdi&gt;&lt;/a&gt; uploaded &lt;a href=&quot;/index.php/File:Flag_of_Discord_logo.svg&quot; title=&quot;File:Flag of Discord logo.svg&quot;&gt;File:Flag of Discord logo.svg&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;/div&gt;</description>
			<pubDate>Mon, 07 Sep 2026 23:01:14 GMT</pubDate>
			<dc:creator>Oxitain</dc:creator>
			<comments>https://www.microindex.net/index.php/File_talk:Flag_of_Discord_logo.svg</comments>
		</item>
		<item>
			<title>Main Page</title>
			<link>https://www.microindex.net/index.php?title=Main_Page&amp;diff=395&amp;oldid=392</link>
			<guid isPermaLink="false">https://www.microindex.net/index.php?title=Main_Page&amp;diff=395&amp;oldid=392</guid>
			<description>&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw-interface=&quot;&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;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 19:00, 7 September 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l52&quot;&gt;Line 52:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 52:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|&amp;lt;div&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|&amp;lt;div&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*{{flagicon image|&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Applications-internet.svg&lt;/del&gt;|border=no|size=15px}} [&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;http&lt;/del&gt;://&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;hasanistan-gov.blogspot&lt;/del&gt;.&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;com&lt;/del&gt;/ Official &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Website&lt;/del&gt;]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*{{flagicon image|&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Discord_logo&lt;/ins&gt;|border=no|size=15px}} [&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;https&lt;/ins&gt;://&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;discord&lt;/ins&gt;.&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;gg&lt;/ins&gt;/&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;6R5Xpcb2uf &lt;/ins&gt;Official &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Discord&lt;/ins&gt;]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/div&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/div&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;__NOTOC__ __NOEDITSECTION__&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;__NOTOC__ __NOEDITSECTION__&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</description>
			<pubDate>Mon, 07 Sep 2026 23:00:56 GMT</pubDate>
			<dc:creator>Oxitain</dc:creator>
			<comments>https://www.microindex.net/index.php/Talk:Main_Page</comments>
		</item>
</channel></rss>