aboutsummaryrefslogtreecommitdiff
path: root/src/timer.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/timer.js')
-rw-r--r--src/timer.js88
1 files changed, 88 insertions, 0 deletions
diff --git a/src/timer.js b/src/timer.js
new file mode 100644
index 0000000..09189c0
--- /dev/null
+++ b/src/timer.js
@@ -0,0 +1,88 @@
+let minsPerRound = Number(sessionStorage.getItem("minsPerRound")) || 12;
+let timerRunningFlag = Number(sessionStorage.getItem("timerRunningFlag")) || 0;
+let deadline =
+ Number(sessionStorage.getItem("deadline")) || new Date().getTime();
+let clock = 0;
+
+function setTimer(m, s) {
+ let timer = document.getElementById("timer-display");
+ m = m < 10 ? "0" + m : m;
+ s = s < 10 ? "0" + s : s;
+ timer.value = `${m}:${s}`;
+}
+
+function setSessionData() {
+ sessionStorage.setItem("deadline", deadline);
+ sessionStorage.setItem("minsPerRound", minsPerRound);
+ sessionStorage.setItem("timerRunningFlag", timerRunningFlag);
+}
+
+function resetTimer() {
+ clearInterval(clock);
+ let mins = Math.floor(minsPerRound);
+ let secs = (minsPerRound - mins) * 60;
+ setTimer(mins, secs);
+ timerRunningFlag = 0;
+ setSessionData();
+}
+
+function updateTimer(milliseconds) {
+ const m = Math.floor((milliseconds % (1000 * 60 * 60)) / (1000 * 60));
+ const s = Math.floor((milliseconds % (1000 * 60)) / 1000);
+ setTimer(m, s);
+}
+
+function refreshTimer() {
+ const now = new Date().getTime();
+ const millisecondsToDeadline = deadline - now;
+ if (millisecondsToDeadline > 0) {
+ updateTimer(millisecondsToDeadline);
+ return;
+ }
+ resetTimer();
+ const notification = new Notyf({
+ duration: 0,
+ position: { x: "center", y: "top" },
+ dismissible: true,
+ });
+ notification.error("Round completed");
+}
+
+function startTimer(fresh) {
+ if (fresh) {
+ let now = new Date().getTime();
+ const millisecondsToDeadline = minsPerRound * 60 * 1000;
+ deadline = now + millisecondsToDeadline;
+ }
+ timerRunningFlag = 1;
+ setSessionData();
+ clock = setInterval(refreshTimer, 1000);
+}
+
+window.onload = function () {
+ if (timerRunningFlag) startTimer(0);
+ else resetTimer();
+
+ document.getElementById("timer-start").addEventListener("click", () => {
+ if (timerRunningFlag != 0) return;
+ startTimer(1);
+ });
+
+ document.getElementById("timer-stop").addEventListener("click", () => {
+ resetTimer();
+ });
+
+ document.getElementById("timer-inc").addEventListener("click", () => {
+ if (timerRunningFlag == 0) {
+ minsPerRound += 0.5;
+ resetTimer();
+ }
+ });
+
+ document.getElementById("timer-dec").addEventListener("click", () => {
+ if (timerRunningFlag == 0 && minsPerRound != 0) {
+ minsPerRound -= 0.5;
+ resetTimer();
+ }
+ });
+};