Open main menu

Module:PlayerTeamHistoryEmbeddedAbstract

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