-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp.js
130 lines (119 loc) · 3.86 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
// Selectors
const todoInput = document.querySelector(".todo-input");
const todoButton = document.querySelector(".todo-button");
const todoList = document.querySelector(".todo-list");
const filter = document.querySelector(".filter-todo");
// Event Listeners
todoButton.addEventListener("click", addTodo); // addTodo is a func
todoList.addEventListener("click", deleteButton);
filter.addEventListener("click", filterTodo);
// Extra variables
let filteropt = "all";
// Functions
function filterchecker() {
const todos = todoList.childNodes;
todos.forEach(function (todo) {
// Removing if it is under other tab
if (filteropt == "all") {
todo.style.display = "flex";
} else if (filteropt == "completed") {
if (todo.classList.contains("completed")) {
todo.style.display = "flex";
} else {
todo.style.display = "none";
}
} else if (filteropt == "uncompleted") {
if (todo.classList.contains("completed")) {
todo.style.display = "none";
} else {
todo.style.display = "flex";
}
}
});
}
function addTodo(e) {
// for preventing natural behaviour
e.preventDefault();
let text = todoInput.value;
text = text.trim();
if (text != "") {
// making sure of blank text
// Todo Div
const todoDiv = document.createElement("div");
todoDiv.classList.add("todo"); // adding the class
// creating LI
const newTodo = document.createElement("li");
newTodo.innerText = todoInput.value;
newTodo.classList.add("todo-item"); //new class
todoDiv.appendChild(newTodo); // attaching
// right mark
const completedButton = document.createElement("button");
completedButton.innerHTML = '<i class = "fas fa-check"></i>';
completedButton.classList.add("complete-btn");
todoDiv.appendChild(completedButton);
// Delete button
const deleteButton = document.createElement("button");
deleteButton.innerHTML = '<i class = "fas fa-trash"></i>';
deleteButton.classList.add("delete-btn");
todoDiv.appendChild(deleteButton);
// Append at last
todoList.insertBefore(todoDiv, todoList.firstElementChild);
// using insertBefore to insert the inverted list, using appendChild makes it normal
}
filterchecker();
// clear the input
todoInput.value = "";
}
function deleteButton(e) {
// alert(e.target);
const item = e.target; // identifying every clicks in todoList
// item.classList is an array with only clicked event class name
// DELETE Tasks
if (item.classList[0] === "delete-btn") {
// seperately dealing with delete only
// item.remove(); // this is removing only the button
// alert(item.classList);
const tobedeleted = item.parentElement;
// animating
tobedeleted.classList.add("fall");
tobedeleted.addEventListener("transitionend", function (e) {
tobedeleted.remove();
});
}
// DONE Tasks
if (item.classList[0] === "complete-btn") {
const tobedone = item.parentElement;
tobedone.classList.toggle("completed"); // toggling the class
filterchecker();
}
}
function filterTodo(e) {
const todos = todoList.childNodes;
todos.forEach(function (todo) {
switch (e.target.value) {
case "all":
todo.style.display = "flex";
filteropt = "all";
break;
case "completed":
if (todo.classList.contains("completed")) {
todo.style.display = "flex";
} else {
todo.style.display = "none";
}
filteropt = "completed";
break;
case "uncompleted":
if (todo.classList.contains("completed")) {
todo.style.display = "none";
} else {
todo.style.display = "flex";
}
filteropt = "uncompleted";
break;
}
});
}
function saveLocal(todo)
{
}