Skip to content

Commit 762e778

Browse files
author
Kyle Bradshaw
committed
15 local storage, label+checkbox css: checkAll unCheckAll added
1 parent f5db7f5 commit 762e778

File tree

2 files changed

+73
-1
lines changed

2 files changed

+73
-1
lines changed

15 - LocalStorage/index-START.html renamed to 15 - LocalStorage/index.html

Lines changed: 68 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,80 @@ <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+
<input type="button" class="check-all" value="">
26+
<input type="button" class="uncheck-all" value="x">
2527
</form>
2628
</div>
2729

2830
<script>
2931
const addItems = document.querySelector('.add-items');
3032
const itemsList = document.querySelector('.plates');
31-
const items = [];
33+
const checkAlll = document.querySelector('.check-all');
34+
const unCheckAlll = document.querySelector('.uncheck-all');
35+
const items = JSON.parse(localStorage.getItem('items')) || []; //get from localStorage or set to empty array
36+
37+
function addItem(e) {
38+
e.preventDefault();
39+
const text = this.querySelector('[name="item"]').value;
40+
const item = {
41+
text, //text: text
42+
done: false
43+
};
44+
console.log(item);
45+
items.push(item);
46+
populateList(items, itemsList);
47+
localStorage.setItem('items', JSON.stringify(items));
48+
this.reset(); //resets form
49+
50+
}
51+
52+
function populateList(plates = [], platesList) { //make more resilient
53+
platesList.innerHTML = plates.map((plate, i) => {
54+
//return a string for each plate
55+
return `
56+
<li>
57+
<input type="checkbox" data-index=${i} id="item${i}" ${plate.done ? 'checked' : ''} />
58+
<label for="item${i}">${plate.text}</label>
59+
</li>
60+
`
61+
}).join('');
62+
}
63+
64+
function toggleDone(e) {
65+
//only .plates exists, so we need to listen for event delegation
66+
if(!e.target.matches('input')) return; //ONLY WANT INPUT CHECKS
67+
const el = e.target;
68+
const index = el.dataset.index;
69+
items[index].done = !items[index].done;
70+
localStorage.setItem('items', JSON.stringify(items));
71+
populateList(items, itemsList); //needed?
72+
}
73+
74+
function checkAll() {
75+
console.log('checkall');
76+
items.forEach(item => {
77+
item.done = true;
78+
});
79+
populateList(items, itemsList);
80+
localStorage.setItem('items', JSON.stringify(items));
81+
}
82+
83+
function unCheckAll() {
84+
console.log('uncheckall');
85+
items.forEach(item => {
86+
item.done = false;
87+
});
88+
populateList(items, itemsList);
89+
localStorage.setItem('items', JSON.stringify(items));
90+
}
91+
92+
addItems.addEventListener('submit', addItem);
93+
itemsList.addEventListener('click', toggleDone);
94+
checkAlll.addEventListener('click', checkAll);
95+
unCheckAlll.addEventListener('click', unCheckAll);
96+
97+
//get localStorage
98+
populateList(items, itemsList);
3299

33100
</script>
34101

15 - LocalStorage/style.css

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,13 +58,18 @@
5858
display: none;
5959
}
6060

61+
62+
/*cool checkbox replacement*/
63+
/*LEARN*/
6164
.plates input + label:before {
6265
content: '⬜️';
6366
margin-right: 10px;
6467
}
6568

6669
.plates input:checked + label:before {
6770
content: '🌮';
71+
content: '💩';
72+
content: '🍔';
6873
}
6974

7075
.add-items {

0 commit comments

Comments
 (0)