Halo Esports Wiki
Advertisement

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('&nbsp;')
					: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
Advertisement