Halo Esports Wiki

We are currently performing extensive maintenance to this wiki and as a result there will likely be errors. Please be patient while we work to fix all problems.

READ MORE

Halo Esports Wiki
Advertisement

Documentation for this module may be created at Module:PlayerTeamHistoryEmbeddedAbstract/doc

-- Subclasses PTH Abstract
-- Is subclassed by regular & compact views + stores

local util_args = require('Module:ArgsUtil')
local util_cargo = require("Module:CargoUtil")
local util_esports = require("Module:EsportsUtil")
local util_html = require("Module:HtmlUtil")
local util_map = require("Module:MapUtil")
local util_math = require("Module:MathUtil")
local util_news = require("Module:NewsUtil")
local util_source = require("Module:SourceUtil")
local util_table = require("Module:TableUtil")
local util_text = require("Module:TextUtil")
local util_time = require("Module:TimeUtil")
local util_timedelta = require("Module:TimedeltaUtil")
local util_vars = require("Module:VarsUtil")
local i18n = require('Module:i18nUtil')
local lang = mw.getLanguage('en')

local m_team = require('Module:Team')

local PTH = require('Module:PlayerTeamHistoryAbstract'):extends()

local h = {}

function PTH:init(name)
	self:super('init', name)
	
	self.COLUMNS = {
		'RegionDisplay', 'TeamDisplay', 'RoleDisplay', 'DateJoinDisplay', 'DateLeaveDisplay', 'DurationDisplay',
		classes = {
			RoleDisplay = 'player-team-history-role',
		},
		colclasses = {
			RoleDisplay = 'unsortable',
			RegionDisplay = 'unsortable',
			StatusDisplay = 'unsortable',
		},
		sorttypes = { DateJoinDisplay = 'number', DateLeaveDisplay = 'number', DurationDisplay = 'number' }
	}
	
end

function PTH:getStatusAndUpdateFlag(row)
	if row.StatusJoin then
		self.INCLUDE_STATUS = true
	end
	
	-- originally this printed Status but actually we should be printing the StatusJoin
	-- or well i think so......
	row.StatusDisplay = i18n.print(row.StatusJoin)
end

-- cargo STORE
function PTH:storeCargo(changesByLine)
	util_map.selfRowsInPlace(
		self,
		changesByLine,
		PTH.processAndStoreCargoRow,
		changesByLine
	)
end

function PTH:processAndStoreCargoRow(row, changesByLine)
	local cargoRow = self:getCargoVariables(row, changesByLine)
	util_cargo.store(cargoRow)
end

function PTH:getCargoVariables(row, changesByLine)
	-- these aren't exhaustively every interesting variable
	-- this table should be joined to RosterChanges twice
	-- once as RCJoin (on RosterChangeIdJoin)
	-- and once as RCLeave (on RosterChangeIdLeave)
	local cargoVariables = {
		_table = self.CargoStoreTableName,
		Player = row.Player,
		Team = row.Team,
		DateJoin = row.DateJoin,
		DateLeave = row.DateLeave,
		Duration = self:getDurationInDays(row),
		RosterChangeIdJoin = row.RosterChangeIdJoin,
		RosterChangeIdLeave = row.RosterChangeIdLeave,
		RosterChangeIds = util_table.concat(row.RosterChangeIds, ','),
		ResidencyLeave = row.ResidencyLeave or util_vars.getVar('residency'),
		NameLeave = h.getCurrentName(row),
		NextTeam = h.getNextTeamValue(row, changesByLine),
		IsCurrent = not row.TeamLeave,
		ContractEnd = row.ContractEnd,
	}
	cargoVariables.NextIsRetired = h.getNextIsRetiredValue(row, cargoVariables)
	return cargoVariables
end

function PTH:getDurationInDays(row)
	if not row.DateJoin or not row.DateLeave then return nil end
	if row.IsApproxDateJoin or row.IsApproxDateLeave then return nil end
	return tonumber(util_timedelta.approxDurationDays(self:getDurationArgs(row)))
end

function h.getCurrentName(row)
	return row.PlayerLeave or util_vars.getVar('current_id')
end

function h.getNextTeamValue(row, changesByLine)
	if row.NextTeam then return row.NextTeam end
	if not row.TeamLeave then return nil end
	if row.index == #changesByLine then return end
	return changesByLine[row.index +1].Team
end

function h.getNextIsRetiredValue(row, cargoVariables)
	if not row.TeamLeave then return nil end
	if cargoVariables.NextTeam then return false end
	return util_vars.getBool('isretired')
end

-- display
function PTH:getTeamDisplay(row)
	return row.TeamJoin and m_team.rightmediumlinked(row.TeamLeave or row.TeamJoin)
end

function PTH:getDateDisplay(row, when)
	return util_news.getDateAndRefDisplayForTable(row, when)
end

function PTH:printEditButtons(td, row)
	local div = td:tag('div')
		:addClass('player-team-history-edit')
	h.printOneEditButton(div, row._pageNameJoin, 'ej')
	h.printOneEditButton(div, row._pageNameLeave, 'el')
end

function h.printOneEditButton(div, link, text)
	if not link then return end
	div:tag('span')
		:addClass('player-team-history-edit-' .. text)
		:addClass('logged-in-link')
		:wikitext(text)
		:attr('data-href', link)
end

return PTH
Advertisement