//Define the UI vars const form = document.querySelector('#task-form'); const taskList = document.querySelector('.collection'); const clearBtn = document.querySelector('.clear-tasks'); const filter = document.querySelector('#filter'); const taskInput = document.querySelector('#task'); //Load all event listeners call loadEventListeners(); //Load all event listeners function function loadEventListeners() { //DOM Load event document.addEventListener('DOMContentLoaded', getTasks); //Add task event form.addEventListener('submit', addTask); //Remove task event taskList.addEventListener('click', removeTask); //Clear all tasks event clearBtn.addEventListener('click', clearTasks); //Filter tasks event filter.addEventListener('keyup', filterTasks); } //Get Tasks from Local Storage function getTasks() { let tasks; if (localStorage.getItem('tasks') === null) { tasks = []; } else { tasks = JSON.parse(localStorage.getItem('tasks')); } tasks.forEach(function(task) { const li = document.createElement('li'); li.className = 'collection-item'; li.appendChild(document.createTextNode(task)); const link = document.createElement('a'); link.className = 'delete-item secondary-content'; link.innerHTML = ''; li.appendChild(link); taskList.appendChild(li); }); } //Add task function function addTask(e) { //Verify if there is a task to add if (taskInput.value === '') { alert('Add a task'); } //Create li element const li = document.createElement('li'); //Add a class li.className = 'collection-item'; //Create text node and append to li li.appendChild(document.createTextNode(taskInput.value)); //Create new link element const link = document.createElement('a'); //Add class to link element link.className = 'delete-item secondary-content'; //Add icon html link.innerHTML = ''; //Append the link to the li li.appendChild(link); //Append the li to the ul taskList.appendChild(li); //Store in the tasks in Local Storage storeTaskInLocalStorage(taskInput.value); //Clear the input taskInput.value = ''; e.preventDefault(); } //Store tasks to local storage function function 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 function function removeTask(e) { //Check if the target to remove is the correct target if (e.target.parentElement.classList.contains('delete-item')) { if (confirm('Are you sure?')) { //Select the targeted li by bubbling up twice out of the i element e.target.parentElement.parentElement.remove(); //Remove from local storage removeTaskFromLocalStorage(e.target.parentElement.parentElement); } } } //Remove from local storage function function removeTaskFromLocalStorage(taskItem) { //Get Tasks from Local Storage let tasks; if (localStorage.getItem('tasks') === null) { tasks = []; } else { tasks = JSON.parse(localStorage.getItem('tasks')); } tasks.forEach(function(task, index) { if (taskItem.textContent === task) { tasks.splice(index, 1); } }); localStorage.setItem('tasks', JSON.stringify(tasks)); } //Clear Tasks function function clearTasks() { //Loop through and remove each child while (taskList.firstChild) { taskList.removeChild(taskList.firstChild); } //Clear tasks from local storage clearTasksFromLocalStorage(); } //Clear tasks from local storage function function clearTasksFromLocalStorage() { localStorage.clear(); } //Filter tasks function function filterTasks(e) { //Set the target to lowercase and grab the text from the input const text = e.target.value.toLowerCase(); document.querySelectorAll('.collection-item').forEach(function(task) { const item = task.firstChild.textContent; if (item.toLowerCase().indexOf(text) != -1) { task.style.display = 'block'; } else { task.style.display = 'none'; } }); }