From 35a0785bf3cca04eceeee639f8b1fb79af31bfd5 Mon Sep 17 00:00:00 2001 From: Julian Appel Date: Fri, 17 May 2024 21:17:52 +0200 Subject: [PATCH] Added comments, incDec function --- scoreboard/controllers/timer.js | 19 ++++++++++++++++++- scoreboard/public/javascripts/admin.js | 16 +++++++++++++++- scoreboard/routes/admin.js | 9 ++++++--- 3 files changed, 39 insertions(+), 5 deletions(-) diff --git a/scoreboard/controllers/timer.js b/scoreboard/controllers/timer.js index 0ce830b..f029377 100644 --- a/scoreboard/controllers/timer.js +++ b/scoreboard/controllers/timer.js @@ -13,8 +13,10 @@ function pause() {}; function reset() {}; function end() {}; function print() {}; +function incDec() {}; function getValues() {}; +// Start timer not paused and not already finished function start() { if(isPaused == true && durationLeft.asSeconds() != 0) { // Only allow start if timer ist currently paused and durationLeft is not 0 seconds console.log("Timer gestartet") @@ -32,6 +34,7 @@ function start() { return false } +// If possible pause timer, if not return false function pause() { if(!isPaused) { console.log("Timer pausiert"); @@ -42,6 +45,7 @@ function pause() { return false } +// Reset timer to passed value, and send durationLeft to all clients function reset(newDuration) { console.log("Timer Zurückgesetzt"); duration = moment.duration(newDuration, 'seconds').clone(); // Set initial duration to received duration in seconds @@ -49,18 +53,31 @@ function reset(newDuration) { io.sockets.emit('timerDurationLeft', print()) // Emit durationLeft to all connected sockets } +// Stop timer and emit timerEndet to all clients function end() { isPaused = true // Set status of the timer clearInterval(timerInterval); // End the execution io.sockets.emit('timerEnded', print()) // Emit end to all connected sockets } +// Return formatted timestamp in the format of 00:00 function print() { var minutes = (durationLeft.minutes() < 10) ? "0" + durationLeft.minutes() : durationLeft.minutes(); // Create leading zeros for numbers <10 var seconds = (durationLeft.seconds() < 10) ? "0" + durationLeft.seconds() : durationLeft.seconds(); // Create leading zeros for numbers <10 return minutes + ":" + seconds } +// Increase or decrease the timer depending on the passed value in seconds +function incDec(value) { + if(Math.abs(value) >= durationLeft.asSeconds()) { // If abs from passed value is greater than seconds left on timer, end timer + end(); + } else { + durationLeft.add(value, 'second'); + io.sockets.emit('timerDurationLeft', print()) + } +} + +// Return all important timer values function getValues() { return { isPaused: isPaused, @@ -71,5 +88,5 @@ function getValues() { } module.exports = { - duration, durationLeft, isPaused, start, pause, reset, end, print, getValues + duration, durationLeft, isPaused, start, pause, reset, end, print, incDec, getValues } \ No newline at end of file diff --git a/scoreboard/public/javascripts/admin.js b/scoreboard/public/javascripts/admin.js index 0e01a27..94882a6 100644 --- a/scoreboard/public/javascripts/admin.js +++ b/scoreboard/public/javascripts/admin.js @@ -50,6 +50,7 @@ async function timerStart() { } } +// Request to pause the timer async function timerPause() { const response = await fetch("/admin/timerPause"); // Call API Endpoint /admin/timerStart if(response.status == 200) { @@ -63,6 +64,7 @@ async function timerPause() { } } +// Request to reset the timer with the specified time async function timerReset() { let newDuration = document.getElementById("timerSelectDuration").value; const response = await fetch("/admin/timerReset", { // Call API Endpoint /admin/timerStart with selected new duration in seconds @@ -72,7 +74,19 @@ async function timerReset() { }); const data = await response.json(); // Wait for asyncronous transfer to complete and parse json (which got received by backend) console.log(data); // Print received data - updateFrontend(data); // Update admin frontend with received values + updateTimerFrontend(data); // Update admin frontend with received values +} + +// Request to increase or decrease the timer depending on passed value in seconds +async function timerIncDec(value) { + const response = await fetch("/admin/timerIncDec", { // Call API Endpoint /admin/timerIncDec with value in seconds to increase or decrease the timer + method: 'POST', + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({value: value}) + }); + const data = await response.json(); // Wait for asyncronous transfer to complete and parse json (which got received by backend) + console.log(data); // Print received data + updateTimerFrontend(data); // Update admin frontend with received values } // Scoreboardfunctions diff --git a/scoreboard/routes/admin.js b/scoreboard/routes/admin.js index b130da8..99dcb74 100644 --- a/scoreboard/routes/admin.js +++ b/scoreboard/routes/admin.js @@ -31,7 +31,12 @@ router.post('/timerReset', function(req, res, next) { res.json(timer.getValues()); // Respond with all important values to update the frontend }); -// Express router endpoint to switch the score after halftime +router.post('/timerIncDec', function(req, res, next) { + timer.incDec(req.body.value); + res.json(timer.getValues()); +}); + +// Express router endpoint to get important timer values router.get('/timerGetValues', function(req, res, next) { res.json(timer.getValues()); // Respond with important values for frontend }); @@ -46,6 +51,4 @@ router.get('/', function(req, res, next) { res.render('admin'); }); - - module.exports = router;