diff --git a/app.js b/app.js new file mode 100644 index 0000000..1d35d48 --- /dev/null +++ b/app.js @@ -0,0 +1,141 @@ +//Select DOM +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", deleteTodo); +filterOption.addEventListener("click", filterTodo); + +//Functions + +function addTodo(e) { + //Prevent natural behaviour + e.preventDefault(); + //Create todo div + const todoDiv = document.createElement("div"); + todoDiv.classList.add("todo"); + //Create list + const newTodo = document.createElement("li"); + newTodo.innerText = todoInput.value; + //Save to local - do this last + //Save to local + saveLocalTodos(todoInput.value); + // + newTodo.classList.add("todo-item"); + todoDiv.appendChild(newTodo); + todoInput.value = ""; + //Create Completed Button + const completedButton = document.createElement("button"); + completedButton.innerHTML = ``; + completedButton.classList.add("complete-btn"); + todoDiv.appendChild(completedButton); + //Create trash button + const trashButton = document.createElement("button"); + trashButton.innerHTML = ``; + trashButton.classList.add("trash-btn"); + todoDiv.appendChild(trashButton); + //attach final Todo + todoList.appendChild(todoDiv); +} + +function deleteTodo(e) { + const item = e.target; + + if (item.classList[0] === "trash-btn") { + // e.target.parentElement.remove(); + const todo = item.parentElement; + todo.classList.add("fall"); + //at the end + removeLocalTodos(todo); + todo.addEventListener("transitionend", e => { + todo.remove(); + }); + } + if (item.classList[0] === "complete-btn") { + const todo = item.parentElement; + todo.classList.toggle("completed"); + console.log(todo); + } +} + +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"; + } + } + }); +} + +function saveLocalTodos(todo) { + let todos; + if (localStorage.getItem("todos") === null) { + todos = []; + } else { + todos = JSON.parse(localStorage.getItem("todos")); + } + todos.push(todo); + localStorage.setItem("todos", JSON.stringify(todos)); +} +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)); +} + +function getTodos() { + let todos; + if (localStorage.getItem("todos") === null) { + todos = []; + } else { + todos = JSON.parse(localStorage.getItem("todos")); + } + todos.forEach(function(todo) { + //Create todo div + const todoDiv = document.createElement("div"); + todoDiv.classList.add("todo"); + //Create list + const newTodo = document.createElement("li"); + newTodo.innerText = todo; + newTodo.classList.add("todo-item"); + todoDiv.appendChild(newTodo); + todoInput.value = ""; + //Create Completed Button + const completedButton = document.createElement("button"); + completedButton.innerHTML = ``; + completedButton.classList.add("complete-btn"); + todoDiv.appendChild(completedButton); + //Create trash button + const trashButton = document.createElement("button"); + trashButton.innerHTML = ``; + trashButton.classList.add("trash-btn"); + todoDiv.appendChild(trashButton); + //attach final Todo + todoList.appendChild(todoDiv); + }); +} diff --git a/index.html b/index.html new file mode 100644 index 0000000..8e5b8dc --- /dev/null +++ b/index.html @@ -0,0 +1,42 @@ + + +
+ + +