From 4b991d01cf96b32ca4552a23797e4395dd71875e Mon Sep 17 00:00:00 2001 From: Nicholas L <33159891+EKKOING@users.noreply.github.com> Date: Sun, 25 Aug 2019 16:03:58 -0400 Subject: [PATCH 01/62] Bring Old Scheduler Files Into Folder Has HTML file for I/O and a JS file to enter cookies --- scheduler/scheduler.html | 204 ++++++++++++++++++++++++++++++++++ scheduler/script/scheduler.js | 70 ++++++++++++ 2 files changed, 274 insertions(+) create mode 100644 scheduler/scheduler.html create mode 100644 scheduler/script/scheduler.js diff --git a/scheduler/scheduler.html b/scheduler/scheduler.html new file mode 100644 index 0000000..d02eb46 --- /dev/null +++ b/scheduler/scheduler.html @@ -0,0 +1,204 @@ + + + + +Scheduler for Hotchkiss Clock + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SchedulerMondayTuesdayWednesdayThursdayFridaySaturday
Period 1 + + + + + + + + + + + +
Period 2 + + + + + + + + + + + +
Period 3 + + + + + + + + + + + +
Period 4 + + + + + + + + + + + +
Period 5A + + + + + + + + + + + +
Period 5B + + + + + + + + + + + +
Period 6 + + + + +

Nicholas Lorentzen wrote this code

+
+ + + + + +
Period 7 + + + + + + + + + + + +
+
+
+
+ + + + + +
If you have copied code from the alert bubble in another browser, paste it here to update your schedule.
+ + diff --git a/scheduler/script/scheduler.js b/scheduler/script/scheduler.js new file mode 100644 index 0000000..1bf669c --- /dev/null +++ b/scheduler/script/scheduler.js @@ -0,0 +1,70 @@ + +/* +Scheduler for Hotchkiss Clock +Nicholas Lorentzen +Last updated 20190415 +*/ +var boiyardee = []; + +function addCookie(cookname) +{ + boiyardee.push(cookname); + document.cookie = cookname + ";domain=thehotchkissrecord.github.io;max-age=31536000"; +} + +function bakeCookies(recipe) +{ + addCookie(recipe + "=" + escape(document.getElementById(recipe).value)); +} + +function putCookie() +{ + var classes = ["m1","m2","m3","m4","m5","m6","m7","m8","t1","t2","t3","t4","t5","t6","t7","t8","w1","w2","w3","w4","y1","y2","y3","y4","y5","y6","y7","y8","f1","f2","f3","f4","f5","f6","f7","f8","s1","s2","s3","s4"]; + + classes.forEach(bakeCookies); + console.log (boiyardee.join(";") + ";domain=thehotchkissrecord.github.io;max-age=31536000"); + document.cookie = boiyardee.join(";") + ";domain=thehotchkissrecord.github.io;max-age=31536000"; + return true; +} + +function exitScheduler() +{ + putCookie(); + alert("Cookies Set (Copy this for another browser): " + unescape(document.cookie)); + window.location.replace("https://thehotchkissrecord.github.io/HotchkissClock/"); +} + +function cookiesAlert() +{ + window.alert("(STILL IN TESTING) Welcome to the scheduler! In order to use this service you will need cookies enabled. - Nicholas Lorentzen") + var classes = ["m1","m2","m3","m4","m5","m6","m7","m8","t1","t2","t3","t4","t5","t6","t7","t8","w1","w2","w3","w4","y1","y2","y3","y4","y5","y6","y7","y8","f1","f2","f3","f4","f5","f6","f7","f8","s1","s2","s3","s4"]; + + classes.forEach(fillTable); +} + +function fillTable(chef) +{ + document.getElementById(chef).value = getCookie(chef); +} + +function getCookie(cname) { + var name = cname + "="; + var decodedCookie = decodeURIComponent(document.cookie); + var ca = decodedCookie.split(';'); + for(var i = 0; i Date: Sun, 25 Aug 2019 22:15:53 -0400 Subject: [PATCH 02/62] Clean Up A Bunch of Stuff Removed duplicate Date(); calls to allow better debugging. HTML fixes Added proper counters --- index.html | 9 ++++----- script.js | 56 ++++++++++++++++++++++++++++++++++++++---------------- 2 files changed, 44 insertions(+), 21 deletions(-) diff --git a/index.html b/index.html index 8f9f25d..067ee8b 100644 --- a/index.html +++ b/index.html @@ -10,8 +10,7 @@ - + @@ -21,8 +20,8 @@
- +
@@ -63,7 +62,7 @@
- Eric Li ’13, Jiahua Chen ’20 + Eric Li ’13, Jiahua Chen ’20, Nicholas Lorentzen ’20
diff --git a/script.js b/script.js index a04d24f..92e6f6b 100644 --- a/script.js +++ b/script.js @@ -1,19 +1,19 @@ /* Controller for clock/time webapp -Jiahua Chen, based off Eric Li's original design -Last updated 6 July 2019 +Nicholas Lorentzen, Jiahua Chen, based off Eric Li's original design +Last updated 25 August 2019 */ // Gets the current date and time -var d = new Date(); -// var d = new Date(2019,2,5,15,13,03,0); +//var d = new Date(); +var d = new Date(2019,8,26,14,30,7,0); // console.log(" *** d.getDate() " + d.getDate()); // console.log(" *** d.getMonth() " + d.getMonth()); // console.log(" *** dayType noClassSats" + i); // Updates the date and time function updateD() { - d = new Date(); + //d = new Date(); } var showTime = true; @@ -21,13 +21,17 @@ var descText; var weekendText = ""; // Gets the classification of the date, and returns 0 if it is a normal day. Also contains dictionaries for special days. + // Defines the special days -var onbreak = true; +var onbreak = false; var specialDays = [new CalDay(3, 8), new CalDay(4, 25)]; // <- For special event days var noClassSats = [new CalDay(4, 20), new CalDay(5, 4), new CalDay(5, 18)]; // <- For days without Saturday classes var noClassDays = [new CalDay(4, 22), new CalDay(5, 18), new CalDay(5, 27), new CalDay(6, 1)]; // <- For days without classes, or breaks var holidayDays = []; // <- For holidays + + function dayType() { + var i = 0; for (i = 0; i < specialDays.length; i++) { if (specialDays[i].month === d.getMonth() && specialDays[i].date === d.getDate()) { return 1; @@ -66,7 +70,7 @@ function dayType() { } function loadTime() { - d = new Date(); + //d = new Date(); // Adjusts into AM and PM time var hr = ((d.getHours() + 11) % 12 + 1); var sufx = (d.getHours() >= 12) ? 'PM' : 'AM'; @@ -78,7 +82,7 @@ function loadTime() { function loadDate() { // Dictionary for text-based date var days = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]; - var months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]; + //var months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]; // Outputs to HTML descText = days[d.getDay()]; @@ -106,6 +110,7 @@ function CalDay(month, date) { // Updates the clock messages function update() { + var i = 0; // Stores the dayType var type = dayType(); // Debug *** @@ -144,17 +149,17 @@ function update() { normalDay(currentSchedule[i].title, currentSchedule[i].endRaw - parseRaw(), currentSchedule[i + 2].title, currentSchedule[i + 2].startRaw - parseRaw()); } } + if (parseRaw() > currentSchedule[currentSchedule.length - 1].endRaw) { showTime = true; document.getElementById("class-info").innerHTML = ""; document.getElementById("schedule-info").innerHTML = descText + " ⋅ Have a nice day!"; } } - } else { } if (showTime) { document.getElementById("hrs").style.display = "block"; - rawTime = parseRaw(); + var rawTime = parseRaw(); document.documentElement.style.setProperty('--timer-hours', "'" + toHrs(rawTime).toLocaleString('en-US', { minimumIntegerDigits: 2, useGrouping: false @@ -300,10 +305,10 @@ function beforeSchool(title, time) { } function thisWeekend() { - for (d = 0; d < 7; d++) { - var result = new Date(); - result.setDate(result.getDate() + d); - for (i = 0; i < noClassSats.length; i++) { + for (var addDay = 0; addDay < 7; addDay++) { + var result = d; + result.setDate(result.getDate() + addDay); + for (var i = 0; i < noClassSats.length; i++) { if (noClassSats[i].month === result.getMonth() && noClassSats[i].date === result.getDate()) { return " ⋅ No-Class Weekend"; } @@ -348,7 +353,8 @@ function toSecs(raw) { return (raw % 60); } -// Converts raw time format to a parsed time string +// Converts raw time format to a parsed time string (DEPRECATED) +/* function rawToString(raw) { var output = ""; @@ -391,17 +397,35 @@ function rawToString(raw) { } return output; } +*/ window.addEventListener('load', onLoad); function onLoad() { - d = new Date(); + //d = new Date(); loadTime(); loadDate(); update(); weekendText = thisWeekend(); } +//Some code off a website to check cookies +function getCookie(cname) { + var name = cname + "="; + var decodedCookie = decodeURIComponent(document.cookie); + var ca = decodedCookie.split(';'); + for(var i = 0; i Date: Sun, 25 Aug 2019 23:30:14 -0400 Subject: [PATCH 03/62] Added Cookie Capability to Clock --- script.js | 40 ++++++++++++++++++++++++++++++++++++---- 1 file changed, 36 insertions(+), 4 deletions(-) diff --git a/script.js b/script.js index 92e6f6b..d15a0fb 100644 --- a/script.js +++ b/script.js @@ -6,7 +6,7 @@ Last updated 25 August 2019 // Gets the current date and time //var d = new Date(); -var d = new Date(2019,8,26,14,30,7,0); +var d = new Date(2019,8,26,14,30,1,0); // console.log(" *** d.getDate() " + d.getDate()); // console.log(" *** d.getMonth() " + d.getMonth()); // console.log(" *** dayType noClassSats" + i); @@ -188,7 +188,7 @@ function update() { function getSchedule() { // console.log(" *** d.getDate() " + d.getDay()); var weekday = d.getDay(); - + // Defines the currentSchedule array var currentSchedule = []; @@ -217,7 +217,7 @@ function getSchedule() { currentSchedule[0] = new Period("Period 1", 8, 30, 9, 10); currentSchedule[1] = new Period("→ Period 2", 9, 10, 9, 15); currentSchedule[2] = new Period("Period 2", 9, 15, 9, 55); - currentSchedule[3] = new Period("Passing Period", 9, 55, 10, 0); + currentSchedule[3] = new Period("→ Auditorium", 9, 55, 10, 0); currentSchedule[4] = new Period("Auditorium", 10, 0, 10, 35); currentSchedule[5] = new Period("→ Period 3", 10, 35, 10, 40); currentSchedule[6] = new Period("Period 3", 10, 40, 11, 20); @@ -258,7 +258,8 @@ function getSchedule() { } else { noClasses(); } - return currentSchedule; + + return cookieCheck(currentSchedule); } function specialSchedule() // <- What to print during special schedules @@ -409,6 +410,9 @@ function onLoad() { weekendText = thisWeekend(); } +// Below Code from Nicholas Lorentzen '20 +//This code was added to add the functionality of inputting a schedule + //Some code off a website to check cookies function getCookie(cname) { var name = cname + "="; @@ -426,6 +430,34 @@ function getCookie(cname) { return ""; } +function cookieCheck(scheduleToCheck) +{ + var cookieAbbrev = ["m", "t", "w", "y", "f", "s"]; + var currentAbbrev = cookieAbbrev[d.getDay()]; + + for(var i = 0; i < scheduleToCheck.length; i++){ + var currentPeriod = scheduleToCheck[i]; + var currentPeriodName = currentPeriod.title; + var addArrow = false; + if(currentPeriodName.includes("→")){ + addArrow = true; + } + if(currentPeriodName.includes("Period")){ + var numIdx = 7; + if(addArrow) {numIdx = 9;} + var currentPeriodNum = parseInt(currentPeriodName.charAt(numIdx)); + if(getCookie(currentAbbrev + currentPeriodNum)) + { + currentPeriodName = getCookie(currentAbbrev + currentPeriodNum); + if(addArrow){currentPeriodName = "→ " + currentPeriodName;} + } + currentPeriod.title = currentPeriodName; + scheduleToCheck[i] = currentPeriod; + } + } + return scheduleToCheck; +} + setInterval(loadTime, 1000); setInterval(loadDate, 1000); setInterval(updateD, 1000); From ec6c383b904d3d9427e371142f2c86f609acd4c8 Mon Sep 17 00:00:00 2001 From: Nicholas L <33159891+EKKOING@users.noreply.github.com> Date: Sun, 25 Aug 2019 23:42:46 -0400 Subject: [PATCH 04/62] Update Scheduler Domain --- scheduler/{script => js}/scheduler.js | 14 +++++++------- scheduler/scheduler.html | 3 +-- 2 files changed, 8 insertions(+), 9 deletions(-) rename scheduler/{script => js}/scheduler.js (75%) diff --git a/scheduler/script/scheduler.js b/scheduler/js/scheduler.js similarity index 75% rename from scheduler/script/scheduler.js rename to scheduler/js/scheduler.js index 1bf669c..96c39e7 100644 --- a/scheduler/script/scheduler.js +++ b/scheduler/js/scheduler.js @@ -2,14 +2,14 @@ /* Scheduler for Hotchkiss Clock Nicholas Lorentzen -Last updated 20190415 +Last updated 2019 04 15 */ var boiyardee = []; function addCookie(cookname) { boiyardee.push(cookname); - document.cookie = cookname + ";domain=thehotchkissrecord.github.io;max-age=31536000"; + document.cookie = cookname + ";domain=ekkoing.github.io/cclock/;max-age=31536000"; } function bakeCookies(recipe) @@ -22,16 +22,16 @@ function putCookie() var classes = ["m1","m2","m3","m4","m5","m6","m7","m8","t1","t2","t3","t4","t5","t6","t7","t8","w1","w2","w3","w4","y1","y2","y3","y4","y5","y6","y7","y8","f1","f2","f3","f4","f5","f6","f7","f8","s1","s2","s3","s4"]; classes.forEach(bakeCookies); - console.log (boiyardee.join(";") + ";domain=thehotchkissrecord.github.io;max-age=31536000"); - document.cookie = boiyardee.join(";") + ";domain=thehotchkissrecord.github.io;max-age=31536000"; + console.log (boiyardee.join(";") + ";domain=domain=ekkoing.github.io/cclock/;max-age=31536000"); + document.cookie = boiyardee.join(";") + ";domain=domain=ekkoing.github.io/cclock/;max-age=31536000"; return true; } function exitScheduler() { putCookie(); - alert("Cookies Set (Copy this for another browser): " + unescape(document.cookie)); - window.location.replace("https://thehotchkissrecord.github.io/HotchkissClock/"); + //alert("Cookies Set (Copy this for another browser): " + unescape(document.cookie)); + window.location.replace("https://ekkoing.github.io/cclock/"); } function cookiesAlert() @@ -65,6 +65,6 @@ function getCookie(cname) { function updateScheduler() { - document.cookie = document.getElementById("pasteCode").value + ";domain=thehotchkissrecord.github.io;max-age=31536000"; + document.cookie = document.getElementById("pasteCode").value + ";domain=ekkoing.github.io/cclock/;max-age=31536000"; alert(document.cookie); } \ No newline at end of file diff --git a/scheduler/scheduler.html b/scheduler/scheduler.html index d02eb46..b4735ec 100644 --- a/scheduler/scheduler.html +++ b/scheduler/scheduler.html @@ -3,7 +3,6 @@ Scheduler for Hotchkiss Clock - @@ -195,7 +194,7 @@

- + From 866009cf9dc793f9f909d521cf8b759870db82d2 Mon Sep 17 00:00:00 2001 From: Nicholas L <33159891+EKKOING@users.noreply.github.com> Date: Sun, 25 Aug 2019 23:44:47 -0400 Subject: [PATCH 05/62] Update File Name --- scheduler/{scheduler.html => index.html} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename scheduler/{scheduler.html => index.html} (100%) diff --git a/scheduler/scheduler.html b/scheduler/index.html similarity index 100% rename from scheduler/scheduler.html rename to scheduler/index.html From 2fa6a177833d91388ba87c18f3856964a52bafb0 Mon Sep 17 00:00:00 2001 From: Nicholas L <33159891+EKKOING@users.noreply.github.com> Date: Sun, 25 Aug 2019 23:48:32 -0400 Subject: [PATCH 06/62] Fix Domain Error --- scheduler/js/scheduler.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scheduler/js/scheduler.js b/scheduler/js/scheduler.js index 96c39e7..46877c6 100644 --- a/scheduler/js/scheduler.js +++ b/scheduler/js/scheduler.js @@ -22,8 +22,8 @@ function putCookie() var classes = ["m1","m2","m3","m4","m5","m6","m7","m8","t1","t2","t3","t4","t5","t6","t7","t8","w1","w2","w3","w4","y1","y2","y3","y4","y5","y6","y7","y8","f1","f2","f3","f4","f5","f6","f7","f8","s1","s2","s3","s4"]; classes.forEach(bakeCookies); - console.log (boiyardee.join(";") + ";domain=domain=ekkoing.github.io/cclock/;max-age=31536000"); - document.cookie = boiyardee.join(";") + ";domain=domain=ekkoing.github.io/cclock/;max-age=31536000"; + console.log (boiyardee.join(";") + ";domain=ekkoing.github.io/cclock/;max-age=31536000"); + document.cookie = boiyardee.join(";") + ";domain=ekkoing.github.io/cclock/;max-age=31536000"; return true; } From b3e1ef3cbb90913bd6bb39733e645e2443c17559 Mon Sep 17 00:00:00 2001 From: Nicholas L <33159891+EKKOING@users.noreply.github.com> Date: Mon, 26 Aug 2019 00:06:37 -0400 Subject: [PATCH 07/62] Change Customization Section --- README.md | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index a680bc5..bb941b0 100644 --- a/README.md +++ b/README.md @@ -49,13 +49,7 @@ animation: Gradient 15s ease infinite; ## Customization ### Add your own schedule -`script.js` is the controller for the clock on the page. It's simple but naïve –– the static page requires static changes to the code. For now, this means that you need to go into the actual functions to change the schedule, and the schedule unfortunately is not dynamically loading. - -`getSchedule()` gets the schedules of the day and outputs the correct block/period. `weekday` starts on Sunday (0), thus making Monday 1, and so on. You want to define and fill the array currentSchedule to indicate the period the specific weekday is following: -```javascript -currentSchedule[0] = new Period("Period 1", 8, 30, 9, 15); -``` -Where `new Period("Period 1", 8, 30, 9, 15)` means that the first period of the day (in `currentSchedule[0]`) is called "Period 1", and it starts at 8:30 AM and ends at 9:15 AM. The rest of the periods, and the rest of the days are defined similarly. +//NEEDS TO BE REWRITTEN TO SPECIFY 2 WAYS OF CUSTOMIZATION ### Special schedules At the start of the document, there are definitions for special days. On some occasions, events or special schedules might disrupt the normal schedule. This is where it should be defined and noted. Note that `new CalDay(3, 8)` means 8th of March. @@ -111,4 +105,4 @@ The clock will also display a random inspirational quote whenever you load it, l ## Thanks The design of version 2 was inspired by [Decount](https://decount.co/) (and this design was reimplemented into Decount), and the original source code was adapted from [Eric Li's Network Clock](https://github.com/eli8527/Network-Clock). -CClock © 2019, Jiahua Chen. Released under the [MIT License](https://mit-license.org/). +CClock © 2019, [Jiahua Chen](github.com/jiahuac) & [Nicholas Lorentzen](github.com/EKKOING). Released under the [MIT License](https://mit-license.org/). From 1d08a5d230751b52878034281ef32517c8bee604 Mon Sep 17 00:00:00 2001 From: Nicholas L <33159891+EKKOING@users.noreply.github.com> Date: Mon, 26 Aug 2019 00:08:13 -0400 Subject: [PATCH 08/62] Added Second Author --- LICENSE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LICENSE b/LICENSE index e398f3c..68f9444 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2019 Jiahua Chen +Copyright (c) 2019 Jiahua Chen & Nicholas Lorentzen Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal From f99607eedb2ec72484eebf351c8dfd3773f04260 Mon Sep 17 00:00:00 2001 From: Nicholas L <33159891+EKKOING@users.noreply.github.com> Date: Mon, 26 Aug 2019 00:12:59 -0400 Subject: [PATCH 09/62] Stop Scheduler from Auto Exiting --- scheduler/js/scheduler.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/scheduler/js/scheduler.js b/scheduler/js/scheduler.js index 46877c6..bd8101d 100644 --- a/scheduler/js/scheduler.js +++ b/scheduler/js/scheduler.js @@ -9,7 +9,7 @@ var boiyardee = []; function addCookie(cookname) { boiyardee.push(cookname); - document.cookie = cookname + ";domain=ekkoing.github.io/cclock/;max-age=31536000"; + document.cookie = cookname + ";domain=ekkoing.github.io/cclock;max-age=31536000"; } function bakeCookies(recipe) @@ -22,8 +22,8 @@ function putCookie() var classes = ["m1","m2","m3","m4","m5","m6","m7","m8","t1","t2","t3","t4","t5","t6","t7","t8","w1","w2","w3","w4","y1","y2","y3","y4","y5","y6","y7","y8","f1","f2","f3","f4","f5","f6","f7","f8","s1","s2","s3","s4"]; classes.forEach(bakeCookies); - console.log (boiyardee.join(";") + ";domain=ekkoing.github.io/cclock/;max-age=31536000"); - document.cookie = boiyardee.join(";") + ";domain=ekkoing.github.io/cclock/;max-age=31536000"; + console.log (boiyardee.join(";") + ";domain=ekkoing.github.io/cclock;max-age=31536000"); + document.cookie = boiyardee.join(";") + ";domain=ekkoing.github.io/cclock;max-age=31536000"; return true; } @@ -31,7 +31,7 @@ function exitScheduler() { putCookie(); //alert("Cookies Set (Copy this for another browser): " + unescape(document.cookie)); - window.location.replace("https://ekkoing.github.io/cclock/"); + //window.location.replace("https://ekkoing.github.io/cclock"); } function cookiesAlert() @@ -65,6 +65,6 @@ function getCookie(cname) { function updateScheduler() { - document.cookie = document.getElementById("pasteCode").value + ";domain=ekkoing.github.io/cclock/;max-age=31536000"; + document.cookie = document.getElementById("pasteCode").value + ";domain=ekkoing.github.io/cclock;max-age=31536000"; alert(document.cookie); } \ No newline at end of file From 14e203852af38649d9a3ace23ee29fd354f8f877 Mon Sep 17 00:00:00 2001 From: Nicholas L <33159891+EKKOING@users.noreply.github.com> Date: Mon, 26 Aug 2019 00:43:04 -0400 Subject: [PATCH 10/62] Update Domain for Testing --- scheduler/js/scheduler.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/scheduler/js/scheduler.js b/scheduler/js/scheduler.js index bd8101d..d0677e6 100644 --- a/scheduler/js/scheduler.js +++ b/scheduler/js/scheduler.js @@ -9,7 +9,7 @@ var boiyardee = []; function addCookie(cookname) { boiyardee.push(cookname); - document.cookie = cookname + ";domain=ekkoing.github.io/cclock;max-age=31536000"; + document.cookie = cookname + ";domain=ekkoing.github.io;max-age=31536000"; } function bakeCookies(recipe) @@ -22,8 +22,8 @@ function putCookie() var classes = ["m1","m2","m3","m4","m5","m6","m7","m8","t1","t2","t3","t4","t5","t6","t7","t8","w1","w2","w3","w4","y1","y2","y3","y4","y5","y6","y7","y8","f1","f2","f3","f4","f5","f6","f7","f8","s1","s2","s3","s4"]; classes.forEach(bakeCookies); - console.log (boiyardee.join(";") + ";domain=ekkoing.github.io/cclock;max-age=31536000"); - document.cookie = boiyardee.join(";") + ";domain=ekkoing.github.io/cclock;max-age=31536000"; + console.log (boiyardee.join(";") + ";domain=ekkoing.github.io;max-age=31536000"); + document.cookie = boiyardee.join(";") + ";domain=ekkoing.github.io;max-age=31536000"; return true; } @@ -65,6 +65,6 @@ function getCookie(cname) { function updateScheduler() { - document.cookie = document.getElementById("pasteCode").value + ";domain=ekkoing.github.io/cclock;max-age=31536000"; + document.cookie = document.getElementById("pasteCode").value + ";domain=ekkoing.github.io;max-age=31536000"; alert(document.cookie); } \ No newline at end of file From b951f7aa683e8f7dee3bef2af731c23428246b8e Mon Sep 17 00:00:00 2001 From: Nicholas L <33159891+EKKOING@users.noreply.github.com> Date: Mon, 26 Aug 2019 00:56:51 -0400 Subject: [PATCH 11/62] Fix Logic Statement --- script.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/script.js b/script.js index d15a0fb..19a3aea 100644 --- a/script.js +++ b/script.js @@ -446,8 +446,7 @@ function cookieCheck(scheduleToCheck) var numIdx = 7; if(addArrow) {numIdx = 9;} var currentPeriodNum = parseInt(currentPeriodName.charAt(numIdx)); - if(getCookie(currentAbbrev + currentPeriodNum)) - { + if(!(getCookie(currentAbbrev + currentPeriodNum) === "")){ currentPeriodName = getCookie(currentAbbrev + currentPeriodNum); if(addArrow){currentPeriodName = "→ " + currentPeriodName;} } From 5a33987b5eef98fb064b72eaea83cb8159654b01 Mon Sep 17 00:00:00 2001 From: Nicholas L <33159891+EKKOING@users.noreply.github.com> Date: Mon, 26 Aug 2019 01:10:43 -0400 Subject: [PATCH 12/62] Set a cookie path --- scheduler/js/scheduler.js | 8 ++++---- script.js | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/scheduler/js/scheduler.js b/scheduler/js/scheduler.js index d0677e6..6a9c29b 100644 --- a/scheduler/js/scheduler.js +++ b/scheduler/js/scheduler.js @@ -9,7 +9,7 @@ var boiyardee = []; function addCookie(cookname) { boiyardee.push(cookname); - document.cookie = cookname + ";domain=ekkoing.github.io;max-age=31536000"; + document.cookie = cookname + ";domain=ekkoing.github.io;max-age=31536000;path=\"; } function bakeCookies(recipe) @@ -22,8 +22,8 @@ function putCookie() var classes = ["m1","m2","m3","m4","m5","m6","m7","m8","t1","t2","t3","t4","t5","t6","t7","t8","w1","w2","w3","w4","y1","y2","y3","y4","y5","y6","y7","y8","f1","f2","f3","f4","f5","f6","f7","f8","s1","s2","s3","s4"]; classes.forEach(bakeCookies); - console.log (boiyardee.join(";") + ";domain=ekkoing.github.io;max-age=31536000"); - document.cookie = boiyardee.join(";") + ";domain=ekkoing.github.io;max-age=31536000"; + console.log (boiyardee.join(";") + ";domain=ekkoing.github.io;max-age=31536000;path=\"); + document.cookie = boiyardee.join(";") + ";domain=ekkoing.github.io;max-age=31536000;path=\"; return true; } @@ -65,6 +65,6 @@ function getCookie(cname) { function updateScheduler() { - document.cookie = document.getElementById("pasteCode").value + ";domain=ekkoing.github.io;max-age=31536000"; + document.cookie = document.getElementById("pasteCode").value + ";domain=ekkoing.github.io;max-age=31536000;path=\"; alert(document.cookie); } \ No newline at end of file diff --git a/script.js b/script.js index 19a3aea..e31dd36 100644 --- a/script.js +++ b/script.js @@ -433,7 +433,7 @@ function getCookie(cname) { function cookieCheck(scheduleToCheck) { var cookieAbbrev = ["m", "t", "w", "y", "f", "s"]; - var currentAbbrev = cookieAbbrev[d.getDay()]; + var currentAbbrev = cookieAbbrev[d.getDay() - 1]; for(var i = 0; i < scheduleToCheck.length; i++){ var currentPeriod = scheduleToCheck[i]; From 05768646cfdcdc5dcedc615af3b99f866454ccf2 Mon Sep 17 00:00:00 2001 From: Nicholas L <33159891+EKKOING@users.noreply.github.com> Date: Mon, 26 Aug 2019 01:18:14 -0400 Subject: [PATCH 13/62] Fix backslash direction --- scheduler/js/scheduler.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/scheduler/js/scheduler.js b/scheduler/js/scheduler.js index 6a9c29b..e6f6395 100644 --- a/scheduler/js/scheduler.js +++ b/scheduler/js/scheduler.js @@ -9,7 +9,7 @@ var boiyardee = []; function addCookie(cookname) { boiyardee.push(cookname); - document.cookie = cookname + ";domain=ekkoing.github.io;max-age=31536000;path=\"; + document.cookie = cookname + ";domain=ekkoing.github.io;max-age=31536000;path=/"; } function bakeCookies(recipe) @@ -22,8 +22,8 @@ function putCookie() var classes = ["m1","m2","m3","m4","m5","m6","m7","m8","t1","t2","t3","t4","t5","t6","t7","t8","w1","w2","w3","w4","y1","y2","y3","y4","y5","y6","y7","y8","f1","f2","f3","f4","f5","f6","f7","f8","s1","s2","s3","s4"]; classes.forEach(bakeCookies); - console.log (boiyardee.join(";") + ";domain=ekkoing.github.io;max-age=31536000;path=\"); - document.cookie = boiyardee.join(";") + ";domain=ekkoing.github.io;max-age=31536000;path=\"; + console.log (boiyardee.join(";") + ";domain=ekkoing.github.io;max-age=31536000;path=/"); + document.cookie = boiyardee.join(";") + ";domain=ekkoing.github.io;max-age=31536000;path=/"; return true; } @@ -65,6 +65,6 @@ function getCookie(cname) { function updateScheduler() { - document.cookie = document.getElementById("pasteCode").value + ";domain=ekkoing.github.io;max-age=31536000;path=\"; + document.cookie = document.getElementById("pasteCode").value + ";domain=ekkoing.github.io;max-age=31536000;path=/"; alert(document.cookie); } \ No newline at end of file From b5721610959a84c57a33347e47c0dceb7e537123 Mon Sep 17 00:00:00 2001 From: Nicholas L <33159891+EKKOING@users.noreply.github.com> Date: Mon, 26 Aug 2019 01:27:06 -0400 Subject: [PATCH 14/62] Fix 5A/5B Bug --- script.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/script.js b/script.js index e31dd36..5389440 100644 --- a/script.js +++ b/script.js @@ -446,6 +446,8 @@ function cookieCheck(scheduleToCheck) var numIdx = 7; if(addArrow) {numIdx = 9;} var currentPeriodNum = parseInt(currentPeriodName.charAt(numIdx)); + if(currentPeriodNum > 5){currentPeriodNum = currentPeriodNum + 1;} + if(currentPeriodName.includes("5B")){currentPeriodNum = 6;} if(!(getCookie(currentAbbrev + currentPeriodNum) === "")){ currentPeriodName = getCookie(currentAbbrev + currentPeriodNum); if(addArrow){currentPeriodName = "→ " + currentPeriodName;} From feedeb48425dfdd96f294065ec171b776fa3550f Mon Sep 17 00:00:00 2001 From: Nicholas L <33159891+EKKOING@users.noreply.github.com> Date: Mon, 26 Aug 2019 01:31:48 -0400 Subject: [PATCH 15/62] Happiness was mispelled --- message.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/message.js b/message.js index e65e016..7939b2e 100644 --- a/message.js +++ b/message.js @@ -103,7 +103,7 @@ var quotes = [ name: "George Carlin" }, { - quote: "Hapiness is not something ready made. It comes from your own actions.", + quote: "Happiness is not something ready made. It comes from your own actions.", name: "Dalai Lama" } ]; // <- Quotes go here From 102d0ea05bbc3b63d6c0555cc7929455501f0d72 Mon Sep 17 00:00:00 2001 From: Nicholas L <33159891+EKKOING@users.noreply.github.com> Date: Mon, 26 Aug 2019 01:38:59 -0400 Subject: [PATCH 16/62] Take out of testing mode --- script.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/script.js b/script.js index 5389440..092d00d 100644 --- a/script.js +++ b/script.js @@ -1,19 +1,19 @@ /* Controller for clock/time webapp Nicholas Lorentzen, Jiahua Chen, based off Eric Li's original design -Last updated 25 August 2019 +Last updated 26 August 2019 */ // Gets the current date and time -//var d = new Date(); -var d = new Date(2019,8,26,14,30,1,0); +var d = new Date(); +//var d = new Date(2019,8,26,14,30,1,0); // console.log(" *** d.getDate() " + d.getDate()); // console.log(" *** d.getMonth() " + d.getMonth()); // console.log(" *** dayType noClassSats" + i); // Updates the date and time function updateD() { - //d = new Date(); + d = new Date(); } var showTime = true; From c5a2ced90eaba3c9041621a0939f01d07037f009 Mon Sep 17 00:00:00 2001 From: Nicholas L <33159891+EKKOING@users.noreply.github.com> Date: Mon, 26 Aug 2019 18:43:46 -0400 Subject: [PATCH 17/62] Update Scheduler Style --- scheduler/index.html | 7 +------ scheduler/style/scheduler.css | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+), 6 deletions(-) create mode 100644 scheduler/style/scheduler.css diff --git a/scheduler/index.html b/scheduler/index.html index b4735ec..e2d210b 100644 --- a/scheduler/index.html +++ b/scheduler/index.html @@ -4,6 +4,7 @@ Scheduler for Hotchkiss Clock + @@ -193,11 +194,5 @@

-
If you have copied code from the alert bubble in another browser, paste it here to update your schedule.
If you have copied code from the alert bubble in another browser, paste it here to update your schedule. (Not Working Yet)
- - - - -
If you have copied code from the alert bubble in another browser, paste it here to update your schedule. (Not Working Yet)
diff --git a/scheduler/style/scheduler.css b/scheduler/style/scheduler.css new file mode 100644 index 0000000..9cb3bf6 --- /dev/null +++ b/scheduler/style/scheduler.css @@ -0,0 +1,22 @@ +@charset "utf-8"; +/* CSS Document */ + + +/* Body style */ +body { + /* Font */ + font-family: 'Open Sans', sans-serif; + min-height: 300px; + min-width: 500px; + display: flex; + align-items: center; + justify-content: left; + color: #20265A; + /* Animated gradient background */ + /*background: linear-gradient(-30deg, #111E6C, #0E4D92, #0F52BA, #003152);*/ + background-size: 1000% 1000%; + -webkit-animation: Gradient 15s ease infinite; + -moz-animation: Gradient 15s ease infinite; + animation: Gradient 15s ease infinite; + z-index: -50; +} From 231d56d776bbfa366e073499e03a68fbbb1fe219 Mon Sep 17 00:00:00 2001 From: Nicholas L <33159891+EKKOING@users.noreply.github.com> Date: Sun, 1 Sep 2019 23:46:26 -0400 Subject: [PATCH 18/62] Start Work on the new Schedule Preview Widget --- index.html | 3 +++ message.js | 6 ++---- scheduler/index.html | 39 +++++++++++++++++++++++++++++++++++++++ scheduler/js/scheduler.js | 4 ++-- 4 files changed, 46 insertions(+), 6 deletions(-) diff --git a/index.html b/index.html index 067ee8b..45a3682 100644 --- a/index.html +++ b/index.html @@ -74,6 +74,9 @@ + diff --git a/message.js b/message.js index 7939b2e..342f0cd 100644 --- a/message.js +++ b/message.js @@ -8,7 +8,7 @@ Last updated 6 July 2019 window.addEventListener('load', loadMessage); // Loads a series of messages and quotes -var message = ["Have a great summer! "]; // <- Message goes here! +var message = ["Welcome Back!"]; // <- Message goes here! var quotes = [ { quote: "Start by doing what's necessary; then do what's possible; and suddenly you are doing the impossible.", @@ -109,11 +109,9 @@ var quotes = [ ]; // <- Quotes go here function loadMessage() { - if (message.length !== 0) { + if (!(message === "")) { document.getElementById("message").innerHTML = message[0]; document.getElementById("message-widget").style.display = "block"; - } else { - } var idx = Math.floor(Math.random() * quotes.length); // var idx = 5; // <- Clock quote diff --git a/scheduler/index.html b/scheduler/index.html index e2d210b..bebf648 100644 --- a/scheduler/index.html +++ b/scheduler/index.html @@ -187,6 +187,45 @@ + + + + + + + + + + +
Name(Optional) + + Sport (For Upcoming Update) + + + +
+ +
diff --git a/scheduler/js/scheduler.js b/scheduler/js/scheduler.js index e6f6395..7c2621b 100644 --- a/scheduler/js/scheduler.js +++ b/scheduler/js/scheduler.js @@ -19,7 +19,7 @@ function bakeCookies(recipe) function putCookie() { - var classes = ["m1","m2","m3","m4","m5","m6","m7","m8","t1","t2","t3","t4","t5","t6","t7","t8","w1","w2","w3","w4","y1","y2","y3","y4","y5","y6","y7","y8","f1","f2","f3","f4","f5","f6","f7","f8","s1","s2","s3","s4"]; + var classes = ["m1","m2","m3","m4","m5","m6","m7","m8","t1","t2","t3","t4","t5","t6","t7","t8","w1","w2","w3","w4","y1","y2","y3","y4","y5","y6","y7","y8","f1","f2","f3","f4","f5","f6","f7","f8","s1","s2","s3","s4","name"]; classes.forEach(bakeCookies); console.log (boiyardee.join(";") + ";domain=ekkoing.github.io;max-age=31536000;path=/"); @@ -36,7 +36,7 @@ function exitScheduler() function cookiesAlert() { - window.alert("(STILL IN TESTING) Welcome to the scheduler! In order to use this service you will need cookies enabled. - Nicholas Lorentzen") + window.alert("Welcome to the scheduler! In order to use this service you will need cookies enabled. Note that any data entered here cannot be read from any other computer and exists purely on your device. This means that all data must be entered on each device separately until I come up with a more elegant solution - Nicholas Lorentzen '20") var classes = ["m1","m2","m3","m4","m5","m6","m7","m8","t1","t2","t3","t4","t5","t6","t7","t8","w1","w2","w3","w4","y1","y2","y3","y4","y5","y6","y7","y8","f1","f2","f3","f4","f5","f6","f7","f8","s1","s2","s3","s4"]; classes.forEach(fillTable); From 4d00101e89f83344e54cd5ec224a6cf2801f7bef Mon Sep 17 00:00:00 2001 From: Nicholas L <33159891+EKKOING@users.noreply.github.com> Date: Mon, 2 Sep 2019 00:05:04 -0400 Subject: [PATCH 19/62] Add Dates for Fall 2019 --- scheduler/js/scheduler.js | 3 +-- script.js | 12 +++++++----- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/scheduler/js/scheduler.js b/scheduler/js/scheduler.js index 7c2621b..7a0874f 100644 --- a/scheduler/js/scheduler.js +++ b/scheduler/js/scheduler.js @@ -5,6 +5,7 @@ Nicholas Lorentzen Last updated 2019 04 15 */ var boiyardee = []; +var classes = ["m1","m2","m3","m4","m5","m6","m7","m8","t1","t2","t3","t4","t5","t6","t7","t8","w1","w2","w3","w4","y1","y2","y3","y4","y5","y6","y7","y8","f1","f2","f3","f4","f5","f6","f7","f8","s1","s2","s3","s4","name"]; function addCookie(cookname) { @@ -19,7 +20,6 @@ function bakeCookies(recipe) function putCookie() { - var classes = ["m1","m2","m3","m4","m5","m6","m7","m8","t1","t2","t3","t4","t5","t6","t7","t8","w1","w2","w3","w4","y1","y2","y3","y4","y5","y6","y7","y8","f1","f2","f3","f4","f5","f6","f7","f8","s1","s2","s3","s4","name"]; classes.forEach(bakeCookies); console.log (boiyardee.join(";") + ";domain=ekkoing.github.io;max-age=31536000;path=/"); @@ -37,7 +37,6 @@ function exitScheduler() function cookiesAlert() { window.alert("Welcome to the scheduler! In order to use this service you will need cookies enabled. Note that any data entered here cannot be read from any other computer and exists purely on your device. This means that all data must be entered on each device separately until I come up with a more elegant solution - Nicholas Lorentzen '20") - var classes = ["m1","m2","m3","m4","m5","m6","m7","m8","t1","t2","t3","t4","t5","t6","t7","t8","w1","w2","w3","w4","y1","y2","y3","y4","y5","y6","y7","y8","f1","f2","f3","f4","f5","f6","f7","f8","s1","s2","s3","s4"]; classes.forEach(fillTable); } diff --git a/script.js b/script.js index 092d00d..7dd3fc3 100644 --- a/script.js +++ b/script.js @@ -24,10 +24,10 @@ var weekendText = ""; // Defines the special days var onbreak = false; -var specialDays = [new CalDay(3, 8), new CalDay(4, 25)]; // <- For special event days -var noClassSats = [new CalDay(4, 20), new CalDay(5, 4), new CalDay(5, 18)]; // <- For days without Saturday classes -var noClassDays = [new CalDay(4, 22), new CalDay(5, 18), new CalDay(5, 27), new CalDay(6, 1)]; // <- For days without classes, or breaks -var holidayDays = []; // <- For holidays +var specialDays = [new CalDay(9, 2), new CalDay(10, 12), new CalDay(11, 23)]; // <- For special event days +var noClassSats = [new CalDay(9, 14), new CalDay(10, 5), new CalDay(11, 2), new CalDay(12, 7)]; // <- For days without Saturday classes +var noClassDays = [new CalDay(5, 27), new CalDay(6, 1)]; // <- For days without classes, or breaks +var holidayDays = [new CalDay(10, 14), new CalDay(10, 15), new CalDay(12, 2)]; // <- For holidays function dayType() { @@ -265,7 +265,7 @@ function getSchedule() { function specialSchedule() // <- What to print during special schedules { document.getElementById("class-info").innerHTML = "Special Schedule"; - document.getElementById("schedule-info").innerHTML = "Please consult your planner for details."; + document.getElementById("schedule-info").innerHTML = "Please consult your email for details."; } function noClassSat() // <- What to print for no-class Saturdays @@ -459,6 +459,8 @@ function cookieCheck(scheduleToCheck) return scheduleToCheck; } +//Adds Schedule Preview and Custom Messages + setInterval(loadTime, 1000); setInterval(loadDate, 1000); setInterval(updateD, 1000); From 575e61705f7a85cf4c650d0add6f5db2e25351c0 Mon Sep 17 00:00:00 2001 From: Nicholas L <33159891+EKKOING@users.noreply.github.com> Date: Mon, 2 Sep 2019 10:05:26 -0400 Subject: [PATCH 20/62] Add links and autoredirect from scheduler --- index.html | 3 ++- scheduler/js/scheduler.js | 6 +++--- script.js | 1 + 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/index.html b/index.html index 45a3682..96c5b84 100644 --- a/index.html +++ b/index.html @@ -62,7 +62,7 @@
- Eric Li ’13, Jiahua Chen ’20, Nicholas Lorentzen ’20 + Eric Li ’13, Jiahua Chen ’20, Nicholas Lorentzen ’20 V1.01
@@ -76,6 +76,7 @@

diff --git a/scheduler/js/scheduler.js b/scheduler/js/scheduler.js index 7a0874f..ead24bc 100644 --- a/scheduler/js/scheduler.js +++ b/scheduler/js/scheduler.js @@ -29,9 +29,9 @@ function putCookie() function exitScheduler() { - putCookie(); - //alert("Cookies Set (Copy this for another browser): " + unescape(document.cookie)); - //window.location.replace("https://ekkoing.github.io/cclock"); + putCookie(); + alert("Schedule Updated!"); + window.location.href("https://ekkoing.github.io/cclock"); } function cookiesAlert() diff --git a/script.js b/script.js index 7dd3fc3..03c5554 100644 --- a/script.js +++ b/script.js @@ -408,6 +408,7 @@ function onLoad() { loadDate(); update(); weekendText = thisWeekend(); + document.getElementById("schedule-message").style.display = "block"; } // Below Code from Nicholas Lorentzen '20 From 7f4450608d56e2f97b67e5f333cdfb661d2561a7 Mon Sep 17 00:00:00 2001 From: Nicholas L <33159891+EKKOING@users.noreply.github.com> Date: Mon, 2 Sep 2019 12:56:27 -0400 Subject: [PATCH 21/62] Fix Redirect --- scheduler/js/scheduler.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scheduler/js/scheduler.js b/scheduler/js/scheduler.js index ead24bc..5ee3fd8 100644 --- a/scheduler/js/scheduler.js +++ b/scheduler/js/scheduler.js @@ -31,7 +31,7 @@ function exitScheduler() { putCookie(); alert("Schedule Updated!"); - window.location.href("https://ekkoing.github.io/cclock"); + window.location.href = "https://ekkoing.github.io/cclock"; } function cookiesAlert() From 2ca5cf7c387c639726e236a2b4d94922f3a2077e Mon Sep 17 00:00:00 2001 From: Nicholas L <33159891+EKKOING@users.noreply.github.com> Date: Tue, 3 Sep 2019 00:40:24 -0400 Subject: [PATCH 22/62] Add Schedule Preview Widget --- message.js | 4 -- scheduler/js/scheduler.js | 2 +- script.js | 145 +++++++++++++++++++++++++++++++++++--- 3 files changed, 137 insertions(+), 14 deletions(-) diff --git a/message.js b/message.js index 342f0cd..256da69 100644 --- a/message.js +++ b/message.js @@ -109,10 +109,6 @@ var quotes = [ ]; // <- Quotes go here function loadMessage() { - if (!(message === "")) { - document.getElementById("message").innerHTML = message[0]; - document.getElementById("message-widget").style.display = "block"; - } var idx = Math.floor(Math.random() * quotes.length); // var idx = 5; // <- Clock quote document.getElementById("quote").innerHTML = quotes[idx].quote; diff --git a/scheduler/js/scheduler.js b/scheduler/js/scheduler.js index 5ee3fd8..e43c3b3 100644 --- a/scheduler/js/scheduler.js +++ b/scheduler/js/scheduler.js @@ -36,7 +36,7 @@ function exitScheduler() function cookiesAlert() { - window.alert("Welcome to the scheduler! In order to use this service you will need cookies enabled. Note that any data entered here cannot be read from any other computer and exists purely on your device. This means that all data must be entered on each device separately until I come up with a more elegant solution - Nicholas Lorentzen '20") + window.alert("Welcome to the scheduler! In order to use this service you will need cookies enabled. Note that any data entered here cannot be read from any other computer and exists purely on your device. This means that all data must be entered on each device separately until I come up with a more elegant solution - Nicholas Lorentzen '20"); classes.forEach(fillTable); } diff --git a/script.js b/script.js index 03c5554..9bb19b0 100644 --- a/script.js +++ b/script.js @@ -19,16 +19,20 @@ function updateD() { var showTime = true; var descText; var weekendText = ""; +var mainMessage = ""; // Gets the classification of the date, and returns 0 if it is a normal day. Also contains dictionaries for special days. // Defines the special days var onbreak = false; -var specialDays = [new CalDay(9, 2), new CalDay(10, 12), new CalDay(11, 23)]; // <- For special event days +var specialDays = [new CalDay(10, 12), new CalDay(11, 23)]; // <- For special event days var noClassSats = [new CalDay(9, 14), new CalDay(10, 5), new CalDay(11, 2), new CalDay(12, 7)]; // <- For days without Saturday classes var noClassDays = [new CalDay(5, 27), new CalDay(6, 1)]; // <- For days without classes, or breaks var holidayDays = [new CalDay(10, 14), new CalDay(10, 15), new CalDay(12, 2)]; // <- For holidays +//What the current period's array location is +var currentArrayLoc = 0; + function dayType() { var i = 0; @@ -129,7 +133,7 @@ function update() { } else if (type === 0) { // console.log(" *** Is normal day"); // Gets today's schedule - var currentSchedule = getSchedule(); + var currentSchedule = getSchedule(d.getDay()); // console.log(" *** currentSchedule " + currentSchedule.length); // Checks which Period it currently is @@ -143,6 +147,7 @@ function update() { if (currentSchedule[i].startRaw < parseRaw() && parseRaw() < currentSchedule[i].endRaw) { // console.log(" *** currentSchedule[i].startRaw " + currentSchedule[i].startRaw); + currentArrayLoc = i; if (currentSchedule[i].title === "Passing Period") { normalDay(currentSchedule[i].title, currentSchedule[i].endRaw - parseRaw(), currentSchedule[i + 1].title, currentSchedule[i + 1].startRaw - parseRaw()); } else { @@ -151,11 +156,13 @@ function update() { } if (parseRaw() > currentSchedule[currentSchedule.length - 1].endRaw) { + currentArrayLoc = currentSchedule.length + 1; showTime = true; document.getElementById("class-info").innerHTML = ""; document.getElementById("schedule-info").innerHTML = descText + " ⋅ Have a nice day!"; } } + previewTableCreate(); } if (showTime) { document.getElementById("hrs").style.display = "block"; @@ -185,9 +192,8 @@ function update() { } // Gets the right schedule for a regular class day -function getSchedule() { +function getSchedule(weekday) { // console.log(" *** d.getDate() " + d.getDay()); - var weekday = d.getDay(); // Defines the currentSchedule array var currentSchedule = []; @@ -197,7 +203,7 @@ function getSchedule() { currentSchedule[0] = new Period("Period 1", 8, 30, 9, 15); currentSchedule[1] = new Period("→ Period 2", 9, 15, 9, 20); currentSchedule[2] = new Period("Period 2", 9, 20, 10, 5); - currentSchedule[3] = new Period("Passing Period", 10, 5, 10, 10); + currentSchedule[3] = new Period("→ Chapel / Class Meeting", 10, 5, 10, 10); currentSchedule[4] = new Period("Chapel / Class Meeting", 10, 10, 10, 35); currentSchedule[5] = new Period("→ Period 3", 10, 35, 10, 40); currentSchedule[6] = new Period("Period 3", 10, 40, 11, 20); @@ -259,7 +265,7 @@ function getSchedule() { noClasses(); } - return cookieCheck(currentSchedule); + return cookieCheck(currentSchedule, weekday); } function specialSchedule() // <- What to print during special schedules @@ -300,7 +306,7 @@ function normalDay(nowTitle, nowDiff, nextTitle, nextDiff) // <- What to print d } function beforeSchool(title, time) { - document.getElementById("class-info").innerHTML = "→ " + title; + document.getElementById("class-info").innerHTML = title; document.getElementById("schedule-info").innerHTML = descText + weekendText; printTime(time); } @@ -431,10 +437,10 @@ function getCookie(cname) { return ""; } -function cookieCheck(scheduleToCheck) +function cookieCheck(scheduleToCheck, weekday) { var cookieAbbrev = ["m", "t", "w", "y", "f", "s"]; - var currentAbbrev = cookieAbbrev[d.getDay() - 1]; + var currentAbbrev = cookieAbbrev[weekday - 1]; for(var i = 0; i < scheduleToCheck.length; i++){ var currentPeriod = scheduleToCheck[i]; @@ -461,8 +467,129 @@ function cookieCheck(scheduleToCheck) } //Adds Schedule Preview and Custom Messages +function previewTableCreate() { + if(document.cookie === "") {return;} + var myArrayLoc = currentArrayLoc; + var currentSchedule = getSchedule(d.getDay()); + var nextDay = false; + if(myArrayLoc > currentSchedule.length){ + if(d.getDay() + 1 == 7 || d.getDay() + 1 == 0){ + return; + } + currentSchedule = getSchedule(d.getDay() + 1); + myArrayLoc = -1; + nextDay = true; + } + var openingMessage = ""; + if(nextDay){ + openingMessage = "Here's a preview of your schedule tomorrow:"; + } else if(currentArrayLoc > currentSchedule.length / 2){ + openingMessage = "Here's what the rest of your day looks like:"; + } else { + openingMessage = "Here's your schedule for today:" + } + + document.getElementById("opening-message").innerHTML = openingMessage; + + removeElement("schedule-preview"); + var widget = document.getElementById("preview-table"); + var tbl = document.createElement('table'); + tbl.style.width = '100%'; + tbl.setAttribute("align", "center"); + tbl.setAttribute("id","schedule-preview") + var tbdy = document.createElement('tbody'); + var tr = document.createElement('tr'); + tr.style.textDecoration = "underline"; + for (var j = 0; j < 2; j++) { + var th = document.createElement("th"); + th.setAttribute("id","t"+j) + th.style.fontWeight = "600"; + if (j === 0) {th.innerHTML= "Time Till";} else {th.innerHTML= "Event";} + tr.appendChild(th); + } + tbdy.appendChild(tr); + + for(var i = myArrayLoc + 1; i < currentSchedule.length - 2; i++) { + var currentPeriod = currentSchedule[i]; + if(!(currentPeriod.title.includes("→") || currentPeriod.title.includes("Bell"))){ + tr = document.createElement('tr'); + for (j = 0; j < 2; j++) { + var td = document.createElement('td'); + td.setAttribute("id","td"+i+j); + td.setAttribute("align","center"); + + if(j == 0){ + if (nextDay){ + currentPeriod.startRaw = currentPeriod.startRaw + (3600 * 24); + } + var minsToClass = toMins(currentPeriod.startRaw - parseRaw()); + if (minsToClass < 10) { + minsToClass = "0" + minsToClass; + if (minsToClass < 1) { + minsToClass = "01"; + } + } + var hrsToClass = toHrs(currentPeriod.startRaw- parseRaw()); + if (hrsToClass < 1){ + hrsToClass = "0"; + } + td.innerHTML = "T- " + hrsToClass + ":" + minsToClass; + } else { + td.innerHTML = currentPeriod.title; + } + tr.appendChild(td); + } + tbdy.appendChild(tr); + } + } + tbl.appendChild(tbdy); + widget.appendChild(tbl); +} + +function removeElement(elementId) { + // Removes an element from the document + var element = document.getElementById(elementId); + if (element){ + element.parentNode.removeChild(element); + } +} + +function updateMainMessage() +{ + if(d.getMonth() === 8 && d.getDay() < 2){ + mainMessage = "Welcome Back!"; + if(getCookie("name") != ""){ + mainMessage = "Welcome Back " + getCookie("name") +"!"; + } + }else{ + if(d.getHours() <= 5 || d.getHours() > 8){ + mainMessage = "Goodnight..."; + }else if (d.getHours() < 12 || d.getHours() >= 8){ + mainMessage = "Good Morning!"; + if(getCookie("name") != ""){ + mainMessage = "Good Morning " + getCookie("name") +"!"; + } + }else if (d.getHours() < 17 || d.getHours() >= 12){ + mainMessage = "Good Afternoon!"; + if(getCookie("name") != ""){ + mainMessage = "Good Afternoon " + getCookie("name") +"!"; + } + }else{ + mainMessage = "Good Evening!"; + if(getCookie("name") != ""){ + mainMessage = "Good Evening " + getCookie("name") +"!"; + } + } + } + + if (!(mainMessage === "")) { + document.getElementById("message").innerHTML = mainMessage; + document.getElementById("message-widget").style.display = "block"; + } +} setInterval(loadTime, 1000); setInterval(loadDate, 1000); setInterval(updateD, 1000); setInterval(update, 1000); +setInterval(updateMainMessage, 1000); From b34656628c90b05f200a39ba79c6ed209653ccf1 Mon Sep 17 00:00:00 2001 From: Nicholas L <33159891+EKKOING@users.noreply.github.com> Date: Tue, 3 Sep 2019 00:49:48 -0400 Subject: [PATCH 23/62] Update index.html --- index.html | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/index.html b/index.html index 96c5b84..c9597c0 100644 --- a/index.html +++ b/index.html @@ -62,7 +62,7 @@
- Eric Li ’13, Jiahua Chen ’20, Nicholas Lorentzen ’20 V1.01 + Eric Li ’13, Jiahua Chen ’20, Nicholas Lorentzen ’20 V1.13
@@ -75,9 +75,10 @@

- From 36e6ab2955f8f8ce90d4efc4875fe0d4a3e4de47 Mon Sep 17 00:00:00 2001 From: Nicholas L <33159891+EKKOING@users.noreply.github.com> Date: Tue, 3 Sep 2019 00:58:52 -0400 Subject: [PATCH 24/62] Assume blanks are frees --- scheduler/js/scheduler.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/scheduler/js/scheduler.js b/scheduler/js/scheduler.js index e43c3b3..80fd74e 100644 --- a/scheduler/js/scheduler.js +++ b/scheduler/js/scheduler.js @@ -9,6 +9,9 @@ var classes = ["m1","m2","m3","m4","m5","m6","m7","m8","t1","t2","t3","t4","t5", function addCookie(cookname) { + if (cookname === "" && !cookname.includes("name")){ + cookname = "Free"; + } boiyardee.push(cookname); document.cookie = cookname + ";domain=ekkoing.github.io;max-age=31536000;path=/"; } From 68f2aa23dfac29e5b6f8901588ba5eed7f612105 Mon Sep 17 00:00:00 2001 From: Nicholas L <33159891+EKKOING@users.noreply.github.com> Date: Tue, 3 Sep 2019 01:08:40 -0400 Subject: [PATCH 25/62] Fix Autofill --- scheduler/js/scheduler.js | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/scheduler/js/scheduler.js b/scheduler/js/scheduler.js index 80fd74e..daa4a1e 100644 --- a/scheduler/js/scheduler.js +++ b/scheduler/js/scheduler.js @@ -9,15 +9,20 @@ var classes = ["m1","m2","m3","m4","m5","m6","m7","m8","t1","t2","t3","t4","t5", function addCookie(cookname) { - if (cookname === "" && !cookname.includes("name")){ - cookname = "Free"; - } + boiyardee.push(cookname); document.cookie = cookname + ";domain=ekkoing.github.io;max-age=31536000;path=/"; } function bakeCookies(recipe) { + if (recipe.includes(5) || recipe.includes(6)){ + recipe = "Lunch"; + } + if (recipe === "" && !recipe.includes("name")){ + recipe = "Free"; + } + addCookie(recipe + "=" + escape(document.getElementById(recipe).value)); } From 33bf3948ebd9783cc070edbaf9e7f618a1cc6b4c Mon Sep 17 00:00:00 2001 From: Nicholas L <33159891+EKKOING@users.noreply.github.com> Date: Tue, 3 Sep 2019 01:14:24 -0400 Subject: [PATCH 26/62] Fix Spacing of Schedule Box --- index.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/index.html b/index.html index c9597c0..dc4615c 100644 --- a/index.html +++ b/index.html @@ -76,8 +76,8 @@

From 252de483fd5451d9332f737e9b9eed58143a83f8 Mon Sep 17 00:00:00 2001 From: Nicholas L <33159891+EKKOING@users.noreply.github.com> Date: Tue, 3 Sep 2019 09:27:14 -0400 Subject: [PATCH 27/62] Update script.js --- script.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/script.js b/script.js index 9bb19b0..d53c340 100644 --- a/script.js +++ b/script.js @@ -562,14 +562,14 @@ function updateMainMessage() mainMessage = "Welcome Back " + getCookie("name") +"!"; } }else{ - if(d.getHours() <= 5 || d.getHours() > 8){ + if(d.getHours() <= 5 && d.getHours() > 8){ mainMessage = "Goodnight..."; - }else if (d.getHours() < 12 || d.getHours() >= 8){ + }else if (d.getHours() < 12 && d.getHours() >= 8){ mainMessage = "Good Morning!"; if(getCookie("name") != ""){ mainMessage = "Good Morning " + getCookie("name") +"!"; } - }else if (d.getHours() < 17 || d.getHours() >= 12){ + }else if (d.getHours() < 17 && d.getHours() >= 12){ mainMessage = "Good Afternoon!"; if(getCookie("name") != ""){ mainMessage = "Good Afternoon " + getCookie("name") +"!"; From 090cdea343fa8e21f0e681e52525575f61ea2664 Mon Sep 17 00:00:00 2001 From: Nicholas L <33159891+EKKOING@users.noreply.github.com> Date: Tue, 3 Sep 2019 09:52:25 -0400 Subject: [PATCH 28/62] Update script.js --- script.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/script.js b/script.js index d53c340..acb9c4e 100644 --- a/script.js +++ b/script.js @@ -562,9 +562,9 @@ function updateMainMessage() mainMessage = "Welcome Back " + getCookie("name") +"!"; } }else{ - if(d.getHours() <= 5 && d.getHours() > 8){ + if(d.getHours() <= 5 && d.getHours() > 20){ mainMessage = "Goodnight..."; - }else if (d.getHours() < 12 && d.getHours() >= 8){ + }else if (d.getHours() < 12 && d.getHours() >= 5){ mainMessage = "Good Morning!"; if(getCookie("name") != ""){ mainMessage = "Good Morning " + getCookie("name") +"!"; From b2e8bce4b6bb5f66c37fa62d45ff622a02de9a64 Mon Sep 17 00:00:00 2001 From: Nicholas L <33159891+EKKOING@users.noreply.github.com> Date: Tue, 3 Sep 2019 10:57:43 -0400 Subject: [PATCH 29/62] Fix autofill --- scheduler/js/scheduler.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/scheduler/js/scheduler.js b/scheduler/js/scheduler.js index daa4a1e..0bb260b 100644 --- a/scheduler/js/scheduler.js +++ b/scheduler/js/scheduler.js @@ -16,14 +16,15 @@ function addCookie(cookname) function bakeCookies(recipe) { + var cookieValue = document.getElementById(recipe).value if (recipe.includes(5) || recipe.includes(6)){ - recipe = "Lunch"; + cookieValue = "Lunch"; } - if (recipe === "" && !recipe.includes("name")){ - recipe = "Free"; + if (cookieValue === "" && !recipe.includes("name")){ + cookieValue = "Free"; } - addCookie(recipe + "=" + escape(document.getElementById(recipe).value)); + addCookie(recipe + "=" + escape(cookieValue)); } function putCookie() From 2dc4a60eb9e6d1baf711e410c51b8559ecbbcbfe Mon Sep 17 00:00:00 2001 From: Nicholas L <33159891+EKKOING@users.noreply.github.com> Date: Tue, 3 Sep 2019 11:21:14 -0400 Subject: [PATCH 30/62] Update scheduler.js --- scheduler/js/scheduler.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scheduler/js/scheduler.js b/scheduler/js/scheduler.js index 0bb260b..0f7329f 100644 --- a/scheduler/js/scheduler.js +++ b/scheduler/js/scheduler.js @@ -17,7 +17,7 @@ function addCookie(cookname) function bakeCookies(recipe) { var cookieValue = document.getElementById(recipe).value - if (recipe.includes(5) || recipe.includes(6)){ + if ((recipe.includes(5) || recipe.includes(6)) && cookieValue === ""){ cookieValue = "Lunch"; } if (cookieValue === "" && !recipe.includes("name")){ From 132148d9537b4da9cedd34141b1d853c9e0f6a8f Mon Sep 17 00:00:00 2001 From: Nicholas L <33159891+EKKOING@users.noreply.github.com> Date: Tue, 3 Sep 2019 11:49:57 -0400 Subject: [PATCH 31/62] Update Dev Email --- index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.html b/index.html index dc4615c..adfd3d7 100644 --- a/index.html +++ b/index.html @@ -64,7 +64,7 @@
Eric Li ’13, Jiahua Chen ’20, Nicholas Lorentzen ’20 V1.13 - +
From 2e34c3ff6fd4790b89a3071f7c06edc0716a70f2 Mon Sep 17 00:00:00 2001 From: Nicholas L <33159891+EKKOING@users.noreply.github.com> Date: Sun, 8 Sep 2019 21:14:50 -0400 Subject: [PATCH 32/62] Bug Fix Fixed a bug where users would not get a preview of their Monday schedule on Sundays. --- script.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/script.js b/script.js index acb9c4e..5c747d3 100644 --- a/script.js +++ b/script.js @@ -468,12 +468,12 @@ function cookieCheck(scheduleToCheck, weekday) //Adds Schedule Preview and Custom Messages function previewTableCreate() { - if(document.cookie === "") {return;} + //if(document.cookie === "") {return;} var myArrayLoc = currentArrayLoc; var currentSchedule = getSchedule(d.getDay()); var nextDay = false; - if(myArrayLoc > currentSchedule.length){ - if(d.getDay() + 1 == 7 || d.getDay() + 1 == 0){ + if(myArrayLoc > currentSchedule.length || d.getDay() === 0){ + if(d.getDay() + 1 == 7){ return; } currentSchedule = getSchedule(d.getDay() + 1); From f0f3a646a52d3f7164f8c0f76184258d94498c4b Mon Sep 17 00:00:00 2001 From: Nicholas Lorentzen Date: Thu, 19 Mar 2020 21:31:32 -0400 Subject: [PATCH 33/62] Duplicate Files --- corona-clock/assets/screenshot.jpg | Bin 0 -> 349483 bytes corona-clock/index-scroll.html | 93 ++++ corona-clock/index.html | 91 ++++ corona-clock/message.js | 117 ++++ corona-clock/scheduler/index.html | 237 ++++++++ corona-clock/scheduler/js/scheduler.js | 78 +++ corona-clock/scheduler/style/scheduler.css | 22 + corona-clock/script.js | 595 +++++++++++++++++++++ corona-clock/style.css | 319 +++++++++++ 9 files changed, 1552 insertions(+) create mode 100644 corona-clock/assets/screenshot.jpg create mode 100644 corona-clock/index-scroll.html create mode 100644 corona-clock/index.html create mode 100644 corona-clock/message.js create mode 100644 corona-clock/scheduler/index.html create mode 100644 corona-clock/scheduler/js/scheduler.js create mode 100644 corona-clock/scheduler/style/scheduler.css create mode 100644 corona-clock/script.js create mode 100644 corona-clock/style.css diff --git a/corona-clock/assets/screenshot.jpg b/corona-clock/assets/screenshot.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f009dd201d6a0e95a25309b994bc7a9919c4af64 GIT binary patch literal 349483 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�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%0DF(EEen72qRT zQ;_Dsc7hl);s-k2L6bx?ftCwrB*^2w7x;nz9C-n74#Rt0(^8C$ULS<6`UW?r7+BB@ z|F}UVPRUoZoGgJ<^!zo?0r=bR^_8P}Rf1RRgOw?U=|{gW#n?wXfd!s#{ADFvD#gEz z!8ev$Xa%1O09$WoJLs=!3TO&kwiFOTf5@Aj>Y5Glbwr{^mWQ5*WR`did3{F_i{79h z6bqnRHL1|aqeLrKRH7mvFbS=v2bYJ^7#2aZbOY!HKvcp|h@gnSg;OymMmK<5tx*7} zZ~Xc{H9<5pT$X}B@-5y7b^vbHbC_9x1_@w~v{y$3Us-9JZ1$jN1~|<0!Az-I_<1G% zkRXS^V>ZGW;LdvdZ~dlep!wi(6@w=tU|PI^z72qhAFLNv3YvwX`R*AjHpUW_1bT=k z2TftvLUErIh9zjKkiDYcG$AxIT&}VJ9u8R9I6DLj*lrh_?Xr&pU&t28LUxflUM-K+ z4F(f~Jzk&$qBXerl?oU{W(Zg|*k~$xRQf^_L36@IkOGWbkjSC%LFAGf03e7WXlfO- zM)6Zl!M(aSpK&1{2^0+_wd?}TcHV># zQBb=~$Kv;y$T@zb2>vBlZ(33R)_j%O=_$x-t*K#CgA7ttn>moj-pbb!0$|}lAqh(K ir#5?C@w9@3J!$LNQ8Q_zw$-qf9W6VSV+6AE>Hh&6oBqcD literal 0 HcmV?d00001 diff --git a/corona-clock/index-scroll.html b/corona-clock/index-scroll.html new file mode 100644 index 0000000..0c6f5fb --- /dev/null +++ b/corona-clock/index-scroll.html @@ -0,0 +1,93 @@ + + + + + + + + + Hotchkiss Clock + + + + + + + + + + + + +
+ +
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+

+

+

+ Hours +

+
+
+

+

+

+ Minutes +

+
+
+

+

+

+ Seconds +

+
+
+ +
+ Eric Li ’13, Jiahua Chen ’20 + + +
+ +
+ + +
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque rhoncus eros vitae laoreet sollicitudin. Praesent vitae imperdiet arcu, ut lobortis ante. Vestibulum vel tortor vitae mauris varius dignissim nec in neque. Aliquam cursus scelerisque porttitor. Nullam nec ligula rutrum, tempus arcu eget, gravida justo. Donec fringilla tellus congue tellus vestibulum, et molestie justo tempus. Cras pellentesque nulla sed sagittis mollis. Praesent purus massa, lobortis sed odio sed, vulputate interdum eros. Fusce cursus quis neque et condimentum. Cras eget ligula sit amet dolor suscipit facilisis. Etiam eget nisl id enim congue consequat. +
+
+ Quisque placerat sapien eget finibus imperdiet. In laoreet pellentesque mi sit amet faucibus. Proin quis augue id nunc ornare elementum non feugiat nulla. Quisque justo ante, vestibulum ac sagittis vitae, faucibus non nibh. Aenean non odio ex. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Fusce lacinia euismod ornare. Integer at lectus augue. Donec a vehicula nibh, id posuere eros. Aenean lacus ante, malesuada non libero at, vehicula semper metus. Sed est orci, imperdiet vel cursus finibus, vulputate quis nibh. +
+
+ + + + + + + + diff --git a/corona-clock/index.html b/corona-clock/index.html new file mode 100644 index 0000000..adfd3d7 --- /dev/null +++ b/corona-clock/index.html @@ -0,0 +1,91 @@ + + + + + + + + + Hotchkiss Clock + + + + + + + + + + + + +
+ +
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+

+

+

+ Hours +

+
+
+

+

+

+ Minutes +

+
+
+

+

+

+ Seconds +

+
+
+ +
+ Eric Li ’13, Jiahua Chen ’20, Nicholas Lorentzen ’20 V1.13 + + +
+ +
+ + + +
+ + + + + + + + diff --git a/corona-clock/message.js b/corona-clock/message.js new file mode 100644 index 0000000..256da69 --- /dev/null +++ b/corona-clock/message.js @@ -0,0 +1,117 @@ +/* +Controller for message on clock/time webapp +Jiahua Chen +Inspired by codepen/kkoutoup +Last updated 6 July 2019 +*/ + +window.addEventListener('load', loadMessage); + +// Loads a series of messages and quotes +var message = ["Welcome Back!"]; // <- Message goes here! +var quotes = [ + { + quote: "Start by doing what's necessary; then do what's possible; and suddenly you are doing the impossible.", + name: "Francis of Assisi" + }, + { + quote: "Believe you can and you're halfway there.", + name: "Theodore Roosevelt" + }, + { + quote: "It does not matter how slowly you go as long as you do not stop.", + name: "Confucius" + }, + { + quote: "Our greatest weakness lies in giving up. The most certain way to succeed is always to try just one more time.", + name: "Thomas A. Edison" + }, + { + quote: "The will to win, the desire to succeed, the urge to reach your full potential... these are the keys that will unlock the door to personal excellence.", + name: "Confucius" + }, + { + quote: "Don't watch the clock; do what it does. Keep going.", + name: "Sam Levenson" + }, + { + quote: "A creative man is motivated by the desire to achieve, not by the desire to beat others.", + name: "Ayn Rand" + }, + { + quote: "A creative man is motivated by the desire to achieve, not by the desire to beat others.", + name: "Ayn Rand" + }, + { + quote: "Expect problems and eat them for breakfast.", + name: "Alfred A. Montapert" + }, + { + quote: "Start where you are. Use what you have. Do what you can.", + name: "Arthur Ashe" + }, + { + quote: "Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better.", + name: "Samuel Beckett" + }, + { + quote: "Be yourself; everyone else is already taken.", + name: "Oscar Wilde" + }, + { + quote: "Two things are infinite: the universe and human stupidity; and I'm not sure about the universe.", + name: "Albert Einstein" + }, + { + quote: "Always remember that you are absolutely unique. Just like everyone else.", + name: "Margaret Mead" + }, + { + quote: "Do not take life too seriously. You will never get out of it alive.", + name: "Elbert Hubbard" + }, + { + quote: "People who think they know everything are a great annoyance to those of us who do.", + name: "Isaac Asimov" + }, + { + quote: "Procrastination is the art of keeping up with yesterday.", + name: "Don Marquis" + }, + { + quote: "Get your facts first, then you can distort them as you please.", + name: "Mark Twain" + }, + { + quote: "A day without sunshine is like, you know, night.", + name: "Steve Martin" + }, + { + quote: "My grandmother started walking five miles a day when she was sixty. She's ninety-seven now, and we don't know where the hell she is.", + name: "Ellen DeGeneres" + }, + { + quote: "Don't sweat the petty things and don't pet the sweaty things.", + name: "George Carlin" + }, + { + quote: "Always do whatever's next.", + name: "George Carlin" + }, + { + quote: "Atheism is a non-prophet organization.", + name: "George Carlin" + }, + { + quote: "Happiness is not something ready made. It comes from your own actions.", + name: "Dalai Lama" + } +]; // <- Quotes go here + +function loadMessage() { + var idx = Math.floor(Math.random() * quotes.length); + // var idx = 5; // <- Clock quote + document.getElementById("quote").innerHTML = quotes[idx].quote; + document.getElementById("speaker").innerHTML = quotes[idx].name; + document.getElementById("quote-widget").style.display = "block"; +} diff --git a/corona-clock/scheduler/index.html b/corona-clock/scheduler/index.html new file mode 100644 index 0000000..bebf648 --- /dev/null +++ b/corona-clock/scheduler/index.html @@ -0,0 +1,237 @@ + + + + +Scheduler for Hotchkiss Clock + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SchedulerMondayTuesdayWednesdayThursdayFridaySaturday
Period 1 + + + + + + + + + + + +
Period 2 + + + + + + + + + + + +
Period 3 + + + + + + + + + + + +
Period 4 + + + + + + + + + + + +
Period 5A + + + + + + + + + + + +
Period 5B + + + + + + + + + + + +
Period 6 + + + + +

Nicholas Lorentzen wrote this code

+
+ + + + + +
Period 7 + + + + + + + + + + + +
+ + + + + + + + +
Name(Optional) + + Sport (For Upcoming Update) + + + +
+
+
+
+
+ + diff --git a/corona-clock/scheduler/js/scheduler.js b/corona-clock/scheduler/js/scheduler.js new file mode 100644 index 0000000..0f7329f --- /dev/null +++ b/corona-clock/scheduler/js/scheduler.js @@ -0,0 +1,78 @@ + +/* +Scheduler for Hotchkiss Clock +Nicholas Lorentzen +Last updated 2019 04 15 +*/ +var boiyardee = []; +var classes = ["m1","m2","m3","m4","m5","m6","m7","m8","t1","t2","t3","t4","t5","t6","t7","t8","w1","w2","w3","w4","y1","y2","y3","y4","y5","y6","y7","y8","f1","f2","f3","f4","f5","f6","f7","f8","s1","s2","s3","s4","name"]; + +function addCookie(cookname) +{ + + boiyardee.push(cookname); + document.cookie = cookname + ";domain=ekkoing.github.io;max-age=31536000;path=/"; +} + +function bakeCookies(recipe) +{ + var cookieValue = document.getElementById(recipe).value + if ((recipe.includes(5) || recipe.includes(6)) && cookieValue === ""){ + cookieValue = "Lunch"; + } + if (cookieValue === "" && !recipe.includes("name")){ + cookieValue = "Free"; + } + + addCookie(recipe + "=" + escape(cookieValue)); +} + +function putCookie() +{ + + classes.forEach(bakeCookies); + console.log (boiyardee.join(";") + ";domain=ekkoing.github.io;max-age=31536000;path=/"); + document.cookie = boiyardee.join(";") + ";domain=ekkoing.github.io;max-age=31536000;path=/"; + return true; +} + +function exitScheduler() +{ + putCookie(); + alert("Schedule Updated!"); + window.location.href = "https://ekkoing.github.io/cclock"; +} + +function cookiesAlert() +{ + window.alert("Welcome to the scheduler! In order to use this service you will need cookies enabled. Note that any data entered here cannot be read from any other computer and exists purely on your device. This means that all data must be entered on each device separately until I come up with a more elegant solution - Nicholas Lorentzen '20"); + + classes.forEach(fillTable); +} + +function fillTable(chef) +{ + document.getElementById(chef).value = getCookie(chef); +} + +function getCookie(cname) { + var name = cname + "="; + var decodedCookie = decodeURIComponent(document.cookie); + var ca = decodedCookie.split(';'); + for(var i = 0; i = 12) ? 'PM' : 'AM'; + + // Outputs to HTML + document.getElementById("clock").innerHTML = hr + ":" + ("0" + d.getMinutes()).slice(-2) + " " + sufx; +} + +function loadDate() { + // Dictionary for text-based date + var days = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]; + //var months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]; + + // Outputs to HTML + descText = days[d.getDay()]; +} + +// Below mostly code from Eric Li '13 + +// Defines a Period +function Period(title, startHr, startMin, endHr, endMin) { + this.title = title; + this.startHr = startHr; + this.startMin = startMin; + this.startRaw = startHr * 3600 + startMin * 60; + this.endHr = endHr; + this.endMin = endMin; + this.endRaw = endHr * 3600 + endMin * 60; +} + +function CalDay(month, date) { + this.date = date; + // console.log(this.date); + this.month = month - 1; + // console.log(this.month); +} + +// Updates the clock messages +function update() { + var i = 0; + // Stores the dayType + var type = dayType(); + // Debug *** + // console.log(type); + // Checks for special days + if (type === 1) { + specialSchedule(); + } else if (type === 2) { + noClassSat(); + } else if (type === 3) { + noClasses(); + } else if (type === 4) { + holiday(); + } else if (type === 5) { + schoolBreak(); + } else if (type === 0) { + // console.log(" *** Is normal day"); + // Gets today's schedule + var currentSchedule = getSchedule(d.getDay()); + // console.log(" *** currentSchedule " + currentSchedule.length); + + // Checks which Period it currently is + for (i = 0; i < currentSchedule.length; i++) { + // console.log(" *** for i " + i); + // console.log(" *** parseRaw " + parseRaw()); + + if (parseRaw() < currentSchedule[0].startRaw) { + beforeSchool(currentSchedule[0].title, currentSchedule[0].startRaw - parseRaw()); + } + + if (currentSchedule[i].startRaw < parseRaw() && parseRaw() < currentSchedule[i].endRaw) { + // console.log(" *** currentSchedule[i].startRaw " + currentSchedule[i].startRaw); + currentArrayLoc = i; + if (currentSchedule[i].title === "Passing Period") { + normalDay(currentSchedule[i].title, currentSchedule[i].endRaw - parseRaw(), currentSchedule[i + 1].title, currentSchedule[i + 1].startRaw - parseRaw()); + } else { + normalDay(currentSchedule[i].title, currentSchedule[i].endRaw - parseRaw(), currentSchedule[i + 2].title, currentSchedule[i + 2].startRaw - parseRaw()); + } + } + + if (parseRaw() > currentSchedule[currentSchedule.length - 1].endRaw) { + currentArrayLoc = currentSchedule.length + 1; + showTime = true; + document.getElementById("class-info").innerHTML = ""; + document.getElementById("schedule-info").innerHTML = descText + " ⋅ Have a nice day!"; + } + } + previewTableCreate(); + } + if (showTime) { + document.getElementById("hrs").style.display = "block"; + var rawTime = parseRaw(); + document.documentElement.style.setProperty('--timer-hours', "'" + toHrs(rawTime).toLocaleString('en-US', { + minimumIntegerDigits: 2, + useGrouping: false + }) + "'"); + document.documentElement.style.setProperty('--timer-minutes', "'" + toMins(rawTime).toLocaleString('en-US', { + minimumIntegerDigits: 2, + useGrouping: false + }) + "'"); + document.documentElement.style.setProperty('--timer-seconds', "'" + toSecs(rawTime).toLocaleString('en-US', { + minimumIntegerDigits: 2, + useGrouping: false + }) + "'"); + } + + // Code to change the Document Title, disabled for now. + // document.title = "Hotchkiss Clock ⋅ " + toHrs(rawTime).toLocaleString('en-US', { + // minimumIntegerDigits: 2, + // useGrouping: false + // }) + ":" + toMins(rawTime).toLocaleString('en-US', { + // minimumIntegerDigits: 2, + // useGrouping: false + // }) + ":" + toSecs(rawTime).toLocaleString('en-US', {minimumIntegerDigits: 2, useGrouping: false}); +} + +// Gets the right schedule for a regular class day +function getSchedule(weekday) { + // console.log(" *** d.getDate() " + d.getDay()); + + // Defines the currentSchedule array + var currentSchedule = []; + + // Assigns class schedules for weekday scenarios + if (weekday === 1 || weekday === 4) { + currentSchedule[0] = new Period("Period 1", 8, 30, 9, 15); + currentSchedule[1] = new Period("→ Period 2", 9, 15, 9, 20); + currentSchedule[2] = new Period("Period 2", 9, 20, 10, 5); + currentSchedule[3] = new Period("→ Chapel / Class Meeting", 10, 5, 10, 10); + currentSchedule[4] = new Period("Chapel / Class Meeting", 10, 10, 10, 35); + currentSchedule[5] = new Period("→ Period 3", 10, 35, 10, 40); + currentSchedule[6] = new Period("Period 3", 10, 40, 11, 20); + currentSchedule[7] = new Period("→ Period 4", 11, 20, 11, 25); + currentSchedule[8] = new Period("Period 4", 11, 25, 12, 5); + currentSchedule[9] = new Period("→ Period 5A", 12, 5, 12, 10); + currentSchedule[10] = new Period("Period 5A", 12, 10, 12, 55); + currentSchedule[11] = new Period("Lunch Bell", 12, 55, 12, 55); + currentSchedule[12] = new Period("Period 5B", 12, 55, 13, 40); + currentSchedule[13] = new Period("→ Period 6", 13, 40, 13, 45); + currentSchedule[14] = new Period("Period 6", 13, 45, 14, 30); + currentSchedule[15] = new Period("→ Period 7", 14, 30, 14, 35); + currentSchedule[16] = new Period("Period 7", 14, 35, 15, 20); + currentSchedule[17] = new Period("end of school", 15, 20, 15, 20); + currentSchedule[18] = new Period("end of school", 15, 20, 15, 20); + } else if (weekday === 2 || weekday === 5) { + currentSchedule[0] = new Period("Period 1", 8, 30, 9, 10); + currentSchedule[1] = new Period("→ Period 2", 9, 10, 9, 15); + currentSchedule[2] = new Period("Period 2", 9, 15, 9, 55); + currentSchedule[3] = new Period("→ Auditorium", 9, 55, 10, 0); + currentSchedule[4] = new Period("Auditorium", 10, 0, 10, 35); + currentSchedule[5] = new Period("→ Period 3", 10, 35, 10, 40); + currentSchedule[6] = new Period("Period 3", 10, 40, 11, 20); + currentSchedule[7] = new Period("→ Period 4", 11, 20, 11, 25); + currentSchedule[8] = new Period("Period 4", 11, 25, 12, 5); + currentSchedule[9] = new Period("→ Period 5A", 12, 5, 12, 10); + currentSchedule[10] = new Period("Period 5A", 12, 10, 12, 55); + currentSchedule[11] = new Period("Lunch Bell", 12, 55, 12, 55); + currentSchedule[12] = new Period("Period 5B", 12, 55, 13, 40); + currentSchedule[13] = new Period("→ Period 6", 13, 40, 13, 45); + currentSchedule[14] = new Period("Period 6", 13, 45, 14, 30); + currentSchedule[15] = new Period("→ Period 7", 14, 30, 14, 35); + currentSchedule[16] = new Period("Period 7", 14, 35, 15, 20); + currentSchedule[17] = new Period("end of school", 15, 20, 15, 20); + currentSchedule[18] = new Period("end of school", 15, 20, 15, 20); + } else if (weekday === 3) { + currentSchedule[0] = new Period("Period 1", 8, 50, 9, 35); + currentSchedule[1] = new Period("→ Period 2", 9, 35, 9, 40); + currentSchedule[2] = new Period("Period 2", 9, 40, 10, 25); + currentSchedule[3] = new Period("→ Advisory", 10, 25, 10, 30); + currentSchedule[4] = new Period("Advisory", 10, 30, 10, 45); + currentSchedule[5] = new Period("→ Period 3", 10, 45, 10, 50); + currentSchedule[6] = new Period("Period 3", 10, 50, 11, 30); + currentSchedule[7] = new Period("→ Period 4", 11, 30, 11, 35); + currentSchedule[8] = new Period("Period 4", 11, 35, 12, 15); + currentSchedule[9] = new Period("end of school", 12, 15, 12, 15); + currentSchedule[10] = new Period("end of school", 12, 15, 12, 15); + } else if (weekday === 6) { + currentSchedule[0] = new Period("Period 1", 8, 30, 9, 15); + currentSchedule[1] = new Period("→ Period 2", 9, 15, 9, 20); + currentSchedule[2] = new Period("Period 2", 9, 20, 10, 5); + currentSchedule[3] = new Period("Break", 10, 5, 10, 20); + currentSchedule[4] = new Period("Period 3", 10, 20, 11, 5); + currentSchedule[5] = new Period("→ Period 4", 11, 5, 11, 10); + currentSchedule[6] = new Period("Period 4", 11, 10, 11, 55); + currentSchedule[7] = new Period("end of school", 11, 55, 11, 55); + currentSchedule[8] = new Period("end of school", 11, 55, 11, 55); + } else { + noClasses(); + } + + return cookieCheck(currentSchedule, weekday); +} + +function specialSchedule() // <- What to print during special schedules +{ + document.getElementById("class-info").innerHTML = "Special Schedule"; + document.getElementById("schedule-info").innerHTML = "Please consult your email for details."; +} + +function noClassSat() // <- What to print for no-class Saturdays +{ + document.getElementById("class-info").innerHTML = ""; + document.getElementById("schedule-info").innerHTML = descText + " ⋅ No-class Saturday"; +} + +function noClasses() // <- What to print when no classes +{ + document.getElementById("class-info").innerHTML = ""; + document.getElementById("schedule-info").innerHTML = descText + " ⋅ No Class"; +} + +function holiday() // <- What to print during holidays +{ + document.getElementById("class-info").innerHTML = "Holiday"; + document.getElementById("schedule-info").innerHTML = "Enjoy your holiday!"; +} + +function schoolBreak() // <- What to print during school breaks +{ + document.getElementById("class-info").innerHTML = "Break"; + document.getElementById("schedule-info").innerHTML = "Enjoy your break!"; +} + +function normalDay(nowTitle, nowDiff, nextTitle, nextDiff) // <- What to print during normal days +{ + document.getElementById("class-info").innerHTML = nowTitle; + document.getElementById("schedule-info").innerHTML = descText + weekendText; + printTime(nowDiff); +} + +function beforeSchool(title, time) { + document.getElementById("class-info").innerHTML = title; + document.getElementById("schedule-info").innerHTML = descText + weekendText; + printTime(time); +} + +function thisWeekend() { + for (var addDay = 0; addDay < 7; addDay++) { + var result = d; + result.setDate(result.getDate() + addDay); + for (var i = 0; i < noClassSats.length; i++) { + if (noClassSats[i].month === result.getMonth() && noClassSats[i].date === result.getDate()) { + return " ⋅ No-Class Weekend"; + } + } + } + return " ⋅ Normal Weekend"; +} + +function parseRaw() { + return d.getHours() * 3600 + d.getMinutes() * 60 + d.getSeconds(); +} + +function printTime(raw) { + showTime = false; + if (toHrs(raw) === 0) { + document.getElementById("hrs").style.display = "none"; + } else { + document.documentElement.style.setProperty('--timer-hours', "'" + toHrs(raw).toLocaleString('en-US', { + minimumIntegerDigits: 2, + useGrouping: false + }) + "'"); + } + document.documentElement.style.setProperty('--timer-minutes', "'" + toMins(raw).toLocaleString('en-US', { + minimumIntegerDigits: 2, + useGrouping: false + }) + "'"); + document.documentElement.style.setProperty('--timer-seconds', "'" + toSecs(raw).toLocaleString('en-US', { + minimumIntegerDigits: 2, + useGrouping: false + }) + "'"); +} + +function toMins(raw) { + return Math.floor((raw % 3600) / 60); +} + +function toHrs(raw) { + return Math.floor(raw / 3600); +} + +function toSecs(raw) { + return (raw % 60); +} + +// Converts raw time format to a parsed time string (DEPRECATED) +/* +function rawToString(raw) { + var output = ""; + + if (toHrs(raw) === 0) { + } else if (toHrs(raw) === 1) { + output += toHrs(raw) + " hour "; + } else { + output += toHrs(raw) + " hours "; + } + + if (showSeconds) { + if (toMins(raw) === 0) { + if (toSecs(raw) === 1) { + output += toSecs(raw) + " second"; + } else { + output += toSecs(raw) + " seconds"; + } + } else if (toMins(raw) === 1) { + output += toMins(raw) + " minute "; + if (toSecs(raw) === 1) { + output += toSecs(raw) + " second"; + } else { + output += toSecs(raw) + " seconds"; + } + } else { + output += toMins(raw) + " minutes "; + if (toSecs(raw) === 1) { + output += toSecs(raw) + " second"; + } else { + output += toSecs(raw) + " seconds"; + } + } + } else { + var ceilMins = toMins(raw) + 1; + if (toMins(raw) === 0) { + output += ceilMins + " minute"; + } else { + output += ceilMins + " minutes"; + } + } + return output; +} +*/ + +window.addEventListener('load', onLoad); + +function onLoad() { + //d = new Date(); + loadTime(); + loadDate(); + update(); + weekendText = thisWeekend(); + document.getElementById("schedule-message").style.display = "block"; +} + +// Below Code from Nicholas Lorentzen '20 +//This code was added to add the functionality of inputting a schedule + +//Some code off a website to check cookies +function getCookie(cname) { + var name = cname + "="; + var decodedCookie = decodeURIComponent(document.cookie); + var ca = decodedCookie.split(';'); + for(var i = 0; i 5){currentPeriodNum = currentPeriodNum + 1;} + if(currentPeriodName.includes("5B")){currentPeriodNum = 6;} + if(!(getCookie(currentAbbrev + currentPeriodNum) === "")){ + currentPeriodName = getCookie(currentAbbrev + currentPeriodNum); + if(addArrow){currentPeriodName = "→ " + currentPeriodName;} + } + currentPeriod.title = currentPeriodName; + scheduleToCheck[i] = currentPeriod; + } + } + return scheduleToCheck; +} + +//Adds Schedule Preview and Custom Messages +function previewTableCreate() { + //if(document.cookie === "") {return;} + var myArrayLoc = currentArrayLoc; + var currentSchedule = getSchedule(d.getDay()); + var nextDay = false; + if(myArrayLoc > currentSchedule.length || d.getDay() === 0){ + if(d.getDay() + 1 == 7){ + return; + } + currentSchedule = getSchedule(d.getDay() + 1); + myArrayLoc = -1; + nextDay = true; + } + var openingMessage = ""; + if(nextDay){ + openingMessage = "Here's a preview of your schedule tomorrow:"; + } else if(currentArrayLoc > currentSchedule.length / 2){ + openingMessage = "Here's what the rest of your day looks like:"; + } else { + openingMessage = "Here's your schedule for today:" + } + + document.getElementById("opening-message").innerHTML = openingMessage; + + removeElement("schedule-preview"); + var widget = document.getElementById("preview-table"); + var tbl = document.createElement('table'); + tbl.style.width = '100%'; + tbl.setAttribute("align", "center"); + tbl.setAttribute("id","schedule-preview") + var tbdy = document.createElement('tbody'); + var tr = document.createElement('tr'); + tr.style.textDecoration = "underline"; + for (var j = 0; j < 2; j++) { + var th = document.createElement("th"); + th.setAttribute("id","t"+j) + th.style.fontWeight = "600"; + if (j === 0) {th.innerHTML= "Time Till";} else {th.innerHTML= "Event";} + tr.appendChild(th); + } + tbdy.appendChild(tr); + + for(var i = myArrayLoc + 1; i < currentSchedule.length - 2; i++) { + var currentPeriod = currentSchedule[i]; + if(!(currentPeriod.title.includes("→") || currentPeriod.title.includes("Bell"))){ + tr = document.createElement('tr'); + for (j = 0; j < 2; j++) { + var td = document.createElement('td'); + td.setAttribute("id","td"+i+j); + td.setAttribute("align","center"); + + if(j == 0){ + if (nextDay){ + currentPeriod.startRaw = currentPeriod.startRaw + (3600 * 24); + } + var minsToClass = toMins(currentPeriod.startRaw - parseRaw()); + if (minsToClass < 10) { + minsToClass = "0" + minsToClass; + if (minsToClass < 1) { + minsToClass = "01"; + } + } + var hrsToClass = toHrs(currentPeriod.startRaw- parseRaw()); + if (hrsToClass < 1){ + hrsToClass = "0"; + } + td.innerHTML = "T- " + hrsToClass + ":" + minsToClass; + } else { + td.innerHTML = currentPeriod.title; + } + tr.appendChild(td); + } + tbdy.appendChild(tr); + } + } + tbl.appendChild(tbdy); + widget.appendChild(tbl); +} + +function removeElement(elementId) { + // Removes an element from the document + var element = document.getElementById(elementId); + if (element){ + element.parentNode.removeChild(element); + } +} + +function updateMainMessage() +{ + if(d.getMonth() === 8 && d.getDay() < 2){ + mainMessage = "Welcome Back!"; + if(getCookie("name") != ""){ + mainMessage = "Welcome Back " + getCookie("name") +"!"; + } + }else{ + if(d.getHours() <= 5 && d.getHours() > 20){ + mainMessage = "Goodnight..."; + }else if (d.getHours() < 12 && d.getHours() >= 5){ + mainMessage = "Good Morning!"; + if(getCookie("name") != ""){ + mainMessage = "Good Morning " + getCookie("name") +"!"; + } + }else if (d.getHours() < 17 && d.getHours() >= 12){ + mainMessage = "Good Afternoon!"; + if(getCookie("name") != ""){ + mainMessage = "Good Afternoon " + getCookie("name") +"!"; + } + }else{ + mainMessage = "Good Evening!"; + if(getCookie("name") != ""){ + mainMessage = "Good Evening " + getCookie("name") +"!"; + } + } + } + + if (!(mainMessage === "")) { + document.getElementById("message").innerHTML = mainMessage; + document.getElementById("message-widget").style.display = "block"; + } +} + +setInterval(loadTime, 1000); +setInterval(loadDate, 1000); +setInterval(updateD, 1000); +setInterval(update, 1000); +setInterval(updateMainMessage, 1000); diff --git a/corona-clock/style.css b/corona-clock/style.css new file mode 100644 index 0000000..d40e8a3 --- /dev/null +++ b/corona-clock/style.css @@ -0,0 +1,319 @@ +/* Loading hrs, min, and seconds content */ +.clock-hours:before { + content: var(--timer-hours); +} + +.clock-minutes:before { + content: var(--timer-minutes); +} + +.clock-seconds:before { + content: var(--timer-seconds); +} + +/* Body style */ +body { + /* Font */ + font-family: 'Open Sans', sans-serif; + min-height: 300px; + min-width: 500px; + display: flex; + align-items: center; + justify-content: left; + color: #fff; + /* Animated gradient background */ + background: linear-gradient(-30deg, #111E6C, #0E4D92, #0F52BA, #003152); + background-size: 1000% 1000%; + -webkit-animation: Gradient 15s ease infinite; + -moz-animation: Gradient 15s ease infinite; + animation: Gradient 15s ease infinite; + z-index: -50; +} + +/* Weather style */ +.weather { + float: right; + position: absolute; + width: 160px; + top: 0px; + right: 0px; + z-index: 10; +} + +/* Class info style */ +#class-info { + display: flex; + position: fixed; + left: 45px; + bottom: 250px; + font-size: 4em; + font-weight: 700; + z-index: 8; +} + +/* Schedule info style */ +#schedule-info { + display: flex; + position: fixed; + left: 50px; + bottom: 220px; + font-size: 1.3em; + white-space: pre-wrap; + z-index: 8; +} + +/* Clock big container style */ +.clock-container { + background-color: #202020; + border-radius: 5px; + padding: 25px 10px; + box-shadow: 1px 1px 5px rgba(0, 0, 0, 0.5), 0 15px 90px 30px rgba(0, 0, 0, 0.15); + display: flex; + position: fixed; + left: 40px; + bottom: 40px; + z-index: 8; +} + +/* Clock column style */ +.clock-col { + text-align: center; + margin-right: 40px; + margin-left: 40px; + min-width: 90px; + position: relative; +} + +.clock-col:not(:last-child):before, .clock-col:not(:last-child):after { + content: ""; + background-color: rgba(255, 255, 255, 0.3); + height: 5px; + width: 5px; + border-radius: 50%; + display: block; + position: absolute; + right: -42px; +} + +.clock-col:not(:last-child):before { + top: 35%; +} + +.clock-col:not(:last-child):after { + top: 50%; +} + +.clock-timer:before { + color: #fff; + font-size: 5.2rem; + text-transform: uppercase; + font-weight: 600; +} + +.clock-label { + color: rgba(255, 255, 255, 0.35); + text-transform: uppercase; + font-size: .7rem; + margin-top: 10px; +} + +/* Corner clock style */ +#clock { + font-size: 1.5rem; + font-weight: 600; + position: absolute; + left: 30px; + top: 30px; + z-index: 11; +} + +#widgets-bar { + display: flex; + flex-direction: column; + position: absolute; + right: 0px; + top: 0px; + width: 400px; + height: 60%; + padding: 100px 50px 50px 100%; + + /* Gradient Mask*/ + -webkit-mask-image: linear-gradient(0deg, rgba(0,0,0,0) 0%, rgba(0,0,0,0) 5%, rgba(0,0,0,1) 18%, rgba(0,0,0,1) 100%); + mask-image: linear-gradient(0deg, rgba(0,0,0,0) 0%, rgba(0,0,0,0) 5%, rgba(0,0,0,1) 18%, rgba(0,0,0,1) 100%); + overflow-y: scroll; + overflow-x: hidden; + z-index: 0; + + /* Wrapping */ + /*flex-wrap: wrap-reverse;*/ +} + +.widget { + background-color: rgba(20, 20, 20, 0.5); + border-radius: 5px; + padding: 25px; + box-shadow: 1px 1px 5px rgba(0, 0, 0, 0.5), 0 15px 90px 30px rgba(0, 0, 0, 0.15); + margin: 15px 0px; + line-height: 1.3; +} + +.widget:last-of-type { + margin-bottom: 60px; +} + +/* For mobile display */ +@media (max-width: 615px), (max-height: 400px) { + .clock-container { + border-radius: 0px; + padding: 20px 100%; + bottom: 0px; + left: 50%; + transform: translate(-50%, 0%); + justify-content: center; + } + + .clock-timer:before { + font-size: 3rem; + } + + #class-info { + font-size: 3.4rem; + bottom: 170px; + } + + #schedule-info { + font-size: 1.2rem; + bottom: 140px; + } + + .clock-col { + text-align: center; + margin-right: 40px; + margin-left: 40px; + min-width: 70px; + position: relative; + } + + #widgets-bar { + height: auto; + top: 0px; + bottom: 200px; + min-height: 0; + width: 100%; + justify-content: center; + padding: 80px 0px 0px 0px; + display: block; + overflow: scroll; + } + + .widget { + position: relative; + margin: 25px 5%; + } +} + +/* For chrome widget display */ +@media (max-height: 400px) { + .clock-timer:before { + font-size: 2rem; + } + + #class-info { + font-size: 3rem; + bottom: 150px; + } + + #schedule-info { + font-size: 1rem; + bottom: 120px; + } + + .clock-col { + } + + #clock { + font-size: 1.2rem; + } + + .weather { + max-height: 40px; + } + + #widgets-bar { + visibility: hidden; + } +} + +#info { + position: absolute; + right: 30px; + bottom: 30px; +} + +#info-text { + visibility: hidden; + font-size: 0.9em; + float: left; + text-align: right; + margin: 0px 5px; +} + +#info-circle { + margin: 0px 5px; +} + +#bug-report { + color: #ffffff; +} + +#info:hover #info-text { + visibility: visible; +} + +@media (max-width: 900px) { + #info { + visibility: hidden; + } +} + +/* Sets styles of header, bold and strong as bold */ +h1, h2, h3, h4, h5, h6, b, strong { + font-weight: bold; +} + +/* Gradient Code */ +@-webkit-keyframes Gradient { + 0% { + background-position: 0% 50% + } + 50% { + background-position: 100% 50% + } + 100% { + background-position: 0% 50% + } +} + +@-moz-keyframes Gradient { + 0% { + background-position: 0% 50% + } + 50% { + background-position: 100% 50% + } + 100% { + background-position: 0% 50% + } +} + +@keyframes Gradient { + 0% { + background-position: 0% 50% + } + 50% { + background-position: 100% 50% + } + 100% { + background-position: 0% 50% + } +} From f5020698695adc59703083da225f6cdd2424ca04 Mon Sep 17 00:00:00 2001 From: Nicholas Lorentzen Date: Thu, 19 Mar 2020 23:14:10 -0400 Subject: [PATCH 34/62] Update Current Period Display Code --- corona-clock/script.js | 132 ++++++++++++++++++++--------------------- 1 file changed, 66 insertions(+), 66 deletions(-) diff --git a/corona-clock/script.js b/corona-clock/script.js index 5c747d3..3275fb8 100644 --- a/corona-clock/script.js +++ b/corona-clock/script.js @@ -199,68 +199,16 @@ function getSchedule(weekday) { var currentSchedule = []; // Assigns class schedules for weekday scenarios - if (weekday === 1 || weekday === 4) { - currentSchedule[0] = new Period("Period 1", 8, 30, 9, 15); - currentSchedule[1] = new Period("→ Period 2", 9, 15, 9, 20); - currentSchedule[2] = new Period("Period 2", 9, 20, 10, 5); - currentSchedule[3] = new Period("→ Chapel / Class Meeting", 10, 5, 10, 10); - currentSchedule[4] = new Period("Chapel / Class Meeting", 10, 10, 10, 35); - currentSchedule[5] = new Period("→ Period 3", 10, 35, 10, 40); - currentSchedule[6] = new Period("Period 3", 10, 40, 11, 20); - currentSchedule[7] = new Period("→ Period 4", 11, 20, 11, 25); - currentSchedule[8] = new Period("Period 4", 11, 25, 12, 5); - currentSchedule[9] = new Period("→ Period 5A", 12, 5, 12, 10); - currentSchedule[10] = new Period("Period 5A", 12, 10, 12, 55); - currentSchedule[11] = new Period("Lunch Bell", 12, 55, 12, 55); - currentSchedule[12] = new Period("Period 5B", 12, 55, 13, 40); - currentSchedule[13] = new Period("→ Period 6", 13, 40, 13, 45); - currentSchedule[14] = new Period("Period 6", 13, 45, 14, 30); - currentSchedule[15] = new Period("→ Period 7", 14, 30, 14, 35); - currentSchedule[16] = new Period("Period 7", 14, 35, 15, 20); - currentSchedule[17] = new Period("end of school", 15, 20, 15, 20); - currentSchedule[18] = new Period("end of school", 15, 20, 15, 20); - } else if (weekday === 2 || weekday === 5) { - currentSchedule[0] = new Period("Period 1", 8, 30, 9, 10); - currentSchedule[1] = new Period("→ Period 2", 9, 10, 9, 15); - currentSchedule[2] = new Period("Period 2", 9, 15, 9, 55); - currentSchedule[3] = new Period("→ Auditorium", 9, 55, 10, 0); - currentSchedule[4] = new Period("Auditorium", 10, 0, 10, 35); - currentSchedule[5] = new Period("→ Period 3", 10, 35, 10, 40); - currentSchedule[6] = new Period("Period 3", 10, 40, 11, 20); - currentSchedule[7] = new Period("→ Period 4", 11, 20, 11, 25); - currentSchedule[8] = new Period("Period 4", 11, 25, 12, 5); - currentSchedule[9] = new Period("→ Period 5A", 12, 5, 12, 10); - currentSchedule[10] = new Period("Period 5A", 12, 10, 12, 55); - currentSchedule[11] = new Period("Lunch Bell", 12, 55, 12, 55); - currentSchedule[12] = new Period("Period 5B", 12, 55, 13, 40); - currentSchedule[13] = new Period("→ Period 6", 13, 40, 13, 45); - currentSchedule[14] = new Period("Period 6", 13, 45, 14, 30); - currentSchedule[15] = new Period("→ Period 7", 14, 30, 14, 35); - currentSchedule[16] = new Period("Period 7", 14, 35, 15, 20); - currentSchedule[17] = new Period("end of school", 15, 20, 15, 20); - currentSchedule[18] = new Period("end of school", 15, 20, 15, 20); - } else if (weekday === 3) { - currentSchedule[0] = new Period("Period 1", 8, 50, 9, 35); - currentSchedule[1] = new Period("→ Period 2", 9, 35, 9, 40); - currentSchedule[2] = new Period("Period 2", 9, 40, 10, 25); - currentSchedule[3] = new Period("→ Advisory", 10, 25, 10, 30); - currentSchedule[4] = new Period("Advisory", 10, 30, 10, 45); - currentSchedule[5] = new Period("→ Period 3", 10, 45, 10, 50); - currentSchedule[6] = new Period("Period 3", 10, 50, 11, 30); - currentSchedule[7] = new Period("→ Period 4", 11, 30, 11, 35); - currentSchedule[8] = new Period("Period 4", 11, 35, 12, 15); - currentSchedule[9] = new Period("end of school", 12, 15, 12, 15); - currentSchedule[10] = new Period("end of school", 12, 15, 12, 15); - } else if (weekday === 6) { - currentSchedule[0] = new Period("Period 1", 8, 30, 9, 15); - currentSchedule[1] = new Period("→ Period 2", 9, 15, 9, 20); - currentSchedule[2] = new Period("Period 2", 9, 20, 10, 5); - currentSchedule[3] = new Period("Break", 10, 5, 10, 20); - currentSchedule[4] = new Period("Period 3", 10, 20, 11, 5); - currentSchedule[5] = new Period("→ Period 4", 11, 5, 11, 10); - currentSchedule[6] = new Period("Period 4", 11, 10, 11, 55); - currentSchedule[7] = new Period("end of school", 11, 55, 11, 55); - currentSchedule[8] = new Period("end of school", 11, 55, 11, 55); + if (weekday >= 1 && weekday <= 5) { + currentSchedule[0] = new Period("1", 9, 30, 10, 15); + currentSchedule[1] = new Period("→ 2", 10, 15, 10, 25); + currentSchedule[2] = new Period("2", 10, 25, 11, 10); + currentSchedule[3] = new Period("→ 3", 11, 10, 11, 20); + currentSchedule[4] = new Period("3", 10, 20, 12, 5); + currentSchedule[5] = new Period("→ 4", 12, 5, 12, 15); + currentSchedule[6] = new Period("4", 12, 15, 12, 35); + currentSchedule[7] = new Period("5", 12, 35, 12, 35); + currentSchedule[8] = new Period("5", 12, 35, 12, 35); } else { noClasses(); } @@ -439,7 +387,7 @@ function getCookie(cname) { function cookieCheck(scheduleToCheck, weekday) { - var cookieAbbrev = ["m", "t", "w", "y", "f", "s"]; + var cookieAbbrev = [""]; var currentAbbrev = cookieAbbrev[weekday - 1]; for(var i = 0; i < scheduleToCheck.length; i++){ @@ -447,8 +395,59 @@ function cookieCheck(scheduleToCheck, weekday) var currentPeriodName = currentPeriod.title; var addArrow = false; if(currentPeriodName.includes("→")){ - addArrow = true; - } + addArrow = true; + currentPeriodName = currentPeriodName.substring(2); + } + + var currentPeriodNumber = parseInt(currentPeriodName) - 1; + + var cookieAbbrev = [""]; + var labels = [""]; + + if (weekday === 1) { + cookieAbbrev = ["m1","m2","m3", "NA", "NA"]; + labels = ["Monday Period 1", "Monday Period 2", "Monday Period 3", "Community Time", "End Of Classes"]; + } + + if (weekday === 2) { + cookieAbbrev = ["t5","t7","t8", "NA", "NA"]; + labels = ["Tuesday Period 5", "Tuesday Period 6", "Tuesday Period 7", "Community Time", "End Of Classes"]; + } + + if (weekday === 3) { + cookieAbbrev = ["t3","s4","w2", "NA", "NA"]; + labels = ["Tuesday Period 3", "Saturday Period 4", "Wednesday Period 2", "HD 150 & 550", "End Of Classes"]; + } + + if (weekday === 4) { + cookieAbbrev = ["y3","y5","f8", "NA", "NA"]; + labels = ["Thursday Period 3", "Thursday Period 5", "Friday Period 7", "Community Time", "End Of Classes"]; + } + + if (weekday === 5) { + cookieAbbrev = ["NA","f1","y1", "NA", "NA"]; + labels = ["HD 250 or Conflict", "Friday Period 1", "Thursday Period 1", "Community Time", "Weekend!"]; + } + + var currentCookie = getCookie(cookieAbbrev[currentPeriodNumber]); + + if (cookieAbbrev[currentPeriodNumber].charAt(1) === 5 && (currentCookie === "" || currentCookie === "Lunch")) { + currentCookie = getCookie(cookieAbbrev[currentPeriodNumber].substr(0,1) + "6"); + } + + if (currentCookie === "") { + currentPeriod.name = labels[currentPeriodNumber]; + } else { + currentPeriod.name = currentCookie; + } + + if (addArrow) { + currentPeriod.name = "→ " + currentPeriod.name; + } + + scheduleToCheck[i] = currentPeriod; + + /** if(currentPeriodName.includes("Period")){ var numIdx = 7; if(addArrow) {numIdx = 9;} @@ -461,7 +460,8 @@ function cookieCheck(scheduleToCheck, weekday) } currentPeriod.title = currentPeriodName; scheduleToCheck[i] = currentPeriod; - } + } + */ } return scheduleToCheck; } From 839a5d41fc854a5d6a774385d930644679f1c78c Mon Sep 17 00:00:00 2001 From: Nicholas Lorentzen Date: Fri, 20 Mar 2020 01:05:33 -0400 Subject: [PATCH 35/62] Fix Potential Naming Issues --- corona-clock/script.js | 46 ++++++++++++++++++++++-------------------- 1 file changed, 24 insertions(+), 22 deletions(-) diff --git a/corona-clock/script.js b/corona-clock/script.js index 3275fb8..ff0287d 100644 --- a/corona-clock/script.js +++ b/corona-clock/script.js @@ -195,25 +195,28 @@ function update() { function getSchedule(weekday) { // console.log(" *** d.getDate() " + d.getDay()); - // Defines the currentSchedule array - var currentSchedule = []; + // Defines the schedule array + var schedule = []; // Assigns class schedules for weekday scenarios if (weekday >= 1 && weekday <= 5) { - currentSchedule[0] = new Period("1", 9, 30, 10, 15); - currentSchedule[1] = new Period("→ 2", 10, 15, 10, 25); - currentSchedule[2] = new Period("2", 10, 25, 11, 10); - currentSchedule[3] = new Period("→ 3", 11, 10, 11, 20); - currentSchedule[4] = new Period("3", 10, 20, 12, 5); - currentSchedule[5] = new Period("→ 4", 12, 5, 12, 15); - currentSchedule[6] = new Period("4", 12, 15, 12, 35); - currentSchedule[7] = new Period("5", 12, 35, 12, 35); - currentSchedule[8] = new Period("5", 12, 35, 12, 35); + schedule[0] = new Period("1", 9, 30, 10, 15); + schedule[1] = new Period("→ 2", 10, 15, 10, 25); + schedule[2] = new Period("2", 10, 25, 11, 10); + schedule[3] = new Period("→ 3", 11, 10, 11, 20); + schedule[4] = new Period("3", 11, 20, 12, 5); + schedule[5] = new Period("→ 4", 12, 5, 12, 15); + schedule[6] = new Period("4", 12, 15, 12, 35); + schedule[7] = new Period("5", 12, 35, 12, 35); + schedule[8] = new Period("5", 12, 35, 12, 35); } else { noClasses(); } - return cookieCheck(currentSchedule, weekday); + //return cookieCheck(schedule, weekday); + + //Cookie Check Copy + } function specialSchedule() // <- What to print during special schedules @@ -435,17 +438,16 @@ function cookieCheck(scheduleToCheck, weekday) currentCookie = getCookie(cookieAbbrev[currentPeriodNumber].substr(0,1) + "6"); } - if (currentCookie === "") { + currentPeriod.name = currentCookie; + if (currentPeriod.name === "") { currentPeriod.name = labels[currentPeriodNumber]; - } else { - currentPeriod.name = currentCookie; } if (addArrow) { currentPeriod.name = "→ " + currentPeriod.name; } - scheduleToCheck[i] = currentPeriod; + scheduleToCheck[i].name = currentPeriod.name; /** if(currentPeriodName.includes("Period")){ @@ -470,20 +472,20 @@ function cookieCheck(scheduleToCheck, weekday) function previewTableCreate() { //if(document.cookie === "") {return;} var myArrayLoc = currentArrayLoc; - var currentSchedule = getSchedule(d.getDay()); + var previewSchedule = getSchedule(d.getDay()); var nextDay = false; - if(myArrayLoc > currentSchedule.length || d.getDay() === 0){ + if(myArrayLoc > previewSchedule.length || d.getDay() === 0){ if(d.getDay() + 1 == 7){ return; } - currentSchedule = getSchedule(d.getDay() + 1); + previewSchedule = getSchedule(d.getDay() + 1); myArrayLoc = -1; nextDay = true; } var openingMessage = ""; if(nextDay){ openingMessage = "Here's a preview of your schedule tomorrow:"; - } else if(currentArrayLoc > currentSchedule.length / 2){ + } else if(currentArrayLoc > previewSchedule.length / 2){ openingMessage = "Here's what the rest of your day looks like:"; } else { openingMessage = "Here's your schedule for today:" @@ -509,8 +511,8 @@ function previewTableCreate() { } tbdy.appendChild(tr); - for(var i = myArrayLoc + 1; i < currentSchedule.length - 2; i++) { - var currentPeriod = currentSchedule[i]; + for(var i = myArrayLoc + 1; i < previewSchedule.length - 2; i++) { + var currentPeriod = previewSchedule[i]; if(!(currentPeriod.title.includes("→") || currentPeriod.title.includes("Bell"))){ tr = document.createElement('tr'); for (j = 0; j < 2; j++) { From 05afcc125ab2766cdb76b4a123cc2a9a194fe3a0 Mon Sep 17 00:00:00 2001 From: Nicholas Lorentzen Date: Fri, 20 Mar 2020 01:21:48 -0400 Subject: [PATCH 36/62] Fix CookieCheck bug --- corona-clock/script.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/corona-clock/script.js b/corona-clock/script.js index ff0287d..187923e 100644 --- a/corona-clock/script.js +++ b/corona-clock/script.js @@ -213,7 +213,7 @@ function getSchedule(weekday) { noClasses(); } - //return cookieCheck(schedule, weekday); + return cookieCheck(schedule, weekday); //Cookie Check Copy @@ -438,16 +438,16 @@ function cookieCheck(scheduleToCheck, weekday) currentCookie = getCookie(cookieAbbrev[currentPeriodNumber].substr(0,1) + "6"); } - currentPeriod.name = currentCookie; - if (currentPeriod.name === "") { - currentPeriod.name = labels[currentPeriodNumber]; + currentPeriod.title = currentCookie; + if (currentPeriod.title === "") { + currentPeriod.title = labels[currentPeriodNumber]; } if (addArrow) { - currentPeriod.name = "→ " + currentPeriod.name; + currentPeriod.title = "→ " + currentPeriod.title; } - scheduleToCheck[i].name = currentPeriod.name; + scheduleToCheck[i].title = currentPeriod.title; /** if(currentPeriodName.includes("Period")){ From a7f704680f2e90523699f119d497ab9b2578ddcf Mon Sep 17 00:00:00 2001 From: Nicholas Lorentzen Date: Fri, 20 Mar 2020 01:58:36 -0400 Subject: [PATCH 37/62] New Scheduler Page --- corona-clock/scheduler/index.html | 76 +++++++++++-------------------- 1 file changed, 27 insertions(+), 49 deletions(-) diff --git a/corona-clock/scheduler/index.html b/corona-clock/scheduler/index.html index bebf648..1576b3d 100644 --- a/corona-clock/scheduler/index.html +++ b/corona-clock/scheduler/index.html @@ -24,10 +24,10 @@ - + Not Held - + Not Held @@ -36,7 +36,7 @@ - + Not Held @@ -45,19 +45,19 @@ - + Not Held - + Not Held - + Not Held - + Not Held @@ -66,37 +66,37 @@ - + Not Held - + Not Held - + Not Held - + Not Held Period 4 - + Not Held - + Not Held - + Not Held - + Not Held - + Not Held @@ -106,7 +106,7 @@ Period 5A - + Not Held @@ -118,7 +118,7 @@ - + Not Held @@ -127,7 +127,7 @@ Period 5B - + Not Held @@ -139,7 +139,7 @@ - + Not Held @@ -148,7 +148,7 @@ Period 6 - + Not Held @@ -157,10 +157,10 @@

Nicholas Lorentzen wrote this code

- + Not Held - + Not Held @@ -169,7 +169,7 @@ Period 7 - + Not Held @@ -178,7 +178,7 @@ - + Not Held @@ -195,31 +195,9 @@ - Sport (For Upcoming Update) + Time Difference From EST (Ex China = 12 Cali = -3) - - - + From 59363df0d1602046325e16d3dc788a2abdf6e307 Mon Sep 17 00:00:00 2001 From: Nicholas Lorentzen Date: Fri, 20 Mar 2020 02:11:43 -0400 Subject: [PATCH 38/62] Update scheduler.js --- corona-clock/scheduler/js/scheduler.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/corona-clock/scheduler/js/scheduler.js b/corona-clock/scheduler/js/scheduler.js index 0f7329f..d659f31 100644 --- a/corona-clock/scheduler/js/scheduler.js +++ b/corona-clock/scheduler/js/scheduler.js @@ -5,7 +5,7 @@ Nicholas Lorentzen Last updated 2019 04 15 */ var boiyardee = []; -var classes = ["m1","m2","m3","m4","m5","m6","m7","m8","t1","t2","t3","t4","t5","t6","t7","t8","w1","w2","w3","w4","y1","y2","y3","y4","y5","y6","y7","y8","f1","f2","f3","f4","f5","f6","f7","f8","s1","s2","s3","s4","name"]; +var classes = ["m1","m2","m3","t5","t6","t7","t8","t3","s4","w2","y3","y5","y6","y8","f1", "name", "timezone"]; function addCookie(cookname) { @@ -29,7 +29,6 @@ function bakeCookies(recipe) function putCookie() { - classes.forEach(bakeCookies); console.log (boiyardee.join(";") + ";domain=ekkoing.github.io;max-age=31536000;path=/"); document.cookie = boiyardee.join(";") + ";domain=ekkoing.github.io;max-age=31536000;path=/"; @@ -40,7 +39,7 @@ function exitScheduler() { putCookie(); alert("Schedule Updated!"); - window.location.href = "https://ekkoing.github.io/cclock"; + window.location.href = "https://ekkoing.github.io/cclock/corona-clock/scheduler"; } function cookiesAlert() From a0923d7094d1ba4e4791e05f93636d85332ddf04 Mon Sep 17 00:00:00 2001 From: Nicholas Lorentzen Date: Fri, 20 Mar 2020 14:05:28 -0400 Subject: [PATCH 39/62] Update To Support Corona Schedule --- corona-clock/scheduler/index.html | 455 ++++++++++++--------- corona-clock/scheduler/style/scheduler.css | 30 +- 2 files changed, 280 insertions(+), 205 deletions(-) diff --git a/corona-clock/scheduler/index.html b/corona-clock/scheduler/index.html index 1576b3d..8167b14 100644 --- a/corona-clock/scheduler/index.html +++ b/corona-clock/scheduler/index.html @@ -7,209 +7,258 @@ -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
+
+ +
SchedulerMondayTuesdayWednesdayThursdayFridaySaturday
Period 1 - - - Not Held - - Not Held - - - - - - Not Held -
Period 2 - - - Not Held - - - - Not Held - - Not Held - - Not Held -
Period 3 - - - Not Held - - Not Held - - - - Not Held - - Not Held -
Period 4 - Not Held - - Not Held - - Not Held - - Not Held - - Not Held - - -
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SchedulerMondayTuesdayWednesdayThursdayFridaySaturday
Period 1 + + + Not Held + + Not Held + + + + + + Not Held +
Period 2 + + + Not Held + + + + Not Held + + Not Held + + Not Held +
Period 3 + + + + + Not Held + + + + Not Held + + Not Held +
Period 4 + Not Held + + Not Held + + Not Held + + Not Held + + Not Held + + +
Period 5A + Not Held + + + -
Period 5A - Not Held - - - - - - - - Not Held - - -
Period 5B - Not Held - - - - - - - - Not Held - - -
Period 6 - Not Held - - - -

Nicholas Lorentzen wrote this code

-
- Not Held - - Not Held - - -
Period 7 - Not Held - - - - - - Not Held - - - - -
- - - - - - - - -
Name(Optional) - - Time Difference From EST (Ex China = 12 Cali = -3) - -
-
-
-
-
+ + + + + + Not Held + + + + + + + Period 5B + + Not Held + + + + + + + + + + + + Not Held + + + + + + + Period 6 + + Not Held + + + + + +

Nicholas Lorentzen wrote this code

+ + + Not Held + + + Not Held + + + + + + + Period 7 + + Not Held + + + + + + + + + Not Held + + + + + + + + + + + + + + + + + + +
Name(Optional) + + Time Difference From EST (Ex China = 12 Cali = -3) + +
+ + + +
+ + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Time/DayMondayTuesdayWednesdayThursdayFriday
9:30 - 10:15HD 250
10:25 - 11:10
11:20 - 12:05
12:15 - 12:35Community TimeCommunity TimeHD 150 & 550Community TimeCommunity Time
+
+ + diff --git a/corona-clock/scheduler/style/scheduler.css b/corona-clock/scheduler/style/scheduler.css index 9cb3bf6..5a6ff84 100644 --- a/corona-clock/scheduler/style/scheduler.css +++ b/corona-clock/scheduler/style/scheduler.css @@ -9,8 +9,6 @@ body { min-height: 300px; min-width: 500px; display: flex; - align-items: center; - justify-content: left; color: #20265A; /* Animated gradient background */ /*background: linear-gradient(-30deg, #111E6C, #0E4D92, #0F52BA, #003152);*/ @@ -20,3 +18,31 @@ body { animation: Gradient 15s ease infinite; z-index: -50; } + +.content { + justify-self: center; + display: flex; + flex-direction: column; + justify-content: center; +} + +table { + margin: 30px; +} + +#scheduler { + text-align: center; +} + +#coronaschedule td { + border: 1px solid #20265A; + border-collapse: collapse; + padding: 5px; +} + +#coronaschedule table { + width: 100%; + border: 1px solid #20265A; + border-collapse: collapse; +} + From 174f4b78d9806e211947b2cdb567fde60a6e7e64 Mon Sep 17 00:00:00 2001 From: Nicholas Lorentzen Date: Fri, 20 Mar 2020 14:05:41 -0400 Subject: [PATCH 40/62] Load Corona Schedule --- corona-clock/scheduler/js/scheduler.js | 31 ++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/corona-clock/scheduler/js/scheduler.js b/corona-clock/scheduler/js/scheduler.js index d659f31..9f11d16 100644 --- a/corona-clock/scheduler/js/scheduler.js +++ b/corona-clock/scheduler/js/scheduler.js @@ -5,7 +5,8 @@ Nicholas Lorentzen Last updated 2019 04 15 */ var boiyardee = []; -var classes = ["m1","m2","m3","t5","t6","t7","t8","t3","s4","w2","y3","y5","y6","y8","f1", "name", "timezone"]; +var classes = ["m1","m2","m3","t5","t6","t7","t8","t3","s4","w2","y3","y5","y6","f1", "name", "timezone"]; +var coronaclasses = {a1: "m1", a2: "t5", a3: "t3", a4: "y3", b1: "m2", b2: "t7", b3: "s4", b4: "y5", b5: "f1", c1: "m3", c2: "t8", c3: "w2", c4: "f8", c5: "y1"}; function addCookie(cookname) { @@ -38,8 +39,9 @@ function putCookie() function exitScheduler() { putCookie(); + loadCoronaSchedule(); alert("Schedule Updated!"); - window.location.href = "https://ekkoing.github.io/cclock/corona-clock/scheduler"; + //window.location.href = "https://ekkoing.github.io/cclock/corona-clock/scheduler"; } function cookiesAlert() @@ -47,6 +49,7 @@ function cookiesAlert() window.alert("Welcome to the scheduler! In order to use this service you will need cookies enabled. Note that any data entered here cannot be read from any other computer and exists purely on your device. This means that all data must be entered on each device separately until I come up with a more elegant solution - Nicholas Lorentzen '20"); classes.forEach(fillTable); + loadCoronaSchedule(); } function fillTable(chef) @@ -74,4 +77,28 @@ function updateScheduler() { document.cookie = document.getElementById("pasteCode").value + ";domain=ekkoing.github.io;max-age=31536000;path=/"; alert(document.cookie); +} + +function loadCoronaSchedule() +{ + //if (document.cookie === "") {return;} + for(var key in coronaclasses) { + var cellValue = ""; + if (coronaclasses[key].charAt(1) === '5') { + var dayKey = coronaclasses[key].charAt(0); + var aVal = document.getElementById(dayKey + "5").value; + var bVal = document.getElementById(dayKey + "6").value; + if (aVal === "" || aVal === "Lunch") { + cellValue = bVal; + } else { + cellValue = aVal; + } + } else { + cellValue = document.getElementById(coronaclasses[key]).value; + } + + if (cellValue != "") { + document.getElementById(key).innerHTML = cellValue; + } + } } \ No newline at end of file From 4d69f7f2a9b87734350e57e1461b150d513cbc4c Mon Sep 17 00:00:00 2001 From: Nicholas Lorentzen Date: Fri, 20 Mar 2020 14:21:35 -0400 Subject: [PATCH 41/62] Fixed Classes Missing Bug --- corona-clock/scheduler/js/scheduler.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/corona-clock/scheduler/js/scheduler.js b/corona-clock/scheduler/js/scheduler.js index 9f11d16..d47b4ce 100644 --- a/corona-clock/scheduler/js/scheduler.js +++ b/corona-clock/scheduler/js/scheduler.js @@ -5,7 +5,7 @@ Nicholas Lorentzen Last updated 2019 04 15 */ var boiyardee = []; -var classes = ["m1","m2","m3","t5","t6","t7","t8","t3","s4","w2","y3","y5","y6","f1", "name", "timezone"]; +var classes = ["m1","m2","m3","t5","t6","t7","t8","t3","s4","w2","y3","y5","y6","f1", "y1", "f8", "name", "timezone"]; var coronaclasses = {a1: "m1", a2: "t5", a3: "t3", a4: "y3", b1: "m2", b2: "t7", b3: "s4", b4: "y5", b5: "f1", c1: "m3", c2: "t8", c3: "w2", c4: "f8", c5: "y1"}; function addCookie(cookname) From 25fcd142a6d405e0cbd4a8cb13f71b6474350a38 Mon Sep 17 00:00:00 2001 From: Nicholas Lorentzen Date: Fri, 20 Mar 2020 14:33:40 -0400 Subject: [PATCH 42/62] Set Last Modified Date --- corona-clock/scheduler/js/scheduler.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/corona-clock/scheduler/js/scheduler.js b/corona-clock/scheduler/js/scheduler.js index d47b4ce..463788b 100644 --- a/corona-clock/scheduler/js/scheduler.js +++ b/corona-clock/scheduler/js/scheduler.js @@ -2,7 +2,7 @@ /* Scheduler for Hotchkiss Clock Nicholas Lorentzen -Last updated 2019 04 15 +Last updated 2020 03 20 */ var boiyardee = []; var classes = ["m1","m2","m3","t5","t6","t7","t8","t3","s4","w2","y3","y5","y6","f1", "y1", "f8", "name", "timezone"]; From 1e3c22a83b7decfc3020dbc90d9d36cb4f9af304 Mon Sep 17 00:00:00 2001 From: Nicholas Lorentzen Date: Fri, 20 Mar 2020 14:34:03 -0400 Subject: [PATCH 43/62] Allow Timezone Switching --- corona-clock/script.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/corona-clock/script.js b/corona-clock/script.js index 187923e..d693737 100644 --- a/corona-clock/script.js +++ b/corona-clock/script.js @@ -14,6 +14,11 @@ var d = new Date(); // Updates the date and time function updateD() { d = new Date(); + if(getCookie("timezone") != "" && !(isNaN(getCookie("timezone")))){ + var offset = parseInt(getCookie("timezone")); + //var offset = 12; + d.setHours(d.getHours - offset); + } } var showTime = true; From 1e713d43c0ec23e48dc5ddf8a2620f7adc58239b Mon Sep 17 00:00:00 2001 From: Nicholas Lorentzen Date: Fri, 20 Mar 2020 14:34:31 -0400 Subject: [PATCH 44/62] Update Last Modified Date --- corona-clock/script.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/corona-clock/script.js b/corona-clock/script.js index d693737..8255be1 100644 --- a/corona-clock/script.js +++ b/corona-clock/script.js @@ -1,7 +1,7 @@ /* Controller for clock/time webapp Nicholas Lorentzen, Jiahua Chen, based off Eric Li's original design -Last updated 26 August 2019 +Last updated 20 March 2020 */ // Gets the current date and time From 441250154d6db5d8ee3d54e842a55975fe49b34a Mon Sep 17 00:00:00 2001 From: Nicholas Lorentzen Date: Fri, 20 Mar 2020 14:39:34 -0400 Subject: [PATCH 45/62] Fix Function Call To getHours --- corona-clock/script.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/corona-clock/script.js b/corona-clock/script.js index 8255be1..24c29e2 100644 --- a/corona-clock/script.js +++ b/corona-clock/script.js @@ -17,7 +17,7 @@ function updateD() { if(getCookie("timezone") != "" && !(isNaN(getCookie("timezone")))){ var offset = parseInt(getCookie("timezone")); //var offset = 12; - d.setHours(d.getHours - offset); + d.setHours(d.getHours() - offset); } } From 1b4a9652b0f6d459ef0f5a2bb476524f2d75b3f6 Mon Sep 17 00:00:00 2001 From: Nicholas Lorentzen Date: Fri, 20 Mar 2020 15:10:38 -0400 Subject: [PATCH 46/62] Reroute All Traffic To Corona Clock --- script.js | 1 + 1 file changed, 1 insertion(+) diff --git a/script.js b/script.js index 5c747d3..a918f30 100644 --- a/script.js +++ b/script.js @@ -10,6 +10,7 @@ var d = new Date(); // console.log(" *** d.getDate() " + d.getDate()); // console.log(" *** d.getMonth() " + d.getMonth()); // console.log(" *** dayType noClassSats" + i); +window.location.href = "https://ekkoing.github.io/cclock/corona-clock"; // Updates the date and time function updateD() { From faa35ce3c1f61c6b9f65eaab24638fde43c64949 Mon Sep 17 00:00:00 2001 From: Nicholas L <33159891+EKKOING@users.noreply.github.com> Date: Fri, 20 Mar 2020 15:17:51 -0400 Subject: [PATCH 47/62] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index bb941b0..21d4ebb 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# 🕒 CClock · ![version](https://img.shields.io/badge/version-2.1-yellowgreen.svg) +# 🕒 CClock · ![version](https://img.shields.io/badge/version-2.2-yellowgreen.svg) **CClock** stands for *countdown clock*, or *class clock*. It is meant to count down the time left in each class block, and is also a reminder for the time remaining until the start of the next class block. CClock is fully customizable, adaptable, and works on all devices. Additionally, the simplest version of CClock (here) is fully static and only runs clientside. This means that CClock can be run from Github Pages or another static site host. @@ -105,4 +105,4 @@ The clock will also display a random inspirational quote whenever you load it, l ## Thanks The design of version 2 was inspired by [Decount](https://decount.co/) (and this design was reimplemented into Decount), and the original source code was adapted from [Eric Li's Network Clock](https://github.com/eli8527/Network-Clock). -CClock © 2019, [Jiahua Chen](github.com/jiahuac) & [Nicholas Lorentzen](github.com/EKKOING). Released under the [MIT License](https://mit-license.org/). +CClock © 2020, [Nicholas Lorentzen](github.com/EKKOING). Released under the [MIT License](https://mit-license.org/). From e55324968f8e6c13d3cf90bcf52e2a00856988ad Mon Sep 17 00:00:00 2001 From: Nicholas Lorentzen Date: Fri, 20 Mar 2020 15:47:21 -0400 Subject: [PATCH 48/62] Update To New Schedule --- corona-clock/scheduler/index.html | 4 ++-- corona-clock/scheduler/js/scheduler.js | 4 ++-- corona-clock/script.js | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/corona-clock/scheduler/index.html b/corona-clock/scheduler/index.html index 8167b14..2fd2e13 100644 --- a/corona-clock/scheduler/index.html +++ b/corona-clock/scheduler/index.html @@ -32,7 +32,7 @@ Not Held - + Not Held @@ -53,7 +53,7 @@ - Not Held + Not Held diff --git a/corona-clock/scheduler/js/scheduler.js b/corona-clock/scheduler/js/scheduler.js index 463788b..7a30f72 100644 --- a/corona-clock/scheduler/js/scheduler.js +++ b/corona-clock/scheduler/js/scheduler.js @@ -5,8 +5,8 @@ Nicholas Lorentzen Last updated 2020 03 20 */ var boiyardee = []; -var classes = ["m1","m2","m3","t5","t6","t7","t8","t3","s4","w2","y3","y5","y6","f1", "y1", "f8", "name", "timezone"]; -var coronaclasses = {a1: "m1", a2: "t5", a3: "t3", a4: "y3", b1: "m2", b2: "t7", b3: "s4", b4: "y5", b5: "f1", c1: "m3", c2: "t8", c3: "w2", c4: "f8", c5: "y1"}; +var classes = ["m1","m2","m3","t5","t6","t7","t8","t3","s4","w2","y3","y5","y6","f1", "y2", "f8", "name", "timezone"]; +var coronaclasses = {a1: "m1", a2: "t5", a3: "t3", a4: "y3", b1: "m2", b2: "t7", b3: "s4", b4: "y5", b5: "f1", c1: "m3", c2: "t8", c3: "w2", c4: "f8", c5: "y2"}; function addCookie(cookname) { diff --git a/corona-clock/script.js b/corona-clock/script.js index 24c29e2..7932f23 100644 --- a/corona-clock/script.js +++ b/corona-clock/script.js @@ -433,8 +433,8 @@ function cookieCheck(scheduleToCheck, weekday) } if (weekday === 5) { - cookieAbbrev = ["NA","f1","y1", "NA", "NA"]; - labels = ["HD 250 or Conflict", "Friday Period 1", "Thursday Period 1", "Community Time", "Weekend!"]; + cookieAbbrev = ["NA","f1","y2", "NA", "NA"]; + labels = ["HD 250 or Conflict", "Friday Period 1", "Thursday Period 2", "Community Time", "Weekend!"]; } var currentCookie = getCookie(cookieAbbrev[currentPeriodNumber]); From 850524740d7f3c926682c96df9722883b369bc75 Mon Sep 17 00:00:00 2001 From: Nicholas Lorentzen Date: Sat, 21 Mar 2020 13:31:37 -0400 Subject: [PATCH 49/62] Adjust Schedule Timezone --- corona-clock/scheduler/index.html | 8 ++--- corona-clock/scheduler/js/scheduler.js | 41 +++++++++++++++++++++++++- 2 files changed, 44 insertions(+), 5 deletions(-) diff --git a/corona-clock/scheduler/index.html b/corona-clock/scheduler/index.html index 2fd2e13..850510b 100644 --- a/corona-clock/scheduler/index.html +++ b/corona-clock/scheduler/index.html @@ -223,7 +223,7 @@ Friday - 9:30 - 10:15 + 9:30 - 10:15 @@ -231,7 +231,7 @@ HD 250 - 10:25 - 11:10 + 10:25 - 11:10 @@ -239,7 +239,7 @@ - 11:20 - 12:05 + 11:20 - 12:05 @@ -247,7 +247,7 @@ - 12:15 - 12:35 + 12:15 - 12:35 Community Time Community Time HD 150 & 550 diff --git a/corona-clock/scheduler/js/scheduler.js b/corona-clock/scheduler/js/scheduler.js index 7a30f72..7e61500 100644 --- a/corona-clock/scheduler/js/scheduler.js +++ b/corona-clock/scheduler/js/scheduler.js @@ -101,4 +101,43 @@ function loadCoronaSchedule() document.getElementById(key).innerHTML = cellValue; } } -} \ No newline at end of file + + adjustTimezone(); +} + +function adjustTimezone() { + + if(isNaN(getCookie("timezone")) && isNaN(document.getElementById("timezone").value)) {return;} + + var timezone = parseInt(document.getElementById("timezone").value); + + if(isNaN(timezone)) {return;} + + var aTime = [0, 9, 30, 10, 15]; + var bTime = [1, 10, 25, 11, 10]; + var cTime = [2, 11, 20, 12, 05]; + var dTime = [3, 12, 15, 12, 35]; + var allTimes = [aTime, bTime, cTime, dTime]; + + var elementIDs = ["atime", "btime", "ctime", "dtime"]; + + for(var i = 0; i < allTimes.length; i++) { + var timePeriod = allTimes[i]; + + timePeriod[1] = (timePeriod[1] + timezone) % 12; + timePeriod[3] = (timePeriod[3] + timezone) % 12; + + var idOfElement = elementIDs[timePeriod[0]]; + + document.getElementById(idOfElement).innerHTML = `${timePeriod[1]}:${timePeriod[2]} - ${timePeriod[3]}:${padNumber(timePeriod[4])}`; + } +} + +function padNumber(num) { + if (num < 10) { + return `0${num}`; + } else { + return `${num}`; + } +} + From 6e587fb00c4cdaca8cadaf79bda04711ebb3593c Mon Sep 17 00:00:00 2001 From: Nicholas Lorentzen Date: Sat, 21 Mar 2020 13:40:30 -0400 Subject: [PATCH 50/62] Fix 12 Hour Bug --- corona-clock/scheduler/js/scheduler.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/corona-clock/scheduler/js/scheduler.js b/corona-clock/scheduler/js/scheduler.js index 7e61500..abaf45b 100644 --- a/corona-clock/scheduler/js/scheduler.js +++ b/corona-clock/scheduler/js/scheduler.js @@ -124,8 +124,14 @@ function adjustTimezone() { for(var i = 0; i < allTimes.length; i++) { var timePeriod = allTimes[i]; - timePeriod[1] = (timePeriod[1] + timezone) % 12; - timePeriod[3] = (timePeriod[3] + timezone) % 12; + var timePeriod1Val = (timePeriod[1] + timezone); + var timePeriod3Val = (timePeriod[3] + timezone); + + if (timePeriod1Val % 12 != 0) {timePeriod1Val = timePeriod1Val % 12;} else {timePeriod1Val = 12;} + if (timePeriod3Val % 12 != 0) {timePeriod3Val = timePeriod3Val % 12;} else {timePeriod3Val = 12;} + + timePeriod[1] = timePeriod1Val; + timePeriod[3] = timePeriod3Val; var idOfElement = elementIDs[timePeriod[0]]; From bb9412abf5f00f13cc1f9863b2cba1364dd4827c Mon Sep 17 00:00:00 2001 From: Nicholas Lorentzen Date: Wed, 25 Mar 2020 13:35:18 -0400 Subject: [PATCH 51/62] Updated D Session Schedule --- corona-clock/scheduler/index.html | 10 +++++----- corona-clock/script.js | 10 +++++----- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/corona-clock/scheduler/index.html b/corona-clock/scheduler/index.html index 850510b..d115e4e 100644 --- a/corona-clock/scheduler/index.html +++ b/corona-clock/scheduler/index.html @@ -248,11 +248,11 @@ 12:15 - 12:35 - Community Time - Community Time - HD 150 & 550 - Community Time - Community Time + Advisory + HD 150 & 550 + Class Meeting + Chapel + All School Meeting diff --git a/corona-clock/script.js b/corona-clock/script.js index 7932f23..d9b03bc 100644 --- a/corona-clock/script.js +++ b/corona-clock/script.js @@ -414,27 +414,27 @@ function cookieCheck(scheduleToCheck, weekday) if (weekday === 1) { cookieAbbrev = ["m1","m2","m3", "NA", "NA"]; - labels = ["Monday Period 1", "Monday Period 2", "Monday Period 3", "Community Time", "End Of Classes"]; + labels = ["Monday Period 1", "Monday Period 2", "Monday Period 3", "Advisory", "End Of Classes"]; } if (weekday === 2) { cookieAbbrev = ["t5","t7","t8", "NA", "NA"]; - labels = ["Tuesday Period 5", "Tuesday Period 6", "Tuesday Period 7", "Community Time", "End Of Classes"]; + labels = ["Tuesday Period 5", "Tuesday Period 6", "Tuesday Period 7", "HD 150 & 550", "End Of Classes"]; } if (weekday === 3) { cookieAbbrev = ["t3","s4","w2", "NA", "NA"]; - labels = ["Tuesday Period 3", "Saturday Period 4", "Wednesday Period 2", "HD 150 & 550", "End Of Classes"]; + labels = ["Tuesday Period 3", "Saturday Period 4", "Wednesday Period 2", "Class Meeting", "End Of Classes"]; } if (weekday === 4) { cookieAbbrev = ["y3","y5","f8", "NA", "NA"]; - labels = ["Thursday Period 3", "Thursday Period 5", "Friday Period 7", "Community Time", "End Of Classes"]; + labels = ["Thursday Period 3", "Thursday Period 5", "Friday Period 7", "Chapel", "End Of Classes"]; } if (weekday === 5) { cookieAbbrev = ["NA","f1","y2", "NA", "NA"]; - labels = ["HD 250 or Conflict", "Friday Period 1", "Thursday Period 2", "Community Time", "Weekend!"]; + labels = ["HD 250 or Conflict", "Friday Period 1", "Thursday Period 2", "All-School Meeting", "Weekend!"]; } var currentCookie = getCookie(cookieAbbrev[currentPeriodNumber]); From f4fa1134355b25fd110de07514a2e0765e7554af Mon Sep 17 00:00:00 2001 From: Nicholas Lorentzen Date: Wed, 25 Mar 2020 13:42:57 -0400 Subject: [PATCH 52/62] Add Hyphen In All-School --- corona-clock/scheduler/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/corona-clock/scheduler/index.html b/corona-clock/scheduler/index.html index d115e4e..b4c099c 100644 --- a/corona-clock/scheduler/index.html +++ b/corona-clock/scheduler/index.html @@ -252,7 +252,7 @@ HD 150 & 550 Class Meeting Chapel - All School Meeting + All-School Meeting From e5b0e993d7806b4ccbf4c444b949679b3ca21697 Mon Sep 17 00:00:00 2001 From: Nicholas Lorentzen Date: Fri, 27 Mar 2020 20:23:26 -0400 Subject: [PATCH 53/62] Auto Timezone Change --- corona-clock/script.js | 32 ++++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/corona-clock/script.js b/corona-clock/script.js index d9b03bc..5588660 100644 --- a/corona-clock/script.js +++ b/corona-clock/script.js @@ -11,16 +11,44 @@ var d = new Date(); // console.log(" *** d.getMonth() " + d.getMonth()); // console.log(" *** dayType noClassSats" + i); +var isFirstRun = true; +var ignoreCookieOffset = false; + // Updates the date and time function updateD() { d = new Date(); - if(getCookie("timezone") != "" && !(isNaN(getCookie("timezone")))){ + if((getCookie("timezone") != "" && !(isNaN(getCookie("timezone")))) && !ignoreCookieOffset){ var offset = parseInt(getCookie("timezone")); - //var offset = 12; + if (isFirstRun) { + isFirstRun = false; + if (offset != getHotchkissOffset()) { + var message = "We now have the capability to automatically set your timezone. It appears your setting of the timezone is incorrect. Press confirm to correct or cancel if we are wrong."; + if (window.confirm(message)) { + ignoreCookieOffset = true; + } + } + } d.setHours(d.getHours() - offset); + } else { + d = autoTimezoneAttempt(); } } +function autoTimezoneAttempt() { + var hotchkissOffset = getHotchkissOffset(); + + var adjDate = new Date() + adjDate.setHours(adjDate.getHours() - hotchkissOffset); + return adjDate; +} + +function getHotchkissOffset() { + var offset = new Date().getTimezoneOffset(); + var offsetHours = offset / -60; + var hotchkissOffset = parseInt("" + (offsetHours + 4)); + return hotchkissOffset; +} + var showTime = true; var descText; var weekendText = ""; From ef4544b395741c729874ce47393762a19b1ccbf2 Mon Sep 17 00:00:00 2001 From: Nicholas Lorentzen Date: Sun, 29 Mar 2020 14:33:27 -0400 Subject: [PATCH 54/62] Prevent User Error In 5A 5B Slots Now warns the user if they try to fill out both 5A and 5B slots for a given day. --- corona-clock/scheduler/js/scheduler.js | 31 +++++++++++++++++++++----- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/corona-clock/scheduler/js/scheduler.js b/corona-clock/scheduler/js/scheduler.js index abaf45b..f982463 100644 --- a/corona-clock/scheduler/js/scheduler.js +++ b/corona-clock/scheduler/js/scheduler.js @@ -1,13 +1,15 @@ /* -Scheduler for Hotchkiss Clock +Scheduler for Hotchkiss Clock Corona Edition Nicholas Lorentzen -Last updated 2020 03 20 +Last updated 2020 03 29 */ var boiyardee = []; var classes = ["m1","m2","m3","t5","t6","t7","t8","t3","s4","w2","y3","y5","y6","f1", "y2", "f8", "name", "timezone"]; var coronaclasses = {a1: "m1", a2: "t5", a3: "t3", a4: "y3", b1: "m2", b2: "t7", b3: "s4", b4: "y5", b5: "f1", c1: "m3", c2: "t8", c3: "w2", c4: "f8", c5: "y2"}; +var abConflictMessage = "WARNING: Please make sure you only fill out periods for which you actually have class. It looks like you have both 5A and 5B filled out on a day. This program will automatically handle free periods in the live view clock mode."; + function addCookie(cookname) { @@ -38,9 +40,24 @@ function putCookie() function exitScheduler() { + //Check Tuesday 5A 5B Conflicts + var aVal = document.getElementById("t5").value.toLowerCase(); + var bVal = document.getElementById("t6").value.toLowerCase(); + if ((aVal != "" && bVal != "") && (aVal != "lunch" && bVal != "lunch")) { + window.alert(abConflictMessage); + return; + } + + //Check Thursday 5A 5B Conflicts + aVal = document.getElementById("y5").value.toLowerCase(); + bVal = document.getElementById("y6").value.toLowerCase(); + if ((aVal != "" && bVal != "") && (aVal != "lunch" && bVal != "lunch")) { + window.alert(abConflictMessage); + return; + } + putCookie(); loadCoronaSchedule(); - alert("Schedule Updated!"); //window.location.href = "https://ekkoing.github.io/cclock/corona-clock/scheduler"; } @@ -54,7 +71,11 @@ function cookiesAlert() function fillTable(chef) { - document.getElementById(chef).value = getCookie(chef); + var cellVal = getCookie(chef); + if (cellVal === "Lunch" || cellVal === "Free") { + cellVal = ""; + } + document.getElementById(chef).value = cellVal; } function getCookie(cname) { @@ -88,7 +109,7 @@ function loadCoronaSchedule() var dayKey = coronaclasses[key].charAt(0); var aVal = document.getElementById(dayKey + "5").value; var bVal = document.getElementById(dayKey + "6").value; - if (aVal === "" || aVal === "Lunch") { + if (aVal === "" || aVal.toLowerCase() === "lunch" ||aVal.toLowerCase() === "free") { cellValue = bVal; } else { cellValue = aVal; From d6ed50dbe94785d85e78a6a4b2667821f87fd561 Mon Sep 17 00:00:00 2001 From: Nicholas Lorentzen Date: Sun, 29 Mar 2020 14:46:35 -0400 Subject: [PATCH 55/62] Auto Assign Timezone Value --- corona-clock/scheduler/js/scheduler.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/corona-clock/scheduler/js/scheduler.js b/corona-clock/scheduler/js/scheduler.js index f982463..787d8cd 100644 --- a/corona-clock/scheduler/js/scheduler.js +++ b/corona-clock/scheduler/js/scheduler.js @@ -75,6 +75,11 @@ function fillTable(chef) if (cellVal === "Lunch" || cellVal === "Free") { cellVal = ""; } + + if (chef === "timezone") { + cellVal = getHotchkissOffset(); + } + document.getElementById(chef).value = cellVal; } @@ -160,6 +165,13 @@ function adjustTimezone() { } } +function getHotchkissOffset() { + var offset = new Date().getTimezoneOffset(); + var offsetHours = offset / -60; + var hotchkissOffset = parseInt("" + (offsetHours + 4)); + return hotchkissOffset; +} + function padNumber(num) { if (num < 10) { return `0${num}`; From c2dfd5806a95b79d5301acd1dc20e7fb8b811d6e Mon Sep 17 00:00:00 2001 From: Nicholas Lorentzen Date: Sun, 29 Mar 2020 15:22:17 -0400 Subject: [PATCH 56/62] Decount Ad Decount has made a claim that Jiahua Chen was an employee when he created this design and as a result had no right to release it under an MIT license. As I have gotten tired of hearing them argue with Jiahua, I have generously offered to put this little message in exchange for their silence. This in no way means that I believe their claims, but rather don't have any interest in continuing the debate. --- corona-clock/index.html | 8 ++++++++ corona-clock/script.js | 19 ++++++++++++++++++- corona-clock/style.css | 38 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 64 insertions(+), 1 deletion(-) diff --git a/corona-clock/index.html b/corona-clock/index.html index adfd3d7..b2c613f 100644 --- a/corona-clock/index.html +++ b/corona-clock/index.html @@ -80,6 +80,14 @@

+
+

+ This app is made with Decount's design and open-sourced elements. +
+ For todo lists, new tab settings, mobile app, and other features, visit the Decount site. +

+
Go Now!Stop Showing This
+
diff --git a/corona-clock/script.js b/corona-clock/script.js index 5588660..912a773 100644 --- a/corona-clock/script.js +++ b/corona-clock/script.js @@ -398,7 +398,18 @@ function onLoad() { loadDate(); update(); weekendText = thisWeekend(); - document.getElementById("schedule-message").style.display = "block"; + document.getElementById("schedule-message").style.display = "block"; + + if (localStorage.getItem('noDecount') != null && localStorage.getItem('noDecount') === 'true') { + stopShowingDecountAd(); + } else { + document.getElementById("noDc").onclick = function() { + var decountAd = document.getElementById("decount-id"); + decountAd.parentNode.removeChild(decountAd); + localStorage.setItem('noDecount', 'true'); + return false; + } + } } // Below Code from Nicholas Lorentzen '20 @@ -623,6 +634,12 @@ function updateMainMessage() } } +function stopShowingDecountAd() { + var decountAd = document.getElementById("decount-id"); + decountAd.parentNode.removeChild(decountAd); + localStorage.setItem('noDecount', 'true'); +} + setInterval(loadTime, 1000); setInterval(loadDate, 1000); setInterval(updateD, 1000); diff --git a/corona-clock/style.css b/corona-clock/style.css index d40e8a3..60f27f8 100644 --- a/corona-clock/style.css +++ b/corona-clock/style.css @@ -317,3 +317,41 @@ h1, h2, h3, h4, h5, h6, b, strong { background-position: 0% 50% } } + +/* Decount BS */ +.dcLink { + background-color:#44c767; + border-radius:28px; + border:1px solid #18ab29; + display:inline-block; + cursor:pointer; + color:#ffffff; + font-family:Arial; + font-size:17px; + padding:16px 31px; + text-decoration:none; + margin-top:10px; + text-shadow:0px 1px 0px #2f6627; +} +.dcLink:hover { + background-color:#5cbf2a; +} +.dcLink:active { + position:relative; + top:1px; +} + +#noDc { + background-color:#c74444; + border-radius:28px; + border:1px solid #b84242; + display:inline-block; + cursor:pointer; + color:#ffffff; + font-family:Arial; + font-size:17px; + padding:16px 31px; + text-decoration:none; + margin-top:10px; + text-shadow:0px 1px 0px #5c1e1e; +} \ No newline at end of file From 48b34d080ef3d4bae7635bcad5368647bb3dc3f6 Mon Sep 17 00:00:00 2001 From: Nicholas Lorentzen Date: Sun, 29 Mar 2020 15:26:22 -0400 Subject: [PATCH 57/62] Fix Decount Ad --- corona-clock/index.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/corona-clock/index.html b/corona-clock/index.html index b2c613f..f1f2e7a 100644 --- a/corona-clock/index.html +++ b/corona-clock/index.html @@ -82,9 +82,9 @@

- This app is made with Decount's design and open-sourced elements. + This app uses Decount's open source design.
- For todo lists, new tab settings, mobile app, and other features, visit the Decount site. + For todo lists, new tab settings, and other features, visit the Decount site.

Go Now!Stop Showing This
From bad2fa84a19fce0e1d71674abf2ee25fe87341b1 Mon Sep 17 00:00:00 2001 From: Nicholas Lorentzen Date: Tue, 31 Mar 2020 09:56:55 -0400 Subject: [PATCH 58/62] Potential Fix To 5A 5B Conflict On Live View --- corona-clock/index.html | 2 +- corona-clock/script.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/corona-clock/index.html b/corona-clock/index.html index f1f2e7a..aa27124 100644 --- a/corona-clock/index.html +++ b/corona-clock/index.html @@ -86,7 +86,7 @@
For todo lists, new tab settings, and other features, visit the Decount site.

-
Go Now!Stop Showing This
+
Go Now!Stop Showing This
diff --git a/corona-clock/script.js b/corona-clock/script.js index 912a773..103981f 100644 --- a/corona-clock/script.js +++ b/corona-clock/script.js @@ -478,7 +478,7 @@ function cookieCheck(scheduleToCheck, weekday) var currentCookie = getCookie(cookieAbbrev[currentPeriodNumber]); - if (cookieAbbrev[currentPeriodNumber].charAt(1) === 5 && (currentCookie === "" || currentCookie === "Lunch")) { + if (cookieAbbrev[currentPeriodNumber].charAt(1) === 5 && (currentCookie === "" || currentCookie.toLowerCase() === "lunch" || currentCookie.toLowerCase() === "free")) { currentCookie = getCookie(cookieAbbrev[currentPeriodNumber].substr(0,1) + "6"); } From 9d2a120938885950b84cc19fde25af91a41ab701 Mon Sep 17 00:00:00 2001 From: Nicholas Lorentzen Date: Sun, 29 Mar 2020 23:26:10 -0400 Subject: [PATCH 59/62] Warning on 5A/5B Bug on Live View --- corona-clock/index.html | 10 +++++++++- corona-clock/script.js | 2 +- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/corona-clock/index.html b/corona-clock/index.html index aa27124..ade9d23 100644 --- a/corona-clock/index.html +++ b/corona-clock/index.html @@ -62,7 +62,7 @@
- Eric Li ’13, Jiahua Chen ’20, Nicholas Lorentzen ’20 V1.13 + Eric Li ’13, Jiahua Chen ’20, Nicholas Lorentzen ’20 V1.14
@@ -80,6 +80,14 @@

+

This app uses Decount's open source design. diff --git a/corona-clock/script.js b/corona-clock/script.js index 103981f..f9cd5b0 100644 --- a/corona-clock/script.js +++ b/corona-clock/script.js @@ -479,7 +479,7 @@ function cookieCheck(scheduleToCheck, weekday) var currentCookie = getCookie(cookieAbbrev[currentPeriodNumber]); if (cookieAbbrev[currentPeriodNumber].charAt(1) === 5 && (currentCookie === "" || currentCookie.toLowerCase() === "lunch" || currentCookie.toLowerCase() === "free")) { - currentCookie = getCookie(cookieAbbrev[currentPeriodNumber].substr(0,1) + "6"); + currentCookie = getCookie(cookieAbbrev[currentPeriodNumber].charAt(0) + "6"); } currentPeriod.title = currentCookie; From 7a6b39355650177c7b84d51ae6789fcc141cc842 Mon Sep 17 00:00:00 2001 From: Nicholas Lorentzen Date: Sun, 29 Mar 2020 23:29:41 -0400 Subject: [PATCH 60/62] Fix Last Commit --- corona-clock/index.html | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/corona-clock/index.html b/corona-clock/index.html index ade9d23..aab6e20 100644 --- a/corona-clock/index.html +++ b/corona-clock/index.html @@ -80,13 +80,12 @@

- - + From 64a97ebb9ffe21a108faeb500a2b5a323afd27a1 Mon Sep 17 00:00:00 2001 From: Nicholas L <33159891+EKKOING@users.noreply.github.com> Date: Wed, 27 May 2020 10:45:05 -0400 Subject: [PATCH 62/62] Remove Non Existent Holiday --- corona-clock/script.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/corona-clock/script.js b/corona-clock/script.js index f9cd5b0..601d768 100644 --- a/corona-clock/script.js +++ b/corona-clock/script.js @@ -60,7 +60,7 @@ var mainMessage = ""; var onbreak = false; var specialDays = [new CalDay(10, 12), new CalDay(11, 23)]; // <- For special event days var noClassSats = [new CalDay(9, 14), new CalDay(10, 5), new CalDay(11, 2), new CalDay(12, 7)]; // <- For days without Saturday classes -var noClassDays = [new CalDay(5, 27), new CalDay(6, 1)]; // <- For days without classes, or breaks +var noClassDays = [new CalDay(6, 1)]; // <- For days without classes, or breaks var holidayDays = [new CalDay(10, 14), new CalDay(10, 15), new CalDay(12, 2)]; // <- For holidays //What the current period's array location is