Spaces:
Running
Running
I can't change a task status
Browse files
script.js
CHANGED
|
@@ -53,15 +53,25 @@ class UIController {
|
|
| 53 |
|
| 54 |
this.setupEventListeners();
|
| 55 |
}
|
| 56 |
-
|
| 57 |
setupEventListeners() {
|
| 58 |
this.addTaskBtn.addEventListener('click', () => this.handleAddTask());
|
| 59 |
this.taskInput.addEventListener('keypress', (e) => {
|
| 60 |
if (e.key === 'Enter') this.handleAddTask();
|
| 61 |
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 62 |
}
|
| 63 |
-
|
| 64 |
-
handleAddTask() {
|
| 65 |
const taskText = this.taskInput.value.trim();
|
| 66 |
if (taskText) {
|
| 67 |
const newTask = this.taskManager.addTask(taskText);
|
|
@@ -90,20 +100,11 @@ class UIController {
|
|
| 90 |
|
| 91 |
this.taskList.prepend(taskElement);
|
| 92 |
feather.replace();
|
| 93 |
-
|
| 94 |
-
// Add event listeners to the new buttons
|
| 95 |
-
taskElement.querySelector('.toggle-btn').addEventListener('click', (e) => {
|
| 96 |
-
this.toggleTask(e.currentTarget.dataset.id);
|
| 97 |
-
});
|
| 98 |
-
|
| 99 |
-
taskElement.querySelector('.delete-btn').addEventListener('click', (e) => {
|
| 100 |
-
this.deleteTask(e.currentTarget.dataset.id);
|
| 101 |
-
});
|
| 102 |
-
}
|
| 103 |
-
|
| 104 |
toggleTask(id) {
|
| 105 |
this.taskManager.toggleTask(id);
|
| 106 |
-
|
|
|
|
| 107 |
if (taskElement) {
|
| 108 |
const icon = taskElement.querySelector('.toggle-btn i');
|
| 109 |
const text = taskElement.querySelector('span');
|
|
@@ -122,10 +123,10 @@ class UIController {
|
|
| 122 |
feather.replace();
|
| 123 |
}
|
| 124 |
}
|
| 125 |
-
|
| 126 |
deleteTask(id) {
|
| 127 |
this.taskManager.deleteTask(id);
|
| 128 |
-
|
|
|
|
| 129 |
if (taskElement) {
|
| 130 |
taskElement.classList.add('opacity-0', 'translate-x-10');
|
| 131 |
setTimeout(() => {
|
|
@@ -145,4 +146,15 @@ class UIController {
|
|
| 145 |
function loadTasks() {
|
| 146 |
const ui = new UIController();
|
| 147 |
ui.loadTasks();
|
| 148 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 53 |
|
| 54 |
this.setupEventListeners();
|
| 55 |
}
|
|
|
|
| 56 |
setupEventListeners() {
|
| 57 |
this.addTaskBtn.addEventListener('click', () => this.handleAddTask());
|
| 58 |
this.taskInput.addEventListener('keypress', (e) => {
|
| 59 |
if (e.key === 'Enter') this.handleAddTask();
|
| 60 |
});
|
| 61 |
+
|
| 62 |
+
// Use event delegation for dynamic elements
|
| 63 |
+
this.taskList.addEventListener('click', (e) => {
|
| 64 |
+
const toggleBtn = e.target.closest('.toggle-btn');
|
| 65 |
+
const deleteBtn = e.target.closest('.delete-btn');
|
| 66 |
+
|
| 67 |
+
if (toggleBtn) {
|
| 68 |
+
this.toggleTask(toggleBtn.dataset.id);
|
| 69 |
+
} else if (deleteBtn) {
|
| 70 |
+
this.deleteTask(deleteBtn.dataset.id);
|
| 71 |
+
}
|
| 72 |
+
});
|
| 73 |
}
|
| 74 |
+
handleAddTask() {
|
|
|
|
| 75 |
const taskText = this.taskInput.value.trim();
|
| 76 |
if (taskText) {
|
| 77 |
const newTask = this.taskManager.addTask(taskText);
|
|
|
|
| 100 |
|
| 101 |
this.taskList.prepend(taskElement);
|
| 102 |
feather.replace();
|
| 103 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 104 |
toggleTask(id) {
|
| 105 |
this.taskManager.toggleTask(id);
|
| 106 |
+
document.dispatchEvent(new CustomEvent('taskChanged'));
|
| 107 |
+
const taskElement = document.querySelector(`[data-id="${id}"]`);
|
| 108 |
if (taskElement) {
|
| 109 |
const icon = taskElement.querySelector('.toggle-btn i');
|
| 110 |
const text = taskElement.querySelector('span');
|
|
|
|
| 123 |
feather.replace();
|
| 124 |
}
|
| 125 |
}
|
|
|
|
| 126 |
deleteTask(id) {
|
| 127 |
this.taskManager.deleteTask(id);
|
| 128 |
+
document.dispatchEvent(new CustomEvent('taskChanged'));
|
| 129 |
+
const taskElement = document.querySelector(`[data-id="${id}"]`);
|
| 130 |
if (taskElement) {
|
| 131 |
taskElement.classList.add('opacity-0', 'translate-x-10');
|
| 132 |
setTimeout(() => {
|
|
|
|
| 146 |
function loadTasks() {
|
| 147 |
const ui = new UIController();
|
| 148 |
ui.loadTasks();
|
| 149 |
+
|
| 150 |
+
// Update task counter in header
|
| 151 |
+
const taskCounter = document.querySelector('custom-header').shadowRoot.querySelector('#taskCounter');
|
| 152 |
+
if (taskCounter) {
|
| 153 |
+
taskCounter.textContent = `${ui.taskManager.getTasks().length} tasks`;
|
| 154 |
+
}
|
| 155 |
+
|
| 156 |
+
// Listen for task changes to update counter
|
| 157 |
+
document.addEventListener('taskChanged', () => {
|
| 158 |
+
taskCounter.textContent = `${ui.taskManager.getTasks().length} tasks`;
|
| 159 |
+
});
|
| 160 |
+
}
|