import { animate, stagger } from "motion"; import browser from "webextension-polyfill"; import LogoLight from "@/resources/icons/betterseqta-light-icon.png"; import assessmentsicon from "@/seqta/icons/assessmentsIcon"; import coursesicon from "@/seqta/icons/coursesIcon"; import { GetThresholdOfColor } from "@/seqta/ui/colors/getThresholdColour"; import { convertTo12HourFormat } from "../convertTo12HourFormat"; import { delay } from "../delay"; import { settingsState } from "../listeners/SettingsState"; import stringToHTML from "../stringToHTML"; import { renderShortcuts } from "@/seqta/utils/Render/renderShortcuts"; import { CreateElement } from "@/seqta/utils/CreateEnable/CreateElement"; import { FilterUpcomingAssessments } from "@/seqta/utils/FilterUpcomingAssessments"; import { getMockNotices } from "@/seqta/ui/dev/hideSensitiveContent"; import { setupFixedTooltips } from "@/seqta/utils/fixedTooltip"; let LessonInterval: any; let currentSelectedDate = new Date(); let loadingTimeout: any; export async function loadHomePage() { console.info("[BetterSEQTA+] Started Loading Home Page"); currentSelectedDate = new Date(); await delay(10); document.title = "Home ― SEQTA Learn"; const element = document.querySelector("[data-key=home]"); element?.classList.add("active"); const main = document.getElementById("main"); if (!main) { console.error("[BetterSEQTA+] Main element not found."); return; } const homeRoot = stringToHTML(`
`); main.innerHTML = ""; main.appendChild(homeRoot?.firstChild!); const homeContainer = document.getElementById("home-root"); if (!homeContainer) return; const skeletonStructure = stringToHTML(/* html */`No lessons available.
Error loading lessons. Please try again.
`; DayContainer.append(errorDiv); } } }; xhr.send( JSON.stringify({ from: date, until: date, student: 69, }), ); } function CheckCurrentLessonAll(lessons: any) { LessonInterval = setInterval( function () { for (let i = 0; i < lessons.length; i++) { CheckCurrentLesson(lessons[i], i + 1); } }.bind(lessons), 60000, ); } async function CheckCurrentLesson(lesson: any, num: number) { const { from: startTime, until: endTime, code, description, room, staff, } = lesson; const currentDate = new Date(); const [startHour, startMinute] = startTime.split(":").map(Number); const [endHour, endMinute] = endTime.split(":").map(Number); const startDate = new Date(currentDate); startDate.setHours(startHour, startMinute, 0); const endDate = new Date(currentDate); endDate.setHours(endHour, endMinute, 0); const isValidTime = startDate < currentDate && endDate > currentDate; const elementId = `${code}${num}`; const element = document.getElementById(elementId); if (!element) { clearInterval(LessonInterval); return; } const isCurrentDate = currentSelectedDate.toLocaleDateString("en-au") === currentDate.toLocaleDateString("en-au"); if (isCurrentDate) { if (isValidTime) { element.classList.add("activelesson"); } else { element.classList.remove("activelesson"); } } const minutesUntilStart = Math.floor( (startDate.getTime() - currentDate.getTime()) / 60000, ); if ( minutesUntilStart !== 5 || settingsState.lessonalert || !window.Notification ) return; if (Notification.permission !== "granted") await Notification.requestPermission(); try { new Notification("Next Lesson in 5 Minutes:", { body: `Subject: ${description}${room ? `\nRoom: ${room}` : ""}${staff ? `\nTeacher: ${staff}` : ""}`, }); } catch (error) { console.error(error); } } function makeLessonDiv(lesson: any, num: number) { if (!lesson) throw new Error("No lesson provided."); const { code, colour, description, staff, room, from, until, attendanceTitle, programmeID, metaID, assessments, } = lesson; let lessonString = `${element.title}
`, ) .join(""); lessonString += `No assessments available.