Module:SAFF Club Championship progression

From Wikipedia, the free encyclopedia
Jump to navigation Jump to search
-- Module:SAFF Club Championship progression
local p = {}

local function trim(s) if not s then return "" end return mw.ustring.gsub(s,"^%s*(.-)%s*$","%1") end
local function getArgs(frame)
    local parent=frame:getParent()
    local args={}
    for k,v in pairs(parent.args) do args[k]=v end
    for k,v in pairs(frame.args) do args[k]=v end
    return args
end

local function renderPlayoffs(args,stageDefs)
    local html=mw.html.create()
    local tbl=html:tag("table"):addClass("wikitable"):css("text-align","center")
    local head=tbl:tag("tr")
    head:tag("th"):wikitext("Team")
    for _,s in ipairs(stageDefs) do head:tag("th"):wikitext(s.name) end

    local teamCodes={}
    local seen={}
    for _,s in ipairs(stageDefs) do
        for _,m in ipairs(s.matches) do
            local w=args[m.winner] and trim(args[m.winner]) or nil
            local l=args[m.loser] and trim(args[m.loser]) or nil
            if w and not seen[w] then table.insert(teamCodes,w); seen[w]=true end
            if l and not seen[l] then table.insert(teamCodes,l); seen[l]=true end
        end
    end
    table.sort(teamCodes)

    for _,team in ipairs(teamCodes) do
        local row=tbl:tag("tr")
        row:tag("th"):wikitext(team)
        for _,s in ipairs(stageDefs) do
            local cell=row:tag("td")
            local status=""
            for _,m in ipairs(s.matches) do
                local w=args[m.winner] and trim(args[m.winner]) or nil
                local l=args[m.loser] and trim(args[m.loser]) or nil
                if w==team then status="W"; break
                elseif l==team then status="L"; break
                end
            end
            if status=="W" then cell:css("background-color","#c9f7c9"):wikitext("W")
            elseif status=="L" then cell:css("background-color","#f7c9c9"):wikitext("L")
            else cell:css("background-color","#EEEEEE"):wikitext(" ") end
        end
    end
    return tostring(html)
end

local playoffs_standard={
    { name="Semi-final 1", matches={{winner="SF1W", loser="SF1L"}} },
    { name="Semi-final 2", matches={{winner="SF2W", loser="SF2L"}} },
    { name="Final", matches={{winner="FW", loser="FL"}} }
}

function p.SAFF(frame)
    local args=getArgs(frame)
    return renderPlayoffs(args,playoffs_standard)
end

function p.SAFF_SF(frame)
    local args=getArgs(frame)
    return renderPlayoffs(args,playoffs_standard)
end

return p