Files
TimeTrack/static/js/script.js
2025-06-27 15:14:57 +02:00

136 lines
4.4 KiB
JavaScript

document.addEventListener('DOMContentLoaded', function() {
console.log('Flask app loaded successfully!');
// Timer functionality
const timer = document.getElementById('timer');
const arriveBtn = document.getElementById('arrive-btn');
const leaveBtn = document.getElementById('leave-btn');
const pauseBtn = document.getElementById('pause-btn');
let isPaused = false;
let timerInterval;
// Start timer if we're on a page with an active timer
if (timer) {
const startTime = parseInt(timer.dataset.start);
const totalBreakDuration = parseInt(timer.dataset.breaks || 0);
isPaused = timer.dataset.paused === 'true';
// Update the pause button text based on current state
if (pauseBtn) {
updatePauseButtonText();
}
// Update timer every second
function updateTimer() {
if (isPaused) return;
const now = Math.floor(Date.now() / 1000);
const diff = now - startTime - totalBreakDuration;
const hours = Math.floor(diff / 3600);
const minutes = Math.floor((diff % 3600) / 60);
const seconds = diff % 60;
timer.textContent = `${String(hours).padStart(2, '0')}:${String(minutes).padStart(2, '0')}:${String(seconds).padStart(2, '0')}`;
}
// Initial update
updateTimer();
// Set interval for updates
timerInterval = setInterval(updateTimer, 1000);
}
function updatePauseButtonText() {
if (pauseBtn) {
if (isPaused) {
pauseBtn.textContent = 'Resume Work';
pauseBtn.classList.add('resume-btn');
pauseBtn.classList.remove('pause-btn');
} else {
pauseBtn.textContent = 'Pause';
pauseBtn.classList.add('pause-btn');
pauseBtn.classList.remove('resume-btn');
}
}
}
// Handle arrive button click
if (arriveBtn) {
arriveBtn.addEventListener('click', function() {
fetch('/api/arrive', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
}
})
.then(response => response.json())
.then(data => {
// Reload the page to show the active timer
window.location.reload();
})
.catch(error => {
console.error('Error:', error);
alert('Failed to record arrival time. Please try again.');
});
});
}
// Handle pause/resume button click
if (pauseBtn) {
pauseBtn.addEventListener('click', function() {
const entryId = pauseBtn.dataset.id;
fetch(`/api/toggle-pause/${entryId}`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
}
})
.then(response => response.json())
.then(data => {
isPaused = data.is_paused;
updatePauseButtonText();
// Show a notification
const notification = document.createElement('div');
notification.className = 'notification';
notification.textContent = data.message;
document.body.appendChild(notification);
// Remove notification after 3 seconds
setTimeout(() => {
notification.remove();
}, 3000);
})
.catch(error => {
console.error('Error:', error);
alert('Failed to pause/resume. Please try again.');
});
});
}
// Handle leave button click
if (leaveBtn) {
leaveBtn.addEventListener('click', function() {
const entryId = leaveBtn.dataset.id;
fetch(`/api/leave/${entryId}`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
}
})
.then(response => response.json())
.then(data => {
// Reload the page to update the UI
window.location.reload();
})
.catch(error => {
console.error('Error:', error);
alert('Failed to record departure time. Please try again.');
});
});
}
});