<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3AStorm_categories%2Fdemo</id>
	<title>Module:Storm categories/demo - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3AStorm_categories%2Fdemo"/>
	<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Storm_categories/demo&amp;action=history"/>
	<updated>2026-04-08T23:15:31Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://stockhub.co/index.php?title=Module:Storm_categories/demo&amp;diff=147041&amp;oldid=prev</id>
		<title>imported&gt;Chlod: rm extra a</title>
		<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Storm_categories/demo&amp;diff=147041&amp;oldid=prev"/>
		<updated>2022-03-20T01:44:18Z</updated>

		<summary type="html">&lt;p&gt;rm extra a&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 handles demonstration and list of possible values for all storm&lt;br /&gt;
-- category templates! Please test this module on [[Module:Storm categories/demo/doc]]&lt;br /&gt;
-- before publishing to avoid errros. Thank you!&lt;br /&gt;
--&lt;br /&gt;
local colorRatio = require(&amp;quot;Module:Color contrast&amp;quot;)._ratio&lt;br /&gt;
local TableTools = require(&amp;quot;Module:TableTools&amp;quot;)&lt;br /&gt;
local stormcats = require(&amp;quot;Module:Storm categories&amp;quot;)&lt;br /&gt;
local cats = require(&amp;quot;Module:Storm categories/categories&amp;quot;).cats&lt;br /&gt;
local colors = require(&amp;quot;Module:Storm categories/colors&amp;quot;).colors&lt;br /&gt;
local icons = require(&amp;quot;Module:Storm categories/icons&amp;quot;).icons&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local customKeys = {}&lt;br /&gt;
for k, v in pairs(colors) do&lt;br /&gt;
	table.insert(customKeys, k)&lt;br /&gt;
end&lt;br /&gt;
for k, v in pairs(icons) do&lt;br /&gt;
	table.insert(customKeys, k)&lt;br /&gt;
end&lt;br /&gt;
TableTools.removeDuplicates(customKeys)&lt;br /&gt;
&lt;br /&gt;
function tableEmpty(_table)&lt;br /&gt;
	for k, v in pairs(_table) do&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
	return true&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Generates and renderds the demo table.&lt;br /&gt;
-- @param frame The Scribunto frame.&lt;br /&gt;
function p.demo(frame)&lt;br /&gt;
	local plain = (frame.args[&amp;quot;plain&amp;quot;] or frame:getParent().args[&amp;quot;plain&amp;quot;] or &amp;quot;&amp;quot;) ~= &amp;quot;&amp;quot;&lt;br /&gt;
	local verbose = (frame.args[&amp;quot;verbose&amp;quot;] or frame:getParent().args[&amp;quot;verbose&amp;quot;] or &amp;quot;&amp;quot;) ~= &amp;quot;&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	local legend = setmetatable({}, { refgroupname = &amp;quot;&amp;quot; })&lt;br /&gt;
	local errors = setmetatable({}, { refgroupname = &amp;quot;E&amp;quot; })&lt;br /&gt;
	local warnings = setmetatable({}, { refgroupname = &amp;quot;W&amp;quot; })&lt;br /&gt;
	&lt;br /&gt;
	--- Builds the entire reflist&lt;br /&gt;
	-- @param _group The group to build for. Uses `legend` by default.&lt;br /&gt;
	function buildReflist(_group)&lt;br /&gt;
		group = _group or legend&lt;br /&gt;
		return frame:expandTemplate{ title = &amp;#039;reflist&amp;#039;, args = {&lt;br /&gt;
			group = getmetatable(group)[&amp;quot;refgroupname&amp;quot;]&lt;br /&gt;
		} }&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	--- Returns a single &amp;lt;ref&amp;gt; tag containing the legend provided and&lt;br /&gt;
	-- attaches the note definition to the list of notes.&lt;br /&gt;
	-- @param details The details of the legend.&lt;br /&gt;
	-- @param _group The group to write in. Uses `legend` by default.&lt;br /&gt;
	function createLegend(details, _group)&lt;br /&gt;
		hash = string.sub(mw.hash.hashValue(&amp;quot;md5&amp;quot;, details), 0, 8)&lt;br /&gt;
		group = _group or legend&lt;br /&gt;
		if group[hash] == nil then&lt;br /&gt;
			group[hash] = plain and &amp;quot;&amp;quot; or frame:extensionTag{ &lt;br /&gt;
				-- &amp;lt;ref name=&amp;quot;hash&amp;quot;&amp;gt;details&amp;lt;/ref&amp;gt;&lt;br /&gt;
				name = &amp;#039;ref&amp;#039;,&lt;br /&gt;
				content = mw.ustring.gsub(details, &amp;quot;%[%[File:([^%|]+)[^%]]*%]%]&amp;quot;, &amp;quot;[[:File:%1]]&amp;quot;),&lt;br /&gt;
				args = { &lt;br /&gt;
					name = hash, &lt;br /&gt;
					group = getmetatable(group)[&amp;quot;refgroupname&amp;quot;]&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		-- &amp;lt;ref name=&amp;quot;hash&amp;quot;/&amp;gt;&lt;br /&gt;
		return plain and &amp;quot;&amp;quot; or frame:extensionTag{ name = &amp;#039;ref&amp;#039;, args = { &lt;br /&gt;
			name = hash,&lt;br /&gt;
			group = getmetatable(group)[&amp;quot;refgroupname&amp;quot;]&lt;br /&gt;
		} }&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	--- Checks for color contrast issues and tags accordingly.&lt;br /&gt;
	-- Returns the refernce tag, so this should be used in conjunction with an&lt;br /&gt;
	-- HTML node&amp;#039;s :wikitext function.&lt;br /&gt;
	function contrastCheck(color)&lt;br /&gt;
		local catColorBlackRatio = colorRatio({ &amp;quot;#&amp;quot; .. color, &amp;quot;black&amp;quot; })&lt;br /&gt;
		local catColorLinkRatio = colorRatio({ &amp;quot;#&amp;quot; .. color, &amp;quot;#0645ad&amp;quot; })&lt;br /&gt;
		local catColorVisitedLinkRatio = colorRatio({ &amp;quot;#&amp;quot; .. color, &amp;quot;#0b0080&amp;quot; })&lt;br /&gt;
		&lt;br /&gt;
		local finalWikitext = &amp;quot;&amp;quot;&lt;br /&gt;
		if catColorBlackRatio == &amp;quot;?&amp;quot; or catColorLinkRatio == &amp;quot;?&amp;quot; or catColorVisitedLinkRatio == &amp;quot;?&amp;quot; then&lt;br /&gt;
			finalWikitext = finalWikitext ..&lt;br /&gt;
				createLegend(&amp;quot;This color must be a hexadecimal color.&amp;quot;, errors)&lt;br /&gt;
		else&lt;br /&gt;
			if catColorBlackRatio &amp;lt; 4.5 then&lt;br /&gt;
				finalWikitext = finalWikitext ..&lt;br /&gt;
					createLegend(&amp;quot;This color has [[MOS:COLOR|contrast issues]] with black (not WCAG 2.0 AA-compatible). It will be unusable on all infoboxes and storm season summaries.&amp;quot;, errors)&lt;br /&gt;
			end&lt;br /&gt;
			if catColorLinkRatio &amp;lt; 4.5 then&lt;br /&gt;
				finalWikitext = finalWikitext ..&lt;br /&gt;
					createLegend(&amp;quot;This color has [[MOS:COLOR|contrast issues]] with links (not WCAG 2.0 AA-compatible). It should not be used in conjunction with a link.&amp;quot;, warnings)&lt;br /&gt;
			end&lt;br /&gt;
			if catColorVisitedLinkRatio &amp;lt; 4.5 then&lt;br /&gt;
				finalWikitext = finalWikitext ..&lt;br /&gt;
					createLegend(&amp;quot;This color has [[MOS:COLOR|contrast issues]] with visited links (not WCAG 2.0 AA-compatible with #0b0080). It should not be used in conjunction with a visited link.&amp;quot;, warnings)&lt;br /&gt;
			end&lt;br /&gt;
			if actualCat == &amp;quot;c0c0c0&amp;quot; and cat[sortkey] ~= 0 then&lt;br /&gt;
				finalWikitext = finalWikitext ..&lt;br /&gt;
					createLegend(&amp;quot;This category is using a color reserved specifically for the \&amp;quot;unknown\&amp;quot; category.&amp;quot;, warnings)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		return finalWikitext&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	function colorInfo(color, verbose, extra)&lt;br /&gt;
		local catColorBlackRatio = colorRatio({ &amp;quot;#&amp;quot; .. color, &amp;quot;black&amp;quot; })&lt;br /&gt;
		local catColorLinkRatio = colorRatio({ &amp;quot;#&amp;quot; .. color, &amp;quot;#0645ad&amp;quot; })&lt;br /&gt;
		local catColorVisitedLinkRatio = colorRatio({ &amp;quot;#&amp;quot; .. color, &amp;quot;#0b0080&amp;quot; })&lt;br /&gt;
		&lt;br /&gt;
		local nc = tostring(mw.html.create(&amp;quot;abbr&amp;quot;)&lt;br /&gt;
			:wikitext(&amp;quot;NC&amp;quot;)&lt;br /&gt;
			:attr(&amp;quot;title&amp;quot;, &amp;quot;Does not satisfy the minimum WCAG 2.1 compliance level for color contrast (AA)&amp;quot;)&lt;br /&gt;
		);&lt;br /&gt;
		local aa = tostring(mw.html.create(&amp;quot;abbr&amp;quot;)&lt;br /&gt;
			:wikitext(&amp;quot;AA&amp;quot;)&lt;br /&gt;
			:attr(&amp;quot;title&amp;quot;, &amp;quot;WCAG 2.1 Level AA: Acceptable compliance&amp;quot;)&lt;br /&gt;
		);&lt;br /&gt;
		local aaa = tostring(mw.html.create(&amp;quot;abbr&amp;quot;)&lt;br /&gt;
			:wikitext(&amp;quot;AAA&amp;quot;)&lt;br /&gt;
			:attr(&amp;quot;title&amp;quot;, &amp;quot;WCAG 2.1 Level AAA: Optimal compliance&amp;quot;)&lt;br /&gt;
		);&lt;br /&gt;
		&lt;br /&gt;
		function contrastLevel(contrast)&lt;br /&gt;
			return contrast &amp;gt;= 7 and aaa or (contrast &amp;gt;= 4.5 and aa or nc)&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		return mw.html.create(&amp;quot;td&amp;quot;)&lt;br /&gt;
			:attr(&amp;quot;data-sort-value&amp;quot;, math.min(catColorBlackRatio))&lt;br /&gt;
			:wikitext(&lt;br /&gt;
				&amp;quot;#&amp;quot; .. color .. (extra or &amp;quot;&amp;quot;) .. contrastCheck(color) .. (verbose and (&amp;quot;&amp;lt;br/&amp;gt;&amp;quot;&lt;br /&gt;
				.. tostring(&lt;br /&gt;
					mw.html.create(&amp;quot;abbr&amp;quot;)&lt;br /&gt;
						:attr(&amp;quot;title&amp;quot;, &amp;quot;Contrast to black&amp;quot;)&lt;br /&gt;
						:wikitext(&amp;quot;CTB&amp;quot;)&lt;br /&gt;
				) .. &amp;quot;: &amp;quot; .. string.format(&amp;quot;%.2f&amp;quot;, catColorBlackRatio) .. &amp;quot; (&amp;quot; .. contrastLevel(catColorBlackRatio) .. &amp;quot;)&amp;lt;br/&amp;gt;&amp;quot;&lt;br /&gt;
				.. tostring(&lt;br /&gt;
					mw.html.create(&amp;quot;abbr&amp;quot;)&lt;br /&gt;
						:attr(&amp;quot;title&amp;quot;, &amp;quot;Contrast to links&amp;quot;)&lt;br /&gt;
						:wikitext(&amp;quot;CTL&amp;quot;)&lt;br /&gt;
				) .. &amp;quot;: &amp;quot; .. string.format(&amp;quot;%.2f&amp;quot;, catColorLinkRatio) .. &amp;quot; (&amp;quot; .. contrastLevel(catColorLinkRatio) .. &amp;quot;)&amp;lt;br/&amp;gt;&amp;quot;&lt;br /&gt;
				.. tostring(&lt;br /&gt;
					mw.html.create(&amp;quot;abbr&amp;quot;)&lt;br /&gt;
						:attr(&amp;quot;title&amp;quot;, &amp;quot;Contrast to visited links&amp;quot;)&lt;br /&gt;
						:wikitext(&amp;quot;CTVL&amp;quot;)&lt;br /&gt;
				) .. &amp;quot;: &amp;quot; .. string.format(&amp;quot;%.2f&amp;quot;, catColorVisitedLinkRatio) .. &amp;quot; (&amp;quot; .. contrastLevel(catColorVisitedLinkRatio) .. &amp;quot;)&amp;quot;) or &amp;quot;&amp;quot;)&lt;br /&gt;
			)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local categoryTable = mw.html.create(&amp;quot;table&amp;quot;)&lt;br /&gt;
		:addClass(&amp;quot;wikitable&amp;quot;)&lt;br /&gt;
		:addClass(&amp;quot;sortable&amp;quot;)&lt;br /&gt;
		:attr(&amp;quot;style&amp;quot;, &amp;quot;width: 100%&amp;quot;)&lt;br /&gt;
		&lt;br /&gt;
	categoryTable&lt;br /&gt;
		:node(&lt;br /&gt;
			mw.html.create(&amp;quot;tr&amp;quot;)&lt;br /&gt;
				:node(mw.html.create(&amp;quot;th&amp;quot;):wikitext(&amp;quot;Icon&amp;quot;)&lt;br /&gt;
					:attr(&amp;quot;class&amp;quot;, &amp;quot;unsortable&amp;quot;)&lt;br /&gt;
					:attr(&amp;quot;rowspan&amp;quot;, &amp;quot;2&amp;quot;)&lt;br /&gt;
					:css(&amp;quot;width&amp;quot;, &amp;quot;0&amp;quot;))&lt;br /&gt;
				:node(mw.html.create(&amp;quot;th&amp;quot;):wikitext(&amp;quot;ID&amp;quot;)&lt;br /&gt;
					:attr(&amp;quot;rowspan&amp;quot;, &amp;quot;2&amp;quot;))&lt;br /&gt;
				:node(mw.html.create(&amp;quot;th&amp;quot;):wikitext(&amp;quot;Name&amp;quot;)&lt;br /&gt;
					:attr(&amp;quot;colspan&amp;quot;, &amp;quot;2&amp;quot;))&lt;br /&gt;
				:node(mw.html.create(&amp;quot;th&amp;quot;):wikitext(&amp;quot;Color&amp;quot;)&lt;br /&gt;
					:attr(&amp;quot;rowspan&amp;quot;, &amp;quot;2&amp;quot;)&lt;br /&gt;
					:attr(&amp;quot;colspan&amp;quot;, &amp;quot;2&amp;quot;))&lt;br /&gt;
				:node(mw.html.create(&amp;quot;th&amp;quot;):wikitext(&amp;quot;Sortkey&amp;quot;)&lt;br /&gt;
					:attr(&amp;quot;colspan&amp;quot;, &amp;quot;2&amp;quot;))&lt;br /&gt;
		):node(&lt;br /&gt;
			mw.html.create(&amp;quot;tr&amp;quot;)&lt;br /&gt;
				:node(mw.html.create(&amp;quot;th&amp;quot;):wikitext(&amp;quot;Basin&amp;quot;))&lt;br /&gt;
				:node(mw.html.create(&amp;quot;th&amp;quot;):wikitext(&amp;quot;Name&amp;quot;))&lt;br /&gt;
				:node(mw.html.create(&amp;quot;th&amp;quot;):wikitext(&amp;quot;Basin&amp;quot;))&lt;br /&gt;
				:node(mw.html.create(&amp;quot;th&amp;quot;):wikitext(&amp;quot;Sortkey&amp;quot;)&lt;br /&gt;
					:attr(&amp;quot;data-sort-type&amp;quot;, &amp;quot;number&amp;quot;))&lt;br /&gt;
		)&lt;br /&gt;
	&lt;br /&gt;
	for name, cat in TableTools.sortedPairs(cats) do&lt;br /&gt;
		local rows = { mw.html.create(&amp;quot;tr&amp;quot;) }&lt;br /&gt;
		local row = rows[1]&lt;br /&gt;
		&lt;br /&gt;
		local actualIcon = stormcats._icon(name)&lt;br /&gt;
		local icon = mw.html.create(&amp;quot;td&amp;quot;)&lt;br /&gt;
			:wikitext(actualIcon)&lt;br /&gt;
		if cat[&amp;quot;icon&amp;quot;] ~= nil and actualIcon ~= cat[&amp;quot;icon&amp;quot;] then&lt;br /&gt;
			icon:wikitext(&lt;br /&gt;
				createLegend(&amp;quot;Overriden from original icon (&amp;quot; .. cat[&amp;quot;icon&amp;quot;] .. &amp;quot;)&amp;quot;)&lt;br /&gt;
			)&lt;br /&gt;
		end&lt;br /&gt;
			&lt;br /&gt;
		local id = mw.html.create(&amp;quot;td&amp;quot;)&lt;br /&gt;
			:wikitext(name)&lt;br /&gt;
		local actualColor = stormcats._color(name)&lt;br /&gt;
		local colorPreview = mw.html.create(&amp;quot;td&amp;quot;)&lt;br /&gt;
			:attr(&amp;quot;style&amp;quot;, &amp;quot;background-color: #&amp;quot; .. actualColor .. &amp;quot;; padding: 0; width: 1.8em&amp;quot;)&lt;br /&gt;
		local color = colorInfo(&lt;br /&gt;
			actualColor,&lt;br /&gt;
			verbose,&lt;br /&gt;
			actualColor ~= cat[&amp;quot;color&amp;quot;] and createLegend(&lt;br /&gt;
				&amp;quot;Overriden from original color ({{color box|#&amp;quot;&lt;br /&gt;
				.. cat[&amp;quot;color&amp;quot;]&lt;br /&gt;
				.. &amp;quot;}} #&amp;quot;&lt;br /&gt;
				.. cat[&amp;quot;color&amp;quot;]&lt;br /&gt;
				.. &amp;quot;)&amp;quot;&lt;br /&gt;
			) or &amp;quot;&amp;quot;&lt;br /&gt;
		):css(&amp;quot;width&amp;quot;, &amp;quot;0&amp;quot;):css(&amp;quot;white-space&amp;quot;, &amp;quot;nowrap&amp;quot;)&lt;br /&gt;
		&lt;br /&gt;
		local sortkeyCategory = mw.html.create(&amp;quot;td&amp;quot;)&lt;br /&gt;
			:attr(&amp;quot;data-sort-value&amp;quot;, cat[&amp;quot;sortkey&amp;quot;])&lt;br /&gt;
		local sortkey = mw.html.create(&amp;quot;td&amp;quot;)&lt;br /&gt;
			:attr(&amp;quot;data-sort-value&amp;quot;, cat[&amp;quot;sortkey&amp;quot;])&lt;br /&gt;
			:wikitext(cat[&amp;quot;sortkey&amp;quot;])&lt;br /&gt;
			&lt;br /&gt;
		if cat[&amp;quot;sortkey&amp;quot;] &amp;lt; 0 then&lt;br /&gt;
			sortkeyCategory:wikitext(&amp;quot;Invalid&amp;quot;)&lt;br /&gt;
		elseif cat[&amp;quot;sortkey&amp;quot;] &amp;lt; 20000 then&lt;br /&gt;
			sortkeyCategory:wikitext(&amp;quot;Global&amp;quot;)&lt;br /&gt;
		elseif cat[&amp;quot;sortkey&amp;quot;] &amp;lt; 30000 then&lt;br /&gt;
			sortkeyCategory:wikitext(&amp;quot;Historical&amp;quot;)&lt;br /&gt;
		elseif cat[&amp;quot;sortkey&amp;quot;] &amp;lt; 40000 then&lt;br /&gt;
			sortkeyCategory:wikitext(&amp;quot;SWIO&amp;quot;)&lt;br /&gt;
		elseif cat[&amp;quot;sortkey&amp;quot;] &amp;lt; 50000 then&lt;br /&gt;
			sortkeyCategory:wikitext(&amp;quot;Aus/Fiji&amp;quot;)&lt;br /&gt;
		elseif cat[&amp;quot;sortkey&amp;quot;] &amp;lt; 60000 then&lt;br /&gt;
			sortkeyCategory:wikitext(&amp;quot;NIO&amp;quot;)&lt;br /&gt;
		elseif cat[&amp;quot;sortkey&amp;quot;] &amp;lt; 80000 then&lt;br /&gt;
			sortkeyCategory:wikitext(&amp;quot;WPAC&amp;quot;)&lt;br /&gt;
		elseif cat[&amp;quot;sortkey&amp;quot;] &amp;lt; 90000 then&lt;br /&gt;
			sortkeyCategory:wikitext(&amp;quot;Atl/EPac/SAtl&amp;quot;)&lt;br /&gt;
		elseif cat[&amp;quot;sortkey&amp;quot;] &amp;lt; 100000 then&lt;br /&gt;
			sortkeyCategory:attr(&amp;quot;style&amp;quot;, &amp;quot;color: gray&amp;quot;)&lt;br /&gt;
			sortkeyCategory:wikitext(&amp;quot;&amp;#039;&amp;#039;Global&amp;#039;&amp;#039;&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			sortkeyCategory:wikitext(&amp;quot;Invalid&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if type(cat[&amp;quot;name&amp;quot;]) == &amp;quot;string&amp;quot; then&lt;br /&gt;
			local name = mw.html.create(&amp;quot;td&amp;quot;)&lt;br /&gt;
				:attr(&amp;quot;colspan&amp;quot;, &amp;quot;2&amp;quot;)&lt;br /&gt;
				:wikitext(cat[&amp;quot;name&amp;quot;])&lt;br /&gt;
			row:node(icon)&lt;br /&gt;
			row:node(id)&lt;br /&gt;
			row:node(name)&lt;br /&gt;
		else&lt;br /&gt;
			local nameTableLength = TableTools.size(cat[&amp;quot;name&amp;quot;])&lt;br /&gt;
			icon:attr(&amp;quot;rowspan&amp;quot;, nameTableLength)&lt;br /&gt;
			id:attr(&amp;quot;rowspan&amp;quot;, nameTableLength)&lt;br /&gt;
			colorPreview:attr(&amp;quot;rowspan&amp;quot;, nameTableLength)&lt;br /&gt;
			color:attr(&amp;quot;rowspan&amp;quot;, nameTableLength)&lt;br /&gt;
			sortkeyCategory:attr(&amp;quot;rowspan&amp;quot;, nameTableLength)&lt;br /&gt;
			sortkey:attr(&amp;quot;rowspan&amp;quot;, nameTableLength)&lt;br /&gt;
			&lt;br /&gt;
			row:node(icon)&lt;br /&gt;
			row:node(id)&lt;br /&gt;
			local firstDone = false&lt;br /&gt;
			for key, basinName in TableTools.sortedPairs(cat[&amp;quot;name&amp;quot;]) do&lt;br /&gt;
				if firstDone then&lt;br /&gt;
					local nameRow = mw.html.create(&amp;quot;tr&amp;quot;)&lt;br /&gt;
					&lt;br /&gt;
					nameRow&lt;br /&gt;
						:node(mw.html.create(&amp;quot;td&amp;quot;):wikitext(key))&lt;br /&gt;
						:node(mw.html.create(&amp;quot;td&amp;quot;):wikitext(basinName))&lt;br /&gt;
						&lt;br /&gt;
					table.insert(rows, nameRow)	&lt;br /&gt;
				else&lt;br /&gt;
					firstDone = true&lt;br /&gt;
					row&lt;br /&gt;
						:node(mw.html.create(&amp;quot;td&amp;quot;):wikitext(key))&lt;br /&gt;
						:node(mw.html.create(&amp;quot;td&amp;quot;):wikitext(basinName))&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		row:node(colorPreview)&lt;br /&gt;
		row:node(color)&lt;br /&gt;
		row:node(sortkeyCategory)&lt;br /&gt;
		row:node(sortkey)&lt;br /&gt;
		&lt;br /&gt;
		for _, _row in TableTools.sortedPairs(rows) do&lt;br /&gt;
			categoryTable:node(_row)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	for name, _ in TableTools.sortedPairs(TableTools.listToSet(customKeys)) do&lt;br /&gt;
		if cats[name] == nil then&lt;br /&gt;
			local row = mw.html.create(&amp;quot;tr&amp;quot;)&lt;br /&gt;
			&lt;br /&gt;
			local icon = stormcats._icon(name, true)&lt;br /&gt;
			row&lt;br /&gt;
				:node(mw.html.create(&amp;quot;td&amp;quot;)&lt;br /&gt;
					:wikitext(&lt;br /&gt;
						icon ~= nil&lt;br /&gt;
						and icon&lt;br /&gt;
						or &amp;quot;&amp;#039;&amp;#039;&amp;lt;span style=\&amp;quot;color:gray\&amp;quot;&amp;gt;N/A&amp;lt;/span&amp;gt;&amp;#039;&amp;#039;&amp;quot;&lt;br /&gt;
					))&lt;br /&gt;
				:node(mw.html.create(&amp;quot;td&amp;quot;):wikitext(name))&lt;br /&gt;
			&lt;br /&gt;
			local color = stormcats._color(name, true)&lt;br /&gt;
			-- Add more conditions eventually&lt;br /&gt;
			if color ~= nil then&lt;br /&gt;
				row&lt;br /&gt;
					:node(mw.html.create(&amp;quot;td&amp;quot;)&lt;br /&gt;
						:attr(&amp;quot;colspan&amp;quot;, &amp;quot;2&amp;quot;)&lt;br /&gt;
						:wikitext(&amp;quot;&amp;#039;&amp;#039;&amp;lt;span style=\&amp;quot;color:gray\&amp;quot;&amp;gt;not available&amp;lt;/span&amp;gt;&amp;#039;&amp;#039;&amp;quot;))&lt;br /&gt;
					:node(mw.html.create(&amp;quot;td&amp;quot;)&lt;br /&gt;
						:attr(&amp;quot;style&amp;quot;, &amp;quot;background-color: #&amp;quot; .. color .. &amp;quot;; padding: 0; width: 1.8em&amp;quot;))&lt;br /&gt;
					:node(colorInfo(color, verbose))&lt;br /&gt;
						:css(&amp;quot;width&amp;quot;, &amp;quot;0&amp;quot;)&lt;br /&gt;
						:css(&amp;quot;white-space&amp;quot;, &amp;quot;nowrap&amp;quot;)&lt;br /&gt;
					:node(mw.html.create(&amp;quot;td&amp;quot;)&lt;br /&gt;
						:attr(&amp;quot;colspan&amp;quot;, &amp;quot;2&amp;quot;)&lt;br /&gt;
						:wikitext(&amp;quot;&amp;#039;&amp;#039;&amp;lt;span style=\&amp;quot;color:gray\&amp;quot;&amp;gt;not available&amp;lt;/span&amp;gt;&amp;#039;&amp;#039;&amp;quot;))&lt;br /&gt;
			else&lt;br /&gt;
				row&lt;br /&gt;
					:node(mw.html.create(&amp;quot;td&amp;quot;)&lt;br /&gt;
						:attr(&amp;quot;colspan&amp;quot;, &amp;quot;6&amp;quot;)&lt;br /&gt;
						:wikitext(&amp;quot;&amp;#039;&amp;#039;&amp;lt;span style=\&amp;quot;color:gray\&amp;quot;&amp;gt;not available&amp;lt;/span&amp;gt;&amp;#039;&amp;#039;&amp;quot;))&lt;br /&gt;
			end&lt;br /&gt;
			categoryTable:node(row)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	out = &amp;quot;&amp;quot;&lt;br /&gt;
	if not plain and not tableEmpty(errors) then&lt;br /&gt;
		out = out&lt;br /&gt;
			.. tostring(mw.html.create(&amp;quot;h4&amp;quot;):wikitext(&amp;quot;Error&amp;quot;))&lt;br /&gt;
		    .. tostring(mw.html.create(&amp;quot;p&amp;quot;):wikitext(&amp;quot;This table contains errors than need to be addressed immediately, as it may cause errors on a large amount of pages.&amp;quot;))&lt;br /&gt;
		    .. buildReflist(errors)&lt;br /&gt;
	end&lt;br /&gt;
	if not plain and not tableEmpty(legend) then&lt;br /&gt;
		out = out&lt;br /&gt;
			.. tostring(mw.html.create(&amp;quot;h4&amp;quot;):wikitext(&amp;quot;Legend&amp;quot;))&lt;br /&gt;
		    .. buildReflist(legend)&lt;br /&gt;
	end&lt;br /&gt;
	out = out .. tostring(categoryTable)&lt;br /&gt;
	if not plain and not tableEmpty(warnings) then&lt;br /&gt;
		out = out&lt;br /&gt;
			.. tostring(mw.html.create(&amp;quot;h4&amp;quot;):wikitext(&amp;quot;Warnings&amp;quot;))&lt;br /&gt;
		    .. tostring(mw.html.create(&amp;quot;p&amp;quot;):wikitext(&amp;quot;This table contains warnings than should be addressed. Please note that some warnings cannot be fully addressed without changes that would require consensus.&amp;quot;))&lt;br /&gt;
		    .. buildReflist(warnings)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return mw.text.trim(out)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>imported&gt;Chlod</name></author>
	</entry>
</feed>