From f67ae434345062aed8b9ca4d1644991f0d3f39f5 Mon Sep 17 00:00:00 2001
From: Jak R-S <176810031+jakr-s@users.noreply.github.com>
Date: Mon, 8 Dec 2025 14:10:39 +0000
Subject: [PATCH 1/3] feat: implement setAlarm function and update HTML
---
Sprint-3/alarmclock/alarmclock.js | 27 ++++++++++++++++++++++++++-
Sprint-3/alarmclock/index.html | 7 ++++---
2 files changed, 30 insertions(+), 4 deletions(-)
diff --git a/Sprint-3/alarmclock/alarmclock.js b/Sprint-3/alarmclock/alarmclock.js
index 6ca81cd3b..9da4f99cd 100644
--- a/Sprint-3/alarmclock/alarmclock.js
+++ b/Sprint-3/alarmclock/alarmclock.js
@@ -1,4 +1,29 @@
-function setAlarm() {}
+function setAlarm() {
+ const input = document.getElementById("alarmSet");
+ const heading = document.getElementById("timeRemaining");
+ let seconds = Number(input.value);
+
+ function updateDisplay(remainingSeconds) {
+ const minutes = Math.floor(remainingSeconds / 60);
+ const secs = remainingSeconds % 60;
+ const formattedTime = `${String(minutes).padStart(2, "0")}:${String(secs).padStart(2, "0")}`;
+ heading.textContent = `Time Remaining: ${formattedTime}`;
+ }
+
+ // Set initial display
+ updateDisplay(seconds);
+
+ // Start countdown
+ const timerId = setInterval(() => {
+ seconds--;
+ updateDisplay(seconds);
+
+ if (seconds <= 0) {
+ clearInterval(timerId);
+ playAlarm();
+ }
+ }, 1000);
+}
// DO NOT EDIT BELOW HERE
diff --git a/Sprint-3/alarmclock/index.html b/Sprint-3/alarmclock/index.html
index 48e2e80d9..8b3ff248e 100644
--- a/Sprint-3/alarmclock/index.html
+++ b/Sprint-3/alarmclock/index.html
@@ -1,16 +1,17 @@
-
+
- Title here
+
+ Alarm clock app
Time Remaining: 00:00
-
+
From 435d330518f9ed2e52a42f0808ddf2716986e1a3 Mon Sep 17 00:00:00 2001
From: Jak R-S <176810031+jakr-s@users.noreply.github.com>
Date: Mon, 8 Dec 2025 14:19:48 +0000
Subject: [PATCH 2/3] feat: change background colour to red on alarm trigger
and reset when new alarm set
---
Sprint-3/alarmclock/alarmclock.js | 2 ++
1 file changed, 2 insertions(+)
diff --git a/Sprint-3/alarmclock/alarmclock.js b/Sprint-3/alarmclock/alarmclock.js
index 9da4f99cd..548284f71 100644
--- a/Sprint-3/alarmclock/alarmclock.js
+++ b/Sprint-3/alarmclock/alarmclock.js
@@ -8,6 +8,7 @@ function setAlarm() {
const secs = remainingSeconds % 60;
const formattedTime = `${String(minutes).padStart(2, "0")}:${String(secs).padStart(2, "0")}`;
heading.textContent = `Time Remaining: ${formattedTime}`;
+ document.body.style.backgroundColor = "";
}
// Set initial display
@@ -21,6 +22,7 @@ function setAlarm() {
if (seconds <= 0) {
clearInterval(timerId);
playAlarm();
+ document.body.style.backgroundColor = "red";
}
}, 1000);
}
From 944fea3c7f3285acbbed62c576ef8d8cc4ee8c22 Mon Sep 17 00:00:00 2001
From: Jak R-S <176810031+jakr-s@users.noreply.github.com>
Date: Thu, 11 Dec 2025 13:51:02 +0000
Subject: [PATCH 3/3] feat: improve alarm functionality with input validation
and timer reset
---
Sprint-3/alarmclock/alarmclock.js | 23 ++++++++++++++++++++---
1 file changed, 20 insertions(+), 3 deletions(-)
diff --git a/Sprint-3/alarmclock/alarmclock.js b/Sprint-3/alarmclock/alarmclock.js
index 548284f71..1adde3ff6 100644
--- a/Sprint-3/alarmclock/alarmclock.js
+++ b/Sprint-3/alarmclock/alarmclock.js
@@ -1,26 +1,43 @@
+let currentTimerId = null;
+
function setAlarm() {
const input = document.getElementById("alarmSet");
const heading = document.getElementById("timeRemaining");
let seconds = Number(input.value);
+ // Sanitise input
+ if (!Number.isInteger(seconds) || seconds <= 0) {
+ alert("Please enter a positive whole number");
+ return;
+ }
+
+ // Reset before starting new countdown
+ if (currentTimerId !== null) {
+ clearInterval(currentTimerId);
+ }
+
+ pauseAlarm();
+
+ document.body.style.backgroundColor = "";
+
function updateDisplay(remainingSeconds) {
const minutes = Math.floor(remainingSeconds / 60);
const secs = remainingSeconds % 60;
const formattedTime = `${String(minutes).padStart(2, "0")}:${String(secs).padStart(2, "0")}`;
heading.textContent = `Time Remaining: ${formattedTime}`;
- document.body.style.backgroundColor = "";
}
// Set initial display
updateDisplay(seconds);
// Start countdown
- const timerId = setInterval(() => {
+ currentTimerId = setInterval(() => {
seconds--;
updateDisplay(seconds);
if (seconds <= 0) {
- clearInterval(timerId);
+ clearInterval(currentTimerId);
+ currentTimerId = null;
playAlarm();
document.body.style.backgroundColor = "red";
}