-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp.js
200 lines (168 loc) · 5.77 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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
document.addEventListener('DOMContentLoaded', function () {
let list = document.querySelector('#shopping__list ul');
let products;
let productsObj;
// display items from local storage
const displayItems = function () {
productsObj.forEach(function (product) {
// create elements
const li = document.createElement('li');
const productItem = document.createElement('span');
const deleteBtn = document.createElement('img');
// add content
deleteBtn.setAttribute('src', './images/trash.svg');
(productItem.style.fontFamily = 'Roboto'), 'san-serif';
productItem.textContent = product;
// add classes
productItem.classList.add('item');
deleteBtn.classList.add('delete');
// append to document
li.appendChild(productItem);
li.appendChild(deleteBtn);
list.appendChild(li);
});
};
// display updated items from local storage
const updateItems = function () {
itemsObj.forEach(function (item) {
// create elements
const li = document.createElement('li');
const productItem = document.createElement('span');
const deleteBtn = document.createElement('img');
// add content
deleteBtn.setAttribute('src', './images/trash.svg');
// (productItem.style.color = '#fff');
productItem.textContent = item;
// add classes
productItem.classList.add('item');
deleteBtn.classList.add('delete');
// append to document
li.appendChild(productItem);
li.appendChild(deleteBtn);
list.appendChild(li);
});
};
// grab local storage array immediately when DOM is loaded - convert it to an object and call displayItems function
loadStorage();
function loadStorage() {
// if there is nothing saved initially then save an empty array
if (localStorage.getItem('products') === null) {
localStorage.setItem('products', '[]');
}
if (localStorage.getItem('products') !== null) {
products = localStorage.getItem('products');
productsObj = JSON.parse(products);
displayItems();
}
}
// sort items
const sortBox = document.querySelector('#sort');
sortBox.addEventListener('change', function (e) {
const lis = list.querySelectorAll('li');
if (sortBox.checked) {
lis.forEach(function (li) {
list.removeChild(li);
});
let items = localStorage.getItem('products');
itemsObj = JSON.parse(items);
// display sorted items from local storage
itemsObj.sort();
updateItems();
} else {
lis.forEach(function (li) {
list.removeChild(li);
});
let items = localStorage.getItem('products');
itemsObj = JSON.parse(items);
// display unsorted items from local storage
updateItems();
}
});
// delete items
list.addEventListener('click', function (e) {
if (e.target.className === 'delete') {
const li = e.target.parentElement;
list.removeChild(li);
// had to make sure that the items were also removed from local storage
const items = localStorage.getItem('products');
itemsObj = JSON.parse(items);
const fliteredItems = itemsObj.filter(function (obj) {
if (li.textContent !== obj) {
return true;
}
});
localStorage.setItem('products', JSON.stringify(fliteredItems));
}
});
// add items
let addForm = document.forms['add__item'];
addForm.addEventListener('submit', function (e) {
e.preventDefault();
const value = addForm.querySelector('input[type="text"]').value;
if (value) {
// create elements
const li = document.createElement('li');
const productItem = document.createElement('span');
const deleteBtn = document.createElement('img');
// add content
deleteBtn.setAttribute('src', './images/trash.svg');
// (productItem.style.fontFamily = 'Darumadrop One'), 'cursive';
productItem.textContent = value;
// add classes
productItem.classList.add('item');
deleteBtn.classList.add('delete');
// append to document
li.appendChild(productItem);
li.appendChild(deleteBtn);
list.appendChild(li);
addForm.reset();
} else {
return;
}
// save input value to local storage
let newData = value;
// get old data and attach it to the new data
let oldData = JSON.parse(localStorage.getItem('products'));
oldData.push(newData);
// save old + new data to local storage
localStorage.setItem('products', JSON.stringify(oldData));
});
// hide items
const hideBox = document.querySelector('#hide');
hideBox.addEventListener('change', function (e) {
if (hideBox.checked) {
list.style.display = 'none';
} else {
list.style.display = 'initial';
}
});
// filter items
const searchBar = document.forms['search__items'].querySelector('input');
searchBar.addEventListener('keyup', function (e) {
const term = e.target.value.toLowerCase();
const items = list.getElementsByTagName('li');
Array.from(items).forEach(function (item) {
const product = item.firstElementChild.textContent;
if (product.toLowerCase().indexOf(term) != -1) {
item.style.display = 'block';
} else {
item.style.display = 'none';
}
});
});
// tabbed content
// const tabs = document.querySelector('.tabs');
// const panels = document.querySelectorAll('.panel');
// tabs.addEventListener('click', function (e) {
// if (e.target.tagName === 'LI') {
// const targetPanel = document.querySelector(e.target.dataset.target);
// panels.forEach(function (panel) {
// if (panel === targetPanel) {
// panel.classList.add('active');
// } else {
// panel.classList.remove('active');
// }
// });
// }
// });
});