diff --git a/app.js b/app.js deleted file mode 100644 index ab737a60027..00000000000 --- a/app.js +++ /dev/null @@ -1,195 +0,0 @@ -//Document is the DOM can be accessed in the console with document.window. -// Tree is from the top, html, body, p etc. - -//Problem: User interaction does not provide the correct results. -//Solution: Add interactivity so the user can manage daily tasks. -//Break things down into smaller steps and take each step at a time. - - -// Event handling, user interaction is what starts the code execution. - -var taskInput=document.getElementById("new-task");//Add a new task. -var addButton=document.getElementsByTagName("button")[0];//first button -var incompleteTaskHolder=document.getElementById("incompleteTasks");//ul of #incompleteTasks -var completedTasksHolder=document.getElementById("completed-tasks");//completed-tasks - - -//New task list item -var createNewTaskElement=function(taskString){ - - var listItem=document.createElement("li"); - - //input (checkbox) - var checkBox=document.createElement("input");//checkbx - //label - var label=document.createElement("label");//label - //input (text) - var editInput=document.createElement("input");//text - //button.edit - var editButton=document.createElement("button");//edit button - - //button.delete - var deleteButton=document.createElement("button");//delete button - var deleteButtonImg=document.createElement("img");//delete button image - - label.innerText=taskString; - label.className='task'; - - //Each elements, needs appending - checkBox.type="checkbox"; - editInput.type="text"; - editInput.className="task"; - - editButton.innerText="Edit"; //innerText encodes special characters, HTML does not. - editButton.className="edit"; - - deleteButton.className="delete"; - deleteButtonImg.src='./remove.svg'; - deleteButton.appendChild(deleteButtonImg); - - - //and appending. - listItem.appendChild(checkBox); - listItem.appendChild(label); - listItem.appendChild(editInput); - listItem.appendChild(editButton); - listItem.appendChild(deleteButton); - return listItem; -} - - - -var addTask=function(){ - console.log("Add Task..."); - //Create a new list item with the text from the #new-task: - if (!taskInput.value) return; - var listItem=createNewTaskElement(taskInput.value); - - //Append listItem to incompleteTaskHolder - incompleteTaskHolder.appendChild(listItem); - bindTaskEvents(listItem, taskCompleted); - - taskInput.value=""; - -} - -//Edit an existing task. - -var editTask=function(){ - console.log("Edit Task..."); - console.log("Change 'edit' to 'save'"); - - - var listItem=this.parentNode; - - var editInput=listItem.querySelector('input[type=text]'); - var label=listItem.querySelector("label"); - var editBtn=listItem.querySelector(".edit"); - var containsClass=listItem.classList.contains("editMode"); - //If class of the parent is .editmode - if(containsClass){ - - //switch to .editmode - //label becomes the inputs value. - label.innerText=editInput.value; - editBtn.innerText="Edit"; - }else{ - editInput.value=label.innerText; - editBtn.innerText="Save"; - } - - //toggle .editmode on the parent. - listItem.classList.toggle("editMode"); -}; - - -//Delete task. -var deleteTask=function(){ - console.log("Delete Task..."); - - var listItem=this.parentNode; - var ul=listItem.parentNode; - //Remove the parent list item from the ul. - ul.removeChild(listItem); - -} - - -//Mark task completed -var taskCompleted=function(){ - console.log("Complete Task..."); - - //Append the task list item to the #completed-tasks - var listItem=this.parentNode; - completedTasksHolder.appendChild(listItem); - bindTaskEvents(listItem, taskIncomplete); - -} - - -var taskIncomplete=function(){ - console.log("Incomplete Task..."); -//Mark task as incomplete. - //When the checkbox is unchecked - //Append the task list item to the #incompleteTasks. - var listItem=this.parentNode; - incompleteTaskHolder.appendChild(listItem); - bindTaskEvents(listItem,taskCompleted); -} - - - -var ajaxRequest=function(){ - console.log("AJAX Request"); -} - -//The glue to hold it all together. - - -//Set the click handler to the addTask function. -addButton.onclick=addTask; -addButton.addEventListener("click",addTask); -addButton.addEventListener("click",ajaxRequest); - - -var bindTaskEvents=function(taskListItem,checkBoxEventHandler){ - console.log("bind list item events"); -//select ListItems children - var checkBox=taskListItem.querySelector("input[type=checkbox]"); - var editButton=taskListItem.querySelector("button.edit"); - var deleteButton=taskListItem.querySelector("button.delete"); - - - //Bind editTask to edit button. - editButton.onclick=editTask; - //Bind deleteTask to delete button. - deleteButton.onclick=deleteTask; - //Bind taskCompleted to checkBoxEventHandler. - checkBox.onchange=checkBoxEventHandler; -} - -//cycle over incompleteTaskHolder ul list items -//for each list item -for (var i=0; i + -Todo App - - - + + Todo App + + + + -
Want more details?
-

-

Todo

-

Completed

-
- +
+ matrix + Want more details? + +
+
+

+ +

+ + +
+

+

Todo

+ +

Completed

+ +
+ + \ No newline at end of file diff --git a/script.js b/script.js new file mode 100644 index 00000000000..bd44fbb3e5d --- /dev/null +++ b/script.js @@ -0,0 +1,174 @@ + + +let taskInput=document.getElementById("new_task"); +let addButton=document.getElementsByTagName("button")[0]; +let incompleteTaskHolder=document.getElementById("incomplete_Tasks"); +let completedTasksHolder=document.getElementById("completed_tasks"); + + +//New task list item +let createNewTaskElement=function(taskString){ + + let listItem=document.createElement("li"); + + //input (checkbox) + let checkBox=document.createElement("input"); + //label + let label=document.createElement("label"); + //input (text) + let editInput=document.createElement("input"); + //button.edit + let editButton=document.createElement("button"); + + //button.delete + let deleteButton=document.createElement("button"); + let deleteButtonImg=document.createElement("img"); + + label.innerText=taskString; + label.className='task'; + + //Each elements, needs appending + checkBox.type="checkbox"; + editInput.type="text"; + editInput.className="task"; + + editButton.innerText="Edit"; + editButton.className="edit"; + + deleteButton.className="delete"; + deleteButtonImg.src='./remove.svg'; + deleteButton.appendChild(deleteButtonImg); + + + //and appending. + listItem.appendChild(checkBox); + listItem.appendChild(label); + listItem.appendChild(editInput); + listItem.appendChild(editButton); + listItem.appendChild(deleteButton); + return listItem; +} + + + +let addTask=function(){ + console.log("Add Task..."); + + if (!taskInput.value) return; + let listItem=createNewTaskElement(taskInput.value); + + + incompleteTaskHolder.appendChild(listItem); + bindTaskEvents(listItem, taskCompleted); + + taskInput.value=""; + +} + + +let editTask=function(){ + console.log("Edit Task..."); + console.log("Change 'edit' to 'save'"); + + + let listItem=this.parentNode; + + let editInput=listItem.querySelector('input[type=text]'); + let label=listItem.querySelector("label"); + let editBtn=listItem.querySelector(".edit"); + let containsClass=listItem.classList.contains("edit_Mode"); + + if(containsClass){ + + + + label.innerText=editInput.value; + editBtn.innerText="Edit"; + }else{ + editInput.value=label.innerText; + editBtn.innerText="Save"; + } + + + listItem.classList.toggle("edit_Mode"); +}; + + +//Delete task. +let deleteTask=function(){ + console.log("Delete Task..."); + + let listItem=this.parentNode; + let ul=listItem.parentNode; + + ul.removeChild(listItem); + +} + + +//Mark task completed +let taskCompleted=function(){ + console.log("Complete Task..."); + + + let listItem=this.parentNode; + completedTasksHolder.appendChild(listItem); + bindTaskEvents(listItem, taskIncomplete); + +} + + +let taskIncomplete=function(){ + console.log("Incomplete Task..."); +//Mark task as incomplete. + + let listItem=this.parentNode; + incompleteTaskHolder.appendChild(listItem); + bindTaskEvents(listItem,taskCompleted); +} + + + +let ajaxRequest=function(){ + console.log("AJAX Request"); +} + + +addButton.onclick=addTask; +addButton.addEventListener("click",addTask); +addButton.addEventListener("click",ajaxRequest); + + +let bindTaskEvents=function(taskListItem,checkBoxEventHandler){ + console.log("bind list item events"); +//select ListItems children + let checkBox=taskListItem.querySelector("input[type=checkbox]"); + let editButton=taskListItem.querySelector("button.edit"); + let deleteButton=taskListItem.querySelector("button.delete"); + + + + editButton.onclick=editTask; + + deleteButton.onclick=deleteTask; + + checkBox.onchange=checkBoxEventHandler; +} + + +for (let i=0; i label { width: 226px; } li > input[type="text"] { - width: 226px + width: 226px; } -button.delete img { +.delete img { height: 2em; transform: rotateZ(45deg); transition: transform 200ms ease-in; @@ -128,21 +133,28 @@ button.delete img:hover { } /* Completed */ -ul#completed-tasks label { - text-decoration: line-through +ul#completed_tasks +label { + text-decoration: line-through; color: #888; } /* Edit Task */ -ul li input[type=text] { - display:none +ul +li +input[type=text] { + display: none; } -ul li.editMode input[type=text] { - display:inline-block; - width:224px +ul +li.edit_Mode +input[type=text] { + display: inline-block; + width: 224px; } -ul li.editMode label { - display:none; +ul +li.edit_Mode +label { + display: none; } \ No newline at end of file