diff --git a/README.md b/README.md index b90dba947e..499518ec65 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ code-quality-task-screenshot +https://yurapredein.github.io/clean-code-s1e1 + # Application Functionality : - Adding a new item to the "TODO" tasks list. diff --git a/app.js b/app.js index ab737a6002..6eac09de39 100644 --- a/app.js +++ b/app.js @@ -1,195 +1,177 @@ -//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; + //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("incomplete-tasks");//ul of #incomplete-tasks + var completedTasksHolder=document.getElementById("completed-tasks");//completed-tasks + + + //New task list item + var createNewTaskElement=function(taskString){ + + var listItem=document.createElement("li"); + listItem.classList.add("tasks-list__item"); + //input (checkbox) + var checkBox=document.createElement("input");//checkbox + checkBox.classList.add("tasks-list__input", "tasks-list__input_checkbox"); + //label + var label=document.createElement("label");//label + label.classList.add("tasks-list__task-text"); + //input (text) + var editInput=document.createElement("input");//text + editInput.classList.add("tasks-list__input", "tasks-list__input_text"); + //button.edit + var editButton=document.createElement("button");//edit button + editButton.classList.add("tasks-list__button", "tasks-list__button_edit"); + //button.delete + var deleteButton=document.createElement("button");//delete button + var deleteButtonImg=document.createElement("img");//delete button image + deleteButton.classList.add("tasks-list__button", "tasks-list__button_delete"); + deleteButtonImg.classList.add("tasks-list__button-image"); + label.innerText=taskString; + + checkBox.type="checkbox"; + editInput.type="text"; + + editButton.innerText="Edit"; //innerText encodes special characters, HTML does not. + + deleteButtonImg.src="./remove.svg"; + deleteButtonImg.alt = "delete todo item button"; + 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(){ + + + + 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(){ + } + + //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 + + var editInput=listItem.querySelector("input[type=text]"); + var label=listItem.querySelector(".tasks-list__task-text"); + var editBtn=listItem.querySelector(".tasks-list__button_edit"); + var containsClass=listItem.classList.contains("tasks-list__item_edit-mode"); + //If class of the parent is .edit-mode 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"; + //switch to .edit-mode + //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"); -}; + //toggle .edit-mode on the parent. + listItem.classList.toggle("tasks-list__item_edit-mode"); + }; -//Delete task. -var deleteTask=function(){ + //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(){ + } + + //Mark task completed + var taskCompleted=function(){ console.log("Complete Task..."); - - //Append the task list item to the #completed-tasks + + //Append the task list item to the #incomplete-tasks var listItem=this.parentNode; completedTasksHolder.appendChild(listItem); bindTaskEvents(listItem, taskIncomplete); - -} - - -var taskIncomplete=function(){ + } + + var taskIncomplete=function(){ console.log("Incomplete Task..."); -//Mark task as incomplete. + //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(){ + } + + + var ajaxRequest=function(){ console.log("AJAX Request"); -} - -//The glue to hold it all together. + } + + //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); -//Set the click handler to the addTask function. -addButton.onclick=addTask; -addButton.addEventListener("click",addTask); -addButton.addEventListener("click",ajaxRequest); - - -var bindTaskEvents=function(taskListItem,checkBoxEventHandler){ + 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"); - - + //select ListItems children + var checkBox=taskListItem.querySelector(".tasks-list__input_checkbox"); + var editButton=taskListItem.querySelector(".tasks-list__button_edit"); + var deleteButton=taskListItem.querySelector(".tasks-list__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 - - - - -
Want more details?
-

-

Todo

-

Completed

-
- - + + Todo App + + + + +
+ eisenhower's matrix + Want more details? +
+
+
+

Add Item

+
+ + +
+
+
+

Todo

+
    +
  • + + + + + +
  • +
  • + + + + + +
  • +
+
+
+

Completed

+
    +
  • + + + + + +
  • +
+
+
+ + \ No newline at end of file diff --git a/style.css b/style.css index ab36227705..d2cb3f1cbe 100644 --- a/style.css +++ b/style.css @@ -1,148 +1,159 @@ /* Basic Style */ -body { - background-color: #f8f8f8; - color: #333; - font-family: Lato, sans-serif; +.body { + background-color: #f8f8f8; + color: #333; + font-family: Lato, sans-serif; } -.aaa { - width: 500px; - margin: 0 auto; - display: block; - text-align: right; +.header { + width: 500px; + margin: 0 auto; + display: block; + text-align: right; } -.aaa img { - width: 100%; +.header__img { + width: 100%; } -.aaa .more_inf { - font-family: fantasy, cursive; +.header__link { + font-family: fantasy, cursive; } -@media (max-width:768px) { -.aaa { text-align: center; -} -} -.centered-main-page-element { - display: block; - width: 500px; - margin: 0 auto 0; -} -.task { - width: 56%; - display: inline-block; - flex-grow: 1 -} -.task-row-wrapper { - display: flex; -} -ul { - margin:0; - padding: 0px; -} -li, h3 { - list-style:none; -} -input,button{ - outline:none; -} -button { - background: none; - border: 0px; - color: #888; - font-size: 15px; - width: 60px; - font-family: Lato, sans-serif; - cursor: pointer; -} -button:hover { - color: #3a3A3a; +@media (max-width: 768px) { + .header { + text-align: center; + } +} +.main { + display: block; + width: 500px; + margin: 0 auto 0; +} +.section__task-text, +.tasks-list__input_text, +.tasks-list__task-text { + width: 56%; + display: inline-block; + flex-grow: 1; +} +.section__wrapper { + display: flex; +} +.section__tasks-list { + margin: 0; + padding: 0px; +} +.tasks-list__item, +.section__title { + list-style: none; +} +.section__task-text, +.tasks-list__input, +.section__button, +.tasks-list__button{ + outline: none; +} +.section__button, +.tasks-list__button { + background: none; + border: 0px; + color: #888; + font-size: 15px; + width: 60px; + font-family: Lato, sans-serif; + cursor: pointer; +} +.section__button:hover, +.tasks-list__button:hover { + color: #3a3a3a; } /* Heading */ -h3, -label[for='new-task'] { - color: #333; - font-weight: 700; - font-size: 15px; - border-bottom: 2px solid #333; - padding: 30px 0 10px; - margin: 0; - text-transform: uppercase; -} -input[type="text"] { - margin: 0; - font-size: 18px; - line-height: 18px; - height: 21px; - padding: 0 9px; - border: 1px solid #dDd; - background: #FFF; - border-radius: 6px; - font-family: Lato, sans-serif; - color: #888; -} -input[type="text"]:focus { - color: #333; +.section__title_new-task, +.section__title { + color: #333; + font-weight: 700; + font-size: 15px; + border-bottom: 2px solid #333; + padding: 30px 0 10px; + margin: 0; + text-transform: uppercase; +} +.section__task-text, +.tasks-list__input_text { + margin: 0; + font-size: 18px; + line-height: 18px; + height: 21px; + padding: 0 9px; + border: 1px solid #ddd; + background: #fff; + border-radius: 6px; + font-family: Lato, sans-serif; + color: #888; +} +.section__task-text:focus, +.tasks-list__input_text:focus { + color: #333; } /* New Task */ -label[for='new-task'] { - display: block; - margin: 0 0 20px; +.section__title_new-task { + display: block; + margin: 0 0 20px; } -input#new-task { - width: 318px; +.section__task-text { + width: 318px; } /* Task list */ -li { - overflow: hidden; - padding: 20px 0; - border-bottom: 1px solid #eee; - - display: flex; - justify-content: space-between; - align-items: center; -} -li > * { - vertical-align: middle; +.tasks-list__item { + overflow: hidden; + padding: 20px 0; + border-bottom: 1px solid #eee; + + display: flex; + justify-content: space-between; + align-items: center; +} +.tasks-list__item > * { + vertical-align: middle; } -li > input[type="checkbox"] { - margin: 0 10px; +.tasks-list__input_checkbox { + margin: 0 10px; } -li > label { - padding-left: 10px; - box-sizing: border-box; - font-size: 18px; - width: 226px; +.tasks-list__item > .tasks-list__task-text { + padding-left: 10px; + box-sizing: border-box; + font-size: 18px; + width: 226px; } -li > input[type="text"] { - width: 226px +.tasks-list__input_text { + width: 226px; } -button.delete img { - height: 2em; - transform: rotateZ(45deg); - transition: transform 200ms ease-in; +.tasks-list__button_delete .tasks-list__button-image { + height: 2em; + transform: rotateZ(45deg); + transition: transform 200ms ease-in; } -button.delete img:hover { - transform: rotateZ(0); +.tasks-list__button_delete .tasks-list__button-image:hover { + transform: rotateZ(0); } /* Completed */ -ul#completed-tasks label { - text-decoration: line-through - color: #888; +.section__tasks-list#completed-tasks .tasks-list__task-text { + text-decoration: line-through; + color: #888; } /* Edit Task */ -ul li input[type=text] { - display:none +.tasks-list__input_text { + display: none; } -ul li.editMode input[type=text] { - display:inline-block; - width:224px +.tasks-list__item_edit-mode .tasks-list__input_text { + display: inline-block; + width: 224px; } -ul li.editMode label { - display:none; +.tasks-list__item_edit-mode .tasks-list__task-text { + display: none; } \ No newline at end of file