${description || "Unknown"}
${staff || "Unknown"}
${room || "Unknown"}
${from || "Unknown"} - ${until || "Unknown"}
${attendanceTitle || "Unknown"}
`;
// Add buttons for assessments and courses if applicable
if (programmeID !== 0) {
lessonString += /* html */ `
${assessmentsicon}
${coursesicon}
`;
}
// Add assessments if they exist
if (assessments && assessments.length > 0) {
const assessmentString = assessments
.map(
(element: any) =>
`
${element.title}
`,
)
.join("");
lessonString += /* html */ `
`;
}
lessonString += "
";
return stringToHTML(lessonString);
}
function buildAssessmentURL(programmeID: any, metaID: any, itemID = "") {
const base = "../#?page=/assessments/";
return itemID
? `${base}${programmeID}:${metaID}&item=${itemID}`
: `${base}${programmeID}:${metaID}`;
}
function CheckUnmarkedAttendance(lessonattendance: any) {
if (lessonattendance) {
var lesson = lessonattendance.label;
} else {
lesson = " ";
}
return lesson;
}
async function CreateUpcomingSection(assessments: any, activeSubjects: any) {
let upcomingitemcontainer = document.querySelector("#upcoming-items");
let overdueDates = [];
let upcomingDates = {};
var Today = new Date();
// Removes overdue assessments from the upcoming assessments array and pushes to overdue array
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--;
}
}
}
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);
if (!subject) {
assessments[i].colour = "--item-colour: #8e8e8e;";
} else {
assessments[i].colour = `--item-colour: ${subject.value};`;
GetThresholdOfColor(subject.value); // result (originally) result = GetThresholdOfColor
}
}
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);
if (!colour) {
element.colour = "--item-colour: #8e8e8e;";
} else {
element.colour = `--item-colour: ${colour.value};`;
let result = GetThresholdOfColor(colour.value);
if (result > 300) {
element.invert = true;
}
}
}
CreateFilters(activeSubjects);
// @ts-ignore
let type;
// @ts-ignore
let class_;
for (let i = 0; i < assessments.length; i++) {
const element: any = assessments[i];
if (!upcomingDates[element.due as keyof typeof upcomingDates]) {
let dateObj: any = new Object();
dateObj.div = CreateElement(
// TODO: not sure whats going on here?
// eslint-disable-next-line
(type = "div"),
// eslint-disable-next-line
(class_ = "upcoming-date-container"),
);
dateObj.assessments = [];
(upcomingDates[element.due as keyof typeof upcomingDates] as any) =
dateObj;
}
let 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,
);
let specialcase = CheckSpecialDay(Today, assessmentdue);
let assessmentDate;
if (specialcase) {
let datecase: string = specialcase!;
assessmentDate = createAssessmentDateDiv(
date,
upcomingDates[date as keyof typeof upcomingDates],
// eslint-disable-next-line
datecase,
);
} else {
assessmentDate = createAssessmentDateDiv(
date,
upcomingDates[date as keyof typeof upcomingDates],
);
}
if (specialcase === "Yesterday") {
upcomingitemcontainer!.insertBefore(
assessmentDate,
upcomingitemcontainer!.firstChild,
);
} else {
upcomingitemcontainer!.append(assessmentDate);
}
}
FilterUpcomingAssessments(settingsState.subjectfilters);
}
function createAssessmentDateDiv(date: string, value: any, datecase?: any) {
var 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");
DateTitleDiv.classList.add("upcoming-date-title");
if (datecase) {
let 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");
DateTitle.innerText = FormattedDate.toLocaleDateString("en-AU", options);
DateTitleDiv.append(DateTitle);
container.append(DateTitleDiv);
let 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");
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");
titlediv.classList.add("upcoming-subject-title");
let titlesvg =
stringToHTML(`