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;