<?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%3ARu_Paul%27s_Drag_Race_tables</id>
	<title>Module:Ru Paul&#039;s Drag Race tables - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3ARu_Paul%27s_Drag_Race_tables"/>
	<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Ru_Paul%27s_Drag_Race_tables&amp;action=history"/>
	<updated>2026-05-27T12:34:04Z</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:Ru_Paul%27s_Drag_Race_tables&amp;diff=144948&amp;oldid=prev</id>
		<title>imported&gt;Wugapodes: + normal background table color</title>
		<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Ru_Paul%27s_Drag_Race_tables&amp;diff=144948&amp;oldid=prev"/>
		<updated>2020-07-13T23:55:12Z</updated>

		<summary type="html">&lt;p&gt;+ normal background table color&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;
-------------&lt;br /&gt;
-- Exports --&lt;br /&gt;
-------------&lt;br /&gt;
&lt;br /&gt;
-- Used by [[Template:Drag Race contestant table]]&lt;br /&gt;
function p.contestant_table( frame )&lt;br /&gt;
	return p._contestant_table( frame )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Used by [[Template:Drag Race progress table]]&lt;br /&gt;
function p.progressTable( frame )&lt;br /&gt;
	return p._progressTable( frame )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Used by [[Template:Drag Race progress key]]&lt;br /&gt;
function p.key( frame )&lt;br /&gt;
	return p._key( frame )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-----------------------&lt;br /&gt;
-- Utility Functions --&lt;br /&gt;
-----------------------&lt;br /&gt;
function p._inTable( t, k )&lt;br /&gt;
	return (t[k] ~= nil)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._sortRows(a,b)&lt;br /&gt;
	return a[1] &amp;gt; b[1]	&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._revSortRows(a,b)&lt;br /&gt;
	return a[1] &amp;lt; b[1]	&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.colorMap = { -- See [[Wikipedia:Manual of Style/Accessibility/Colors]]&lt;br /&gt;
	[&amp;quot;red&amp;quot;] = &amp;quot;#FF7B7B&amp;quot;,&lt;br /&gt;
	[&amp;#039;orange&amp;#039;] = &amp;quot;#FFA7AF&amp;quot;,&lt;br /&gt;
	[&amp;quot;yellow&amp;quot;] = &amp;quot;#FAFA00&amp;quot;,&lt;br /&gt;
	[&amp;quot;chartreuse&amp;quot;] = &amp;quot;#A8FF4F&amp;quot;,&lt;br /&gt;
	[&amp;quot;green&amp;quot;] = &amp;quot;#7BFF7B&amp;quot;,&lt;br /&gt;
	[&amp;quot;spring&amp;quot;] = &amp;quot;#4FFFA8&amp;quot;,&lt;br /&gt;
	[&amp;quot;cyan&amp;quot;] = &amp;quot;#00FAFA&amp;quot;,&lt;br /&gt;
	[&amp;quot;dodger&amp;quot;] = &amp;quot;#4FA8FF&amp;quot;,&lt;br /&gt;
	[&amp;quot;blue&amp;quot;] = &amp;quot;#8888FF&amp;quot;,&lt;br /&gt;
	[&amp;quot;indigo&amp;quot;] = &amp;quot;#BB76FF&amp;quot;,&lt;br /&gt;
	[&amp;quot;magenta&amp;quot;] = &amp;quot;#FF29FF&amp;quot;,&lt;br /&gt;
	[&amp;quot;pink&amp;quot;] = &amp;quot;#FF52A9&amp;quot;,&lt;br /&gt;
	[&amp;quot;brown&amp;quot;] = &amp;quot;#E97500&amp;quot;,&lt;br /&gt;
	[&amp;quot;grey&amp;quot;] = &amp;quot;#808080&amp;quot;,&lt;br /&gt;
	[&amp;quot;gray&amp;quot;] = &amp;quot;#808080&amp;quot;,&lt;br /&gt;
	[&amp;quot;silver&amp;quot;] = &amp;quot;#F8F9FA&amp;quot; -- Actually just the usual background table color&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
----------------------&lt;br /&gt;
-- Contestant table --&lt;br /&gt;
----------------------&lt;br /&gt;
function p._contestant_table( frame )&lt;br /&gt;
	local templateFrame = frame:getParent()&lt;br /&gt;
	local contestantData = p._getContestantData( templateFrame )&lt;br /&gt;
	ret = [=[&lt;br /&gt;
	{| class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center;&amp;quot;&lt;br /&gt;
	|+ Contestants of &amp;#039;&amp;#039;All Stars 5&amp;#039;&amp;#039; and their backgrounds&lt;br /&gt;
	! scope=&amp;quot;col&amp;quot;| Contestant&lt;br /&gt;
	! scope=&amp;quot;col&amp;quot;| Age&lt;br /&gt;
	! scope=&amp;quot;col&amp;quot;| Hometown&lt;br /&gt;
	! scope=&amp;quot;col&amp;quot;| Original season(s)&lt;br /&gt;
	! scope=&amp;quot;col&amp;quot;| Original placement(s)&lt;br /&gt;
	! scope=&amp;quot;col&amp;quot;| Outcome&lt;br /&gt;
	]=]&lt;br /&gt;
	for k, v in pairs( contestantData ) do&lt;br /&gt;
		ret = ret .. p._bio_makeRow(contestantData[k])&lt;br /&gt;
	end&lt;br /&gt;
	return ret .. &amp;quot;|}&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._bio_makeRow( contestant )&lt;br /&gt;
	local rowTemplate = [=[&lt;br /&gt;
	|-&lt;br /&gt;
	! scope=&amp;quot;row&amp;quot; rowspan=&amp;quot;${NROWS}&amp;quot;|[[${NAME}]]&lt;br /&gt;
	|rowspan=&amp;quot;${NROWS}&amp;quot;|${AGE}&lt;br /&gt;
	|rowspan=&amp;quot;${NROWS}&amp;quot;|${HOMETOWN}&lt;br /&gt;
	]=]&lt;br /&gt;
	if string.find(contestant[&amp;#039;season&amp;#039;], &amp;#039;All Stars&amp;#039;) ~= nil then&lt;br /&gt;
		rowTemplate = rowTemplate .. &amp;quot;|[[RuPaul&amp;#039;s Drag Race All Stars (season ${SEASON-NUM})|&amp;#039;&amp;#039;All Stars&amp;#039;&amp;#039; ${SEASON-NUM}]]\n&amp;quot;&lt;br /&gt;
		contestant[&amp;#039;season-num&amp;#039;] = string.match(contestant[&amp;#039;season&amp;#039;], &amp;#039;All Stars (%d+)&amp;#039;)&lt;br /&gt;
		contestant[&amp;#039;season&amp;#039;] = nil&lt;br /&gt;
	else&lt;br /&gt;
		rowTemplate = rowTemplate .. &amp;quot;|[[RuPaul&amp;#039;s Drag Race (season ${SEASON})|Season ${SEASON}]]\n&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	rowTemplate = rowTemplate .. [=[&lt;br /&gt;
	|&amp;lt;span data-sort-value=&amp;quot;${PLACE-SORT}&amp;quot;&amp;gt;${PLACE}&amp;lt;/span&amp;gt;&lt;br /&gt;
	]=]&lt;br /&gt;
	if contestant[&amp;#039;outcome&amp;#039;] ~= nil then&lt;br /&gt;
		rowTemplate = rowTemplate .. &amp;#039;|rowspan=&amp;quot;${NROWS}&amp;quot;|${OUTCOME}\n&amp;#039;&lt;br /&gt;
		if #tostring(contestant[&amp;#039;outcome&amp;#039;]) &amp;lt; 3 then&lt;br /&gt;
			contestant[&amp;#039;outcome&amp;#039;] = p._makePlace(contestant[&amp;#039;outcome&amp;#039;])&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		rowTemplate = rowTemplate .. &amp;#039;|rowspan=&amp;quot;${NROWS}&amp;quot; style=&amp;quot;background: #DDF; color: #2C2C2C; vertical-align: middle; text-align: center;&amp;quot; class=&amp;quot;no table-no2&amp;quot;|TBA\n&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if tonumber(contestant[&amp;#039;nrows&amp;#039;]) &amp;gt; 1 then&lt;br /&gt;
		rowTemplate = rowTemplate .. &amp;quot;|-\n&amp;quot;&lt;br /&gt;
		if string.find(contestant[&amp;#039;season2&amp;#039;], &amp;#039;All Stars&amp;#039;) ~= nil then&lt;br /&gt;
			rowTemplate = rowTemplate .. &amp;quot;|[[RuPaul&amp;#039;s Drag Race All Stars (season ${SEASON2-NUM})|&amp;#039;&amp;#039;All Stars&amp;#039;&amp;#039; ${SEASON2-NUM}]]\n&amp;quot;&lt;br /&gt;
			contestant[&amp;#039;season2-num&amp;#039;] = tostring(string.match(contestant[&amp;#039;season2&amp;#039;], &amp;#039;%d+&amp;#039;))&lt;br /&gt;
			contestant[&amp;#039;season2&amp;#039;] = nil&lt;br /&gt;
		else&lt;br /&gt;
			rowTemplate = rowTemplate .. &amp;quot;|[[RuPaul&amp;#039;s Drag Race (season ${SEASON2})|Season ${SEASON2}]]\n&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
		rowTemplate = rowTemplate .. &amp;#039;|&amp;lt;span data-sort-value=&amp;quot;${PLACE2-SORT}&amp;quot;&amp;gt;${PLACE2}&amp;lt;/span&amp;gt;\n&amp;#039;&lt;br /&gt;
		if contestant[&amp;#039;place2-sort&amp;#039;] == nil then&lt;br /&gt;
			contestant[&amp;#039;place2-sort&amp;#039;] = p._makePlaceSort(contestant[&amp;#039;place2&amp;#039;])&lt;br /&gt;
		end&lt;br /&gt;
		local place&lt;br /&gt;
		if #tostring(contestant[&amp;#039;place2&amp;#039;]) &amp;gt; 2 then &lt;br /&gt;
		  	place = string.match(contestant[&amp;#039;place2&amp;#039;],&amp;#039;(%d+)%D%D&amp;#039;)&lt;br /&gt;
		else&lt;br /&gt;
		   	place = contestant[&amp;#039;place2&amp;#039;]&lt;br /&gt;
		end&lt;br /&gt;
		contestant[&amp;#039;place2&amp;#039;] = p._makePlace(place)&lt;br /&gt;
	end&lt;br /&gt;
	for k, v in pairs( contestant ) do&lt;br /&gt;
		mw.log(k:upper())&lt;br /&gt;
		rowTemplate = string.gsub(rowTemplate,&amp;quot;${&amp;quot;..k:upper():gsub(&amp;#039;%-&amp;#039;,&amp;#039;%%-&amp;#039;)..&amp;quot;}&amp;quot;,contestant[k])&lt;br /&gt;
	end&lt;br /&gt;
	return rowTemplate	&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._getContestant( k )&lt;br /&gt;
	return string.match( k, &amp;quot;contestant%-(%d+)&amp;quot; )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._getField( k )&lt;br /&gt;
	return string.match( k, &amp;quot;contestant%-%d+%-(.*)&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._getContestantData( frame )&lt;br /&gt;
    local contestantData = {}&lt;br /&gt;
    for k, v in pairs( frame.args ) do&lt;br /&gt;
    	-- Read inputs and organize them by contestant&lt;br /&gt;
   		if not p._inTable(contestantData, p._getContestant(k)) then&lt;br /&gt;
   			contestantData[p._getContestant(k)] = {}&lt;br /&gt;
   		end&lt;br /&gt;
   		if p._getField(k) ~= nil then&lt;br /&gt;
    		contestantData[p._getContestant(k)][p._getField(k)] = v&lt;br /&gt;
    	else&lt;br /&gt;
    		contestantData[p._getContestant(k)][&amp;quot;name&amp;quot;] = v&lt;br /&gt;
    	end&lt;br /&gt;
    end&lt;br /&gt;
    for k, v in pairs( contestantData ) do&lt;br /&gt;
    	-- Final cleanup of the input before rendering table&lt;br /&gt;
	    if not p._inTable(contestantData[k],&amp;quot;nrows&amp;quot;) then&lt;br /&gt;
	    	contestantData[k][&amp;quot;nrows&amp;quot;] = 1&lt;br /&gt;
	    end&lt;br /&gt;
	    if not p._inTable(contestantData[k],&amp;quot;place-sort&amp;quot;) then&lt;br /&gt;
		    if #tostring(contestantData[k][&amp;#039;place&amp;#039;]) &amp;gt; 2 then &lt;br /&gt;
		    	place = string.match(contestantData[k][&amp;#039;place&amp;#039;],&amp;#039;(%d+)%D%D&amp;#039;)&lt;br /&gt;
		    else&lt;br /&gt;
		    	place = contestantData[k][&amp;#039;place&amp;#039;]&lt;br /&gt;
		    end&lt;br /&gt;
	    	contestantData[k][&amp;quot;place-sort&amp;quot;] = p._makePlaceSort(place)&lt;br /&gt;
	    end&lt;br /&gt;
	    if #tostring(contestantData[k][&amp;#039;place&amp;#039;]) &amp;lt; 3 then &lt;br /&gt;
	    	contestantData[k][&amp;#039;place&amp;#039;] = p._makePlace(contestantData[k][&amp;#039;place&amp;#039;])&lt;br /&gt;
		end&lt;br /&gt;
    end&lt;br /&gt;
    return contestantData&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._makePlaceSort( place )&lt;br /&gt;
	if #tostring(place) &amp;lt; 2 then&lt;br /&gt;
		return &amp;#039;0&amp;#039;..place&lt;br /&gt;
	else&lt;br /&gt;
		return place&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._makePlace( place )&lt;br /&gt;
	place = tonumber(place)&lt;br /&gt;
	if place == 1 then&lt;br /&gt;
		return &amp;#039;1st Place&amp;#039;&lt;br /&gt;
	elseif place == 2 then&lt;br /&gt;
		return &amp;#039;2nd Place&amp;#039;&lt;br /&gt;
	elseif place == 3 then&lt;br /&gt;
		return&amp;#039;3rd Place&amp;#039;&lt;br /&gt;
	else&lt;br /&gt;
		return place .. &amp;#039;th Place&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------&lt;br /&gt;
-- Contestant progress table --&lt;br /&gt;
-------------------------------&lt;br /&gt;
function p._progressTable( frame )&lt;br /&gt;
	local templateFrame = frame:getParent()&lt;br /&gt;
	local contestantData = {}&lt;br /&gt;
	ret = &amp;quot;&amp;quot;&lt;br /&gt;
	for i=1,50 do&lt;br /&gt;
		arg = templateFrame.args[i]&lt;br /&gt;
		if arg == nil then&lt;br /&gt;
			break&lt;br /&gt;
		elseif i % 3 == 1 then -- First in triplet is contestant name&lt;br /&gt;
			contestantData[arg] = {{}}&lt;br /&gt;
		elseif i % 3 == 2 then -- Second in triple is color codes&lt;br /&gt;
			contestantData[templateFrame.args[i-1]][1] = arg&lt;br /&gt;
		else -- Third in triplet is text&lt;br /&gt;
			contestantData[templateFrame.args[i-2]][2] = arg&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	contestantData, width = p._parseRanks( contestantData )&lt;br /&gt;
	ret = ret .. [=[{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center;&amp;quot;&lt;br /&gt;
	|+Progress of contests including rank/position in each episode&lt;br /&gt;
	! scope=&amp;quot;col&amp;quot;| Contestant&lt;br /&gt;
	]=]&lt;br /&gt;
	for i=1,width do&lt;br /&gt;
		ret = ret .. &amp;quot;! scope=&amp;#039;col&amp;#039;| &amp;quot; .. i ..&amp;quot;\n&amp;quot;	&lt;br /&gt;
	end&lt;br /&gt;
	rowList = {}&lt;br /&gt;
	for k,v in pairs(contestantData) do&lt;br /&gt;
		table.insert(rowList,p._prog_makeRow(k,v,width))&lt;br /&gt;
	end&lt;br /&gt;
	table.sort(rowList,p._sortRows)&lt;br /&gt;
	for i=1,20 do&lt;br /&gt;
		if rowList[i] == nil then&lt;br /&gt;
			break&lt;br /&gt;
		end&lt;br /&gt;
		ret = ret .. rowList[i][2]&lt;br /&gt;
	end&lt;br /&gt;
	return ret .. &amp;quot;|}&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._parseRanks( contestantData )&lt;br /&gt;
	local data = {}&lt;br /&gt;
	local high = 0&lt;br /&gt;
	for k,v in pairs(contestantData) do&lt;br /&gt;
		data[k] = {}&lt;br /&gt;
		data[k][1] = mw.text.split(contestantData[k][1],&amp;#039;,%s*&amp;#039;)&lt;br /&gt;
		data[k][2] = mw.text.split(contestantData[k][2],&amp;#039;,%s*&amp;#039;)&lt;br /&gt;
		if #data[k][1] &amp;gt; high then&lt;br /&gt;
			high = #data[k][1]&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return data, high&lt;br /&gt;
end&lt;br /&gt;
	&lt;br /&gt;
function p._prog_makeRow( contestant, tableData, width )&lt;br /&gt;
	row = &amp;quot;|-\n! scope=&amp;#039;row&amp;#039;| &amp;quot; .. contestant .. &amp;quot;\n&amp;quot;&lt;br /&gt;
	colors = tableData[1]&lt;br /&gt;
	labels = tableData[2]&lt;br /&gt;
	final = 0&lt;br /&gt;
	for i=1,20 do&lt;br /&gt;
		-- If we&amp;#039;ve reached the end of the list...&lt;br /&gt;
		if colors[i] == nil then&lt;br /&gt;
			final = i&lt;br /&gt;
			-- ...and the entries span the entire width of the table, then finish&lt;br /&gt;
			if i &amp;gt; width then&lt;br /&gt;
				break&lt;br /&gt;
			end&lt;br /&gt;
			-- ...otherwise, fill the rest of the columns with darkgray&lt;br /&gt;
			row = row .. &amp;quot;| colspan=&amp;#039;&amp;quot; .. width + 1 - i .. &amp;quot;&amp;#039; bgcolor=&amp;#039;darkgray&amp;#039; |\n&amp;quot;&lt;br /&gt;
			break&lt;br /&gt;
		end&lt;br /&gt;
		text = labels[i]&lt;br /&gt;
		color = p.colorMap[colors[i]:gsub(&amp;quot;%s+&amp;quot;,&amp;quot;&amp;quot;)]&lt;br /&gt;
		row = row .. &amp;quot;| style=&amp;#039;background:&amp;quot; .. color .. &amp;quot;;&amp;#039; |&amp;quot; .. text .. &amp;quot;\n&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	retRow = {&lt;br /&gt;
		final,&lt;br /&gt;
		row&lt;br /&gt;
	}&lt;br /&gt;
	return retRow&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------&lt;br /&gt;
-- Make key for colors --&lt;br /&gt;
-------------------------&lt;br /&gt;
function p._key( frame )&lt;br /&gt;
	local templateFrame = frame:getParent()&lt;br /&gt;
	local args = templateFrame.args&lt;br /&gt;
	local ret = &amp;#039;&amp;#039;&lt;br /&gt;
	local order = mw.text.split(args.order,&amp;#039;,%s*&amp;#039;)&lt;br /&gt;
	args.order = nil&lt;br /&gt;
	local reverseIndex = {}&lt;br /&gt;
	for i,v in ipairs(order) do&lt;br /&gt;
		reverseIndex[v] = i&lt;br /&gt;
	end&lt;br /&gt;
	local rowTable = {}&lt;br /&gt;
	for k,v in pairs(args) do&lt;br /&gt;
		if k ~= &amp;#039;order&amp;#039; then&lt;br /&gt;
			box = p._makeColorBox( k )&lt;br /&gt;
			text = v .. &amp;quot;\n&amp;quot;&lt;br /&gt;
			row = { reverseIndex[k], box .. text }&lt;br /&gt;
			table.insert(rowTable,row)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	table.sort(rowTable,p._revSortRows)&lt;br /&gt;
	for i=1,20 do&lt;br /&gt;
		if rowTable[i] == nil then&lt;br /&gt;
			break&lt;br /&gt;
		end&lt;br /&gt;
		ret = ret .. rowTable[i][2]&lt;br /&gt;
	end&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._makeColorBox( key )&lt;br /&gt;
	local template = &amp;#039;:&amp;lt;span style=&amp;quot;background-color:HEXCODE; border:1px solid #000000;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;/span&amp;gt; &amp;#039;&lt;br /&gt;
	color = p.colorMap[key]&lt;br /&gt;
	return string.gsub(template, &amp;#039;HEXCODE&amp;#039;, color)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>imported&gt;Wugapodes</name></author>
	</entry>
</feed>