<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.v-ris.ing/index.php?action=history&amp;feed=atom&amp;title=Module%3AColorsListHandler</id>
	<title>Module:ColorsListHandler - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.v-ris.ing/index.php?action=history&amp;feed=atom&amp;title=Module%3AColorsListHandler"/>
	<link rel="alternate" type="text/html" href="https://wiki.v-ris.ing/index.php?title=Module:ColorsListHandler&amp;action=history"/>
	<updated>2026-06-11T15:57:37Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki.v-ris.ing/index.php?title=Module:ColorsListHandler&amp;diff=5785&amp;oldid=prev</id>
		<title>imported&gt;Megadoxs at 05:13, 31 May 2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.v-ris.ing/index.php?title=Module:ColorsListHandler&amp;diff=5785&amp;oldid=prev"/>
		<updated>2024-05-31T05:13:23Z</updated>

		<summary type="html">&lt;p&gt;&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;
&lt;br /&gt;
function p.capitalizeWords(str)&lt;br /&gt;
    return str:gsub(&amp;quot;(%a)([%w_&amp;#039;]*)&amp;quot;, function(first, rest)&lt;br /&gt;
        return first:upper() .. rest:lower()&lt;br /&gt;
    end)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.stableSort(tbl, cmp)&lt;br /&gt;
    local size = #tbl&lt;br /&gt;
    local indexedTbl = {}&lt;br /&gt;
    &lt;br /&gt;
    -- Pair each element with its index&lt;br /&gt;
    for i = 1, size do&lt;br /&gt;
        indexedTbl[i] = {index = i, value = tbl[i]}&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- Define a comparison function that considers the original indices&lt;br /&gt;
    local function stableCmp(a, b)&lt;br /&gt;
        local aValue, bValue = a.value, b.value&lt;br /&gt;
        local result = cmp(aValue, bValue)&lt;br /&gt;
        if result == nil then&lt;br /&gt;
            return a.index &amp;lt; b.index&lt;br /&gt;
        else&lt;br /&gt;
            return result&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- Sort the paired table&lt;br /&gt;
    table.sort(indexedTbl, stableCmp)&lt;br /&gt;
&lt;br /&gt;
    -- Unpair the elements back into the original table&lt;br /&gt;
    for i = 1, size do&lt;br /&gt;
        tbl[i] = indexedTbl[i].value&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.customSort(a, b)&lt;br /&gt;
    local _, _, intA = a:match(&amp;quot;([^,]+),%s*([^,]+),%s*(%d*)&amp;quot;)&lt;br /&gt;
    local _, _, intB = b:match(&amp;quot;([^,]+),%s*([^,]+),%s*(%d*)&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    -- Convert empty strings to a high value to keep them at the end&lt;br /&gt;
    intA = intA and tonumber(intA) or math.huge&lt;br /&gt;
    intB = intB and tonumber(intB) or math.huge&lt;br /&gt;
&lt;br /&gt;
    -- Sort by integer value, with empty strings staying at the end&lt;br /&gt;
    if intA ~= intB then&lt;br /&gt;
        return intA &amp;lt; intB&lt;br /&gt;
    else&lt;br /&gt;
		return false&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.coloredSpans(frame)&lt;br /&gt;
    local spans = {}&lt;br /&gt;
    -- preset Keywords&lt;br /&gt;
    local all = {&amp;quot;Red&amp;quot;,&amp;quot;Orange&amp;quot;,&amp;quot;Yellow&amp;quot;,&amp;quot;Green&amp;quot;,&amp;quot;Lime&amp;quot;,&amp;quot;Turquoise&amp;quot;,&amp;quot;Blue&amp;quot;,&amp;quot;Purple&amp;quot;,&amp;quot;Pink&amp;quot;,&amp;quot;White&amp;quot;,&amp;quot;Grey&amp;quot;,&amp;quot;Black&amp;quot;}&lt;br /&gt;
    -- Process Colors&lt;br /&gt;
    local str = frame.args[1] or &amp;quot;&amp;quot;&lt;br /&gt;
    if str ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        local result = {}&lt;br /&gt;
        for color in (str .. &amp;quot;,&amp;quot;):gmatch(&amp;quot;([^,]*)&amp;quot; .. &amp;quot;,&amp;quot;) do&lt;br /&gt;
        	color = p.capitalizeWords(color)&lt;br /&gt;
            if color == &amp;quot;All&amp;quot; then&lt;br /&gt;
            	for _, value in ipairs(all) do&lt;br /&gt;
    				table.insert(result, value)&lt;br /&gt;
            	end&lt;br /&gt;
			else&lt;br /&gt;
				table.insert(result, color)&lt;br /&gt;
            end	&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
        for i, v in ipairs(result) do&lt;br /&gt;
            if i &amp;gt; 1 then&lt;br /&gt;
                table.insert(spans, &amp;#039; / &amp;#039;)&lt;br /&gt;
            end&lt;br /&gt;
            table.insert(spans, string.format(&amp;#039;&amp;lt;span style=&amp;quot;color:%s&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;background-color: %s; height: 18.89px; width: 18.89px; border: 1px solid black; display: inline-block; vertical-align: sub;&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; %s&amp;lt;/span&amp;gt;&amp;#039;, v, v, v))&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- Process Customs&lt;br /&gt;
    local customs = frame.args[2] or &amp;quot;&amp;quot;&lt;br /&gt;
    local sortedItem = {}&lt;br /&gt;
    if customs ~= &amp;quot;&amp;quot; then&lt;br /&gt;
    	for item in customs:gmatch(&amp;quot;%((.-)%)&amp;quot;) do&lt;br /&gt;
    		table.insert(sortedItem, item)&lt;br /&gt;
    	end&lt;br /&gt;
    	p.stableSort(sortedItem, p.customSort)&lt;br /&gt;
        for i, item in ipairs(sortedItem) do&lt;br /&gt;
            local parts = {}&lt;br /&gt;
            for part in item:gmatch(&amp;quot;([^,]+)&amp;quot;) do&lt;br /&gt;
                table.insert(parts, part)&lt;br /&gt;
            end&lt;br /&gt;
&lt;br /&gt;
            local name = p.capitalizeWords(parts[1])&lt;br /&gt;
            local color = parts[2]&lt;br /&gt;
            local index = tonumber(parts[3]) -- Convert index to number if present&lt;br /&gt;
&lt;br /&gt;
            if index and index &amp;gt; 0 then&lt;br /&gt;
                -- Ensure the index is within bounds&lt;br /&gt;
                if (index+1*(index-1)) &amp;gt; #spans then&lt;br /&gt;
                    -- If index is greater than the length of spans, append&lt;br /&gt;
                    if #spans &amp;gt; 0 then&lt;br /&gt;
                        table.insert(spans, &amp;#039; / &amp;#039;)&lt;br /&gt;
                    end&lt;br /&gt;
                    table.insert(spans, string.format(&amp;#039;&amp;lt;span style=&amp;quot;color:%s&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;background-color: %s; height: 18.89px; width: 18.89px; border: 1px solid black; display: inline-block; vertical-align: sub;&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; %s&amp;lt;/span&amp;gt;&amp;#039;, color, color, name))&lt;br /&gt;
                else&lt;br /&gt;
                    -- Insert at the specified index&lt;br /&gt;
                    if index &amp;gt; 1 then&lt;br /&gt;
                    	table.insert(spans, (index+1*(index-1)), string.format(&amp;#039;&amp;lt;span style=&amp;quot;color:%s&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;background-color: %s; height: 18.89px; width: 18.89px; border: 1px solid black; display: inline-block; vertical-align: sub;&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; %s&amp;lt;/span&amp;gt;&amp;#039;, color, color, name))&lt;br /&gt;
                    	if (index+1*(index-1)) &amp;gt; #spans then&lt;br /&gt;
                    		table.insert(spans, (index+1*(index-1))-1,&amp;#039; / &amp;#039;)&lt;br /&gt;
                    	else&lt;br /&gt;
                    		table.insert(spans, (index+1*(index-1))+1,&amp;#039; / &amp;#039;)&lt;br /&gt;
                    	end	&lt;br /&gt;
                    else&lt;br /&gt;
                    	table.insert(spans, 1, string.format(&amp;#039;&amp;lt;span style=&amp;quot;color:%s&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;background-color: %s; height: 18.89px; width: 18.89px; border: 1px solid black; display: inline-block; vertical-align: sub;&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; %s&amp;lt;/span&amp;gt;&amp;#039;, color, color, name))&lt;br /&gt;
                    	table.insert(spans, 2,&amp;#039; / &amp;#039;)&lt;br /&gt;
                    end&lt;br /&gt;
                end&lt;br /&gt;
            else&lt;br /&gt;
                -- Append if no valid index is provided&lt;br /&gt;
                if #spans &amp;gt; 0 then&lt;br /&gt;
                    table.insert(spans, &amp;#039; / &amp;#039;)&lt;br /&gt;
                end&lt;br /&gt;
                table.insert(spans, string.format(&amp;#039;&amp;lt;span style=&amp;quot;color:%s&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;background-color: %s; height: 18.89px; width: 18.89px; border: 1px solid black; display: inline-block; vertical-align: sub;&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; %s&amp;lt;/span&amp;gt;&amp;#039;, color, color, name))&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return table.concat(spans, &amp;quot;&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>imported&gt;Megadoxs</name></author>
	</entry>
</feed>