${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(`