<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://the-democratika.com/wiki/index.php?action=history&amp;feed=atom&amp;title=Module%3AStorm_categories</id>
	<title>Module:Storm categories - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://the-democratika.com/wiki/index.php?action=history&amp;feed=atom&amp;title=Module%3AStorm_categories"/>
	<link rel="alternate" type="text/html" href="https://the-democratika.com/wiki/index.php?title=Module:Storm_categories&amp;action=history"/>
	<updated>2026-04-04T20:50:55Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://the-democratika.com/wiki/index.php?title=Module:Storm_categories&amp;diff=7762&amp;oldid=prev</id>
		<title>&gt;Paine Ellsworth: per edit request on talk page - implement three significant changes per Module talk:Storm categories#Template-protected edit request on 23 April 2022</title>
		<link rel="alternate" type="text/html" href="https://the-democratika.com/wiki/index.php?title=Module:Storm_categories&amp;diff=7762&amp;oldid=prev"/>
		<updated>2023-04-24T15:35:45Z</updated>

		<summary type="html">&lt;p&gt;per edit request on talk page - implement three significant changes per &lt;a href=&quot;/wiki/index.php?title=Module_talk:Storm_categories&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Module talk:Storm categories (page does not exist)&quot;&gt;Module talk:Storm categories#Template-protected edit request on 23 April 2022&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local categoryData = require(&amp;quot;Module:Storm categories/categories&amp;quot;)&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 cats = categoryData.cats&lt;br /&gt;
local defaultCategory = categoryData.defaultCategory&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
function p.color(frame)&lt;br /&gt;
	return p._color(frame.args[1] or frame:getParent().args[1], false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.name(frame)&lt;br /&gt;
	return p._name(&lt;br /&gt;
		frame.args[1] or frame:getParent().args[1],&lt;br /&gt;
		frame.args[2] or frame:getParent().args[2],&lt;br /&gt;
		false&lt;br /&gt;
	)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.sortkey(frame)&lt;br /&gt;
	return p._sortkey(frame.args[1] or frame:getParent().args[1], false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.icon(frame)&lt;br /&gt;
	return p._icon(frame.args[1] or frame:getParent().args[1], false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.isEqual(frame)&lt;br /&gt;
	return p._isEqual(&lt;br /&gt;
		frame.args[1] or frame:getParent().args[1],&lt;br /&gt;
		frame.args[2] or frame:getParent().args[2]&lt;br /&gt;
	) and &amp;quot;yes&amp;quot; or &amp;quot;&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._normalizeId(category, fallback)&lt;br /&gt;
	-- Normalize if normalizable, fall back to default if not.&lt;br /&gt;
	return (category ~= nil and string.len(category) ~= 0) and&lt;br /&gt;
		string.gsub(string.lower(category), &amp;quot;[^%w]&amp;quot;, &amp;quot;&amp;quot;) or fallback&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._color(category, nilIfMissing)&lt;br /&gt;
	-- This looks confusing, but it&amp;#039;s actually nested ternaries (for nil checks)&lt;br /&gt;
	local color = p._normalizeId(category, defaultCategory)&lt;br /&gt;
		&lt;br /&gt;
	return colors[color] or ((cats[color] or (&lt;br /&gt;
		nilIfMissing&lt;br /&gt;
		and { color = nil }&lt;br /&gt;
		or cats[defaultCategory]&lt;br /&gt;
	)).color)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._name(category, basin, nilIfMissing)&lt;br /&gt;
	local name_def = (cats[&lt;br /&gt;
		p._normalizeId(category, defaultCategory)&lt;br /&gt;
	] or (nilIfMissing and { name = nil } or cats[defaultCategory])).name&lt;br /&gt;
	return type(name_def) == &amp;quot;table&amp;quot; and &lt;br /&gt;
		(&lt;br /&gt;
			name_def[string.lower(basin or &amp;quot;default&amp;quot;)]&lt;br /&gt;
			or name_def[&amp;quot;default&amp;quot;]&lt;br /&gt;
			or (not nilIfMissing and error(&amp;quot;No default name for basin-based category name.&amp;quot;) or nil)&lt;br /&gt;
		) &lt;br /&gt;
		or name_def&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._sortkey(category, nilIfMissing)&lt;br /&gt;
	-- This looks confusing, but it&amp;#039;s actually nested ternaries (for nil checks)&lt;br /&gt;
	return (cats[&lt;br /&gt;
		p._normalizeId(category, defaultCategory)&lt;br /&gt;
	] or (nilIfMissing and { sortkey = nil } or cats[defaultCategory])).sortkey&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._icon(category, nilIfMissing)&lt;br /&gt;
	-- This looks confusing, but it&amp;#039;s actually nested ternaries (for nil checks)&lt;br /&gt;
	local icon = p._normalizeId(category, defaultCategory)&lt;br /&gt;
		&lt;br /&gt;
	return icons[icon] or (cats[icon] ~= nil and (&lt;br /&gt;
		cats[icon].icon or cats[&amp;quot;tropicalcyclone&amp;quot;].icon&lt;br /&gt;
	) or (not nilIfMissing and cats[defaultCategory].icon) or nil)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._isEqual(category1, category2)&lt;br /&gt;
	-- Checks if two IDs are equal.&lt;br /&gt;
	-- An {{#ifeq}} check does not consider aliases. This function compares two&lt;br /&gt;
	-- IDs in a way that considers category aliases. This works because alias&lt;br /&gt;
	-- assignments are references to the actual table containing the category&lt;br /&gt;
	-- info found in the main category table.&lt;br /&gt;
	-- &lt;br /&gt;
	-- `false` will be returned if at least one of the categories are nil or&lt;br /&gt;
	-- if the category is not defined.&lt;br /&gt;
	local _category1 = p._normalizeId(category1)&lt;br /&gt;
	local _category2 = p._normalizeId(category2)&lt;br /&gt;
	return (_category1 == _category2 and _category1 ~= nil) or&lt;br /&gt;
		cats[ _category1 ] == cats[ _category2 ] and&lt;br /&gt;
			-- `false` if categories are undefined and not equal.&lt;br /&gt;
			cats[ _category1 ] ~= nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.demo(frame)&lt;br /&gt;
	return require(&amp;quot;Module:Storm categories/demo&amp;quot;).demo(frame)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>&gt;Paine Ellsworth</name></author>
	</entry>
</feed>