1var scale = 60
2var eventDivPaddingOffset = 10;
3
4if (localStorage.getItem('dark-mode') == null){
5 localStorage.setItem('dark-mode',false);
6}
7
8var scheduleData;
9var weekNumber;
10var dayOfWeek;
11var realWeekNumber;
12
13var datesData;
14
15function animateScheduleEventDestroy() {
16 scheduleEventElements = document.getElementsByClassName("schedule-event")
17 for (let i = 0; i < scheduleEventElements.length; i++) {
18 scheduleEventElements[i].className += " schedule-event-destroy";
19 }
20}
21
22function toastNotification(textToDisplay) {
23 document.getElementById("toast-notification").innerHTML = textToDisplay;
24 document.getElementById("toast-notification").style.top = "0px";
25 setTimeout(function() {
26 document.getElementById("toast-notification").style = "";
27 }, 2000);
28}
29
30function toastCopyright() {
31 toastNotification("Copyright. Louis Dalibard. 2021. All rights reserved.")
32}
33
34function lastWeek() {
35 weekNumber--;
36 animateScheduleEventDestroy();
37 setTimeout(updateSchedule, 150);
38}
39
40function nextWeek() {
41 weekNumber++;
42 animateScheduleEventDestroy();
43 setTimeout(updateSchedule, 150);
44}
45
46function toggleDarkMode(){
47 if(localStorage.getItem('dark-mode') == "true"){
48 localStorage.setItem('dark-mode',false);
49 offDarkMode();
50 toastNotification("Retina burning action!")
51 } else{
52 localStorage.setItem('dark-mode',true);
53 onDarkMode();
54 toastNotification("Lights out!")
55 }
56}
57function onDarkMode(){
58 var root = document.documentElement;
59 root.style.setProperty('--main-bg-color', "black");
60 root.style.setProperty('--text-color', "white");
61 root.style.setProperty('--text-secondary-color', "#ababab");
62 root.style.setProperty('--border-color', "rgba(255, 255, 255, 0.33)");
63 root.style.setProperty('--semi-bg-color', "rgba(255, 255, 255, 0.03)");
64 document.getElementById("header-icon-image").style.filter = "invert(1)";
65
66}
67function offDarkMode(){
68 var root = document.documentElement;
69 root.style.setProperty('--main-bg-color', "white");
70 root.style.setProperty('--text-color', "black");
71 root.style.setProperty('--text-secondary-color', "#555");
72 root.style.setProperty('--border-color', "rgba(0, 0, 0, 0.33)");
73 root.style.setProperty('--semi-bg-color', "rgba(0, 0, 0, 0.03)");
74 document.getElementById("header-icon-image").style.filter = "invert(0)";
75}
76
77function formatDateForUse(dateString){
78 return moment(dateString).format('dddd, MMMM D, YYYY');
79}
80
81function loadCurrentSchedule() {
82 scheduleData = JSON.parse(localStorage.getItem('schedule-file'));
83 weekNumber = 0;
84 var a = moment(scheduleData.weeks.startDate);
85 var b = moment();
86 var diffdays = b.diff(a, 'days');
87 dayOfWeek = diffdays % 7;
88 weekNumber = Math.floor(diffdays / 7);
89 realWeekNumber = weekNumber;
90}
91
92function loadDates(){
93 datesData = JSON.parse(localStorage.getItem('dates-file'));
94}
95
96function updateSchedule() {
97 document.getElementById("week-count").innerHTML = weekNumber;
98 if (weekNumber == realWeekNumber) {
99 document.getElementById("week-count").style.textDecoration = "underline dotted var(--text-color)";
100 } else {
101 document.getElementById("week-count").style.textDecoration = "underline dotted transparent";
102 }
103 var weekType = scheduleData.weeks.weekTypeString[weekNumber];
104 var weekData = scheduleData.schedule[weekType];
105 document.getElementById("schedule-days").innerHTML=`<div class="schedule-day"></div><div class="schedule-day"></div><div class="schedule-day"></div><div class="schedule-day"></div><div class="schedule-day"></div><div class="schedule-day"></div><div class="schedule-day"></div>`;
106 for (let i = 0; i < weekData.length; i++) {
107 var dayData = weekData[i];
108 document.getElementById("schedule-days").children[i].innerHTML = "";
109 for (let j = 0; j < dayData.length; j++) {
110 var eventData = dayData[j]
111 var eventStart = eventData.start.split(":")[0] * 60 + eventData.start.split(":")[1];
112 var eventEnd = eventData.end.split(":")[0] * 60 + eventData.end.split(":")[1];
113 var eventDuration = eventEnd - eventStart
114 const eventDiv = document.createElement("div");
115 const eventNameDiv = document.createElement("div");
116 eventNameDiv.innerHTML = eventData.name;
117 eventNameDiv.className = "schedule-event-name";
118 eventDiv.appendChild(eventNameDiv);
119 const eventTimeDiv = document.createElement("div");
120 eventTimeDiv.innerHTML = eventData.start + " - " + eventData.end;
121 eventTimeDiv.className = "schedule-event-time";
122 eventDiv.appendChild(eventTimeDiv);
123 const eventRoomDiv = document.createElement("div");
124 eventRoomDiv.innerHTML = eventData.room;
125 eventTimeDiv.className = "schedule-event-time";
126 eventDiv.appendChild(eventRoomDiv);
127 eventDiv.className = "schedule-event";
128 eventDiv.style = "height: " + String((eventDuration / scale) - eventDivPaddingOffset) + "px;" + "top: " + String(eventStart / scale) + "px;"
129 document.getElementById("schedule-days").children[i].appendChild(eventDiv);
130 if (i == dayOfWeek) {
131 document.getElementsByClassName("schedule-weekday-name")[i].style.textDecoration = "underline dotted var(--text-color)";
132 } else {
133 document.getElementsByClassName("schedule-weekday-name")[i].style.textDecoration = "underline dotted transparent";
134 }
135 }
136 }
137}
138
139function updateDates(){
140 datesDataList = datesData.dates;
141 document.getElementById("dates-list-list").innerHTML = "";
142 currdatepassed = false;
143 for (let i = 0; i < datesDataList.length; i++) {
144 var itDateData=datesDataList[i]
145 var dateDiv = document.createElement("div");
146 dateDiv.className = "dates-date";
147 var dateTitleDiv = document.createElement("div");
148 dateTitleDiv.innerHTML = itDateData.title;
149 dateTitleDiv.className = "dates-date-title";
150 var dateDateDiv = document.createElement("div");
151 if (itDateData.startDate != itDateData.endDate){
152 dateDateDiv.innerHTML = formatDateForUse(itDateData.startDate)+" - "+formatDateForUse(itDateData.endDate);
153 } else{
154 dateDateDiv.innerHTML = formatDateForUse(itDateData.startDate)
155 }
156 dateDateDiv.className = "dates-date-date";
157 var dateContentDiv = document.createElement("div");
158 dateContentDiv.innerHTML = itDateData.description;
159 dateContentDiv.className = "dates-date-description";
160 dateDiv.appendChild(dateTitleDiv);
161 dateDiv.appendChild(dateContentDiv);
162 dateDiv.appendChild(dateDateDiv);
163 if (moment(itDateData.startDate)-moment() > 0){
164 if (!currdatepassed){
165 currdatepassed = true;
166 var seperatorDiv = document.createElement("div");
167 seperatorDiv.id = "dates-seperator";
168 seperatorDiv.innerHTML = "Current Date ("+(new Date().toLocaleString()).split(",")[0]+")";
169 document.getElementById("dates-list-list").appendChild(seperatorDiv);
170 }
171 }
172 document.getElementById("dates-list-list").appendChild(dateDiv);
173}}
174
175function upload() {
176 document.getElementById('FileAttachment').click();
177}
178
179function uploadDatesList() {
180 document.getElementById('FileAttachmentDates').click();
181}
182
183function loadTSCDFile(filetoload) {
184 var reader = new FileReader();
185 reader.readAsText(filetoload, 'UTF-8');
186 reader.onload = readerEvent => {
187 var content = readerEvent.target.result;
188 localStorage.setItem('schedule-file', content);
189 loadCurrentSchedule();
190 updateSchedule();
191 }
192}
193
194function loadTSCDateFile(filetoload) {
195 var reader = new FileReader();
196 reader.readAsText(filetoload, 'UTF-8');
197 reader.onload = readerEvent => {
198 var content = readerEvent.target.result;
199 localStorage.setItem('dates-file', content);
200 loadDates();
201 updateDates();
202 }
203}
204
205document.getElementById('FileAttachment').onchange = e => {
206 var file = e.target.files[0];
207 loadTSCDFile(file);
208}
209
210document.getElementById('FileAttachmentDates').onchange = e => {
211 var dateFile = e.target.files[0];
212 loadTSCDateFile(dateFile);
213}
214
215if(localStorage.getItem('dark-mode') == "true"){
216 onDarkMode();
217} else{
218 offDarkMode();
219}
220setTimeout(function(){document.documentElement.style.transition = "color 1s ease, background 1s ease, border 1s ease";},100);
221
222loadCurrentSchedule();
223updateSchedule();
224loadDates();
225updateDates();