From 074067ed8169633a2a866fdf738707c75f1fdd4d Mon Sep 17 00:00:00 2001 From: Ali Date: Sun, 23 Nov 2025 18:03:12 +0000 Subject: [PATCH 1/4] Implement alarm functionality and update title in HTML --- Sprint-3/alarmclock/alarmclock.js | 44 ++++++++++++++++++++++++++++++- Sprint-3/alarmclock/index.html | 2 +- Sprint-3/package.json | 2 +- 3 files changed, 45 insertions(+), 3 deletions(-) diff --git a/Sprint-3/alarmclock/alarmclock.js b/Sprint-3/alarmclock/alarmclock.js index 6ca81cd3b..9f2f24c32 100644 --- a/Sprint-3/alarmclock/alarmclock.js +++ b/Sprint-3/alarmclock/alarmclock.js @@ -1,4 +1,46 @@ -function setAlarm() {} +const heading = document.getElementById("timeRemaining"); +const input = document.getElementById("alarmSet"); +const setBtn = document.getElementById("set"); + +let remaining = 0; +let intervalId = null; + +function format(seconds) { + const minute = String(Math.floor(seconds / 60)).padStart(2, "0"); + const second = String(seconds % 60).padStart(2, "0"); + return `${m}:${s}`; +} + +function updateHeading() { + heading.textContent = `Time Remaining: ${format(remaining)}`; +} + +function tick() { + if (remaining <= 0) { + clearInterval(intervalId); + intervalId = null; + updateHeading(); + if (typeof window.playAlarm === "function") { + window.playAlarm(); + } + return; + } + remaining -= 1; + updateHeading(); +} + +function setAlarm() { + const value = parseInt(input.value, 10); + // Guard clause: ignore invalid or non-positive input + if (!Number.isFinite(value) || value <= 0) return; + if (intervalId) clearInterval(intervalId); + remaining = value; + updateHeading(); + intervalId = setInterval(tick, 1000); +} + +setBtn.addEventListener("click", setAlarm); +updateHeading(); // DO NOT EDIT BELOW HERE diff --git a/Sprint-3/alarmclock/index.html b/Sprint-3/alarmclock/index.html index 48e2e80d9..85614e4a4 100644 --- a/Sprint-3/alarmclock/index.html +++ b/Sprint-3/alarmclock/index.html @@ -4,7 +4,7 @@ - Title here + Alarm clock
diff --git a/Sprint-3/package.json b/Sprint-3/package.json index 711a5390f..c58a56a6b 100644 --- a/Sprint-3/package.json +++ b/Sprint-3/package.json @@ -26,7 +26,7 @@ "@testing-library/dom": "^10.4.0", "@testing-library/jest-dom": "^6.6.3", "@testing-library/user-event": "^14.6.1", - "jest": "^30.0.4", + "jest": "^30.2.0", "jest-environment-jsdom": "^30.0.4" } } From 49f886ab0242664c8dab7c627cc51c24cb40ed3d Mon Sep 17 00:00:00 2001 From: Ali Date: Mon, 24 Nov 2025 15:48:57 +0000 Subject: [PATCH 2/4] Fix formatting in the alarm display function to correctly return minutes and seconds --- Sprint-3/alarmclock/alarmclock.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sprint-3/alarmclock/alarmclock.js b/Sprint-3/alarmclock/alarmclock.js index 9f2f24c32..9fe6fc354 100644 --- a/Sprint-3/alarmclock/alarmclock.js +++ b/Sprint-3/alarmclock/alarmclock.js @@ -8,7 +8,7 @@ let intervalId = null; function format(seconds) { const minute = String(Math.floor(seconds / 60)).padStart(2, "0"); const second = String(seconds % 60).padStart(2, "0"); - return `${m}:${s}`; + return `${minute}:${second}`; } function updateHeading() { From a602e02391b21b03366f3b5f9119644ef5bd908c Mon Sep 17 00:00:00 2001 From: Ali Date: Mon, 24 Nov 2025 16:25:53 +0000 Subject: [PATCH 3/4] Refactor: use constant for interval duration in setAlarm function --- Sprint-3/alarmclock/alarmclock.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Sprint-3/alarmclock/alarmclock.js b/Sprint-3/alarmclock/alarmclock.js index 9fe6fc354..e4ecb0e1a 100644 --- a/Sprint-3/alarmclock/alarmclock.js +++ b/Sprint-3/alarmclock/alarmclock.js @@ -2,6 +2,8 @@ const heading = document.getElementById("timeRemaining"); const input = document.getElementById("alarmSet"); const setBtn = document.getElementById("set"); +const ONE_SECOND = 1000; + let remaining = 0; let intervalId = null; @@ -36,7 +38,7 @@ function setAlarm() { if (intervalId) clearInterval(intervalId); remaining = value; updateHeading(); - intervalId = setInterval(tick, 1000); + intervalId = setInterval(tick, ONE_SECOND); } setBtn.addEventListener("click", setAlarm); From ff9dad09a4aaa8960479c872fff9a5f7b8c2c4a6 Mon Sep 17 00:00:00 2001 From: Ali Date: Fri, 28 Nov 2025 14:07:46 +0000 Subject: [PATCH 4/4] Refactor: update time format in display and improve input label for clarity --- Sprint-3/alarmclock/alarmclock.js | 7 ++++--- Sprint-3/alarmclock/index.html | 10 ++++++++-- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/Sprint-3/alarmclock/alarmclock.js b/Sprint-3/alarmclock/alarmclock.js index e4ecb0e1a..9857dadb2 100644 --- a/Sprint-3/alarmclock/alarmclock.js +++ b/Sprint-3/alarmclock/alarmclock.js @@ -8,11 +8,12 @@ let remaining = 0; let intervalId = null; function format(seconds) { - const minute = String(Math.floor(seconds / 60)).padStart(2, "0"); - const second = String(seconds % 60).padStart(2, "0"); - return `${minute}:${second}`; + const minutes = Math.floor(seconds / 60); + const secs = seconds % 60; + return `${minutes}m : ${secs}s`; } + function updateHeading() { heading.textContent = `Time Remaining: ${format(remaining)}`; } diff --git a/Sprint-3/alarmclock/index.html b/Sprint-3/alarmclock/index.html index 85614e4a4..970fd0a3f 100644 --- a/Sprint-3/alarmclock/index.html +++ b/Sprint-3/alarmclock/index.html @@ -9,12 +9,18 @@

Time Remaining: 00:00

- - + + +
+