-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathapp.js
More file actions
187 lines (148 loc) · 6.42 KB
/
Copy pathapp.js
File metadata and controls
187 lines (148 loc) · 6.42 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
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
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
const addtodoBtn = document.getElementById("addTodoBtn");
const todoListUl = document.getElementById("todoList");
const inputTag = document.getElementById("todoInput");
const remaining = document.getElementById("remaining-count")
const clearCompletedBtn = document.getElementById("clearCompletedBtn")
const btnActive = document.getElementById("btnActive")
const btnCompleted = document.getElementById("btnCompleted")
const btnAll = document.getElementById("btnAll")
let todos = []
let todoText; //this should get to do work when user clicked
let todosString = localStorage.getItem("todos") // if we have todos in the local Storage we are gonna save them
if (todosString) {
todos = JSON.parse(todosString);
remaining.innerHTML = todos.filter((item) => { return item.isCompleted != true }).length;
}
const populateTodos = () => {
let string = ""
for (const todo of todos) {
string += `<li id="${todo.id}" class="todo-item ${todo.isCompleted ? "completed" : ""}" >
<input type="checkbox" class="todo-checkbox" ${todo.isCompleted ? "checked" : ""}>
<span class="todo-text">${todo.title}</span>
<button class="delete-btn">×</button>
</li>`
}
todoListUl.innerHTML = string;
// Handles the Checkbox
const todoCheckboxes = document.querySelectorAll(".todo-checkbox")
todoCheckboxes.forEach((element) => {
element.addEventListener("click", (e) => {
if (e.target.checked) {
element.parentNode.classList.add("completed");
todos = todos.map(todo => {
if (todo.id == element.parentNode.id) {
return { ...todo, isCompleted: true };
}
else {
return todo
}
})
remaining.innerHTML = todos.filter((item) => { return item.isCompleted != true }).length;
localStorage.setItem("todos", JSON.stringify(todos))
}
else {
element.parentNode.classList.remove("completed");
todos = todos.map(todo => {
if (todo.id == element.parentNode.id) {
return { ...todo, isCompleted: false };
}
else {
return todo
}
})
remaining.innerHTML = todos.filter((item) => { return item.isCompleted != true }).length;
localStorage.setItem("todos", JSON.stringify(todos))
}
})
})
// Handle the Clear Completed Button
clearCompletedBtn.addEventListener("click", ()=>{
todos = todos.filter((todo)=> todo.isCompleted == false)
populateTodos()
localStorage.setItem("todos", JSON.stringify(todos))
})
// will give Completed Todos
const getCompletedtodos = (list) =>{
let string = ""
for (const todo of list) {
string += `<li id="${todo.id}" class="todo-item ${todo.isCompleted ? "completed" : ""}" >
<input type="checkbox" class="todo-checkbox" ${todo.isCompleted ? "checked" : ""}>
<span class="todo-text">${todo.title}</span>
<button class="delete-btn">×</button>
</li>`
}
todoListUl.innerHTML = string;
}
btnCompleted.addEventListener("click", ()=>{
let completedtodos = todos.filter(todo=> todo.isCompleted);
getCompletedtodos(completedtodos);
localStorage.setItem("todos", JSON.stringify(todos))
})
// Will Show the All Todos
const showAlltodos = () =>{
let string = ""
for (const todo of todos) {
string += `<li id="${todo.id}" class="todo-item ${todo.isCompleted ? "completed" : ""}" >
<input type="checkbox" class="todo-checkbox" ${todo.isCompleted ? "checked" : ""}>
<span class="todo-text">${todo.title}</span>
<button class="delete-btn">×</button>
</li>`
}
todoListUl.innerHTML = string;
}
btnAll.addEventListener("click", ()=>{
showAlltodos()
localStorage.setItem("todos", JSON.stringify(todos))
})
//will give active todos
const getActivetodos = (list)=>{
let string = ""
for (const todo of list) {
string += `<li id="${todo.id}" class="todo-item ${todo.isCompleted ? "completed" : ""}" >
<input type="checkbox" class="todo-checkbox" ${todo.isCompleted ? "checked" : ""}>
<span class="todo-text">${todo.title}</span>
<button class="delete-btn">×</button>
</li>`
}
todoListUl.innerHTML = string;
};
btnActive.addEventListener("click", ()=>{
let activetodos = todos.filter(todo => !todo.isCompleted);
getActivetodos(activetodos);
localStorage.setItem("todos", JSON.stringify(todos))
})
// Handle The Delete Button
let deleteBtns = document.querySelectorAll(".delete-btn");
deleteBtns.forEach((element) => {
element.addEventListener("click", (e) => {
const confirmation = confirm("Do you want to Delete this todo")
if (confirmation) {
console.log(e.target.parentNode.id)
todos = todos.filter((todo) => {
return (todo.id) !== (e.target.parentNode.id)
})
remaining.innerHTML = todos.filter((item) => { return item.isCompleted != true }).length;
localStorage.setItem("todos", JSON.stringify(todos))
populateTodos()
}
})
})
}
addtodoBtn.addEventListener("click", () => {
todoText = inputTag.value
if (todoText.trim().length < 4) {
alert("Todo description is too short. Please enter a more detailed task.")
return
}
inputTag.value = ""
let todo = {
id: "todo-" + Date.now(),
title: todoText,
isCompleted: false
}
todos.push(todo)
remaining.innerHTML = todos.filter((item) => { return item.isCompleted != true }).length;
localStorage.setItem("todos", JSON.stringify(todos))
populateTodos()
})
populateTodos()