Module:QuidAppearances

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 "WD" elseif pos == 'Q'   then return "Q" 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;" | || ' 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