Module:QuidAppearances explained

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, suffixend

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 "" elseif pos

'Q' then return "" else return pos endend

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) .. suffixend

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