Module:Infobox/Team

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_table = require('Module:TableUtil') local util_title = require("Module:TitleUtil")

local Country = require('Module:Country') local Region = require('Module:Region') local m_team = require('Module:Team')

local IntroSentence = require('Module:IntroSentence/Team').main

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

local Infobox = require('Module:Infobox'):extends

Infobox.LAYOUT = { tabs = 'TeamTabsHeader', sections = { 'Team Information', 'History', 'Social Media & Links', 'Current Roster' }, contents = { { 'Org Location', 'Team Location', 'FoundedIn', 'Region', 'Owner', 'HeadCoach', 'Sponsor', 'Partner', 'Affiliated' }, { 'history', history = 'wide' }, { 'social', social = 'wide' }, { 'rosterimage', rosterimage = 'wide' } }, } Infobox.type = 'Team'

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

local h = {} local p = {} function p.main(frame) local args = util_args.merge return Infobox(args):run end

function Infobox:castArgs(args) args.region = Region(args.region) args.special = args.special and args.special:lower args._title = args.name args.isdisbanded = util_args.castAsBool(args.isdisbanded) args.neworg = util_args.norm(args.neworg) args.isrenamed = util_args.norm(args.isrenamed) args.orgcountry = Country(args.orgcountry) args.country = Country(args.country) args.foundedcountry = Country(args.foundedcountry) end

function Infobox:validateArgs(args) if args.special and not SPECIAL[args.special] then error('Invalid special specification - perhaps you need to add new preload at Module:Infobox/Team?') end end

function Infobox:getProcessed(args) local processed = self:super('getProcessed', args) processed.isdisbanded = args.isdisbanded or args.neworg or args.isrenamed or args.isinactive processed.special = args.special and SPECIAL[args.special] or {} processed.image = h.getImage(args.image, processed.pagename) return processed end

function Infobox:getDisplay(args, processed) local display = self:super('getDisplay', args, processed) local tbl = { title = args.name or processed.pagename, image = not processed.isLowContent and processed.image, notice = h.makeNotice(args),

['Org Location'] = args.orgcountry:flair, ['Team Location'] = args.country:flair, FoundedIn = args.foundedcountry:flair, Region = args.region:flair, Owner = args.owner, HeadCoach = args.headcoach, Sponsor = args.sponsor, Partner = args.partner, Affiliated = h.getAffiliated(args), history = h.makeHistory(args), rosterimage = args.rosterphoto and (''):format(args.rosterphoto), class = h.getClass(args, processed)

}	return Infobox.mergeDisplay(display, tbl) end

function h.getAffiliated(args) if not args.affiliated and not args.academy then elseif not args.academy then return m_team.plainlinked(args.affiliated) elseif not args.affiliated then return m_team.plainlinked(args.academy) else local links = { m_team.plainlinked(args.affiliated), m_team.plainlinked(args.academy), }		return util_table.concat(links, ' ') end 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 then return 'Team has disbanded.' elseif args.neworg then return ('Roster has joined a new organization.'):format(args.neworg) elseif args.isrenamed then return ('Team has renamed.'):format(args.isrenamed) elseif args.isinactive then return 'Team is inactive.' 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.getClass(args, processed) local listOfClasses = { processed.isLowContent and 'infobox-low-content', }	return util_table.concat(listOfClasses, ' ') end

function Infobox:getCargo(args, processed) local cargo = self:super('getCargo', args, processed) if processed.special.nocargo then return cargo end cargo[#cargo+1] = { '',		_table = 'Teams', Name = args.name, OverviewPage = mw.title.getCurrentTitle.text, Short = m_team.short(mw.title.getCurrentTitle.text), OrganizationPage = args.organization, Location = args.orgcountry, TeamLocation = args.country, Region = args.region, Image = args.image, Twitter = args.twitter, Website = args.website, 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, IsLowercase = processed.lc, RenamedTo = h.renamedTo(args.isrenamed), }	return cargo end

function h.renamedTo(isrenamed) if not isrenamed then return nil end return m_team.teamlinkname(isrenamed) end

function Infobox:getVariables(args, processed) local variables = self:super('getVariables', args, processed) local tbl = { suppressorgnavbox = processed.special.nonav, introSentence = h.getIntroSentence(args, processed), }	return util_table.merge(variables, tbl) end

function h.getIntroSentence(args, processed) local data = mw.clone(args) data.name = args.name or processed.pagename return IntroSentence(data) end

function Infobox:getCategories(args, processed) local categories = self:super('getCategories', args, processed) local tbl = { args.region:exists and (args.region:get('adjective') .. ' Teams') or 'Teams Without Region In Infobox', 'Teams', processed.isdisbanded and 'Inactive Teams' or 'Active Teams', args.country:exists and ('%s Teams'):format(args.country:get('adjective')), processed.special.cat, }	return util_table.mergeArrays(categories, tbl) end

return p