Halo Esports Wiki
Advertisement

To edit the documentation or categories for this module, click here.


local lang = mw.getLanguage('en')
local m_region = require('Module:Region')
local m_country = require('Module:Country')
local social = require('Module:Infobox/Social')
local util_args = require('Module:ArgsUtil')
local util_infobox = require('Module:InfoboxUtil')
local util_html = require('Module:HTMLUtil')
local util_cargo = require('Module:CargoUtil')
local util_dpl = require('Module:DPLUtil')
local util_table = require('Module:TableUtil')

local NOIMAGE = 'Unknown Infobox Image - Team.png'

local LAYOUT = {
	tabs = 'TeamTabsHeader',
	sections = { 'Team Information', 'History', 'Social Media & Links', 'Current Roster' },
	contents = {
		{ 'Org Location', 'Team Location', 'FoundedIn', 'Region', 'Owner', 'HeadCoach', 'Sponsor', 'Partner' },
		{ 'history', history = 'wide' },
		{ 'social', social = 'wide' },
		{ 'rosterimage', rosterimage = 'wide' }
	},
	i18n = {
		FoundedIn = 'Founded In',
		Owner = 'Owner(s)',
		HeadCoach = 'Head Coach',
		Sponsor = 'Sponsor(s)',
		Partner = 'Partner(s)',
	}
}

local SPECIAL = {
	allstar = { cat = 'All-Star Regional Teams', nonav = 'Yes', nocargo = true },
	aprilfools = { nonav = 'Yes', nocargo = true },
	city = { nonav = 'Yes', nocargo = true },
	clubmasters = { nonav = 'Yes', nocargo = true },
	collegiate = { cat = 'Collegiate Teams', nocargo = false },
	iesf = { cat = 'IESF Teams', nonav = 'Yes', nocargo = true },
	nasg = { nonav = 'Yes', nocargo = true },
	national = { cat = 'National Teams', nonav = 'Yes', nocargo = true },
}

local h = {}

function h.getProcessed(args)
	local tbl = {
		pagename = mw.title.getCurrentTitle().text,
		lc = args.name and lang:lcfirst(args.name) == args.name,
		isdisbanded = (args.isdisbanded or args.neworg or args.isrenamed) and lang:lc(args.isdisbanded or '') ~= 'no',
		special = args.special and SPECIAL[args.special] or {}
	}
	return tbl
end

function h.processDisplay(args, processed)
	local social = social.makeSocialSection(args)
	local display = {
		title = args.name or processed.pagename,
		image = h.getImage(args.image, processed.pagename),
		notice = h.makeNotice(args),

		['Org Location'] = args.orgcountry and m_country.rightlong(args.orgcountry),
		['Team Location'] = args.country and m_country.rightlong(args.country),
		FoundedIn = args.foundedcountry and m_country.rightlong(args.foundedcountry),
		Region = args.region and m_region.rightmedium(args.region),
		Owner = args.owner,
		HeadCoach = args.headcoach,
		Sponsor = args.sponsor,
		Partner = args.partner,
		
		social = next(social) and tostring(util_html.blockBox(social)),
		
		history = h.makeHistory(args),
		
		rosterimage = args.rosterphoto and ('[[File:%s|center|320px]]'):format(args.rosterphoto),

	}
	return display
end

-- might need to rewrite this to depend on the teamLink variable instead of the actual pagename
function h.getImage(image, pagename)
	if image and mw.title.makeTitle('Media', image).exists then
		return image
	end
	local profile = ('%slogo profile.png'):format(pagename)
	if mw.title.makeTitle('Media', profile).exists then
		return profile
	end
	local square = ('%slogo square.png'):format(pagename)
	if mw.title.makeTitle('Media', square).exists then
		return square
	end
	return NOIMAGE
end

function h.makeNotice(args)
	if args.isdisbanded and lang:lc(args.isdisbanded) == 'yes' then
		return 'Team has disbanded.'
	elseif args.neworg then
		return ('[[%s|Roster has joined a new organization.]]'):format(args.neworg)
	elseif args.isrenamed then
		return ('[[%s|Team has renamed.]]'):format(args.isrenamed)
	else
		return false
	end
end

function h.makeHistory(args)
	if not args.created then return false end
	local tbl = mw.html.create('table')
		:addClass('infobox-subtable')
	h.makeHistoryLine(tbl, 'Created', args.created, args.created2 and 1)
	h.makeHistoryLine(tbl, 'Disbanded', args.disbanded, args.created2 and 1)
	local i = 2
	while args['created' .. i] do
		h.makeHistoryLine(tbl, 'Created', args['created' .. i], i)
		h.makeHistoryLine(tbl, 'Disbanded', args['disbanded' .. i], i)
		i = i + 1
	end
	return tostring(tbl)
end

function h.makeHistoryLine(tbl, label, content, i)
	if not content then return end
	tbl:tag('tr')
		:tag('th')
			:addClass('teamdate')
			:wikitext(label .. (i and (' (%s)'):format(i) or ''))
		:done()
		:tag('td')
			:wikitext(content)
		:done()
	:done()
	return
end

function h.processCargo(args, processed)
	return {
		{
			'',
			_table = 'InfoboxTeam',
			Name = args.name,
			Location = args.orgcountry,
			TeamLocation = args.country,
			Region = m_region.long(args.region),
			Image = args.image,
			Twitter = args.twitter,
			Youtube = args.youtube,
			Facebook = args.facebook,
			Instagram = args.instagram,
			Discord = args.discord,
			Snapchat = args.snapchat,
			Vk = args.vk,
			Subreddit = args.subreddit,
			RosterPhoto = args.rosterphoto,
			IsDisbanded = processed.isdisbanded and 'Yes' or 'No',
			IsLowercase = processed.lc and 'Yes' or 'No',
		}
	}
end

function h.processVariables(args, processed)
	return {
		suppressorgnavbox = args.special and SPECIAL[args.special] and SPECIAL[args.special].nonav,
	}
end

function h.processCategories(args, processed)
	local tbl = {
		args.region and (m_region.adjective(args.region) .. ' Teams') or 'Teams Without Region In Infobox',
		processed.isdisbanded and 'Inactive Teams' or 'Active Teams',
		args.country and ('%s Teams'):format(m_country.localization(args.country)),
		args.special and SPECIAL[args.special] and SPECIAL[args.special].cat,
	}
	return tbl
end

local p = {}
function p.main(args)
	local processed = h.getProcessed(args)
	
	local settings = {
		lc = processed.lc,
		nocargo = mw.title.getCurrentTitle().nsText ~= '' or args.nocargo or processed.special.nocargo,
		nocat = mw.title.getCurrentTitle().nsText ~= '' or args['no-cat'],
	}
	
	local display = h.processDisplay(args, processed)
	local cargo = h.processCargo(args, processed)
	local variables = h.processVariables(args, processed)
	local categories = h.processCategories(args, processed)
	
	return {
		display = display,
		cargo = cargo,
		settings = settings,
		categories = categories,
		variables = variables,
		layout = LAYOUT
	}
end

return p
Advertisement