Error loading lessons. Please try again.
- `;
- DayContainer.append(errorDiv);
+ const today = new Date();
+ if (currentSelectedDate.getDate() == today.getDate()) {
+ for (let i = 0; i < lessonArray.length; i++) {
+ CheckCurrentLesson(lessonArray[i], i + 1);
+ }
+ CheckCurrentLessonAll(lessonArray);
+ }
+ });
}
+ } else {
+ DayContainer.innerHTML = "";
+ const dummyDay = document.createElement("div");
+ dummyDay.classList.add("day-empty");
+ const img = document.createElement("img");
+ img.src = browser.runtime.getURL(LogoLight);
+ const text = document.createElement("p");
+ text.innerText = "No lessons available.";
+ dummyDay.append(img, text);
+ DayContainer.append(dummyDay);
+ DayContainer.classList.remove("loading");
}
};
xhr.send(
@@ -856,8 +793,6 @@ async function CheckCurrentLesson(lesson: any, num: number) {
}
function makeLessonDiv(lesson: any, num: number) {
- if (!lesson) throw new Error("No lesson provided.");
-
const {
code,
colour,
@@ -877,7 +812,7 @@ function makeLessonDiv(lesson: any, num: number) {
${type == "class" ? description : type == "tutorial" ? "Tutorial" : "Unknown"}
${staff || "Unknown"}
-
${room || "N/A"}
+
${type == "class" ? room : type == "tutorial" ? "N/A" : "Unknown"}
${from || "Unknown"} - ${until || "Unknown"}
${attendanceTitle || "Unknown"}
`;
@@ -923,64 +858,48 @@ function buildAssessmentURL(programmeID: any, metaID: any, itemID = "") {
}
function CheckUnmarkedAttendance(lessonattendance: any) {
- if (lessonattendance) {
- var lesson = lessonattendance.label;
- } else {
- lesson = " ";
- }
- return lesson;
+ return lessonattendance ? lessonattendance.label : " ";
}
async function CreateUpcomingSection(assessments: any, activeSubjects: any) {
- let upcomingitemcontainer = document.querySelector("#upcoming-items");
- let overdueDates = [];
- let upcomingDates = {};
-
- var Today = new Date();
+ const upcomingitemcontainer = document.querySelector("#upcoming-items");
+ const overdueDates = [];
+ const upcomingDates = {};
+ const Today = new Date();
for (let i = 0; i < assessments.length; i++) {
- const assessment = assessments[i];
- let assessmentdue = new Date(assessment.due);
-
- CheckSpecialDay(Today, assessmentdue);
- if (assessmentdue < Today) {
- if (!CheckSpecialDay(Today, assessmentdue)) {
- overdueDates.push(assessment);
- assessments.splice(i, 1);
- i--;
- }
+ const assessmentdue = new Date(assessments[i].due);
+ if (assessmentdue < Today && !CheckSpecialDay(Today, assessmentdue)) {
+ overdueDates.push(assessments[i]);
+ assessments.splice(i, 1);
+ i--;
}
}
- var TomorrowDate = new Date();
- TomorrowDate.setDate(TomorrowDate.getDate() + 1);
-
const colours = await GetLessonColours();
- let subjects = colours;
for (let i = 0; i < assessments.length; i++) {
- let subjectname = `timetable.subject.colour.${assessments[i].code}`;
-
- let subject = subjects.find((element: any) => element.name === subjectname);
-
+ const subject = colours.find(
+ (element: any) =>
+ element.name === `timetable.subject.colour.${assessments[i].code}`,
+ );
if (!subject) {
assessments[i].colour = "--item-colour: #8e8e8e;";
} else {
assessments[i].colour = `--item-colour: ${subject.value};`;
- GetThresholdOfColor(subject.value);
}
}
for (let i = 0; i < activeSubjects.length; i++) {
const element = activeSubjects[i];
- let subjectname = `timetable.subject.colour.${element.code}`;
- let colour = colours.find((element: any) => element.name === subjectname);
+ const colour = colours.find(
+ (c: any) => c.name === `timetable.subject.colour.${element.code}`,
+ );
if (!colour) {
element.colour = "--item-colour: #8e8e8e;";
} else {
element.colour = `--item-colour: ${colour.value};`;
- let result = GetThresholdOfColor(colour.value);
- if (result > 300) {
+ if (GetThresholdOfColor(colour.value) > 300) {
element.invert = true;
}
}
@@ -991,42 +910,32 @@ async function CreateUpcomingSection(assessments: any, activeSubjects: any) {
for (let i = 0; i < assessments.length; i++) {
const element: any = assessments[i];
if (!upcomingDates[element.due as keyof typeof upcomingDates]) {
- const dateObj: any = {};
- dateObj.div = CreateElement("div", "upcoming-date-container");
- dateObj.assessments = [];
+ const dateObj: any = {
+ div: CreateElement("div", "upcoming-date-container"),
+ assessments: [],
+ };
(upcomingDates[element.due as keyof typeof upcomingDates] as any) =
dateObj;
}
const assessmentDateDiv =
upcomingDates[element.due as keyof typeof upcomingDates];
-
if (assessmentDateDiv) {
(assessmentDateDiv as any).assessments.push(element);
}
}
for (var date in upcomingDates) {
- let assessmentdue = new Date(
- (upcomingDates[date as keyof typeof upcomingDates] as any).assessments[0]
- .due,
+ const assessmentdue = new Date(
+ (
+ upcomingDates[date as keyof typeof upcomingDates] as any
+ ).assessments[0].due,
+ );
+ const specialcase = CheckSpecialDay(Today, assessmentdue);
+ const assessmentDate = createAssessmentDateDiv(
+ date,
+ upcomingDates[date as keyof typeof upcomingDates],
+ specialcase,
);
- let specialcase = CheckSpecialDay(Today, assessmentdue);
- let assessmentDate;
-
- if (specialcase) {
- let datecase: string = specialcase!;
- assessmentDate = createAssessmentDateDiv(
- date,
- upcomingDates[date as keyof typeof upcomingDates],
-
- datecase,
- );
- } else {
- assessmentDate = createAssessmentDateDiv(
- date,
- upcomingDates[date as keyof typeof upcomingDates],
- );
- }
if (specialcase === "Yesterday") {
upcomingitemcontainer!.insertBefore(
@@ -1049,77 +958,68 @@ async function CreateUpcomingSection(assessments: any, activeSubjects: any) {
}
function createAssessmentDateDiv(date: string, value: any, datecase?: any) {
- var options = {
+ const options = {
weekday: "long" as "long",
month: "long" as "long",
day: "numeric" as "numeric",
};
const FormattedDate = new Date(date);
-
const assessments = value.assessments;
const container = value.div;
- let DateTitleDiv = document.createElement("div");
+ const DateTitleDiv = document.createElement("div");
DateTitleDiv.classList.add("upcoming-date-title");
if (datecase) {
- let datetitle = document.createElement("h5");
+ const datetitle = document.createElement("h5");
datetitle.classList.add("upcoming-special-day");
datetitle.innerText = datecase;
DateTitleDiv.append(datetitle);
container.setAttribute("data-day", datecase);
}
- let DateTitle = document.createElement("h5");
+ const DateTitle = document.createElement("h5");
DateTitle.innerText = FormattedDate.toLocaleDateString("en-AU", options);
DateTitleDiv.append(DateTitle);
-
container.append(DateTitleDiv);
- let assessmentContainer = document.createElement("div");
+ const assessmentContainer = document.createElement("div");
assessmentContainer.classList.add("upcoming-date-assessments");
for (let i = 0; i < assessments.length; i++) {
const element = assessments[i];
- let item = document.createElement("div");
+ const item = document.createElement("div");
item.classList.add("upcoming-assessment");
item.setAttribute("data-subject", element.code);
item.id = `assessment${element.id}`;
-
item.style.cssText = element.colour;
- let titlediv = document.createElement("div");
+ const titlediv = document.createElement("div");
titlediv.classList.add("upcoming-subject-title");
-
- let titlesvg =
+ titlediv.append(
stringToHTML(`
`).firstChild;
- titlediv.append(titlesvg!);
+ `).firstChild!,
+ );
- let detailsdiv = document.createElement("div");
+ const detailsdiv = document.createElement("div");
detailsdiv.classList.add("upcoming-details");
- let detailstitle = document.createElement("h5");
+ const detailstitle = document.createElement("h5");
detailstitle.innerText = `${element.subject} assessment`;
- let subject = document.createElement("p");
+ const subject = document.createElement("p");
subject.innerText = element.title;
subject.classList.add("upcoming-assessment-title");
subject.onclick = function () {
document.querySelector("#menu ul")!.classList.add("noscroll");
location.href = `../#?page=/assessments/${element.programmeID}:${element.metaclassID}&item=${element.id}`;
};
- detailsdiv.append(detailstitle);
- detailsdiv.append(subject);
-
- item.append(titlediv);
- item.append(detailsdiv);
+ detailsdiv.append(detailstitle, subject);
+ item.append(titlediv, detailsdiv);
assessmentContainer.append(item);
fetch(`${location.origin}/seqta/student/assessment/submissions/get`, {
method: "POST",
- headers: {
- "Content-Type": "application/json; charset=utf-8",
- },
+ headers: { "Content-Type": "application/json; charset=utf-8" },
body: JSON.stringify({
assessment: element.id,
metaclass: element.metaclassID,
@@ -1130,8 +1030,7 @@ function createAssessmentDateDiv(date: string, value: any, datecase?: any) {
.then((response) => {
if (response.payload.length > 0) {
const assessment = document.querySelector(`#assessment${element.id}`);
-
- let submittedtext = document.createElement("div");
+ const submittedtext = document.createElement("div");
submittedtext.classList.add("upcoming-submittedtext");
submittedtext.innerText = "Submitted";
assessment!.append(submittedtext);
@@ -1169,36 +1068,37 @@ function CheckSpecialDay(date1: Date, date2: Date) {
}
async function GetLessonColours() {
- let func = fetch(`${location.origin}/seqta/student/load/prefs?`, {
- method: "POST",
- headers: {
- "Content-Type": "application/json; charset=utf-8",
- },
- body: JSON.stringify({ request: "userPrefs", asArray: true, user: 69 }),
- });
- return func
- .then((result) => result.json())
- .then((response) => response.payload);
+ try {
+ return fetch(`${location.origin}/seqta/student/load/prefs?`, {
+ method: "POST",
+ headers: { "Content-Type": "application/json; charset=utf-8" },
+ body: JSON.stringify({ request: "userPrefs", asArray: true, user: 69 }),
+ })
+ .then((result) => result.json())
+ .then((response) => response.payload);
+ } catch (error) {
+ console.error("[BetterSEQTA+] Failed to get lesson colours:", error);
+ return [];
+ }
}
function CreateFilters(subjects: any) {
- let filteroptions = settingsState.subjectfilters;
+ const filteroptions = settingsState.subjectfilters;
+ const filterdiv = document.querySelector("#upcoming-filters");
- let filterdiv = document.querySelector("#upcoming-filters");
for (let i = 0; i < subjects.length; i++) {
const element = subjects[i];
-
if (!Object.prototype.hasOwnProperty.call(filteroptions, element.code)) {
filteroptions[element.code] = true;
settingsState.subjectfilters = filteroptions;
}
- let elementdiv = CreateSubjectFilter(
- element.code,
- element.colour,
- filteroptions[element.code],
+ filterdiv!.append(
+ CreateSubjectFilter(
+ element.code,
+ element.colour,
+ filteroptions[element.code],
+ ),
);
-
- filterdiv!.append(elementdiv);
}
}
@@ -1207,23 +1107,20 @@ function CreateSubjectFilter(
itemcolour: string,
checked: any,
) {
- let label = CreateElement("label", "upcoming-checkbox-container");
+ const label = CreateElement("label", "upcoming-checkbox-container");
label.innerText = subjectcode;
- let input1 = CreateElement("input");
- const input = input1 as HTMLInputElement;
+ const input = CreateElement("input") as HTMLInputElement;
input.type = "checkbox";
input.checked = checked;
input.id = `filter-${subjectcode}`;
label.style.cssText = itemcolour;
- let span = CreateElement("span", "upcoming-checkmark");
- label.append(input);
- label.append(span);
+ const span = CreateElement("span", "upcoming-checkmark");
+ label.append(input, span);
input.addEventListener("change", function (change) {
- let filters = settingsState.subjectfilters;
- let id = (change.target as HTMLInputElement)!.id.split("-")[1];
- filters[id] = (change.target as HTMLInputElement)!.checked;
-
+ const filters = settingsState.subjectfilters;
+ const id = (change.target as HTMLInputElement).id.split("-")[1];
+ filters[id] = (change.target as HTMLInputElement).checked;
settingsState.subjectfilters = filters;
});