Documentation for this module may be created at Module:ScheduleQueryAbstract/doc
local util_args = require('Module:ArgsUtil')
local util_cargo = require('Module:CargoUtil')
local util_esports = require('Module:EsportsUtil')
local util_form = require('Module:FormUtil')
local util_html = require('Module:HtmlUtil')
local util_table = require("Module:TableUtil")
local util_text = require('Module:TextUtil')
local util_time = require('Module:TimeUtil')
local util_toggle = require('Module:ToggleUtil')
local util_vars = require('Module:VarsUtil')
local i18n = require("Module:I18nUtil")
local LCS = require('Module:LuaClassSystem')
local date = require('Module:Date')
local p = LCS.class.abstract()
local h = {}
p.timezones = { 'PST', 'CET', 'KST' }
p.toggles = {
order = { 'me', 'general' },
displays = {
me = 'Localized',
general = 'Non-Localized'
},
}
p.columnToggles = {
DateLocal = 'me',
TimeLocal = 'me',
PSTme = 'me',
CETme = 'me',
KSTme = 'me',
Date1 = 'general',
Date2 = 'general',
PSTgen = 'general',
CETgen = 'general',
KSTgen = 'general',
Countdown = 'me',
}
function p:init(page)
i18n.init('ScheduleQueryAbstract')
self.columns = { 'DateLocal', 'TimeLocal', 'PSTme', 'CETme', 'KSTme', 'Date1', 'Date2', 'PSTgen', 'CETgen', 'KSTgen', 'Countdown', }
self.widths = {
DateLocal = 120,
TimeLocal = 120,
PSTme = 120,
CETme = 120,
KSTme = 120,
Date1 = 120,
Date2 = 120,
PSTgen = 40,
CETgen = 40,
KSTgen = 40,
Countdown = 85,
}
self.page = util_esports.getOverviewPage(page)
end
function p:printToggler(tbl)
local div = tbl:tag('div')
:addClass('toggle-button')
util_toggle.printOptionFromListTogglers(div, self.toggles)
util_html.clear(tbl)
end
function p:printWidthRow(tbl)
local tr = tbl:tag('tr'):addClass('empty-width-row')
for _, v in ipairs(self.columns) do
local td = tr:tag('td'):css('width', v .. 'px'):wikitext(' ')
if self.columnToggles[v] then
util_toggle.oflCellClasses(td, self.toggles, self.columnToggles[v])
end
end
end
function p:printHeadings(tr)
for _, v in ipairs(self.columns) do
local th = tr:tag('th'):wikitext(i18n.print(v))
if self.columnToggles[v] then
util_toggle.oflCellClasses(th, self.toggles, self.columnToggles[v])
end
end
end
function p:printMatch(tr, row)
local td = tr:tag('td')
td:node(
util_html.vsAlign(
row.Team1:flairlink{len="short"},
row.Team2:flairlink{len="short"}
)
)
return td
end
function p:printDateAndTime(tr, row)
if not row.UTC or row.UTC == '' then
self:printTbdCell(tr, 6, 'me')
self:printTbdCell(tr, 5, 'general')
return
end
local td = tr:tag('td'):wikitext(util_time.dateInLocal(row.UTC))
util_toggle.oflCellClasses(td, self.toggles, 'me')
if not row.HasTime then
self:printTbdCell(tr, 4, 'me')
self:printTbdCell(tr, 5, 'general')
else
local utc = tr:tag('td'):wikitext(util_time.timeInLocal(row.UTC))
util_toggle.oflCellClasses(utc, self.toggles, 'me')
local tz_data = self:getTZData(row)
self:addTZToRow(tr, tz_data)
local dates = h.getAbsoluteDates(row.UTC)
self:addAbsDates(tr, dates)
self:addTZToRowUnlocalized(tr, tz_data, dates)
end
local cd = tr:tag('td')
:wikitext(util_time.countdown(row.UTC))
util_toggle.oflCellClasses(cd, self.toggles, 'me')
end
function p:printTbdCell(tr, colspan, toggleState)
local td = tr:tag('td')
td:attr('colspan', colspan)
:addClass('sfs-tbd')
:wikitext('TBD')
util_toggle.oflCellClasses(td, self.toggles, toggleState)
end
function p:getTZData(row)
util_time.addTimezonesToRowFromUTC(row)
local tbl = {}
for _, v in ipairs(self.timezones) do
local date = row[v]:match('(%d%d%d%d%-%d%d%-%d%d)')
local time = row[v]:match('(%d%d:%d%d)')
tbl[v] = { date = date, time = time }
end
return tbl
end
function p:addTZToRow(tr, data)
for _, v in ipairs(self.timezones) do
local td = tr:tag('td')
:wikitext(data[v].time)
util_toggle.oflCellClasses(td, self.toggles, 'me')
end
end
function h.getAbsoluteDates(str)
local utc_time = util_time.strToTime(str)
local utc_midnight = mw.clone(utc_time)
utc_midnight.hour = 0
utc_midnight.min = 0
utc_midnight.sec = 0
local dif = os.difftime(os.time(utc_time), os.time(utc_midnight))
local dates = {}
if dif >= 43200 then -- 12 * 60 * 60
local today = date(utc_time)
dates[1] = today:fmt('%Y-%m-%d')
local tomorrow = today:adddays(1)
dates[2] = tomorrow:fmt('%Y-%m-%d')
else
local today = date(utc_time)
dates[2] = today:fmt('%Y-%m-%d')
local yesterday = today:adddays(-1)
local y, m, d = yesterday:getdate()
dates[1] = yesterday:fmt('%Y-%m-%d')
end
return dates
end
function p:addAbsDates(tr, dates)
for i, v in ipairs(dates) do
local td = tr:tag('td')
:addClass('sfs-date' .. i)
:wikitext(v)
util_toggle.oflCellClasses(td, self.toggles, 'general')
end
end
function p:addTZToRowUnlocalized(tr, data, dates)
for _, v in ipairs(self.timezones) do
local td = tr:tag('td')
:wikitext(data[v].time)
:attr('data-date', data[v].date)
util_toggle.oflCellClasses(td, self.toggles, 'general')
if data[v].date == dates[1] then
td:addClass('sfs-date1')
elseif data[v].date == dates[2] then
td:addClass('sfs-date2')
end
end
end
return p