-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathscript.js
More file actions
107 lines (91 loc) · 3.38 KB
/
script.js
File metadata and controls
107 lines (91 loc) · 3.38 KB
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
document.addEventListener('DOMContentLoaded', () => {
const todoInput = document.getElementById('todo-input');
const addBtn = document.getElementById('add-btn');
const todoList = document.getElementById('todo-list');
const pendingCount = document.getElementById('pending-count');
const completeCount = document.getElementById('complete-count');
const clearCompletedBtn = document.getElementById('clear-completed');
const filterBtns = document.querySelectorAll('.filter-btn');
let todos = JSON.parse(localStorage.getItem('aurora_todos')) || [];
let currentFilter = 'all';
const saveTodos = () => {
localStorage.setItem('aurora_todos', JSON.stringify(todos));
};
const updateStats = () => {
const pending = todos.filter(t => !t.completed).length;
const completed = todos.filter(t => t.completed).length;
pendingCount.textContent = pending;
completeCount.textContent = completed;
};
const renderTodos = () => {
todoList.innerHTML = '';
const filteredTodos = todos.filter(todo => {
if (currentFilter === 'pending') return !todo.completed;
if (currentFilter === 'completed') return todo.completed;
return true;
});
filteredTodos.forEach(todo => {
const li = document.createElement('li');
li.className = `todo-item ${todo.completed ? 'completed' : ''}`;
li.innerHTML = `
<div class="custom-checkbox ${todo.completed ? 'checked' : ''}"></div>
<span>${todo.text}</span>
<button class="delete-btn">×</button>
`;
// Toggle completion
const checkbox = li.querySelector('.custom-checkbox');
checkbox.addEventListener('click', () => {
todo.completed = !todo.completed;
saveTodos();
renderTodos();
updateStats();
});
// Delete task
const deleteBtn = li.querySelector('.delete-btn');
deleteBtn.addEventListener('click', (e) => {
e.stopPropagation();
todos = todos.filter(t => t.id !== todo.id);
saveTodos();
renderTodos();
updateStats();
});
todoList.appendChild(li);
});
updateStats();
};
const addTodo = () => {
const text = todoInput.value.trim();
if (text) {
const newTodo = {
id: Date.now(),
text: text,
completed: false
};
todos.push(newTodo);
saveTodos();
todoInput.value = '';
renderTodos();
}
};
addBtn.addEventListener('click', addTodo);
todoInput.addEventListener('keypress', (e) => {
if (e.key === 'Enter') {
addTodo();
}
});
clearCompletedBtn.addEventListener('click', () => {
todos = todos.filter(todo => !todo.completed);
saveTodos();
renderTodos();
});
filterBtns.forEach(btn => {
btn.addEventListener('click', () => {
filterBtns.forEach(b => b.classList.remove('active'));
btn.classList.add('active');
currentFilter = btn.dataset.filter;
renderTodos();
});
});
// Initial render
renderTodos();
});