@@ -22,13 +22,80 @@ <h2>LOCAL TAPAS</h2>
22
22
< form class ="add-items ">
23
23
< input type ="text " name ="item " placeholder ="Item Name " required >
24
24
< input type ="submit " value ="+ Add Item ">
25
+ < input type ="button " class ="check-all " value ="√ ">
26
+ < input type ="button " class ="uncheck-all " value ="x ">
25
27
</ form >
26
28
</ div >
27
29
28
30
< script >
29
31
const addItems = document . querySelector ( '.add-items' ) ;
30
32
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 ) ;
32
99
33
100
</ script >
34
101
0 commit comments