[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: |
+ | local PTH = require('Module:PlayerTeamHistoryAbstract'):extends() |
− | |||
− | PTH.CargoStoreTableName = 'Tenures' |
||
local h = {} |
local h = {} |
||
⚫ | |||
− | local p = {} |
||
+ | self:super('init', name) |
||
⚫ | |||
+ | |||
− | 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 |
+ | 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 |
+ | 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