-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtoDoList.js
More file actions
141 lines (125 loc) · 5.11 KB
/
toDoList.js
File metadata and controls
141 lines (125 loc) · 5.11 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
var app = (function() {
var addButtonElement = document.getElementById("addButton");
var itemDescriptionElement = document.getElementById("ItemDescription");
var toDoListElement = document.getElementById("toDoList");
var item = (function() {
var id = 0;
return function(description, toggleDone) {
this.id = id++;
this.description = description;
this.checked = toggleDone;
};
})();
var toDoList = (function() {
var itemsList = [];
return {
loadItems: function() {
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
itemsList = JSON.parse(this.responseText);
itemsList.forEach(function(element) {
toDoList.addItem(element.description, element.checked);
});
}
};
xhttp.open("GET", "/data/items.json", true);
xhttp.send();
},
addItem: function(description, toggleDone) {
//Create new item and add to the model
var newItem = new item(description, toggleDone);
itemsList.push(newItem);
//Add to the view
var itemElement = createItemElement(newItem.id, newItem.description, toggleDone);
toDoListElement.appendChild(itemElement);
//Clear the text-box
itemDescriptionElement.value = "";
},
removeItem: function(id) {
var itemSelected = document.getElementById("item" + id);
//Remove from the model
itemsList.forEach(function(element, index) {
if (element.id == id) {
itemsList.splice(index, 1);
}
});
//Remove from the view
toDoListElement.removeChild(itemSelected);
},
toggleDone: function(id) {
var itemSelectedText = document.getElementById("descriptionText" + id);
itemsList.forEach(function(element, index) {
if (element.id == id) {
if (element.checked) {
//Model
element.checked = false;
//View
itemSelectedText.setAttribute("class", "");
} else {
//Model
element.checked = true;
//View
itemSelectedText.setAttribute("class", "item-selected");
}
}
});
}
};
})();
//Create the HTML structure for the items
function createItemElement(id, desciption, toggleDone) {
//<li id="item#">
var itemElement = document.createElement("li");
itemElement.setAttribute("id", "item" + id);
//<div class="div-description">
var itemDescriptioncontainerElement = document.createElement("div");
itemDescriptioncontainerElement.setAttribute("class", "description");
//<span id="descriptiontext#"> Text </span></div>
var descriptionText = document.createElement("span");
descriptionText.setAttribute("id", "descriptionText" + id);
descriptionText.appendChild(document.createTextNode(desciption));
itemDescriptioncontainerElement.appendChild(descriptionText);
itemElement.appendChild(itemDescriptioncontainerElement);
//<div class="div-actions">
var actionscontainerElement = document.createElement("div");
actionscontainerElement.setAttribute("class", "actions");
//<imput type="checkbox">
var checkboxElement = document.createElement("input");
checkboxElement.setAttribute("type", "checkbox");
if (toggleDone) {
checkboxElement.checked = true;
descriptionText.setAttribute("class", "item-selected");
}
checkboxElement.addEventListener("click", function(e) {
toDoList.toggleDone(id);
});
actionscontainerElement.appendChild(checkboxElement);
//<imput type="button" class="delete-button"></div></li>
var deleteButtonElement = document.createElement("button");
deleteButtonElement.appendChild(document.createTextNode("DEL"));
deleteButtonElement.setAttribute("class", "delete-button");
deleteButtonElement.addEventListener("click", function(e) {
toDoList.removeItem(id);
});
actionscontainerElement.appendChild(deleteButtonElement);
itemElement.appendChild(actionscontainerElement);
return itemElement;
}
toDoList.loadItems();
function sendDescriptionValue() {
if (itemDescriptionElement.value.length) {
toDoList.addItem(itemDescriptionElement.value, false);
}
}
//Add event to Enter key up
itemDescriptionElement.addEventListener("keyup", function(event) {
if (event.keyCode == 13) {
sendDescriptionValue();
}
});
//Add function for onclick event
addButtonElement.onclick = function() {
sendDescriptionValue();
};
})();