let todoItemsContainer = document.getElementById("todoItemsContainer"); let addTodoButton = document.getElementById("addTodoButton"); let saveTodoButton = document.getElementById("saveTodoButton"); function getTodoListFromLocalStorage() { let stringifiedTodoList = localStorage.getItem("todoList"); let parsedTodoList = JSON.parse(stringifiedTodoList); if (parsedTodoList === null) { return []; } else { return parsedTodoList; } } let todoList = getTodoListFromLocalStorage(); let todosCount = todoList.length; saveTodoButton.onclick = function() { localStorage.setItem("todoList", JSON.stringify(todoList)); }; function onAddTodo() { let userInputElement = document.getElementById("todoUserInput"); let userInputValue = userInputElement.value; if (userInputValue === "") { alert("Enter Valid Text"); return; } todosCount = todosCount + 1; let newTodo = { text: userInputValue, uniqueNo: todosCount, isChecked: false }; todoList.push(newTodo); createAndAppendTodo(newTodo); userInputElement.value = ""; } addTodoButton.onclick = function() { onAddTodo(); }; function onTodoStatusChange(checkboxId, labelId, todoId) { let checkboxElement = document.getElementById(checkboxId); let labelElement = document.getElementById(labelId); labelElement.classList.toggle("checked"); let todoObjectIndex = todoList.findIndex(function(eachTodo) { let eachTodoId = "todo" + eachTodo.uniqueNo; if (eachTodoId === todoId) { return true; } else { return false; } }); let todoObject = todoList[todoObjectIndex]; if(todoObject.isChecked === true){ todoObject.isChecked = false; } else { todoObject.isChecked = true; } } function onDeleteTodo(todoId) { let todoElement = document.getElementById(todoId); todoItemsContainer.removeChild(todoElement); let deleteElementIndex = todoList.findIndex(function(eachTodo) { let eachTodoId = "todo" + eachTodo.uniqueNo; if (eachTodoId === todoId) { return true; } else { return false; } }); todoList.splice(deleteElementIndex, 1); } function createAndAppendTodo(todo) { let todoId = "todo" + todo.uniqueNo; let checkboxId = "checkbox" + todo.uniqueNo; let labelId = "label" + todo.uniqueNo; let todoElement = document.createElement("li"); todoElement.classList.add("todo-item-container", "d-flex", "flex-row"); todoElement.id = todoId; todoItemsContainer.appendChild(todoElement); let inputElement = document.createElement("input"); inputElement.type = "checkbox"; inputElement.id = checkboxId; inputElement.checked = todo.isChecked; inputElement.onclick = function () { onTodoStatusChange(checkboxId, labelId, todoId); }; inputElement.classList.add("checkbox-input"); todoElement.appendChild(inputElement); let labelContainer = document.createElement("div"); labelContainer.classList.add("label-container", "d-flex", "flex-row"); todoElement.appendChild(labelContainer); let labelElement = document.createElement("label"); labelElement.setAttribute("for", checkboxId); labelElement.id = labelId; labelElement.classList.add("checkbox-label"); labelElement.textContent = todo.text; if (todo.isChecked === true) { labelElement.classList.add("checked"); } labelContainer.appendChild(labelElement); let deleteIconContainer = document.createElement("div"); deleteIconContainer.classList.add("delete-icon-container"); labelContainer.appendChild(deleteIconContainer); let deleteIcon = document.createElement("i"); deleteIcon.classList.add("far", "fa-trash-alt", "delete-icon"); deleteIcon.onclick = function () { onDeleteTodo(todoId); }; deleteIconContainer.appendChild(deleteIcon); } for (let todo of todoList) { createAndAppendTodo(todo); }