Toggle menu
Toggle preferences menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

Documentation for this module may be created at Module:GroupDraw/doc

local p = {}
local html = mw.html
local cargo = mw.ext.cargo

local function sqlEscape(s)
    if not s then return "" end
    s = s:gsub("\\", "\\\\")
    s = s:gsub("'", "\\'")
    return s
end

local function getTournamentName(args)
if args.tournament and args.tournament ~= "" then return args.tournament end
local pageTitle = mw.title.getCurrentTitle().text
local parts = mw.text.split(pageTitle, '/')
if parts[2] == "Tournaments" and parts[3] then return parts[3] end
return mw.title.getCurrentTitle().baseText
end

local function getTeamDisplay(teamName, tData, mData)
local lightLogo = "Shield_team.png"
local darkLogo = "Shield_team_dark.png"
local displayName = teamName

if tData then
if tData.display_name and tData.display_name ~= "" then
displayName = tData.display_name
end
if tData.image and tData.image ~= "" then
lightLogo = tData.image
darkLogo = (tData.image_dark and tData.image_dark ~= "") and tData.image_dark or lightLogo
end
end

if lightLogo == "Shield_team.png" and mData then
if mData.image and mData.image ~= "" then
lightLogo = mData.image
else
lightLogo = teamName .. ".png"
end
if mData.image_dark and mData.image_dark ~= "" then
darkLogo = mData.image_dark
else
darkLogo = lightLogo
end
end

local container = html.create('div'):addClass('team-cell-flex')
local logoWrap = container:tag('span'):addClass('team-logo-wrapper')
logoWrap:tag('span'):addClass('logo-lightmode'):wikitext('[[File:' .. lightLogo .. '|20px|link=|class=team-logo]]')
logoWrap:tag('span'):addClass('logo-darkmode'):wikitext('[[File:' .. darkLogo .. '|20px|link=|class=team-logo]]')
container:tag('span'):wikitext('[[' .. teamName .. '|' .. displayName .. ']]')

return tostring(container)
end

function p.main(frame)
local args = frame:getParent().args
local mainTitle = args.title
local tournamentName = getTournamentName(args)

local groupsData = {}
local allTeams = {}
local maxRows = 0

for i = 1, 20 do
local gTitle = args['g' .. i]
local gTeamsStr = args['g' .. i .. 'teams']

if gTitle and gTeamsStr then
local teamList = mw.text.split(gTeamsStr, ",")
local cleanedTeams = {}

for _, tName in ipairs(teamList) do
local trimmedTeam = mw.text.trim(tName)
if trimmedTeam ~= "" then
local isText = false
local printName = trimmedTeam

if trimmedTeam:lower():sub(1, 5) == "text:" then
isText = true
printName = mw.text.trim(trimmedTeam:sub(6))
end

table.insert(cleanedTeams, { name = trimmedTeam, display = printName, textOnly = isText })

if not isText then
table.insert(allTeams, "'" .. sqlEscape(trimmedTeam) .. "'")
end
end
end

table.insert(groupsData, { heading = gTitle, squad = cleanedTeams })
if #cleanedTeams > maxRows then maxRows = #cleanedTeams end
end
end

if #groupsData == 0 then return "" end

local teamSql = table.concat(allTeams, ",")
local tourneyDb = {}
local masterDb = {}

if cargo and cargo.query and teamSql ~= "" then
local tResults = cargo.query("Tournament_Teams", "team, display_name, image, image_dark", { where = "tournament='" .. sqlEscape(tournamentName) .. "' AND team IN (" .. teamSql .. ")", limit = 500 })
if tResults then
for _, row in ipairs(tResults) do tourneyDb[row.team:lower()] = row end
end

local mResults = cargo.query("Teams", "name, image, image_dark", { where = "name IN (" .. teamSql .. ")", limit = 500 })
if mResults then
for _, row in ipairs(mResults) do masterDb[row.name:lower()] = row end
end
end

local wrapper = html.create('div'):addClass('modern-group-draw')
local drawTable = wrapper:tag('table'):addClass('sharp-table')

if mainTitle and mainTitle ~= "" then
local titleRow = drawTable:tag('tr')
titleRow:tag('th'):attr('colspan', tostring(#groupsData)):addClass('distinct-main-header'):wikitext(mainTitle)
end

local topHeader = drawTable:tag('tr')
for _, grp in ipairs(groupsData) do
topHeader:tag('th'):addClass('distinct-group-header'):wikitext(grp.heading)
end

for rIndex = 1, maxRows do
local tableRow = drawTable:tag('tr')
for _, grp in ipairs(groupsData) do
local cellContent = tableRow:tag('td')
local targetData = grp.squad[rIndex]

if targetData then
if targetData.textOnly then
local container = html.create('div'):addClass('team-cell-flex')
local logoWrap = container:tag('span'):addClass('team-logo-wrapper')
logoWrap:tag('span'):addClass('logo-lightmode'):wikitext('[[File:Shield_team.png|20px|link=|class=team-logo]]')
logoWrap:tag('span'):addClass('logo-darkmode'):wikitext('[[File:Shield_team_dark.png|20px|link=|class=team-logo]]')
container:tag('span'):wikitext(targetData.display)
cellContent:node(container)
else
local tData = tourneyDb[targetData.name:lower()]
local mData = masterDb[targetData.name:lower()]
cellContent:wikitext(getTeamDisplay(targetData.name, tData, mData))
end
end
end
end

return tostring(wrapper)
end

return p