liveTrain / static /js /script.js
pjxcharya's picture
Upload 67 files
d3a82c6 verified
document.addEventListener('DOMContentLoaded', function () {
// Elements
const exerciseOptions = document.querySelectorAll('.exercise-option');
const startBtn = document.getElementById('start-btn');
const stopBtn = document.getElementById('stop-btn');
const setsInput = document.getElementById('sets');
const repsInput = document.getElementById('reps');
const currentExercise = document.getElementById('current-exercise');
const currentSet = document.getElementById('current-set');
const currentReps = document.getElementById('current-reps');
// Variables
let selectedExercise = null;
let workoutRunning = false;
let statusCheckInterval = null;
// Select exercise
exerciseOptions.forEach((option) => {
option.addEventListener('click', function () {
// Remove selected class from all options
exerciseOptions.forEach((opt) => opt.classList.remove('selected'));
// Add selected class to clicked option
this.classList.add('selected');
selectedExercise = this.getAttribute('data-exercise');
});
});
// Start workout
startBtn.addEventListener('click', function () {
if (!selectedExercise) {
alert('Please select an exercise first!');
return;
}
const sets = parseInt(setsInput.value);
const reps = parseInt(repsInput.value);
if (isNaN(sets) || sets < 1 || isNaN(reps) || reps < 1) {
alert('Please enter valid numbers for sets and repetitions.');
return;
}
// Start the exercise via API
fetch('/start_exercise', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
exercise_type: selectedExercise,
sets: sets,
reps: reps,
}),
})
.then((response) => response.json())
.then((data) => {
if (data.success) {
workoutRunning = true;
startBtn.disabled = true;
stopBtn.disabled = false;
// Update UI
currentExercise.textContent = selectedExercise.replace('_', ' ').toUpperCase();
currentSet.textContent = `1 / ${sets}`;
currentReps.textContent = `0 / ${reps}`;
// Start status polling
statusCheckInterval = setInterval(checkStatus, 1000);
} else {
alert('Failed to start exercise: ' + (data.error || 'Unknown error'));
}
})
.catch((error) => {
console.error('Error:', error);
alert('An error occurred while starting the exercise.');
});
});
// Stop workout
stopBtn.addEventListener('click', function () {
fetch('/stop_exercise', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
})
.then((response) => response.json())
.then((data) => {
if (data.success) {
resetWorkoutUI();
}
})
.catch((error) => {
console.error('Error:', error);
});
});
// Function to check status
function checkStatus() {
fetch('/get_status')
.then((response) => response.json())
.then((data) => {
if (!data.exercise_running && workoutRunning) {
// Workout has ended
resetWorkoutUI();
return;
}
// Update status display
currentSet.textContent = `${data.current_set} / ${data.total_sets}`;
currentReps.textContent = `${data.current_reps} / ${data.rep_goal}`;
})
.catch((error) => {
console.error('Error checking status:', error);
});
}
// Reset UI after workout ends
function resetWorkoutUI() {
workoutRunning = false;
startBtn.disabled = false;
stopBtn.disabled = true;
if (statusCheckInterval) {
clearInterval(statusCheckInterval);
statusCheckInterval = null;
}
currentExercise.textContent = 'None';
currentSet.textContent = '0 / 0';
currentReps.textContent = '0 / 0';
}
});