Halo Esports Wiki
[checked revision][checked revision]
No edit summary
No edit summary
Line 1: Line 1:
  +
-- Subclasses PTH Abstract
  +
-- Is subclassed by regular & compact views + stores
  +
 
local util_args = require('Module:ArgsUtil')
 
local util_args = require('Module:ArgsUtil')
 
local util_cargo = require("Module:CargoUtil")
 
local util_cargo = require("Module:CargoUtil")
Line 18: Line 21:
 
local m_region = require('Module:Region')
 
local m_region = require('Module:Region')
   
local PTH = require('Module:PlayerTeamHistoryEmbeddedAbstract'):extends()
+
local PTH = require('Module:PlayerTeamHistoryAbstract'):extends()
 
PTH.CargoStoreTableName = 'Tenures'
 
   
 
local h = {}
 
local h = {}
   
 
function PTH:init(name)
local p = {}
 
  +
self:super('init', name)
function p.main(frame)
 
  +
local args = util_args.merge()
 
  +
self.COLUMNS = {
return p._main(args)
 
  +
'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
 
end
   
function p._main(args)
+
function h.printOneEditButton(div, link, text)
  +
if not link then return end
return PTH('PlayerTeamHistory'):run(args)
 
  +
div:tag('span')
  +
:addClass('player-team-history-edit-' .. text)
  +
:addClass('logged-in-link')
  +
:wikitext(text)
  +
:attr('data-href', link)
 
end
 
end
   
return p
+
return PTH

Revision as of 18:02, 18 August 2020

Documentation for this module may be created at Module:PlayerTeamHistory/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 m_region = require('Module:Region')

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