@@ -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
0 commit comments