<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Pomodoro Timer</title> <style> button { padding: 10px 20px; margin: 5px; font-size: 16px; } #timer { font-size: 24px; margin-top: 20px; } input { width: 75px; } .settings { border: 2px solid black; background: #e7e7e7; padding: 10px; display: inline-block; } </style> </head> <body> <h1>Pomodoro Timer</h1> <!-- Input fields for custom Pomodoro config and control password --> <div class="settings"> <p> <label for="password">Control Password:</label> <input type="text" id="password" placeholder="Password" /> </p> <p> <label for="focusDuration">Focus Duration (seconds):</label> <input type="number" id="foucsDuration" placeholder="Focus time in seconds" value="900" /> <br /> <label for="shortBreakDuration">Short Break Duration (seconds):</label> <input type="number" id="shortBreakDuration" placeholder="Short break in seconds" value="300" /> <br /> <label for="longBreakDuration">Long Break Duration (seconds):</label> <input type="number" id="longBreakDuration" placeholder="Long break in seconds" value="600" /> <br /> <label for="sessions">Number of Sessions:</label> <input type="number" id="sessions" placeholder="Number of sessions" value="4" /> <br /> <button id="saveButton">Save Settings</button> </p> </div> <div id="timer">Connting to server...</div> <!-- Buttons to start, pause/resume, and reset the timer --> <button id="startButton">Start</button> <button id="pauseResumeButton" style="display: none;">Pause</button> <button id="resetButton" style="display: none;">Reset</button> <script> var ws = new WebSocket("ws://localhost:8080"); var isPaused = false; // Track if the timer is paused ws.onopen = function () { document.getElementById("timer").innerText = "Connected to server."; }; // Handle incoming messages and update the timer display ws.onmessage = function (event) { var data = JSON.parse(event.data); var mode = data.mode; var session = data.session; var totalSession = data.settings.sessions; var timeLeft = data.time_left; document.getElementById("timer").innerText = mode + " Session " + session + "/" + totalSession + ": " + formatTime(timeLeft); }; ws.onclose = function () { document.getElementById("timer").innerText = "Connection closed."; }; // Format time in MM:SS function formatTime(seconds) { var minutes = Math.floor(seconds / 60); var remainingSeconds = seconds % 60; return minutes.toString().padStart(2, '0') + ":" + remainingSeconds.toString().padStart(2, '0'); } // saveButton Click Event document.getElementById("saveButton").addEventListener("click", function () { // Get the values from the input fields var password = document.getElementById("password").value; var focus = parseInt(document.getElementById("focusDuration").value); var shortBreak = parseInt(document.getElementById("shortBreakDuration").value); var longBreak = parseInt(document.getElementById("longBreakDuration").value); var sessions = parseInt(document.getElementById("sessions").value); // Send the start command with the custom config and password ws.send(JSON.stringify({ command: "updateSettings", password: password, settings: { focus: focus, shortBreak: shortBreak, longBreak: longBreak, sessions: sessions } })); }); // Start Button Click Event document.getElementById("startButton").addEventListener("click", function () { var password = document.getElementById("password").value; // Send the start command with the custom config and password ws.send(JSON.stringify({command: "start", password: password})); // Hide start button and show pause/resume and reset buttons document.getElementById("startButton").style.display = "none"; document.getElementById("pauseResumeButton").style.display = "inline-block"; document.getElementById("resetButton").style.display = "inline-block"; // Set the pause/resume button to show "Pause" initially isPaused = false; document.getElementById("pauseResumeButton").innerText = "Pause"; }); // Pause/Resume Button Click Event document.getElementById("pauseResumeButton").addEventListener("click", function () { var password = document.getElementById("password").value; if (isPaused) { // If paused, send resume command and update button text ws.send(JSON.stringify({command: "resume", password: password})); document.getElementById("pauseResumeButton").innerText = "Pause"; isPaused = false; } else { // If running, send pause command and update button text ws.send(JSON.stringify({command: "pause", password: password})); document.getElementById("pauseResumeButton").innerText = "Resume"; isPaused = true; } }); // Reset Button Click Event document.getElementById("resetButton").addEventListener("click", function () { var password = document.getElementById("password").value; ws.send(JSON.stringify({ command: "stop", password: password })); // Reset buttons after stopping document.getElementById("startButton").style.display = "inline-block"; document.getElementById("pauseResumeButton").style.display = "none"; document.getElementById("resetButton").style.display = "none"; }); </script> </body> </html>