Spaces:
Running
Running
File size: 5,215 Bytes
712623d | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 | // Main application functionality for LifeTracker Pro
class ActivityTracker {
constructor() {
this.activities = {
sleep: { hours: 0, minutes: 0 },
work: { hours: 0, minutes: 0 },
play: { hours: 0, minutes: 0 },
exercise: { hours: 0, minutes: 0 }
};
this.initializeEventListeners();
}
initializeEventListeners() {
// Add event listeners for activity buttons
document.querySelectorAll('[class*="bg-"]:not(#reset-workout)').forEach(button => {
button.addEventListener('click', (e) => {
const activity = e.target.closest('.bg-white').querySelector('h3').textContent.toLowerCase();
this.logActivity(activity);
});
});
}
logActivity(activity) {
// Simulate adding time (in a real app, this would open a modal or form)
const randomHours = Math.floor(Math.random() * 3);
const randomMinutes = Math.floor(Math.random() * 60);
this.activities[activity] = {
hours: this.activities[activity].hours + randomHours,
minutes: this.activities[activity].minutes + randomMinutes
};
// Normalize minutes to hours if over 60
if (this.activities[activity].minutes >= 60) {
this.activities[activity].hours += Math.floor(this.activities[activity].minutes / 60);
this.activities[activity].minutes = this.activities[activity].minutes % 60;
}
this.updateActivityDisplay(activity);
}
updateActivityDisplay(activity) {
const activityElement = document.querySelector(`.bg-white:has(h3:contains("${activity.charAt(0).toUpperCase() + activity.slice(1)}"))`);
const timeDisplay = activityElement.querySelector('.text-3xl');
const progressBar = activityElement.querySelector('.h-2:last-child');
const totalMinutes = (this.activities[activity].hours * 60) + this.activities[activity].minutes;
const percentage = Math.min((totalMinutes / (8 * 60)) * 100, 100); // Cap at 8 hours equivalent
timeDisplay.textContent = `${this.activities[activity].hours}h ${this.activities[activity].minutes}m`;
progressBar.style.width = `${percentage}%`;
}
}
class WorkoutTracker {
constructor() {
this.workoutItems = [
{ id: 1, name: "150 stretching exercise", completed: false },
{ id: 2, name: "150 push ups", completed: false },
{ id: 3, name: "150 sit ups", completed: false },
{ id: 4, name: "150 squats", completed: false },
{ id: 5, name: "150 curls", completed: false },
{ id: 6, name: "150 inclined push ups", completed: false },
{ id: 7, name: "150 declined push ups", completed: false },
{ id: 8, name: "200 gripping (each hand)", completed: false },
{ id: 9, name: "Do at least minimum of 30 to 40 min mewing", completed: false },
{ id: 10, name: "5 kilometres running", completed: false }
];
this.initializeWorkoutListeners();
}
initializeWorkoutListeners() {
document.getElementById('reset-workout').addEventListener('click', () => {
this.resetWorkout();
});
}
updateProgress() {
const completed = this.workoutItems.filter(item => item.completed).length;
const total = this.workoutItems.length;
const percentage = Math.round((completed / total) * 100);
document.getElementById('completion-percentage').textContent = `${percentage}%`;
}
resetWorkout() {
this.workoutItems.forEach(item => {
item.completed = false;
});
this.renderChecklist();
this.updateProgress();
}
renderChecklist() {
const checklist = document.getElementById('workout-checklist');
checklist.innerHTML = '';
this.workoutItems.forEach(item => {
const div = document.createElement('div');
div.className = 'flex items-center p-3 bg-gray-50 rounded-lg hover:bg-gray-100 transition-colors';
const checkbox = document.createElement('div');
checkbox.className = `workout-checkbox mr-3 ${item.completed ? 'checked' : ''}`;
checkbox.addEventListener('click', () => {
item.completed = !item.completed;
checkbox.classList.toggle('checked');
this.updateProgress();
});
const label = document.createElement('span');
label.className = 'text-gray-800';
label.textContent = item.name;
div.appendChild(checkbox);
div.appendChild(label);
checklist.appendChild(div);
});
}
}
// Initialize the application
function initializeApp() {
window.activityTracker = new ActivityTracker();
window.workoutTracker = new WorkoutTracker();
}
function initializeWorkoutChecklist() {
window.workoutTracker = new WorkoutTracker();
window.workoutTracker.renderChecklist();
}
// Initialize when DOM is loaded
document.addEventListener('DOMContentLoaded', initializeApp); |