<?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%3ASortkey</id>
	<title>Module:Sortkey - 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%3ASortkey"/>
	<link rel="alternate" type="text/html" href="https://the-democratika.com/wiki/index.php?title=Module:Sortkey&amp;action=history"/>
	<updated>2026-04-05T01:51:00Z</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:Sortkey&amp;diff=8736&amp;oldid=prev</id>
		<title>&gt;Pppery: Fixed unintended global variable use</title>
		<link rel="alternate" type="text/html" href="https://the-democratika.com/wiki/index.php?title=Module:Sortkey&amp;diff=8736&amp;oldid=prev"/>
		<updated>2021-10-05T18:54:13Z</updated>

		<summary type="html">&lt;p&gt;Fixed unintended global variable use&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local getArgs = require(&amp;#039;Module:Arguments&amp;#039;).getArgs&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
function p._encode(sortkey)&lt;br /&gt;
	-- Protect against sortkey nesting.&lt;br /&gt;
	-- Example: {{sort|{{dts|2013|07|07}}|{{dts|1990|12|01}}}}&lt;br /&gt;
	if string.find(sortkey, &amp;quot;sortkey&amp;quot;) or string.find(sortkey, &amp;quot;data-sort-value&amp;quot;) then&lt;br /&gt;
		return &amp;quot;&amp;quot;;&lt;br /&gt;
	end&lt;br /&gt;
    return mw.text.encode(sortkey)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.encode(frame)&lt;br /&gt;
	local args = getArgs(frame);&lt;br /&gt;
	return p._encode(args[1] or &amp;quot;&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function valid_number(num)&lt;br /&gt;
	-- Return true if num is a valid number.&lt;br /&gt;
	-- In Scribunto (different from some standard Lua), when expressed as a string,&lt;br /&gt;
	-- overflow or other problems are indicated with text like &amp;quot;inf&amp;quot; or &amp;quot;nan&amp;quot;&lt;br /&gt;
	-- which are regarded as invalid here (each contains &amp;quot;n&amp;quot;).&lt;br /&gt;
	if type(num) == &amp;#039;number&amp;#039; and tostring(num):find(&amp;#039;n&amp;#039;, 1, true) == nil then&lt;br /&gt;
		return true&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._sortKeyForNumber(value)&lt;br /&gt;
	local sortkey&lt;br /&gt;
	if not valid_number(value) then&lt;br /&gt;
		if value &amp;lt; 0 then&lt;br /&gt;
			sortkey = &amp;#039;1000000000000000000&amp;#039;&lt;br /&gt;
		else&lt;br /&gt;
			sortkey = &amp;#039;9000000000000000000&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
	elseif value == 0 then&lt;br /&gt;
		sortkey = &amp;#039;5000000000000000000&amp;#039;&lt;br /&gt;
	else&lt;br /&gt;
		local mag = math.floor(math.log10(math.abs(value)) + 1e-14)&lt;br /&gt;
		local prefix&lt;br /&gt;
		if value &amp;gt; 0 then&lt;br /&gt;
			prefix = 7000 + mag&lt;br /&gt;
		else&lt;br /&gt;
			prefix = 2999 - mag&lt;br /&gt;
			value = value + 10^(mag+1)&lt;br /&gt;
		end&lt;br /&gt;
		sortkey = string.format(&amp;#039;%d&amp;#039;, prefix) .. string.format(&amp;#039;%015.0f&amp;#039;, math.floor(value * 10^(math.min(28,14-mag))))&lt;br /&gt;
	end&lt;br /&gt;
	return sortkey;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.sortKeyForNumber(frame)&lt;br /&gt;
	local args = getArgs(frame);&lt;br /&gt;
	return p._sortKeyForNumber(args[1] or &amp;quot;&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>&gt;Pppery</name></author>
	</entry>
</feed>