class CustomCalendar extends HTMLElement { connectedCallback() { this.attachShadow({ mode: 'open' }); this.shadowRoot.innerHTML = `
`; // Check if dependencies are already loaded if (window.tui && window.tui.Calendar) { this.initCalendar(); } else { // Wait for dependencies to be loaded from index.html const checkDependencies = setInterval(() => { if (window.tui && window.tui.Calendar) { clearInterval(checkDependencies); this.initCalendar(); } }, 100); } } initCalendar() { const Calendar = window.tui.Calendar; const container = this.shadowRoot.getElementById('calendar'); this.calendar = new Calendar(container, { defaultView: 'month', taskView: false, scheduleView: ['time'], useCreationPopup: false, useDetailPopup: true, template: { monthDayname: function(dayname) { return '' + dayname.label + ''; } } }); // Add courses as schedules const schedules = window.coursesData.map(course => { const [day, month, year] = course['Start Date'].split('-'); const monthNum = new Date(`${month} 1, 2000`).getMonth(); const start = new Date(2000 + parseInt(year), monthNum, parseInt(day), 9); const end = new Date(2000 + parseInt(year), monthNum, parseInt(day), 17); return { id: String(Math.random()), calendarId: '1', title: course.Course, category: 'time', dueDateClass: '', start: start, end: end, location: course.Location, instructor: course.Instructor, raw: { time: course.Time } }; }); this.calendar.createSchedules(schedules); // Set today as default date this.calendar.setDate(new Date()); } } customElements.define('custom-calendar', CustomCalendar);