Difference between revisions of "Module:Ru Paul's Drag Race tables"

From blackwiki
Jump to navigation Jump to search
blackwiki>Wugapodes
(contestant parsing)
blackwiki>Wugapodes
(Basic table)
Line 1: Line 1:
 
local p = {} --p stands for package
 
local p = {} --p stands for package
  
function p.main( frame )
+
function p._getContestant( k )
    templateFrame = frame:getParent()
+
return string.match( k, "contestant%-(%d+)" )
     contestantData = {}
+
end
    ret = ''
+
 
     for k, v in pairs( templateFrame.args ) do
+
function p._getField( k )
     ret = ret .. _getContestant(k) .. _getField(k) .. ' = ' .. v .. "\n"
+
return string.match( k, "contestant%-%d+%-(.*)")
 +
end
 +
 
 +
function p._inTable( t, k )
 +
return (t[k] ~= nil)
 +
end
 +
 
 +
function p._getContestantData( frame )
 +
     local contestantData = {}
 +
     for k, v in pairs( frame.args ) do
 +
     if not p._inTable(contestantData, p._getContestant(k)) then
 +
    contestantData[p._getContestant(k)] = {}
 +
    end
 +
    if p._getField(k) ~= nil then
 +
    contestantData[p._getContestant(k)][p._getField(k)] = v
 +
    else
 +
    contestantData[p._getContestant(k)]["name"] = v
 +
    end
 +
    end
 +
    for k, v in pairs( contestantData ) do
 +
    if not p._inTable(contestantData[k],"nrows") then
 +
    contestantData[k]["nrows"] = 1
 +
    end
 
     end
 
     end
     return ret
+
     return contestantData
 
end
 
end
  
local function _getContestant( k )
+
function p.makeRow( contestant )
return string.gmatch( k, "contestant\s(\d+)" )
+
local rowTemplate = [=[
 +
|-
 +
! scope="row" rowspan="${NROWS}"|[[${NAME}]]
 +
|rowspan="${NROWS}"|39
 +
|rowspan="${NROWS}"|${HOMETOWN}
 +
|[[RuPaul's Drag Race (season ${SEASON})|Season ${SEASON}]]
 +
|<span data-sort-value="${PLACE-SORT}">${PLACE}</span>
 +
|rowspan="${NROWS}" style="background: #DDF; color: #2C2C2C; vertical-align: middle; text-align: center;" class="no table-no2"|TBA
 +
]=]
 +
for k, v in pairs( contestant ) do
 +
rowTemplate = string.gsub(rowTemplate,"${"..k:upper().."}",contestant[k])
 +
end
 +
return rowTemplate
 
end
 
end
  
local function _getField( k )
+
function p.main( frame )
return string.gmatch( k, "contestant\s\d+-(.*)")
+
    local templateFrame = frame:getParent()
 +
    local contestantData = p._getContestantData( templateFrame )
 +
    ret = [=[
 +
    {| class="wikitable sortable" border="2" style="text-align:center;"
 +
|+ Contestants of ''All Stars 5'' and their backgrounds
 +
! scope="col"| Contestant
 +
! scope="col"| Age
 +
! scope="col"| Hometown
 +
! scope="col"| Original season(s)
 +
! scope="col"| Original placement(s)
 +
! scope="col"| Outcome
 +
    ]=]
 +
    for k, v in pairs( contestantData ) do
 +
    ret = ret .. p.makeRow(contestantData[k])
 +
    end
 +
    return ret .. "|}"
 
end
 
end
  
 
return p
 
return p

Revision as of 01:15, 11 July 2020

This module implements {{Drag Race contestant table}} and {{Drag Race progress table}}. See the code for more details.



local p = {} --p stands for package

function p._getContestant( k )
	return string.match( k, "contestant%-(%d+)" )
end

function p._getField( k )
	return string.match( k, "contestant%-%d+%-(.*)")
end

function p._inTable( t, k )
	return (t[k] ~= nil)
end

function p._getContestantData( frame )
    local contestantData = {}
    for k, v in pairs( frame.args ) do
    		if not p._inTable(contestantData, p._getContestant(k)) then
    			contestantData[p._getContestant(k)] = {}
    		end
    		if p._getField(k) ~= nil then
	    		contestantData[p._getContestant(k)][p._getField(k)] = v
	    	else
	    		contestantData[p._getContestant(k)]["name"] = v
	    	end
    end
    for k, v in pairs( contestantData ) do
	    if not p._inTable(contestantData[k],"nrows") then
	    	contestantData[k]["nrows"] = 1
	    end
    end
    return contestantData
end

function p.makeRow( contestant )
	local rowTemplate = [=[
	|-
	! scope="row" rowspan="${NROWS}"|[[${NAME}]]
	|rowspan="${NROWS}"|39
	|rowspan="${NROWS}"|${HOMETOWN}
	|[[RuPaul's Drag Race (season ${SEASON})|Season ${SEASON}]]
	|<span data-sort-value="${PLACE-SORT}">${PLACE}</span>
	|rowspan="${NROWS}" style="background: #DDF; color: #2C2C2C; vertical-align: middle; text-align: center;" class="no table-no2"|TBA
	]=]
	for k, v in pairs( contestant ) do
		rowTemplate = string.gsub(rowTemplate,"${"..k:upper().."}",contestant[k])
	end
	return rowTemplate	
end

function p.main( frame )
    local templateFrame = frame:getParent()
    local contestantData = p._getContestantData( templateFrame )
    ret = [=[
    {| class="wikitable sortable" border="2" style="text-align:center;"
	|+ Contestants of ''All Stars 5'' and their backgrounds
	! scope="col"| Contestant
	! scope="col"| Age
	! scope="col"| Hometown
	! scope="col"| Original season(s)
	! scope="col"| Original placement(s)
	! scope="col"| Outcome
    ]=]
    for k, v in pairs( contestantData ) do
    	ret = ret .. p.makeRow(contestantData[k])
    end
    return ret .. "|}"
end

return p