From ee6a0e5fd71f915a39b76feb9ea275c4d377f88c Mon Sep 17 00:00:00 2001 From: Francesco Romano Monda Date: Fri, 31 Jul 2026 19:52:17 +0100 Subject: [PATCH 1/5] Implement alarm countdown functionality --- Sprint-3/alarmclock/alarmclock.js | 41 ++++++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/Sprint-3/alarmclock/alarmclock.js b/Sprint-3/alarmclock/alarmclock.js index 6ca81cd3b..cf6e22ca8 100644 --- a/Sprint-3/alarmclock/alarmclock.js +++ b/Sprint-3/alarmclock/alarmclock.js @@ -1,4 +1,43 @@ -function setAlarm() {} +let timer; + +function setAlarm() { + let input = document.getElementById("alarmSet"); + let heading = document.getElementById("timeRemaining"); + + let timeRemaining = parseInt(input.value); + + let minutes = Math.floor(timeRemaining / 60); + let seconds = timeRemaining % 60; + + heading.innerText = + "Time Remaining: " + + String(minutes).padStart(2, "0") + + ":" + + String(seconds).padStart(2, "0"); + + clearInterval(timer); + + function countdown() { + timeRemaining = timeRemaining - 1; + + let minutes = Math.floor(timeRemaining / 60); + let seconds = timeRemaining % 60; + + heading.innerText = + "Time Remaining: " + + String(minutes).padStart(2, "0") + + ":" + + String(seconds).padStart(2, "0"); + + if (timeRemaining <= 0) { + clearInterval(timer); + document.body.style.backgroundColor = "red"; + playAlarm(); + } + } + + timer = setInterval(countdown, 1000); +} // DO NOT EDIT BELOW HERE From 82b6503be4410a88bde44dd4508cd9b22d0e94b4 Mon Sep 17 00:00:00 2001 From: Francesco Romano Monda Date: Mon, 3 Aug 2026 17:38:11 +0100 Subject: [PATCH 2/5] Updated the page title in index.html to "Alarm clock app" --- Sprint-3/alarmclock/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sprint-3/alarmclock/index.html b/Sprint-3/alarmclock/index.html index 48e2e80d9..ff2d3b453 100644 --- a/Sprint-3/alarmclock/index.html +++ b/Sprint-3/alarmclock/index.html @@ -4,7 +4,7 @@ - Title here + Alarm clock app
From d8afbf583e39081a7e8a14ba9786f3012e887e86 Mon Sep 17 00:00:00 2001 From: fromonda Date: Sat, 8 Aug 2026 14:14:22 +0100 Subject: [PATCH 3/5] Fix stop alarm functionality and refactor alarm logic --- Sprint-3/alarmclock/alarmclock.js | 37 +++++++++++++++++++------------ 1 file changed, 23 insertions(+), 14 deletions(-) diff --git a/Sprint-3/alarmclock/alarmclock.js b/Sprint-3/alarmclock/alarmclock.js index cf6e22ca8..eab35caae 100644 --- a/Sprint-3/alarmclock/alarmclock.js +++ b/Sprint-3/alarmclock/alarmclock.js @@ -1,11 +1,6 @@ let timer; -function setAlarm() { - let input = document.getElementById("alarmSet"); - let heading = document.getElementById("timeRemaining"); - - let timeRemaining = parseInt(input.value); - +function updateDisplay(timeRemaining, heading) { let minutes = Math.floor(timeRemaining / 60); let seconds = timeRemaining % 60; @@ -14,20 +9,26 @@ function setAlarm() { String(minutes).padStart(2, "0") + ":" + String(seconds).padStart(2, "0"); +} + +function setAlarm() { + let input = document.getElementById("alarmSet"); + let heading = document.getElementById("timeRemaining"); + + let timeRemaining = parseInt(input.value); clearInterval(timer); + pauseAlarm(); + + audio.currentTime = 0; + document.body.style.backgroundColor = ""; + + updateDisplay(timeRemaining, heading); function countdown() { timeRemaining = timeRemaining - 1; - let minutes = Math.floor(timeRemaining / 60); - let seconds = timeRemaining % 60; - - heading.innerText = - "Time Remaining: " + - String(minutes).padStart(2, "0") + - ":" + - String(seconds).padStart(2, "0"); + updateDisplay(timeRemaining, heading); if (timeRemaining <= 0) { clearInterval(timer); @@ -39,6 +40,14 @@ function setAlarm() { timer = setInterval(countdown, 1000); } +function stopAlarm() { + clearInterval(timer); + pauseAlarm(); +} + +document.getElementById("set").addEventListener("click", setAlarm); +document.getElementById("stop").addEventListener("click", stopAlarm); + // DO NOT EDIT BELOW HERE var audio = new Audio("alarmsound.mp3"); From d3e4dae1d765bc5d89e6e3be469df7484b5d53c8 Mon Sep 17 00:00:00 2001 From: fromonda Date: Sat, 8 Aug 2026 14:27:32 +0100 Subject: [PATCH 4/5] Add input validation for alarm duration --- Sprint-3/alarmclock/alarmclock.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Sprint-3/alarmclock/alarmclock.js b/Sprint-3/alarmclock/alarmclock.js index eab35caae..57eaf6cf0 100644 --- a/Sprint-3/alarmclock/alarmclock.js +++ b/Sprint-3/alarmclock/alarmclock.js @@ -17,6 +17,11 @@ function setAlarm() { let timeRemaining = parseInt(input.value); + if (isNaN(timeRemaining) || timeRemaining <= 0) { + alert("Please enter a positive number of seconds."); + return; + } + clearInterval(timer); pauseAlarm(); From 7e5ed4f888e86b9a5a6a81ba99ad6ec8dcda943b Mon Sep 17 00:00:00 2001 From: fromonda Date: Sat, 8 Aug 2026 15:25:29 +0100 Subject: [PATCH 5/5] Prevent duplicate set and stop alarm calls --- Sprint-3/alarmclock/alarmclock.js | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/Sprint-3/alarmclock/alarmclock.js b/Sprint-3/alarmclock/alarmclock.js index 57eaf6cf0..876b2adc8 100644 --- a/Sprint-3/alarmclock/alarmclock.js +++ b/Sprint-3/alarmclock/alarmclock.js @@ -50,8 +50,26 @@ function stopAlarm() { pauseAlarm(); } -document.getElementById("set").addEventListener("click", setAlarm); -document.getElementById("stop").addEventListener("click", stopAlarm); +const setButton = document.getElementById("set"); +const stopButton = document.getElementById("stop"); + +setButton.addEventListener( + "click", + function (event) { + event.stopImmediatePropagation(); + setAlarm(); + }, + true +); + +stopButton.addEventListener( + "click", + function (event) { + event.stopImmediatePropagation(); + stopAlarm(); + }, + true +); // DO NOT EDIT BELOW HERE