From 6ebf8fc4baf1a1a0bceab15c28e18497724a0f8f Mon Sep 17 00:00:00 2001 From: Raihan Sharif Date: Fri, 27 Feb 2026 10:20:14 +0000 Subject: [PATCH 1/3] implement alarm clock --- Sprint-3/alarmclock/alarmclock.js | 62 ++++++++++++++++++++++++++++++- Sprint-3/alarmclock/index.html | 6 +-- 2 files changed, 64 insertions(+), 4 deletions(-) diff --git a/Sprint-3/alarmclock/alarmclock.js b/Sprint-3/alarmclock/alarmclock.js index 6ca81cd3b..d9ce6a275 100644 --- a/Sprint-3/alarmclock/alarmclock.js +++ b/Sprint-3/alarmclock/alarmclock.js @@ -1,4 +1,64 @@ -function setAlarm() {} +// need to set interval outside of setAlarm() so that every time the user clicks set alarm +// the previous interval is deleted. Otherwise there will be overlapping intervals +// if a user clicks on set alarm while an countdown is already active. +let intervalId = null; + +function setAlarm() { + const alarmClockInput = document.getElementById("alarmSet"); + const clockDisplay = document.getElementById("timeRemaining"); + let secondsRemaining = parseInt(alarmClockInput.value, 10); + + if (!isValidInput(secondsRemaining)) { + alert("please enter a valid positive integer!"); + return; + } + + clearInterval(intervalId); + + // display immediately on click; + const minutes = Math.floor(secondsRemaining / 60); + const seconds = secondsRemaining % 60; + displayTime(minutes, seconds, clockDisplay); + + intervalId = setInterval(() => { + secondsRemaining--; + + if (secondsRemaining <= 0) { + clearInterval(intervalId); + displayTime(0, 0, clockDisplay); + playAlarm(); + return; + } + + const minutes = Math.floor(secondsRemaining / 60); + const seconds = secondsRemaining % 60; + displayTime(minutes, seconds, clockDisplay); + }, 1000); +} + +// formats and displays countdown time to a supplied element +function displayTime(mins, secs, elem) { + const minsFormatted = String(mins).padStart(2, "0"); + const secsFormatted = String(secs).padStart(2, "0"); + elem.textContent = `Time Remaining: ${minsFormatted}:${secsFormatted}`; +} + +// returns true if input is an integer, false otherwise +function isValidInput(input) { + if (input === "" || isNaN(input)) { + return false; + } + + if (!Number.isInteger(input)) { + return false; + } + + if (input < 0) { + return false; + } + + return true; +} // DO NOT EDIT BELOW HERE diff --git a/Sprint-3/alarmclock/index.html b/Sprint-3/alarmclock/index.html index 48e2e80d9..89054f4b1 100644 --- a/Sprint-3/alarmclock/index.html +++ b/Sprint-3/alarmclock/index.html @@ -1,16 +1,16 @@ - + - Title here + Alarm clock app

Time Remaining: 00:00

- + From 5a4dc50d53c5771053c9a950d00aa617ea85588d Mon Sep 17 00:00:00 2001 From: Raihan Sharif Date: Mon, 11 May 2026 00:33:13 +0100 Subject: [PATCH 2/3] remove code repition. Pause previous alarm when starting new timer --- Sprint-3/alarmclock/alarmclock.js | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/Sprint-3/alarmclock/alarmclock.js b/Sprint-3/alarmclock/alarmclock.js index d9ce6a275..b2165f934 100644 --- a/Sprint-3/alarmclock/alarmclock.js +++ b/Sprint-3/alarmclock/alarmclock.js @@ -7,6 +7,7 @@ function setAlarm() { const alarmClockInput = document.getElementById("alarmSet"); const clockDisplay = document.getElementById("timeRemaining"); let secondsRemaining = parseInt(alarmClockInput.value, 10); + const setBtn = document.getElementById("set"); if (!isValidInput(secondsRemaining)) { alert("please enter a valid positive integer!"); @@ -15,31 +16,34 @@ function setAlarm() { clearInterval(intervalId); + // pause any previous alarms when new countdown is set + pauseAlarm(); + // display immediately on click; - const minutes = Math.floor(secondsRemaining / 60); - const seconds = secondsRemaining % 60; - displayTime(minutes, seconds, clockDisplay); + displayTime(secondsRemaining, clockDisplay); intervalId = setInterval(() => { secondsRemaining--; if (secondsRemaining <= 0) { clearInterval(intervalId); - displayTime(0, 0, clockDisplay); + displayTime(0, clockDisplay); playAlarm(); return; } const minutes = Math.floor(secondsRemaining / 60); const seconds = secondsRemaining % 60; - displayTime(minutes, seconds, clockDisplay); + displayTime(secondsRemaining, clockDisplay); }, 1000); } // formats and displays countdown time to a supplied element -function displayTime(mins, secs, elem) { +function displayTime(secondsRemaining, elem) { + const mins = Math.floor(secondsRemaining / 60); + const seconds = secondsRemaining % 60; const minsFormatted = String(mins).padStart(2, "0"); - const secsFormatted = String(secs).padStart(2, "0"); + const secsFormatted = String(seconds).padStart(2, "0"); elem.textContent = `Time Remaining: ${minsFormatted}:${secsFormatted}`; } @@ -53,7 +57,7 @@ function isValidInput(input) { return false; } - if (input < 0) { + if (input <= 0) { return false; } From 2e287007e3145b3e3fd54afb7c6704e5e5caabd1 Mon Sep 17 00:00:00 2001 From: Raihan Sharif Date: Mon, 11 May 2026 01:11:34 +0100 Subject: [PATCH 3/3] Remove unused variable Removed unused variable 'setBtn' from setAlarm function. --- Sprint-3/alarmclock/alarmclock.js | 1 - 1 file changed, 1 deletion(-) diff --git a/Sprint-3/alarmclock/alarmclock.js b/Sprint-3/alarmclock/alarmclock.js index b2165f934..5826a3513 100644 --- a/Sprint-3/alarmclock/alarmclock.js +++ b/Sprint-3/alarmclock/alarmclock.js @@ -7,7 +7,6 @@ function setAlarm() { const alarmClockInput = document.getElementById("alarmSet"); const clockDisplay = document.getElementById("timeRemaining"); let secondsRemaining = parseInt(alarmClockInput.value, 10); - const setBtn = document.getElementById("set"); if (!isValidInput(secondsRemaining)) { alert("please enter a valid positive integer!");