Module:Tournament
From eSportsAmaze
More actions
Documentation for this module may be created at Module:Tournament/doc
local p = {}
local html = mw.html
local lang = mw.getContentLanguage()
-- Helper: Currency Formatter (Wraps in your JS class)
local function formatCurrency(amount)
if not amount or amount == "" or amount == "0" then return "0" end
return '<span class="indian-currency">' .. amount .. '</span>'
end
-- Helper: Logo Logic (Light/Dark/Shield)
local function getLogo(pageName, image, imageDark)
local lightFile = (image ~= "" and image) or (pageName .. '.png')
local darkFile = (imageDark ~= "" and imageDark) or (pageName .. '_dark.png')
local hasLight = mw.title.new('File:' .. lightFile).exists
local hasDark = mw.title.new('File:' .. darkFile).exists
local container = html.create('div'):addClass('infobox-image')
-- Light Mode
local lDiv = container:tag('div'):addClass('logo-lightmode')
if hasLight then
lDiv:wikitext('[[File:' .. lightFile .. '|200px]]')
else
lDiv:wikitext('[[File:Shield_team.png|200px]]')
end
-- Dark Mode
local dDiv = container:tag('div'):addClass('logo-darkmode')
if hasDark then
dDiv:wikitext('[[File:' .. darkFile .. '|200px]]')
elseif hasLight then
dDiv:wikitext('[[File:' .. lightFile .. '|200px]]')
else
dDiv:wikitext('[[File:Shield_team_dark.png|200px]]')
end
return container
end
-- Helper: Date Ranger (Jan 20 – Jan 25, 2026)
local function formatDateRange(startStr, endStr)
if not startStr or startStr == "" then return "TBA" end
-- If there is an end date
if endStr and endStr ~= "" then
local s = lang:formatDate('d M', startStr)
local e = lang:formatDate('d M Y', endStr)
return s .. " – " .. e
else
-- Single date only
return lang:formatDate('d M Y', startStr)
end
end
-- Helper: Add Infobox Row
local function addRow(container, label, value)
if value and value ~= "" then
container:tag('div'):addClass('infobox-row')
:tag('div'):addClass('infobox-label'):wikitext(label):done()
:tag('div'):addClass('infobox-data'):wikitext(value):done()
end
end
-- MAIN 1: Tournament Infobox
function p.infobox(frame)
local args = frame:getParent().args
local page = args.name or mw.title.getCurrentTitle().text
local root = html.create('div'):addClass('infobox')
-- Header
root:tag('div'):addClass('infobox-header'):wikitext(page)
-- Logo
root:node(getLogo(page, args.image, args.image_dark))
-- Data Container
local data = root:tag('div'):addClass('infobox-data-container')
if args.series then
addRow(data, "Series", '[[' .. args.series .. ']]')
end
addRow(data, "Organizer", args.organizer)
addRow(data, "Type", args.type)
addRow(data, "Location", args.location)
addRow(data, "Prize Pool", formatCurrency(args.prizepool))
addRow(data, "Start Date", args.start_date)
addRow(data, "End Date", args.end_date)
if args.winner then
addRow(data, "Winner", "'''[[" .. args.winner .. "]]'''")
end
return tostring(root)
end
-- MAIN 2: List Row (Standard)
function p.listRow(frame)
local args = frame:getParent().args
local page = args.Page or ""
local startDate = args.start_date or ""
local endDate = args.end_date or ""
local organizer = args.organizer or ""
local prize = args.prize_pool or "0"
local winner = args.winner or ""
local tr = html.create('tr')
tr:css('background-color', 'var(--bg-card)')
tr:css('border-bottom', '1px solid var(--border-light)')
-- Date Column
tr:tag('td')
:css('width','140px'):css('white-space','nowrap')
:css('font-size','0.9em'):css('color','var(--text-muted)')
:wikitext(formatDateRange(startDate, endDate))
-- Tournament Name
tr:tag('td')
:css('text-align','left'):css('font-weight','bold'):css('color','var(--text-main)')
:wikitext('[[' .. page .. '|' .. page .. ']]')
-- Organizer
tr:tag('td')
:css('font-size','0.9em'):css('color','var(--text-muted)')
:wikitext(organizer)
-- Prize Pool
tr:tag('td')
:css('text-align','right'):css('color','var(--text-main)')
:wikitext(formatCurrency(prize))
-- Winner
tr:tag('td')
:css('font-size','0.9em'):css('color','var(--text-muted)')
:wikitext(winner)
return tostring(tr)
end
-- MAIN 3: List Row (Main Page Compact)
function p.listRowMain(frame)
local args = frame:getParent().args
local page = args.Page or ""
local startDate = args.start_date or ""
local endDate = args.end_date or ""
local organizer = args.organizer or ""
local prize = args.prize_pool or "0"
local tr = html.create('tr')
tr:css('background-color', 'var(--bg-card)')
tr:css('border-bottom', '1px solid var(--border-light)')
-- Date Column
tr:tag('td')
:css('width','140px'):css('white-space','nowrap')
:css('font-size','0.9em'):css('color','var(--text-muted)')
:wikitext(formatDateRange(startDate, endDate))
-- Tournament Name
tr:tag('td')
:css('text-align','left'):css('font-weight','bold'):css('color','var(--text-main)')
:wikitext('[[' .. page .. '|' .. page .. ']]')
-- Organizer
tr:tag('td')
:css('font-size','0.9em'):css('color','var(--text-muted)')
:wikitext(organizer)
-- Prize Pool
tr:tag('td')
:css('text-align','right'):css('color','var(--text-main)')
:wikitext(formatCurrency(prize))
return tostring(tr)
end
return p