forked from fac-17/ABCD-week2-project
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdom.js
105 lines (93 loc) · 3.99 KB
/
dom.js
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
// 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 state = [
{id: -3, description: 'Create to-do list app', done: true},
{id: -2, description: 'Find some stuff to do', done: false},
{id: -1, description: 'Take a break', done: false},
]; // this is our initial todoList
// This function takes a todo, it returns the DOM node representing that todo
var createTodoNode = function(todo) {
var todoNode = document.createElement("li");
todoNode.setAttribute("id", "todo-unit");
/* todoNode.addEventListener('click', function() {
// var idNeeded = state[]
todoFunctions.markTodo(state, event.target.id);
console.log(event.target);
// something needed in here?
})
// you will need to use addEventListener
// add span holding description */
var newSpan = document.createElement("span");
newSpan.innerText = todo.description;
newSpan.setAttribute("class", "todo-text");
todoNode.appendChild(newSpan);
/* this adds the delete button */
var deleteButtonNode = document.createElement("button");
deleteButtonNode.setAttribute("class", "delete-button");
deleteButtonNode.innerHTML = "❌";
deleteButtonNode.addEventListener("click", function(event) {
var newState = todoFunctions.deleteTodo(state, todo.id);
update(newState);
});
todoNode.appendChild(deleteButtonNode);
// add markTodo button
var markTodoButtonNode = document.createElement("button");
markTodoButtonNode.setAttribute("class", "mark-button");
if (todo.done == false) {
markTodoButtonNode.setAttribute("style", "background-color: #2f537d;");
todoNode.setAttribute('style', 'opacity: 1;');
}
if (todo.done == true) {
markTodoButtonNode.innerText = "✔";
markTodoButtonNode.setAttribute("style", "background-color: green;");
todoNode.setAttribute('style', 'opacity: 0.7;');
}
markTodoButtonNode.addEventListener("click", function(event) {
var newState = todoFunctions.markTodo(state, todo.id);
// markTodoButtonNode.innerHTML = 'test'
// if (todo.done == true) {document.getElementById('${todo.id}').setAttribute('style', 'background-color: blue;')}
// if (todo.done == false) {document.getElementById('${todo.id}').setAttribute('style', 'background-color: green;')}
//if (todo.done == false) {document.getElementsByClassName("mark-button")[0].innerHTML = "fgesea"}
console.log(document.getElementsByClassName("mark-button")[0]);
update(newState);
});
todoNode.appendChild(markTodoButtonNode);
// add classes for css
return todoNode;
};
// bind create todo form
var todoBlock = document.getElementById("todo-block");
if (addTodoForm) {
addTodoForm.addEventListener("submit", function(event) {
event.preventDefault();
// https://developer.mozilla.org/en-US/docs/Web/Events/submit
// what is inside event.target?
console.log(event.target.description.value);
var description = event.target.description.value; // event.target ....
var newState = todoFunctions.addTodo(state, description); // ?? change this!
update(newState);
event.target.reset();
});
}
// 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");
todoListNode.setAttribute("id", "todo-block");
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);
})();