77 lines
1.8 KiB
JavaScript
77 lines
1.8 KiB
JavaScript
const TimetableHour = require("./TimetableHour");
|
|
|
|
class TimetableDay {
|
|
first = null;
|
|
last = null;
|
|
holiday = false;
|
|
|
|
constructor(data, holidays=defaultHolidays) {
|
|
this.hours = [];
|
|
|
|
for (let i = 0; i < data[0].length; i++) {
|
|
const hour = [
|
|
data[0][i],
|
|
data[1][i],
|
|
data[2][i],
|
|
data[3][i],
|
|
data[4][i],
|
|
];
|
|
|
|
const allSame = sameHours(data);
|
|
|
|
if(holidays.includes(allSame)) {
|
|
this.holiday = allSame;
|
|
return;
|
|
}
|
|
|
|
const hasContent = /[\da-zA-Z]/.test(JSON.stringify(hour));
|
|
|
|
if(hasContent) {
|
|
if(this.first === null) this.first = i;
|
|
this.last = i;
|
|
}
|
|
|
|
this.hours[i] = hasContent ? new TimetableHour(hour) : null;
|
|
}
|
|
}
|
|
|
|
get isHoliday() {
|
|
return this.holiday !== false;
|
|
}
|
|
|
|
get holidayName() {
|
|
return this.isHoliday ? this.holiday : null;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Checks if the day only has the same hours (e.g. "-", "Himmelfahrt")
|
|
*
|
|
* @param {Array} day (Nested) Day as an array.
|
|
* @returns {false|string} False if they differ. When not it returns the only existing value.
|
|
*/
|
|
const sameHours = day => {
|
|
// Only include column teacher, subject and room.
|
|
// Exam always "-", except for when there's exams.
|
|
day = [day[0], day[1], day[2]];
|
|
|
|
const flat = day.flat(); // from [["x","x"]] to ["x","x"]
|
|
const first = flat[0];
|
|
return flat.every(val => val === first) ? first : false;
|
|
};
|
|
|
|
const defaultHolidays = [
|
|
"Sommerferien",
|
|
"Tag der Deutschen Einheit",
|
|
"Herbstferien",
|
|
"Reformationstag",
|
|
"Weihnachtsferien",
|
|
"Winterferien",
|
|
"Osterferien",
|
|
"Tag der Arbeit",
|
|
"Himmelfahrt",
|
|
"Pfingsten",
|
|
];
|
|
|
|
|
|
module.exports = TimetableDay; |