Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
62 changes: 31 additions & 31 deletions src/ScheduleArea.js
Original file line number Diff line number Diff line change
Expand Up @@ -38,15 +38,15 @@ class Event {

this.div.style.width = width + "px"
this.div.innerHtml = ""
let hoursWide = width / 200
const hoursWide = width / 200
if (hoursWide < 4) {
let textDiv = document.createElement("div")
const textDiv = document.createElement("div")
textDiv.innerText = this.name
textDiv.classList.add("eventtextblock")
this.div.appendChild(textDiv)
} else {
for (let i = 0; i <= hoursWide - 2; i += 2) {
let textDiv = document.createElement("div")
const textDiv = document.createElement("div")
textDiv.innerText = this.name
textDiv.classList.add("eventtextblock")
textDiv.style.left = i * 200 + "px"
Expand All @@ -64,7 +64,7 @@ class Time {

this.div = document.createElement("div")
this.div.classList.add("timeblock")

let displayText = this.date.toLocaleString("en-US", {weekday: "long", timeZone: "America/Los_Angeles"}) + " "
let hour = this.date.toLocaleString("en-US", {hour: "numeric", timeZone: "America/Los_Angeles"})
if (hour === "12 PM") {
Expand All @@ -81,7 +81,7 @@ class TimeGap {
constructor(index) {
this.gap = true
this.index = index

this.div = document.createElement("div")
this.div.classList.add("timeblock")
this.div.style.backgroundColor = "#666"
Expand All @@ -104,9 +104,9 @@ class CurrentTimeIndicator {
}

updatePosition() {
let now = Date.now()
let firstTime = this.schedule.xAxisItems[0]
let lastTime = this.schedule.xAxisItems[this.schedule.xAxisItems.length - 1]
const now = Date.now()
const firstTime = this.schedule.xAxisItems[0]
const lastTime = this.schedule.xAxisItems[this.schedule.xAxisItems.length - 1]
let barVisible = true
if (now < firstTime.date.getTime()) {
barVisible = false
Expand All @@ -126,9 +126,9 @@ class CurrentTimeIndicator {
}

let hourBlock = this.schedule.xAxisItems[0]
for (let item of this.schedule.xAxisItems) {
for (const item of this.schedule.xAxisItems) {
if (item.gap) continue
let itemTime = item.date.getTime()
const itemTime = item.date.getTime()
if (itemTime < now) {
hourBlock = item
} else {
Expand All @@ -142,7 +142,7 @@ class CurrentTimeIndicator {
} else if (timeOffset > 1) {
timeOffset = 1
}
let xPosition = (hourBlock.index + timeOffset) * 200
const xPosition = (hourBlock.index + timeOffset) * 200

this.mainDiv.style.left = xPosition + "px"
this.secondaryDiv.style.left = xPosition + "px"
Expand Down Expand Up @@ -188,12 +188,12 @@ export class ScheduleArea {
}

addEvent(data) {
let event = new Event(data);
const event = new Event(data);
this.events.set(event.id, event);
}

addLocation(data) {
let location = new Location(data, this.yAxisItems.length)
const location = new Location(data, this.yAxisItems.length)
this.yAxisItems.push(location)
this.yAxisDiv.appendChild(location.div)
}
Expand All @@ -205,14 +205,14 @@ export class ScheduleArea {

addTimeRange(start, end) {
if (this.xAxisItems.length) {
let divider = new TimeGap(this.xAxisItems.length)
const divider = new TimeGap(this.xAxisItems.length)
this.xAxisItems.push(divider)
this.xAxisDiv.appendChild(divider.div)
}

start = new Date(start).getTime()
end = new Date(end).getTime()

let value = start
while (value < end) {
let time = new Time(value, this.xAxisItems.length)
Expand All @@ -231,7 +231,7 @@ export class ScheduleArea {
this.cornerDiv.style.width = this.yAxisWidth + "px";

//check what events should be visible
for (let event of this.events.values()) {
for (const event of this.events.values()) {
if (event.maturity === "18+" && !settings.shownMaturity.adult) {
event.visible = false
continue
Expand All @@ -253,27 +253,27 @@ export class ScheduleArea {
while (this.yAxisItems.length) {
this.removeLocation(this.yAxisItems[0])
}
let presentEventLocations = new Set()
for (let event of this.events.values()) {
const presentEventLocations = new Set()
for (const event of this.events.values()) {
if (!event.visible) continue
presentEventLocations.add(event.location)
}
for (let location of cohesiveLocationOrder) {
for (const location of cohesiveLocationOrder) {
if (presentEventLocations.has(location)) this.addLocation(location)
}
for (let location of presentEventLocations.values()) {
for (const location of presentEventLocations.values()) {
if (!cohesiveLocationOrder.includes(location)) this.addLocation(location)
}

//resize container divs to ensure scrolling and background and stuff works properly
let wholeWidth = this.xAxisItems.length * 200
let wholeHeight = this.yAxisItems.length * 40
const wholeWidth = this.xAxisItems.length * 200
const wholeHeight = this.yAxisItems.length * 40
this.poolDiv.style.width = wholeWidth + "px"
this.poolDiv.style.height = wholeHeight + "px"
this.poolDiv.replaceChildren(); //remove all children

//position event blocks within pool
for (let event of this.events.values()) {
for (const event of this.events.values()) {
if (!event.visible) {
continue;
}
Expand All @@ -284,8 +284,8 @@ export class ScheduleArea {
}
event.div.style.top = locationBlock.index * 40 + "px"

let startTimestamp = event.start.getTime()
let endTimestamp = event.end.getTime()
const startTimestamp = event.start.getTime()
const endTimestamp = event.end.getTime()
let hourBlock = this.xAxisItems[0]
let endHourBlock = hourBlock
for (let item of this.xAxisItems) {
Expand All @@ -298,7 +298,7 @@ export class ScheduleArea {
endHourBlock = item
}
}

let leftPos = hourBlock.index * 200
leftPos += 200 * ((startTimestamp - hourBlock.date.getTime()) / 36e5)
event.div.style.left = leftPos + "px"
Expand All @@ -314,16 +314,16 @@ export class ScheduleArea {

//create gridlines
for (let x = 1; x < this.xAxisDiv.children.length; x++) {
let linePos = x * 200
let line = document.createElement("div")
const linePos = x * 200
const line = document.createElement("div")
line.classList.add("vertgridline")
line.style.left = linePos + "px"
line.style.height = wholeHeight + "px"
this.poolDiv.appendChild(line)
}
for (let y = 1; y < this.yAxisDiv.children.length; y++) {
let linePos = y * 40
let line = document.createElement("div")
const linePos = y * 40
const line = document.createElement("div")
line.classList.add("horgridline")
line.style.top = linePos + "px"
line.style.width = wholeWidth + "px"
Expand All @@ -342,4 +342,4 @@ export class ScheduleArea {
getFullscreenZoom() {
return innerHeight / ((this.yAxisItems.length + 1) * 40)
}
}
}
20 changes: 10 additions & 10 deletions src/index.js
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
export let schedule = new ScheduleArea();
export const schedule = new ScheduleArea();

import { ScheduleArea } from "./ScheduleArea.js"
import { getSchedule } from "./getSchedule.js"

async function setupSchedule() {
let events = await getSchedule()
const events = await getSchedule()

for (event of events) {
for (const event of events) {
schedule.addEvent(event)
}

/*
let locations = new Map()
for (event of events) {
Expand All @@ -22,18 +22,18 @@ async function setupSchedule() {
}
console.log(locations)
*/

schedule.addTimeRange("2026-01-15T09:00:00-08:00", "2026-01-16T03:00:00-08:00")
schedule.addTimeRange("2026-01-16T08:00:00-08:00", "2026-01-17T03:00:00-08:00")
schedule.addTimeRange("2026-01-17T08:00:00-08:00", "2026-01-18T03:00:00-08:00")
schedule.addTimeRange("2026-01-18T08:00:00-08:00", "2026-01-19T03:00:00-08:00")
schedule.addTimeRange("2026-01-19T09:00:00-08:00", "2026-01-20T00:00:00-08:00")

schedule.computeLayout()
let nowPosition = schedule.timeIndicator.updatePosition()

const nowPosition = schedule.timeIndicator.updatePosition()
if (nowPosition !== false && nowPosition > 200) {
let scrollPosition = nowPosition - 200;
const scrollPosition = nowPosition - 200;
//retry until success
function retrySetScroll() {
if (Math.abs(schedule.scheduleDiv.scrollLeft - scrollPosition) > 10) {
Expand All @@ -49,4 +49,4 @@ async function setupSchedule() {
}, 5000)
}

setupSchedule()
setupSchedule()
52 changes: 26 additions & 26 deletions src/modal.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,27 +2,27 @@ import { eventTypeOrdering, eventTypeColors } from "./const.js"
import { setTrackVisibility, settings, setZoom, setShowMaturity } from "./settings.js"
import { schedule } from "./index.js"

let container = document.getElementById("modalcontainer")
const container = document.getElementById("modalcontainer")

let eventinfomodal = document.getElementById("eventinfomodal")
let eventinfoname = document.getElementById("eventinfoname")
let eventinfodescription = document.getElementById("eventinfodescription")
let eventinfopresenters = document.getElementById("eventinfopresenters")
let eventinfopresenterslinebreak = document.getElementById("eventinfopresenterslinebreak")
let eventinfotimeplace = document.getElementById("eventinfotimeplace")
let eventinfotype = document.getElementById("eventinfotype")
const eventinfomodal = document.getElementById("eventinfomodal")
const eventinfoname = document.getElementById("eventinfoname")
const eventinfodescription = document.getElementById("eventinfodescription")
const eventinfopresenters = document.getElementById("eventinfopresenters")
const eventinfopresenterslinebreak = document.getElementById("eventinfopresenterslinebreak")
const eventinfotimeplace = document.getElementById("eventinfotimeplace")
const eventinfotype = document.getElementById("eventinfotype")

let settingsbutton = document.getElementById("settingsbutton")
let settingsmodal = document.getElementById("settingsmodal")
const settingsbutton = document.getElementById("settingsbutton")
const settingsmodal = document.getElementById("settingsmodal")

let settingsshow18plus = document.getElementById("settingsshow18plus");
let settingsshowgeneral = document.getElementById("settingsshowgeneral");
let settingsshowfamily = document.getElementById("settingsshowfamily");
const settingsshow18plus = document.getElementById("settingsshow18plus");
const settingsshowgeneral = document.getElementById("settingsshowgeneral");
const settingsshowfamily = document.getElementById("settingsshowfamily");

let settingsaftertracks = document.getElementById("settingsaftertracks")
let settingszoomnormal = document.getElementById("settingszoomnormal")
let settingszoomplus = document.getElementById("settingszoomplus")
let settingszoomminus = document.getElementById("settingszoomminus")
const settingsaftertracks = document.getElementById("settingsaftertracks")
const settingszoomnormal = document.getElementById("settingszoomnormal")
const settingszoomplus = document.getElementById("settingszoomplus")
const settingszoomminus = document.getElementById("settingszoomminus")

export function showEventModal(event) {
container.style.display = "flex"
Expand All @@ -37,10 +37,10 @@ export function showEventModal(event) {
eventinfopresenters.innerText = ""
eventinfopresenterslinebreak.style.display = "none"
}
let startTime = event.start.toLocaleString("en-US", {hour: "numeric", minute: "numeric", timeZone: "America/Los_Angeles"})
let endTime = event.end.toLocaleString("en-US", {hour: "numeric", minute: "numeric", timeZone: "America/Los_Angeles"})
let startDay = event.start.toLocaleString("en-US", {weekday: "long", timeZone: "America/Los_Angeles"})
let endDay = event.end.toLocaleString("en-US", {weekday: "long", timeZone: "America/Los_Angeles"})
const startTime = event.start.toLocaleString("en-US", {hour: "numeric", minute: "numeric", timeZone: "America/Los_Angeles"})
const endTime = event.end.toLocaleString("en-US", {hour: "numeric", minute: "numeric", timeZone: "America/Los_Angeles"})
const startDay = event.start.toLocaleString("en-US", {weekday: "long", timeZone: "America/Los_Angeles"})
const endDay = event.end.toLocaleString("en-US", {weekday: "long", timeZone: "America/Los_Angeles"})
eventinfotimeplace.innerText = event.location
if (startDay === endDay) {
eventinfotimeplace.innerText += " - " + startDay + ", " + startTime + " to " + endTime
Expand Down Expand Up @@ -90,22 +90,22 @@ settingsshowfamily.addEventListener("change", () => {
});

let isFirstTrack = true
for (let track of eventTypeOrdering) {
for (const track of eventTypeOrdering) {
if (isFirstTrack) {
isFirstTrack = false
} else {
settingsaftertracks.insertAdjacentElement("beforebegin", document.createElement("br"))
}

let name = "settingstracktoggle-" + track
const name = "settingstracktoggle-" + track

let checkbox = document.createElement("input")
const checkbox = document.createElement("input")
checkbox.type = "checkbox"
checkbox.name = name
checkbox.checked = !settings.hiddenTracks.includes(track)
checkbox.classList.add("settingscheckbox")
settingsaftertracks.insertAdjacentElement("beforebegin", checkbox)
let label = document.createElement("label")
const label = document.createElement("label")
label.for = name
label.innerText = track
label.classList.add("trackvisibilitytogglelabel")
Expand All @@ -125,4 +125,4 @@ settingszoomplus.addEventListener("click", () => {
})
settingszoomminus.addEventListener("click", () => {
setZoom(Math.max(settings.zoom * 0.9, 0.3))
})
})
4 changes: 2 additions & 2 deletions src/settings.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ if (settings === undefined) {

async function awaitToSetDefaultZoom() {
await schedule.initialComputePromise
let value = schedule.getFullscreenZoom()
const value = schedule.getFullscreenZoom()
settings.zoom = value
document.body.style.zoom = value
}
Expand Down Expand Up @@ -63,4 +63,4 @@ export function setZoom(value) {

function saveSettings() {
localStorage.fcscheduledata = JSON.stringify(settings)
}
}