From d77934af5842fe3a69a89a0676275adb6ff87507 Mon Sep 17 00:00:00 2001 From: Jacknguyen4438 Date: Sun, 19 Apr 2026 23:12:30 +0100 Subject: [PATCH 1/7] Changing the title to begin the course --- 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 c5122f9ebaf8f21d6708ca6c327b2f21388c3bef Mon Sep 17 00:00:00 2001 From: Jacknguyen4438 Date: Tue, 21 Apr 2026 14:52:52 +0100 Subject: [PATCH 2/7] build the function and ready for PR --- Sprint-3/alarmclock/alarmclock.js | 36 ++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/Sprint-3/alarmclock/alarmclock.js b/Sprint-3/alarmclock/alarmclock.js index 6ca81cd3b..270e87b2d 100644 --- a/Sprint-3/alarmclock/alarmclock.js +++ b/Sprint-3/alarmclock/alarmclock.js @@ -1,5 +1,39 @@ -function setAlarm() {} +let countdown = null; +function setAlarm() { + const input = document.getElementById("alarmSet"); + let time = Number(input.value); + + const heading = document.getElementById("timeRemaining"); + + if (countdown) { + clearInterval(countdown); + } + + updateHeading(time, heading); + + countdown = setInterval(() => { + time--; + + if (time <= 0) { + updateHeading(0, heading); + clearInterval(countdown); + playAlarm(); + } else { + updateHeading(time, heading); + } + }, 1000); +} + +function updateHeading(time, heading) { + const minutes = Math.floor(time / 60); + const seconds = time % 60; + + const mm = String(minutes).padStart(2, "0"); + const ss = String(seconds).padStart(2, "0"); + + heading.innerText = `Time Remaining: ${mm}:${ss}`; +} // DO NOT EDIT BELOW HERE var audio = new Audio("alarmsound.mp3"); From 832f671cbfe43cd0db83e269523339ab6ff5a666 Mon Sep 17 00:00:00 2001 From: Jacknguyen4438 Date: Wed, 22 Apr 2026 00:34:06 +0100 Subject: [PATCH 3/7] Ming change for pull request --- Sprint-3/alarmclock/alarmclock.js | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/Sprint-3/alarmclock/alarmclock.js b/Sprint-3/alarmclock/alarmclock.js index 270e87b2d..2cef5d2c3 100644 --- a/Sprint-3/alarmclock/alarmclock.js +++ b/Sprint-3/alarmclock/alarmclock.js @@ -1,31 +1,47 @@ let countdown = null; +function resetAlarm() { + clearInterval(countdown); + countdown = null; + pauseAlarm(); + updateHeading(0); +} + function setAlarm() { const input = document.getElementById("alarmSet"); let time = Number(input.value); - const heading = document.getElementById("timeRemaining"); + if (isNaN(time) || time < 0) { + updateHeading(0); + return; + } - if (countdown) { - clearInterval(countdown); + resetAlarm(); + + if (time === 0) { + updateHeading(0); + playAlarm(); + return; } - updateHeading(time, heading); + updateHeading(time); countdown = setInterval(() => { time--; if (time <= 0) { - updateHeading(0, heading); + updateHeading(0); clearInterval(countdown); playAlarm(); } else { - updateHeading(time, heading); + updateHeading(time); } }, 1000); } -function updateHeading(time, heading) { +function updateHeading(time) { + const heading = document.getElementById("timeRemaining"); + const minutes = Math.floor(time / 60); const seconds = time % 60; From 005369b81b8d14ddb8d268404d3c805cc52be856 Mon Sep 17 00:00:00 2001 From: Jacknguyen4438 Date: Thu, 23 Apr 2026 00:53:59 +0100 Subject: [PATCH 4/7] Making minor change so that the function can work with decimal number. --- 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 2cef5d2c3..94b692648 100644 --- a/Sprint-3/alarmclock/alarmclock.js +++ b/Sprint-3/alarmclock/alarmclock.js @@ -11,7 +11,7 @@ function setAlarm() { const input = document.getElementById("alarmSet"); let time = Number(input.value); - if (isNaN(time) || time < 0) { + if (isNaN(time) || time < 0 || !Number.isInteger(time)) { updateHeading(0); return; } From 0f8a13602933a3882b7be6172b463cb05431bbae Mon Sep 17 00:00:00 2001 From: Jacknguyen4438 Date: Thu, 23 Apr 2026 12:21:15 +0100 Subject: [PATCH 5/7] Making small validation change that show on HTML --- Sprint-3/alarmclock/alarmclock.js | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/Sprint-3/alarmclock/alarmclock.js b/Sprint-3/alarmclock/alarmclock.js index 94b692648..889728fdc 100644 --- a/Sprint-3/alarmclock/alarmclock.js +++ b/Sprint-3/alarmclock/alarmclock.js @@ -7,25 +7,35 @@ function resetAlarm() { updateHeading(0); } +function showError(message) { + const heading = document.getElementById("timeRemaining"); + heading.innerText = message; +} + function setAlarm() { const input = document.getElementById("alarmSet"); let time = Number(input.value); + // Always reset first so old countdown stops + resetAlarm(); + + // Validate input (reject decimals, negatives, NaN) if (isNaN(time) || time < 0 || !Number.isInteger(time)) { - updateHeading(0); + showError("Please enter a whole number of seconds."); return; } - resetAlarm(); - + // If time is 0, trigger alarm immediately if (time === 0) { updateHeading(0); playAlarm(); return; } + // Show starting time updateHeading(time); + // Start countdown countdown = setInterval(() => { time--; From a04f01cd55ce3d932731cc78f0f1bbdddae3f8cf Mon Sep 17 00:00:00 2001 From: Jacknguyen4438 Date: Thu, 23 Apr 2026 12:22:25 +0100 Subject: [PATCH 6/7] formatting for the code for better for checking bugs --- Sprint-3/alarmclock/alarmclock.js | 5 ----- 1 file changed, 5 deletions(-) diff --git a/Sprint-3/alarmclock/alarmclock.js b/Sprint-3/alarmclock/alarmclock.js index 889728fdc..d3693e600 100644 --- a/Sprint-3/alarmclock/alarmclock.js +++ b/Sprint-3/alarmclock/alarmclock.js @@ -16,26 +16,21 @@ function setAlarm() { const input = document.getElementById("alarmSet"); let time = Number(input.value); - // Always reset first so old countdown stops resetAlarm(); - // Validate input (reject decimals, negatives, NaN) if (isNaN(time) || time < 0 || !Number.isInteger(time)) { showError("Please enter a whole number of seconds."); return; } - // If time is 0, trigger alarm immediately if (time === 0) { updateHeading(0); playAlarm(); return; } - // Show starting time updateHeading(time); - // Start countdown countdown = setInterval(() => { time--; From 0bae369bcea5547ad265c9b4de7016e2c2312a97 Mon Sep 17 00:00:00 2001 From: Jacknguyen4438 Date: Thu, 23 Apr 2026 12:52:24 +0100 Subject: [PATCH 7/7] Make some change on how to the error display without interfere with the main heading --- Sprint-3/alarmclock/alarmclock.js | 5 +++-- Sprint-3/alarmclock/index.html | 1 + 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/Sprint-3/alarmclock/alarmclock.js b/Sprint-3/alarmclock/alarmclock.js index d3693e600..f94f08c82 100644 --- a/Sprint-3/alarmclock/alarmclock.js +++ b/Sprint-3/alarmclock/alarmclock.js @@ -4,11 +4,10 @@ function resetAlarm() { clearInterval(countdown); countdown = null; pauseAlarm(); - updateHeading(0); } function showError(message) { - const heading = document.getElementById("timeRemaining"); + const heading = document.getElementById("errorMessage"); heading.innerText = message; } @@ -23,6 +22,8 @@ function setAlarm() { return; } + document.getElementById("errorMessage").innerText = ""; + if (time === 0) { updateHeading(0); playAlarm(); diff --git a/Sprint-3/alarmclock/index.html b/Sprint-3/alarmclock/index.html index ff2d3b453..d0f768562 100644 --- a/Sprint-3/alarmclock/index.html +++ b/Sprint-3/alarmclock/index.html @@ -9,6 +9,7 @@

Time Remaining: 00:00

+