To edit the documentation or categories for this module, click here.
local p = {}
function p.teamRoster(frame)
local args = frame
if frame == mw.getCurrentFrame() then
args = require( 'Module:ProcessArgs' ).merge( true )
else
frame = mw.getCurrentFrame()
end
local lang = mw.getLanguage('en')
args.nocargo = 'yes' -- TeamRosters are always taken from Template:TournamentResultsLine, never from here
local Flag = mw.loadData('Module:Flagnames')
local Role = require('Module:Role').role
local Team = require('Module:Team').team
local TeamImage = require('Module:TeamImage').teamImage
local thisteam = Team{args['team'],'teamlinkname'}
-- TODO: add actual footnote support eventually
local cargo = true
if lang:lc(args['nocargo'] or 'no' ) == 'yes' or not mw.title.getCurrentTitle():inNamespace(0) then
cargo = false
end
local iscomplete = "Yes"
if lang:lc(args['isincomplete'] or 'no' ) == 'yes' then
iscomplete = "No"
end
--markup / data that we will eventually store in cargo
local data = {
Roster = {},
RosterLinks = {},
Roster_Linked = {},
Roles = {},
Roles_Markup = {},
Flags = {},
IsUsed = {},
Footnotes = {},
}
local constants = {
Team = Team{thisteam, "teamname"},
TeamLink = thisteam,
Team_Markup = Team{thisteam},
Tournament = frame:callParserFunction('#var','Event Name'),
IsComplete = iscomplete,
['_table'] = "TournamentRosters"
}
--markup we need to make that we won't store in cargo
local Flags = {}
local footnoteteam = ''
if args['footnoteteam'] then
footnoteteam = '<sup>' .. args['footnoteteam'] .. '</sup>'
end
-- do all needed markup here
local i = 1
while i <= 4 or args['player' .. i] do
data.Flags[i] = args['flag' .. i] or ''
Flags[i] = Flag[lang:lc(args['flag' .. i] or '')]
data.Roster[i] = args['player' .. i] or ''
data.RosterLinks[i] = args['link' .. i] or data.Roster[i]
data.Roles[i] = args['role' .. i] or ''
data.Footnotes[i] = args['footnote' .. i] or ''
if args['role' .. i] then
roles = mw.text.split(args['role' .. i],',')
for index, role in ipairs(roles) do
role = mw.text.trim(role)
roles[index] = Role{role, 'onlyimage'}
end
data.Roles_Markup[i] = table.concat(roles)
else
data.Roles_Markup[i] = ''
end
if lang:ucfirst(args['isunused' .. i] or 'No') == 'Yes' then
data.Roster_Linked[i] = "''[[" .. data.RosterLinks[i] .. '|' .. data.Roster[i] .. "]]''"
data.IsUsed[i] = 'No'
else
data.Roster_Linked[i] = "[[" .. data.RosterLinks[i] .. '|' .. data.Roster[i] .. "]]"
data.IsUsed[i] = 'Yes'
end
playerdata = {
Name = data.Roster[i],
Link = data.RosterLinks[i],
['_table'] = "TournamentPlayers",
Team = thisteam,
Active = data.IsUsed[i],
}
if cargo then
frame:callParserFunction('#cargo_store:', playerdata)
end
i = i + 1
end
-- global indexing variable for toggle IDs
local rosterN = tonumber(frame:callParserFunction('#var', 'rosterN')) or 1
frame:callParserFunction('#vardefine', 'rosterN', rosterN + 1)
-- constants that are defined here to clean up later code
local togglePlayers = '_toggle_inithide _toggle RosterPlayers Roster' .. rosterN .. 'Players'
local toggleLogos = '_toggle RosterLogos Roster' .. rosterN .. 'Logo'
local togglerPlayers = '_toggler_show-Roster' .. rosterN .. 'Players _toggler_hide-Roster' .. rosterN .. 'Logo'
local togglerLogos = '_toggler_show-Roster' .. rosterN .. 'Logo _toggler_hide-Roster' .. rosterN .. 'Players'
local roleStyle = {
height = '0',
overflow = 'visible',
position = 'relative',
['z-index'] = '99',
opacity = '0.5',
float = 'right'
}
local playerStyle = {
position = 'relative',
['z-index'] = '100'
}
-- end constants
-- make top part of table & logo
local tbl = mw.html.create('table')
:addClass('wikitable')
:css({ ['margin-top'] = '2px', width = "150px" })
:tag('caption')
:tag('span')
:css('font-weight','700')
:wikitext(args['seed'])
:done()
:done()
:tag('tr')
:addClass(logotoggle)
:tag('th')
:css({
['text-align'] = 'center',
['line-height'] = "130%",
['font-size'] = '80%',
padding = '0',
})
:tag('div')
:css('position','relative')
:tag('div')
:css({ position = "absolute", right = "2px" })
:tag('span')
:addClass(toggleLogos)
:addClass(togglerPlayers)
:wikitext('[[File:Team Icon - Show.png|x13px|link=]]')
:done()
:tag('span')
:addClass(togglePlayers)
:addClass(togglerLogos)
:wikitext('[[File:Team Icon - Hide.png|x13px|link=]]')
:done()
:done()
:wikitext(Team{thisteam, "mediumplainlinked"} .. footnoteteam)
:done()
:done()
:done()
:tag('tr')
:addClass(toggleLogos)
:tag('td')
:css({ ["text-align"] = "center", ["line-height"] = '133px', width = '150px', padding = '0 3px' })
:wikitext(TeamImage{thisteam, size = '130px' })
:done()
:done()
-- print players to table
local j = 1
while j < i do
tbl:tag('tr')
:addClass(togglePlayers)
:tag('td')
:css({ ['font-weight'] = '700', ['line-height'] = '22px', width = '150px' })
:tag('span')
:css(roleStyle)
:wikitext(data.Roles_Markup[j])
:done()
:tag('span')
:css(playerStyle)
:wikitext(Flags[j])
:wikitext(' ')
:wikitext(data.Roster_Linked[j])
:done()
:done()
:done()
j = j + 1
end
-- store cargo if we're doing that
if cargo then
for key, value in pairs(data) do
data[key] = table.concat(value, ';;')
end
for key, value in pairs(constants) do
data[key] = value
end
frame:callParserFunction('#cargo_store:', data)
end
output = tostring(tbl)
return output
end
return p