Daily Self-Care

Loading...

πŸ”₯ 0 day streak

Notes

0% Complete
Checking storage capabilities...
'); let html = ''; tasks.forEach((task, index) => { html += `
${task.emoji}
`; }); container.innerHTML = html; } // Update task name function updateTaskName(index, name) { tasks[index].name = name; } // Open emoji picker function openEmojiPicker(index) { selectedTaskIndex = index; emojiPickerVisible = true; const picker = document.getElementById('emoji-picker'); picker.style.display = 'grid'; let html = ''; commonEmojis.forEach(emoji => { html += ` ${emoji} `; }); picker.innerHTML = html; } // Select emoji function selectEmoji(emoji) { if (selectedTaskIndex !== null) { tasks[selectedTaskIndex].emoji = emoji; // Assign a gold version based on the emoji's index or a random gold emoji const goldIndex = commonEmojis.indexOf(emoji) % goldEmojis.length; tasks[selectedTaskIndex].goldEmoji = goldEmojis[goldIndex >= 0 ? goldIndex : Math.floor(Math.random() * goldEmojis.length)]; renderSettingsTasks(); emojiPickerVisible = false; document.getElementById('emoji-picker').style.display = 'none'; } } // Add new task function addTask() { const newId = Math.max(...tasks.map(task => task.id)) + 1; tasks.push({ id: newId, emoji: "✨", name: "New Task", completed: false, goldEmoji: "πŸ†" }); renderSettingsTasks(); } // Remove task function removeTask(index) { if (tasks.length > 1) { tasks.splice(index, 1); renderSettingsTasks(); } } // Move task up function moveTaskUp(index) { if (index > 0) { const temp = tasks[index]; tasks[index] = tasks[index - 1]; tasks[index - 1] = temp; renderSettingsTasks(); } } // Move task down function moveTaskDown(index) { if (index < tasks.length - 1) { const temp = tasks[index]; tasks[index] = tasks[index + 1]; tasks[index + 1] = temp; renderSettingsTasks(); } } // Save settings function saveSettings() { // Reset completed status when tasks are customized tasks = tasks.map(task => ({ ...task, completed: false })); saveData('tasks', tasks); toggleSettings(); renderTasks(); } // Export data to JSON file function exportData() { const data = { tasks: tasks, notes: notes, streak: streak, exportDate: new Date().toISOString() }; const dataStr = JSON.stringify(data, null, 2); const dataUri = 'data:application/json;charset=utf-8,'+ encodeURIComponent(dataStr); const exportFileName = `self-care-tracker-${new Date().toISOString().split('T')[0]}.json`; const linkElement = document.createElement('a'); linkElement.setAttribute('href', dataUri); linkElement.setAttribute('download', exportFileName); linkElement.click(); } // Import data from JSON file function importData(files) { if (!files || !files.length) return; const file = files[0]; const reader = new FileReader(); reader.onload = function(event) { try { const data = JSON.parse(event.target.result); if (data.tasks) { tasks = data.tasks; } if (data.notes) { notes = data.notes; document.getElementById('notes-area').value = notes; } if (data.streak) { streak = data.streak; document.getElementById('streak-counter').textContent = `${streak.current} day streak`; } // Save imported data saveData('tasks', tasks); saveData('notes', notes); saveData('streak', streak); renderTasks(); alert("Data imported successfully!"); } catch (e) { console.error("Error importing data:", e); alert("Error importing data. Please make sure the file is valid."); } }; reader.readAsText(file); } // Initialize the app function init() { formatDate(); checkStorage(); renderTasks(); } // Run initialization when the page loads window.addEventListener('DOMContentLoaded', function() { init(); // Make sure tasks render immediately renderTasks(); });