-
-
Notifications
You must be signed in to change notification settings - Fork 94
ITP-JAN-LONDON|FOROGH AGHAEIYARIJANI|MODULE-DATA-GROUP|WEEK3|SPRINT3|TO-DO-LIST|Create ToDos #477
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from 1 commit
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
All the code to render the list based on There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. resolved |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,6 +1,37 @@ | ||
function populateTodoList(todos) { | ||
let list = document.getElementById("todo-list"); | ||
// Write your code to create todo list elements with completed and delete buttons here, all todos should display inside the "todo-list" element. | ||
list.innerHTML = ""; | ||
|
||
todos.forEach((todo) => { | ||
let li = document.createElement("li"); | ||
li.className = | ||
"list-group-item d-flex justify-content-between align-items-center"; | ||
li.textContent = todo.task; | ||
|
||
let span = document.createElement("span"); | ||
span.className = "badge bg-primary rounded-pill"; | ||
|
||
let checkIcon = document.createElement("i"); | ||
checkIcon.className = "fa fa-check me-2"; | ||
checkIcon.style.cursor = "pointer"; | ||
checkIcon.addEventListener("click", () => { | ||
li.style.textDecoration = | ||
li.style.textDecoration === "line-through" ? "none" : "line-through"; | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The code to apply line-through should be place outside of this callback function. Inside this callback function, focus on updating the application states, then call
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. resolved |
||
}); | ||
|
||
let trashIcon = document.createElement("i"); | ||
trashIcon.className = "fa fa-trash"; | ||
trashIcon.style.cursor = "pointer"; | ||
trashIcon.addEventListener("click", () => { | ||
li.remove(); | ||
}); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Removing the DOM element does not affect the application states. In other words, the statement at line 27 does not delete the corresponding element in array Instead, you should delete the corresponding item in the array There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. resolved |
||
|
||
span.appendChild(checkIcon); | ||
span.appendChild(trashIcon); | ||
li.appendChild(span); | ||
list.appendChild(li); | ||
}); | ||
} | ||
|
||
// These are the same todos that currently display in the HTML | ||
|
@@ -17,9 +48,34 @@ function addNewTodo(event) { | |
// The code below prevents the page from refreshing when we click the 'Add Todo' button. | ||
event.preventDefault(); | ||
// Write your code here... and remember to reset the input field to be blank after creating a todo! | ||
let inputField = document.querySelector("input[type='text']"); | ||
let taskText = inputField.value.trim(); | ||
if (taskText !== "") { | ||
todos.push({ task: taskText, completed: false }); | ||
populateTodoList(todos); | ||
inputField.value = ""; | ||
} | ||
} | ||
|
||
document.querySelector("form").addEventListener("submit", addNewTodo); | ||
|
||
document | ||
.getElementById("remove-all-completed") | ||
.addEventListener("click", deleteAllCompletedTodos); | ||
|
||
// Advanced challenge: Write a fucntion that checks the todos in the todo list and deletes the completed ones (we can check which ones are completed by seeing if they have the line-through styling applied or not). | ||
function deleteAllCompletedTodos() { | ||
// Write your code here... | ||
let list = document.getElementById("todo-list"); | ||
let items = list.getElementsByTagName("li"); | ||
|
||
for (let i = items.length - 1; i >= 0; i--) { | ||
if (items[i].style.textDecoration === "line-through") { | ||
items[i].remove(); | ||
} | ||
} | ||
|
||
todos = todos.filter((todo) => { | ||
return ![...list.children].some((li) => li.textContent.includes(todo.task)); | ||
}); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. What would happened if two todo tasks have identical And after you updated There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. resolved |
||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Did these two icons
checkIcon
andtrashIcon
appear in your browser when you test this app?I asked ChatGPT which CSS library most likely have those classes defined, and it suggested these:
After I included the above code in
index.html
, two icons show up for each to do item.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
resolved