-
Notifications
You must be signed in to change notification settings - Fork 0
/
app.js
156 lines (135 loc) · 4.24 KB
/
app.js
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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
// Selector
const todoInput = document.querySelector('.todo-input');
const todoButton = document.querySelector('.todo-button');
const todoList = document.querySelector('.todo-list');
const filterOption = document.querySelector('.filter-todo');
// Event Listeners
document.addEventListener('DOMContentLoaded', getTodos);
todoButton.addEventListener('click', addTodo);
todoList.addEventListener('click', deleteCheck);
filterOption.addEventListener('change', filterTodo); // Changed from 'click' to 'change'
// Functions
function addTodo(event) {
event.preventDefault();
// Create a div in HTML
const todoDiv = document.createElement('div');
todoDiv.classList.add('todo');
// Now adding LI
const newToDo = document.createElement('li');
newToDo.classList.add('todo-item');
newToDo.innerText = todoInput.value;
todoDiv.appendChild(newToDo);
//add todo to local storage
saveLocalTodos(todoInput.value);
// Check Mark button
const completedButton = document.createElement('button');
completedButton.innerHTML = '<i class="fas fa-check"></i>';
completedButton.classList.add('complete-btn');
todoDiv.appendChild(completedButton);
// Trash button
const trashButton = document.createElement('button');
trashButton.innerHTML = '<i class="fas fa-trash"></i>';
trashButton.classList.add('trash-btn');
todoDiv.appendChild(trashButton);
// Append to List
todoList.appendChild(todoDiv);
//after adding the values we dont need it on the input bar
todoInput.value='';
}
function deleteCheck(e){
const item=e.target;
//this is for deleting
if(item.classList[0] === "trash-btn"){
const todo=item.parentElement;
//fallout animation
todo.classList.add('fall');
removeLocalTodos(todo);
//wait for a brief moment before removing the todo
setTimeout(function() {
todo.remove();
}, 500); // Adjust the delay as needed
}
//this is for the check button
if(item.classList[0] === "complete-btn"){
const todo=item.parentElement;
todo.classList.toggle('completed');
}
}
function filterTodo(e){
const todos = todoList.childNodes;
todos.forEach(function(todo){
switch(e.target.value){
case "all":
todo.style.display='flex';
break;
case "completed":
if(todo.classList.contains('completed')){
todo.style.display='flex';
}else{
todo.style.display='none';
}
break;
case "uncompleted":
if(!todo.classList.contains('completed')){
todo.style.display='flex';
}else{
todo.style.display='none';
}
break;
}
});
}
function saveLocalTodos(todo){
let todos;
if(localStorage.getItem('todos')===null){
todos=[];
}
else{
todos = JSON.parse(localStorage.getItem('todos')); // assign the parsed data back to todos
}
todos.push(todo);
localStorage.setItem('todos', JSON.stringify(todos));
}
function getTodos(){
let todos;
if(localStorage.getItem('todos')===null){
todos=[];
}
else{
todos=JSON.parse(localStorage.getItem('todos'));
}
todos.forEach(function(todoItem){ // rename the parameter to todoItem
// Create a div in HTML
const todoDiv = document.createElement('div');
todoDiv.classList.add('todo');
// Now adding LI
const newToDo = document.createElement('li');
newToDo.classList.add('todo-item');
newToDo.innerText = todoItem; // use todoItem here
todoDiv.appendChild(newToDo);
// Check Mark button
const completedButton = document.createElement('button');
completedButton.innerHTML = '<i class="fas fa-check"></i>';
completedButton.classList.add('complete-btn');
todoDiv.appendChild(completedButton);
// Trash button
const trashButton = document.createElement('button');
trashButton.innerHTML = '<i class="fas fa-trash"></i>';
trashButton.classList.add('trash-btn');
todoDiv.appendChild(trashButton);
// Append to List
todoList.appendChild(todoDiv);
});
}
function removeLocalTodos(todo){
let todos;
if(localStorage.getItem('todos')===null){
todos=[];
}
else{
todos=JSON.parse(localStorage.getItem('todos'));
}
const todoIndex=todo.children[0].innerText;
todos.splice(todos.indexOf(todoIndex),1);
localStorage.setItem('todos', JSON.stringify(todos));
}