-
Notifications
You must be signed in to change notification settings - Fork 0
/
app.js
143 lines (117 loc) · 3.66 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
//Define const
const form = document.querySelector('#task-form');
const taskList = document.querySelector('.collection');
const clearBtn = document.querySelector('.clear-tasks');
const taskInput = document.querySelector('#task');
const filter = document.querySelector('#filter');
const loadEventListener = () => {
// DOM load
document.addEventListener('DOMContentLoaded', getTasks);
// Add task
form.addEventListener('submit', addTask);
// Remove task
taskList.addEventListener('click', removeTask);
// Clear task
clearBtn.addEventListener('click', clearTasks);
// Filter tasks
filter.addEventListener('keyup', filterTasks);
};
// Get tasks from LS
const getTasks = () => {
let tasks;
if (localStorage.getItem('tasks') === null) {
tasks = []
} else {
tasks = JSON.parse(localStorage.getItem('tasks'))
}
tasks.forEach((task) => {
const li = document.createElement('li');
li.className = 'collection-item';
li.appendChild(document.createTextNode(task));
const removeTask = document.createElement('a');
removeTask.className = 'delete-item secondary-content';
removeTask.innerHTML = '<i class="fa fa-remove"></i>';
li.appendChild(removeTask);
taskList.appendChild(li);
})
};
// Add task
const addTask = (e) => {
if (taskInput.value === '') {
return alert('Pls, add a task')
}
const li = document.createElement('li');
li.className = 'collection-item';
li.appendChild(document.createTextNode(taskInput.value));
const removeTask = document.createElement('a');
removeTask.className = 'delete-item secondary-content';
removeTask.innerHTML = '<i class="fa fa-remove"></i>';
li.appendChild(removeTask);
taskList.appendChild(li);
storeTaskInLocalStorage(taskInput.value);
taskInput.value = '';
e.preventDefault();
};
// Store task
const storeTaskInLocalStorage = (task) => {
let tasks;
if (localStorage.getItem('tasks') === null) {
tasks = []
} else {
tasks = JSON.parse(localStorage.getItem('tasks'))
}
tasks.push(task);
localStorage.setItem('tasks', JSON.stringify(tasks));
};
// Remove task
const removeTask = (e) => {
if (e.target.parentElement.classList.contains('delete-item')) {
if (confirm('Are you sure?')) {
// Remove from DOM
e.target.parentElement.parentElement.remove()
// Remove from LS
removeTaskFromLocalStorage(e.target.parentElement.parentElement);
}
}
};
// Remove task from LocalStorage
const removeTaskFromLocalStorage = (taskItem) => {
let tasks;
if (localStorage.getItem('tasks') === null) {
tasks = []
} else {
tasks = JSON.parse(localStorage.getItem('tasks'))
}
tasks.forEach((task, index) => {
if (taskItem.textContent === task) {
tasks.splice(index, 1)
}
});
localStorage.setItem('tasks', JSON.stringify(tasks))
};
//Clear tasks
const clearTasks = () => {
// Clear from DOM
while (taskList.firstChild) {
taskList.removeChild(taskList.firstChild)
}
// Clear from LS
clearTasksFromLocalStorage();
};
// Clear tasks from LS
const clearTasksFromLocalStorage = () => {
localStorage.clear();
};
// Filter tasks
const filterTasks = (e) => {
const text = e.target.value.toLowerCase();
document.querySelectorAll('.collection-item').forEach((task) => {
const item = task.textContent;
if (item.toLowerCase().indexOf(text) !== -1) {
task.style.display = 'block'
} else {
task.style.display = 'none'
}
})
};
loadEventListener();