Module:PrizePool: Difference between revisions
From eSportsAmaze
More actions
Esportsamaze (talk | contribs) No edit summary |
Esportsamaze (talk | contribs) No edit summary |
||
| Line 23: | Line 23: | ||
local container = html.create('span') | local container = html.create('span') | ||
if mw.title.new('File:' .. light).exists then | if mw.title.new('File:' .. light).exists then | ||
container:wikitext('[[File:' .. light .. '|link=|class=logo-lightmode]]') | container:wikitext('[[File:' .. light .. '|link=|class=logo-lightmode]]') | ||
| Line 59: | Line 58: | ||
local rankCount = 0 | local rankCount = 0 | ||
for i = 1, 64 do | for i = 1, 64 do | ||
if (args['team_'..i] and args['team_'..i] ~= "") or (args['prize_'..i] and args['prize_'..i] ~= "") then | if (args['team_'..i] and args['team_'..i] ~= "") or (args['prize_'..i] and args['prize_'..i] ~= "") then | ||
| Line 66: | Line 64: | ||
end | end | ||
local collapseLimit = 10 | local collapseLimit = 10 | ||
local isCollapsible = (rankCount > collapseLimit) | local isCollapsible = (rankCount > collapseLimit) | ||
| Line 83: | Line 81: | ||
local seed = args['seed_'..i] | local seed = args['seed_'..i] | ||
if (team and team ~= "") or (prize and prize ~= "") then | if (team and team ~= "") or (prize and prize ~= "") then | ||
hasRankData = true | hasRankData = true | ||
if team and team ~= "" and cargo and cargo.store then | if team and team ~= "" and cargo and cargo.store then | ||
cargo.store('PrizeMoney', { | cargo.store('PrizeMoney', { | ||
| Line 98: | Line 94: | ||
end | end | ||
local targetContainer = rankList | local targetContainer = rankList | ||
if isCollapsible and i > collapseLimit then | if isCollapsible and i > collapseLimit then | ||
| Line 104: | Line 99: | ||
end | end | ||
local row = targetContainer:tag('div'):addClass('prize-row') | local row = targetContainer:tag('div'):addClass('prize-row') | ||
local rankClass = 'rank-other' | local rankClass = 'rank-other' | ||
local rankIcon = place | local rankIcon = place | ||
| Line 117: | Line 110: | ||
row:tag('div'):addClass('pz-rank'):wikitext(rankIcon) | row:tag('div'):addClass('pz-rank'):wikitext(rankIcon) | ||
local teamDiv = row:tag('div'):addClass('pz-team') | local teamDiv = row:tag('div'):addClass('pz-team') | ||
if team and team ~= "" then | if team and team ~= "" then | ||
teamDiv:wikitext(getLogo(team)) | teamDiv:wikitext(getLogo(team)) | ||
teamDiv:wikitext('[[' .. team .. ']]') | teamDiv:wikitext('[[' .. team .. ']]') | ||
else | else | ||
teamDiv:wikitext('TBD'):css('color', 'var(--text-muted)'):css('font-weight', 'normal') | teamDiv:wikitext('TBD'):css('color', 'var(--text-muted)'):css('font-weight', 'normal') | ||
end | end | ||
local infoDiv = row:tag('div'):addClass('pz-info') | local infoDiv = row:tag('div'):addClass('pz-info') | ||
if prize and prize ~= "" then | if prize and prize ~= "" then | ||
| Line 147: | Line 136: | ||
if isCollapsible then | if isCollapsible then | ||
rankList:wikitext(tostring(hiddenDiv)) | rankList:wikitext(tostring(hiddenDiv)) | ||
-- DUAL BUTTON SYSTEM (Swaps on click) | |||
local toggleIds = 'mw-customtoggle-prizepool mw-customtoggle-prizebtn-show mw-customtoggle-prizebtn-hide' | |||
-- Button 1: "View Full Distribution" (Visible initially) | |||
colRank:tag('div') | colRank:tag('div') | ||
:addClass('prize-show-more | :attr('id', 'mw-customcollapsible-prizebtn-show') | ||
:addClass('prize-show-more ' .. toggleIds) | |||
:wikitext('View Full Distribution <i class="fa-solid fa-chevron-down"></i>') | :wikitext('View Full Distribution <i class="fa-solid fa-chevron-down"></i>') | ||
-- Button 2: "Show Less" (Hidden initially) | |||
colRank:tag('div') | |||
:attr('id', 'mw-customcollapsible-prizebtn-hide') | |||
:addClass('prize-show-more mw-collapsible mw-collapsed ' .. toggleIds) | |||
:wikitext('Show Less <i class="fa-solid fa-chevron-up"></i>') | |||
end | end | ||
end | end | ||
| Line 164: | Line 165: | ||
for i = 1, 10 do | for i = 1, 10 do | ||
local awardName = args['award_'..i] | local awardName = args['award_'..i] | ||
local winner = args['award_'..i..'_winner'] | local winner = args['award_'..i..'_winner'] | ||
local team = args['award_'..i..'_team'] | local team = args['award_'..i..'_team'] | ||
local prize = args['award_'..i..'_prize'] | local prize = args['award_'..i..'_prize'] | ||
if awardName and awardName ~= "" then | if awardName and awardName ~= "" then | ||
hasAwardData = true | hasAwardData = true | ||
if (winner or team) and cargo and cargo.store then | if (winner or team) and cargo and cargo.store then | ||
cargo.store('PrizeMoney', { | cargo.store('PrizeMoney', { | ||
| Line 178: | Line 177: | ||
placement = '', | placement = '', | ||
team = team or '', | team = team or '', | ||
player = winner or '', | player = winner or '', | ||
prize = prize, | prize = prize, | ||
award = awardName | award = awardName | ||
| Line 186: | Line 185: | ||
local row = awardList:tag('div'):addClass('award-row') | local row = awardList:tag('div'):addClass('award-row') | ||
local info = row:tag('div'):addClass('award-info') | local info = row:tag('div'):addClass('award-info') | ||
info:tag('div'):addClass('award-name'):wikitext(awardName) | info:tag('div'):addClass('award-name'):wikitext(awardName) | ||
| Line 192: | Line 190: | ||
local winDiv = info:tag('div'):addClass('award-winner') | local winDiv = info:tag('div'):addClass('award-winner') | ||
if winner and winner ~= "" then | if winner and winner ~= "" then | ||
-- CASE 1: Player Won ( | -- CASE 1: Player Won (LINKED) | ||
if team and team ~= "" then winDiv:wikitext(getLogo(team)) end | if team and team ~= "" then winDiv:wikitext(getLogo(team)) end | ||
winDiv:wikitext(winner) | winDiv:wikitext('[[' .. winner .. ']]') -- << LINK ADDED HERE | ||
elseif team and team ~= "" then | elseif team and team ~= "" then | ||
-- CASE 2: Team Won | -- CASE 2: Team Won | ||
winDiv:wikitext(getLogo(team)) | winDiv:wikitext(getLogo(team)) | ||
winDiv:wikitext('[[' .. team .. ']]') | winDiv:wikitext('[[' .. team .. ']]') | ||
| Line 210: | Line 205: | ||
end | end | ||
if prize and prize ~= "" then | if prize and prize ~= "" then | ||
row:tag('div'):addClass('award-prize'):wikitext(currency .. formatMoney(prize)) | row:tag('div'):addClass('award-prize'):wikitext(currency .. formatMoney(prize)) | ||
Revision as of 06:00, 27 January 2026
Documentation for this module may be created at Module:PrizePool/doc
local p = {}
local html = mw.html
local cargo = mw.ext.cargo
-- Helper: Format Money (e.g., 500000 -> 5,00,000)
local function formatMoney(amount)
if not amount then return "0" end
local formatted = amount
while true do
formatted, k = string.gsub(formatted, "^(-?%d+)(%d%d%d)", '%1,%2')
if (k==0) then break end
end
return formatted
end
-- Helper: Get Team Logo (Light/Dark aware)
local function getLogo(teamName)
if not teamName or teamName == "" or teamName == "TBD" then return "" end
local clean = teamName:gsub("'", "")
local light = clean .. '.png'
local dark = clean .. '_dark.png'
local container = html.create('span')
if mw.title.new('File:' .. light).exists then
container:wikitext('[[File:' .. light .. '|link=|class=logo-lightmode]]')
else
container:wikitext('[[File:Shield_team.png|link=|class=logo-lightmode]]')
end
if mw.title.new('File:' .. dark).exists then
container:wikitext('[[File:' .. dark .. '|link=|class=logo-darkmode]]')
elseif mw.title.new('File:' .. light).exists then
container:wikitext('[[File:' .. light .. '|link=|class=logo-darkmode]]')
else
container:wikitext('[[File:Shield_team_dark.png|link=|class=logo-darkmode]]')
end
return tostring(container)
end
function p.main(frame)
local args = frame:getParent().args
local currency = args.currency or "₹"
local tournamentName = args.tournament or mw.title.getCurrentTitle().text
-- Main Grid Wrapper
local grid = html.create('div'):addClass('prize-section-grid')
-- ==========================================
-- COLUMN 1: RANKINGS (TEAMS)
-- ==========================================
local colRank = grid:tag('div'):addClass('prize-col-rank')
colRank:tag('div'):addClass('prize-header'):wikitext('Prize Pool Distribution')
local rankList = colRank:tag('div'):addClass('prize-list')
local hasRankData = false
local rankCount = 0
for i = 1, 64 do
if (args['team_'..i] and args['team_'..i] ~= "") or (args['prize_'..i] and args['prize_'..i] ~= "") then
rankCount = rankCount + 1
end
end
local collapseLimit = 10
local isCollapsible = (rankCount > collapseLimit)
-- Collapsible Container
local hiddenDiv = nil
if isCollapsible then
hiddenDiv = html.create('div')
:addClass('mw-collapsible mw-collapsed')
:attr('id', 'mw-customcollapsible-prizepool')
end
for i = 1, 64 do
local place = args['place_'..i] or (i .. '.')
local team = args['team_'..i]
local prize = args['prize_'..i]
local seed = args['seed_'..i]
if (team and team ~= "") or (prize and prize ~= "") then
hasRankData = true
if team and team ~= "" and cargo and cargo.store then
cargo.store('PrizeMoney', {
tournament = tournamentName,
placement = i,
team = team,
prize = prize,
award = ''
})
end
local targetContainer = rankList
if isCollapsible and i > collapseLimit then
targetContainer = hiddenDiv
end
local row = targetContainer:tag('div'):addClass('prize-row')
local rankClass = 'rank-other'
local rankIcon = place
if i == 1 then rankClass = 'rank-1'; rankIcon = '🥇' end
if i == 2 then rankClass = 'rank-2'; rankIcon = '🥈' end
if i == 3 then rankClass = 'rank-3'; rankIcon = '🥉' end
row:addClass(rankClass)
row:tag('div'):addClass('pz-rank'):wikitext(rankIcon)
local teamDiv = row:tag('div'):addClass('pz-team')
if team and team ~= "" then
teamDiv:wikitext(getLogo(team))
teamDiv:wikitext('[[' .. team .. ']]')
else
teamDiv:wikitext('TBD'):css('color', 'var(--text-muted)'):css('font-weight', 'normal')
end
local infoDiv = row:tag('div'):addClass('pz-info')
if prize and prize ~= "" then
infoDiv:tag('span'):addClass('pz-prize'):wikitext(currency .. ' ' .. formatMoney(prize))
end
if seed and seed ~= "" then
infoDiv:tag('span'):addClass('pz-seed'):wikitext(seed)
end
end
end
-- Assemble Ranking List
if not hasRankData then
rankList:tag('div'):addClass('prize-empty')
:wikitext('<i class="fa-solid fa-trophy"></i><br>Prize Pool TBD')
else
if isCollapsible then
rankList:wikitext(tostring(hiddenDiv))
-- DUAL BUTTON SYSTEM (Swaps on click)
local toggleIds = 'mw-customtoggle-prizepool mw-customtoggle-prizebtn-show mw-customtoggle-prizebtn-hide'
-- Button 1: "View Full Distribution" (Visible initially)
colRank:tag('div')
:attr('id', 'mw-customcollapsible-prizebtn-show')
:addClass('prize-show-more ' .. toggleIds)
:wikitext('View Full Distribution <i class="fa-solid fa-chevron-down"></i>')
-- Button 2: "Show Less" (Hidden initially)
colRank:tag('div')
:attr('id', 'mw-customcollapsible-prizebtn-hide')
:addClass('prize-show-more mw-collapsible mw-collapsed ' .. toggleIds)
:wikitext('Show Less <i class="fa-solid fa-chevron-up"></i>')
end
end
-- ==========================================
-- COLUMN 2: SPECIAL AWARDS (PLAYERS OR TEAMS)
-- ==========================================
local colAward = grid:tag('div'):addClass('prize-col-award')
colAward:tag('div'):addClass('prize-header'):wikitext('Special Awards')
local awardList = colAward:tag('div'):addClass('prize-list')
local hasAwardData = false
for i = 1, 10 do
local awardName = args['award_'..i]
local winner = args['award_'..i..'_winner']
local team = args['award_'..i..'_team']
local prize = args['award_'..i..'_prize']
if awardName and awardName ~= "" then
hasAwardData = true
if (winner or team) and cargo and cargo.store then
cargo.store('PrizeMoney', {
tournament = tournamentName,
placement = '',
team = team or '',
player = winner or '',
prize = prize,
award = awardName
})
end
local row = awardList:tag('div'):addClass('award-row')
local info = row:tag('div'):addClass('award-info')
info:tag('div'):addClass('award-name'):wikitext(awardName)
local winDiv = info:tag('div'):addClass('award-winner')
if winner and winner ~= "" then
-- CASE 1: Player Won (LINKED)
if team and team ~= "" then winDiv:wikitext(getLogo(team)) end
winDiv:wikitext('[[' .. winner .. ']]') -- << LINK ADDED HERE
elseif team and team ~= "" then
-- CASE 2: Team Won
winDiv:wikitext(getLogo(team))
winDiv:wikitext('[[' .. team .. ']]')
else
-- CASE 3: TBD
winDiv:wikitext("TBD"):css('color', 'var(--text-muted)'):css('font-weight', 'normal')
end
if prize and prize ~= "" then
row:tag('div'):addClass('award-prize'):wikitext(currency .. formatMoney(prize))
end
end
end
if not hasAwardData then
awardList:tag('div'):addClass('prize-empty')
:wikitext('<i class="fa-solid fa-medal"></i><br>Awards TBD')
end
return tostring(grid)
end
return p