Difference between revisions of "Module:Ru Paul's Drag Race tables"
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. | + | function p._getContestant( k ) |
| − | + | return string.match( k, "contestant%-(%d+)" ) | |
| − | contestantData = {} | + | end |
| − | + | ||
| − | for k, v in pairs( | + | 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 | end | ||
| − | return | + | return contestantData |
end | end | ||
| − | local | + | 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 | end | ||
| − | local | + | 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 | end | ||
return p | return p | ||
Revision as of 01:15, 11 July 2020
| This module is rated as alpha. It is ready for third-party input, and may be used on a few pages to see if problems arise, but should be watched. Suggestions for new features or changes in their input and output mechanisms are welcome. |
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