Skip to content

Commit 3ebb118

Browse files
committed
Added LocalStorage (wesbos#15)
1 parent f9c599b commit 3ebb118

File tree

2 files changed

+69
-6
lines changed

2 files changed

+69
-6
lines changed

15 - LocalStorage/index-START.html

Lines changed: 66 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,76 @@ <h2>LOCAL TAPAS</h2>
2222
<form class="add-items">
2323
<input type="text" name="item" placeholder="Item Name" required>
2424
<input type="submit" value="+ Add Item">
25-
</form>
25+
<div class="form-options">
26+
<button class="clear-all">Clear All</button>
27+
<button class="check-all">Check All</button>
28+
<button class="uncheck-all">Uncheck All</button>
29+
</div>
30+
</form>
2631
</div>
2732

2833
<script>
29-
const addItems = document.querySelector('.add-items');
34+
const addItems = document.querySelector('.add-items');
35+
const clearAll = document.querySelector('.clear-all');
36+
const checkAll = document.querySelector('.check-all');
37+
const uncheckAll = document.querySelector('.uncheck-all');
3038
const itemsList = document.querySelector('.plates');
31-
const items = [];
39+
const items = JSON.parse(localStorage.getItem('items')) || [];
40+
41+
function addItem(e) {
42+
e.preventDefault();
43+
const text = (this.querySelector('[name=item]')).value;
44+
const item = {
45+
text,
46+
done : false
47+
};
48+
49+
items.push(item);
50+
populateList(items, itemsList);
51+
localStorage.setItem('items', JSON.stringify(items));
52+
this.reset();
53+
}
54+
55+
function populateList(plates = [], platesList) {
56+
platesList.innerHTML = plates.map((p, i) => {
57+
return `
58+
<li>
59+
<input type="checkbox" data-index=${i} id="items${i}" ${ p.done ? 'checked' : '' } >
60+
<label for="items${i}">${p.text}</label>
61+
</li>
62+
`;
63+
}).join('');
64+
}
65+
66+
function toggleDone(e) {
67+
if (!e.target.matches('input')) return;
68+
const i = e.target.dataset.index;
69+
items[i].done = !items[i].done;
70+
localStorage.setItem('items', JSON.stringify(items));
71+
populateList(items, itemsList);
72+
}
73+
74+
function clearAllItems(e){
75+
e.preventDefault();
76+
items.length = 0;
77+
localStorage.removeItem('items');
78+
populateList(items, itemsList);
79+
}
80+
81+
function massCheck(e, isChecked){
82+
e.preventDefault();
83+
items.forEach(i => i.done = isChecked);
84+
localStorage.setItem('items', JSON.stringify(items));
85+
populateList(items, itemsList);
86+
}
87+
88+
addItems.addEventListener('submit', addItem);
89+
clearAll.addEventListener('click', clearAllItems);
90+
checkAll.addEventListener('click', (e) => massCheck(e, true));
91+
uncheckAll.addEventListener('click', (e) => massCheck(e, false));
92+
itemsList.addEventListener('click', toggleDone);
93+
94+
populateList(items, itemsList);
3295

3396
</script>
3497

15 - LocalStorage/style.css

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,12 +67,12 @@
6767
content: '🌮';
6868
}
6969

70-
.add-items {
70+
.add-items, .form-options {
7171
margin-top: 20px;
7272
}
7373

74-
.add-items input {
74+
input, button {
7575
padding:10px;
7676
outline:0;
7777
border:1px solid rgba(0,0,0,0.1);
78-
}
78+
}

0 commit comments

Comments
 (0)