forked from fack2/ToDoList-R.S.R.Y-
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdom.js
More file actions
145 lines (120 loc) · 4.52 KB
/
Copy pathdom.js
File metadata and controls
145 lines (120 loc) · 4.52 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
//var test = require("./test");
// part 2 linking it all together
// The function here is called an iife,
// it keeps everything inside hidden from the rest of our application
(function() {
// This is the dom node where we will keep our todo
var container = document.getElementById("todo-container");
var addTodoForm = document.getElementById("add-todo");
var submit = document.getElementById("submitButton");
submit.addEventListener("click", function(event) {
event.preventDefault();
var text = document.getElementById("inputText");
while (text.value != "") {
var myObject = {
id: todoFunctions.generateId(),
description: text.value,
status: false
};
var newState = todoFunctions.addTodo(state, myObject); //the new array
update(newState);
createTodoNode(myObject);
text.value = "";
}
});
var state = []; // this is our initial todoList
var sortButton = document.getElementById("sort");
sortButton.addEventListener("click", function(event) {
event.preventDefault();
var sortFunction = (a, b) => (a.status > b.status ? 1 : -1);
var sorted = todoFunctions.sortTodos(state, sortFunction);
update(sorted);
});
// This function takes a todo, it returns the DOM node representing that todo
var createTodoNode = function(todo) {
var todoNode = document.createElement("li");
//add the checkbox
var checkbox = document.createElement("input");
checkbox.setAttribute("type", "checkbox");
checkbox.checked = todo.status;
todoNode.appendChild(checkbox);
checkbox.addEventListener("change", function(event) {
const newstate = todoFunctions.markTodo(state, todo.id);
update(newstate);
});
// text of item list
checkbox.setAttribute("class", "cBox");
checkbox.type = "checkbox";
todoNode.appendChild(checkbox);
// text of item list
var textElement = document.createElement("p");
textElement.id = "textBox";
textElement.innerText = todo.description;
textElement.setAttribute("class", "extBox");
textElement.contentEditable = "false";
todoNode.appendChild(textElement);
// edit button
var editButtonNode = document.createElement("button");
editButtonNode.setAttribute("class", "editBox");
editButtonNode.setAttribute("title", "press again to save");
var editIcon = document.createElement("i");
editIcon.innerHTML = '<i style={font-size:240px} class="far"></i>';
editIcon.style.alignContent = "center";
editButtonNode.appendChild(editIcon);
todoNode.appendChild(editButtonNode);
var count = 1;
editButtonNode.addEventListener("click", function(event) {
if (count % 2 != 0) {
textElement.contentEditable = true;
} else {
textElement.contentEditable = false;
todo.description = document.getElementById("textBox").innerText;
update(state);
}
count++;
});
// add span holding descriptiondeleteTodo
// this adds the delete button
var deleteButtonNode = document.createElement("button");
deleteButtonNode.setAttribute("class", "deleteBox");
var deleteIcon = document.createElement("i");
deleteIcon.innerHTML = '<i class="glyphicon glyphicon-remove" ></i>';
deleteButtonNode.appendChild(deleteIcon);
deleteButtonNode.style.background = "red";
deleteButtonNode.addEventListener("click", function(event) {
var newState = todoFunctions.deleteTodo(state, todo.id);
update(newState);
});
todoNode.appendChild(deleteButtonNode);
// add markTodo button
// add classes for css
return todoNode;
};
// bind create todo form
if (addTodoForm) {
addTodoForm.addEventListener("submit", function(event) {
// https://developer.mozilla.org/en-US/docs/Web/Events/submit
// what does event.preventDefault do?
// what is inside event.target?
var description = "?"; // event.target ....
// hint: todoFunctions.addTodo
var newState = []; // ?? change this!
update(newState);
});
}
// you should not need to change this function
var update = function(newState) {
state = newState;
renderState(state);
};
// you do not need to change this function
var renderState = function(state) {
var todoListNode = document.createElement("ul");
state.forEach(function(todo) {
todoListNode.appendChild(createTodoNode(todo));
});
// you may want to add a class for css
container.replaceChild(todoListNode, container.firstChild);
};
if (container) renderState(state);
})();