-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp.js
134 lines (112 loc) · 3.76 KB
/
app.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
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
const dateElement = document.getElementById('date');
const list = document.getElementById('list');
const input = document.querySelector('input');
const add = document.getElementById('add');
const check = "fa-check-circle";
const unCheck = "fa-circle-thin";
const line_through = "lineThrough";
const options = {weekday:"long", month:"short", day:"numeric"};
const today = new Date();
dateElement.innerHTML = today.toLocaleDateString("en-US", options);
let LIST = [];
let id = 0;
add.addEventListener("click", (e) => {
const toDo = input.value;
addToDo(toDo, id, false, false, false, false, false);
});
input.addEventListener("keypress", (e) => {
if (e.which === 13){
const toDo = input.value;
addToDo(toDo, id, false, false, false, false, false);
}
});
function addToDo(toDo, id, up, down, done, edit, trash){
if (trash){
return;
}
if (toDo){
LIST.push(
{
name: toDo,
id: id,
up: false,
down: false,
done: false,
edit: false,
trash: false
}
);
input.value = "";
id++;
const DONE = done ? check : unCheck;
const LINE = done ? line_through : "";
const text = `<li class="item">
<i class="co fa fa-circle-thin ${DONE}" id="${id}" job="complete"></i>
<p class="text ${LINE}"> ${toDo} </p>
<input type="text">
<div class="icons">
<i class="fas fa-arrow-up" id="${id}"" job="moveUp"></i>
<i class="fas fa-arrow-down" id="${id}"" job="moveDown"></i>
<i class="fas fa-edit" id="${id}"" job="edit"></i>
<i class="de fa fa-trash-o" id="${id}" job="delete"></i>
</div>
</li>`;
const position = "beforeend";
list.insertAdjacentHTML(position, text);
}
else {
alert("Add a To-Do!");
}
}
function complete(element){
element.classList.toggle(check);
element.classList.toggle(unCheck);
element.parentNode.querySelector(".text").classList.toggle(line_through);
LIST[element.id].done = LIST[element.id].done ? false : true;
}
function remove(element){
element.parentNode.parentNode.remove();
LIST[element.id].trash = true;
}
function edit(element){
let listItem = element.parentNode.parentNode;
let editInput = listItem.querySelector('input[type=text]');
let label = listItem.querySelector("p");
let containsClass = listItem.classList.contains("editMode");
if (containsClass){
label.innerText = editInput.value;
}
else{
editInput.value = label.innerText;
}
listItem.classList.toggle("editMode");
}
function moveUp(element){
var wrapper = element.parentNode.parentNode;
if (wrapper.previousElementSibling)
wrapper.parentNode.insertBefore(wrapper, wrapper.previousElementSibling);
}
function moveDown(element){
var wrapper = element.parentNode.parentNode;
if (wrapper.nextElementSibling)
wrapper.parentNode.insertBefore(wrapper.nextElementSibling, wrapper);
}
list.addEventListener("click", (e) => {
let element = e.target;
const job = e.target.attributes.job.value;
if (job == "complete"){
complete(element);
}
else if (job == "delete"){
remove(element);
}
else if (job == "edit"){
edit(element);
}
else if (job == "moveUp"){
moveUp(element);
}
else if (job == "moveDown"){
moveDown(element);
}
});