local yesno = require('Module:Yesno')
local ordinal = require('Module:Ordinal')._ordinal
local p = {}
function p.style(pos, host)
local style = (host and "border:3px solid red;" or '')
if pos == '1' then style = style .. "background-color:gold;"
elseif pos == '2' then style = style .. "background-color:silver;"
elseif pos == '3' then style = style .. "background-color:#CC9966;"
elseif pos == '4' then style = style .. "background-color:#9ACDFF;"
end
return (style ~= '' and ('style="' .. style .. '" ') or '')
end
function p.filter_position(pos)
-- Parse position string (`H`, `Q`, `.` or digits)
local actual_pos, suffix = mw.ustring.match(pos, "^H?([QW%.])(.*)")
if actual_pos == nil then
actual_pos, suffix = mw.ustring.match(pos, "^H?(%d+)(.*)")
end
if actual_pos == nil then
actual_pos, suffix = pos, ""
end
return actual_pos, suffix
end
function p.sort_value(pos)
local n = ''
if pos == '.' then n = 999
elseif pos == 'W' then n = 998
elseif pos == 'Q' then n = 997
else n = pos
end
return 'data-sort-value="' .. n .. '" '
end
function p.content(pos)
if tonumber(pos) then return ordinal(pos)
elseif pos == '.' then return "•"
elseif pos == 'W' then return "{{Tooltip|WD|Withdrew}}"
elseif pos == 'Q' then return "{{Tooltip|Q|Qualified}}"
else return pos
end
end
function p.cell(pos)
local host = false
if pos == nil then return '' end
if mw.ustring.sub(pos, 1, 1) == 'H' then
host = true
-- pos = mw.ustring.sub(pos, 2)
end
local actual_pos, suffix = p.filter_position(pos)
return p.style(actual_pos, host) .. p.sort_value(actual_pos) .. '| ' .. p.content(actual_pos) .. suffix
end
function p.appeared(pos)
local actual_pos, suffix = p.filter_position(pos)
return mw.ustring.sub(actual_pos, 1, 1) == 'H' and tonumber(mw.ustring.sub(actual_pos, 2)) or tonumber(actual_pos)
end
function p.main(frame)
-- If called via #invoke, use the args passed into the invoking template.
if frame == mw.getCurrentFrame() then
args = frame:getParent().args
else
args = frame.args
end
local result = '| style="text-align:left;" | {{quid|' .. args[1] .. '}} || '
local appearances = 0
for key, value in ipairs(args) do
if key ~= 1 then
result = result .. p.cell(value) .. ' || '
if p.appeared(value) then appearances = appearances + 1 end
end
end
result = result .. " '''" .. appearances .. "'''\n|-\n"
return frame:preprocess(result)
end
return p