forked from wesbos/JavaScript30
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathscript.js
73 lines (59 loc) · 1.89 KB
/
script.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
const addItems = document.querySelector('.add-items')
const itemsList = document.querySelector('.plates')
const items = JSON.parse(localStorage.getItem('items')) || []
const clearItemsBtn = document.querySelector('.clear-items')
const clearSelectionBtn = document.querySelector('.clear-selection')
const selectAllBtn = document.querySelector('.select-all')
/*
* We want a reusable function
*/
const populateList = function (plates = [], platesList) {
platesList.innerHTML = plates.map((plate, idx) => {
return `
<li>
<input type="checkbox" data-index=${idx} id="item${idx}" ${plate.done ? 'checked' : ''}/>
<label for="item${idx}">${plate.text}</label>
</li>
`
})
.join('')
}
const addItem = function (e) {
e.preventDefault()
const text = (this.querySelector('[name=item]'))
.value
const item = {
text,
done: false
}
items.push(item)
populateList(items, itemsList)
localStorage.setItem('items', JSON.stringify(items))
this.reset()
}
const toggleDone = function (e) {
if (!e.target.matches('input')) return
const idx = e.target.dataset.index
items[idx].done = !items[idx].done
localStorage.setItem('items', JSON.stringify(items))
populateList(items, itemsList)
}
addItems.addEventListener('submit', addItem)
// Get previous items
populateList(items, itemsList)
itemsList.addEventListener('click', toggleDone)
clearItemsBtn.addEventListener('click', () => {
items.splice(0, items.length)
populateList(items, itemsList)
localStorage.setItem('items', JSON.stringify(items))
})
clearSelectionBtn.addEventListener('click', () => {
items.forEach(i => i.done = false)
populateList(items, itemsList)
localStorage.setItem('items', JSON.stringify(items))
})
selectAllBtn.addEventListener('click', () => {
items.forEach(i => i.done = true)
populateList(items, itemsList)
localStorage.setItem('items', JSON.stringify(items))
})