var color_counter = 0; var { calendar_fade_time, button_delay } = Timing; var saved_courses = []; var curr_course = {} $("#calendar").after(Template.Calendar.modal()); chrome.storage.sync.get("savedCourses", function (data) { // Iterate through each saved course and add to 'event' saved_courses = data.savedCourses; let event_source = buildEventSource(saved_courses); $("#calendar").fullCalendar({ editable: false, // Don't allow editing of events handleWindowResize: true, weekends: false, // will hide Saturdays and Sundays slotDuration: "00:30:00", // 15 minute intervals on vertical column slotEventOverlap: false, // No overlapping between events defaultView: "agendaWeek", // Only show week view header: false, // Hide buttons/titles minTime: "08:00:00", // Start time maxTime: "21:00:01", // End time columnHeaderFormat: "ddd", // Only show day of the week names displayEventTime: true, // Display event time allDaySlot: false, Duration: { hours: 1 }, height: 'auto', events: event_source, slotLabelFormat: [ 'h:mm A' // lower level of text ], eventRender: function (event, element, view) { $(element).css("padding", "5px").css("margin-bottom", "5px"); }, eventClick: function (data, event, view) { displayModal(data) } }); }); function displayModal(data) { $("#myModal").fadeIn(calendar_fade_time); $("#colorStrip").css('background-color', data.color); curr_course = saved_courses[data.index]; setUpModal() } function setUpModal() { let { coursename, unique, datetimearr, profname, status, registerlink } = curr_course; $("#classname").html(`${coursename} (${unique})`); buildTimeTitle(datetimearr); $("#prof").html(`with ${capitalizeString(profname)}`); setRegisterButton(status, registerlink) } function setRegisterButton(status, registerlink) { if (canNotRegister(status, registerlink)) $("#register").text("Can't Register").css("background-color", Colors.closed); else if (status.includes("waitlisted")) $("#register").text("Join Waitlist").css("background-color", Colors.waitlisted); else $("#register").text("Register").css("background-color", Colors.open); } function buildTimeTitle(datetimearr) { $('#timelines').remove(); var arr = convertDateTimeArrToLine(datetimearr) var output = ""; for (let i = 0; i < arr.length; i++) { let line = arr[i]; output += Template.Calendar.line(line); } $("#header").after(`
${output} { setTimeout(() => { window.open(curr_course.link); }, button_delay); }); $("#save").click(() => { takePicture(); }); $("#clear").click(() => { /*Clear the list and the storage of courses*/ chrome.storage.sync.set({ savedCourses: [] }); updateAllTabsCourseList(); updateCalendar(); }); $("#remove").click(() => { setTimeout(() => { chrome.runtime.sendMessage({ command: "courseStorage", course: curr_course, action: "remove" }, function () { $("#myModal").fadeOut(calendar_fade_time); updateCalendar(); updateAllTabsCourseList(); }); }, button_delay); }); $("#register").click(function () { let { registerlink, status } = curr_course; if (!canNotRegister(status, registerlink)) { setTimeout(() => { window.open(registerlink); }, button_delay); } }); $("#export").click(function () { var cal = ics(); var calendarEvents = $('#calendar').fullCalendar('clientEvents'); for (i in calendarEvents) { var event = calendarEvents[i]; buildICSFile(cal, event); } cal.download("My_Course_Calendar"); }); function buildICSFile(cal, event) { let { title, start, end, building } = event; let class_name = title.split('with')[0]; let description = `with ${title.split('with')[1]}`; let time = start._d.toUTCString(); cal.addEvent(class_name, description, building, start._i, end._i, { rrule: `RRULE:FREQ=WEEKLY;BYDAY=${time.substring(0, time.indexOf(",") - 1).toUpperCase()};INTERVAL=1` }); } function takePicture() { var width = $("#calendar").width(); var height = $("#calendar").height(); let cropper = document.createElement('canvas').getContext('2d'); html2canvas(document.querySelector("#calendar"), Export.png_options).then(c => { cropper.canvas.width = width; cropper.canvas.height = height; cropper.drawImage(c, 0, 0); var a = document.createElement('a'); a.href = cropper.canvas.toDataURL("image/png"); a.download = 'mySchedule.png'; a.click(); }); } /*Close Modal when hit escape*/ $(document).keydown((e) => { if (e.keyCode == 27) { $("#myModal").fadeOut(calendar_fade_time); } }); $('.close').click(function () { close(); }); $('#myModal').click(function (event) { if (event.target.id == 'myModal') { close(); } }); function close() { $("#myModal").fadeOut(calendar_fade_time); }