f591a94c4092724b9af16ef6604b3cd95165ee51
Benjamin Renard Initial commit

Benjamin Renard authored 8 years ago

1) exampleData={
2)   'lastChange': 0,
3)   'scases': {
4)     0: {
5)       'name': 'Vacances',
6)       'cats': {
7)         'lastChange': 0,
8)         'cats': {
9)           0: {
10)             'name': 'Papier',
11)             'color': '#f00',
12)             'things': [
13)               {
14)                 'label': 'Papier blanc',
15)                 'checked': false
16)               },
17)               {
18)                 'label': 'Stylo',
19)                 'checked': true
20)               },
21)               {
22)                 'label': "Carte d'identité",
23)                 'checked': false
24)               }
25)             ]
26)           },
27)           1: {
28)             'name': 'Multimédia',
29)             'color': '#0f0',
30)             'things': [
31)               {
32)                 'label': 'Montre',
33)                 'checked': false
34)               },
35)               {
36)                 'label': 'Chargeur montre',
37)                 'checked': true
38)               },
39)               {
40)                 'label': "PC",
41)                 'checked': false
42)               }
43)             ]
44)           }
45)         }
46)       }
47)     }
48)   }
49) };
50) function SCaseList() {
51)   lastChange=0;
52) 
53)   this.loadFromLocalStorage=function() {
54)     if (jQuery.type(localStorage.scases)!='undefined') {
55)       try {
56)         var data=JSON.parse(localStorage.scases);
57)         this.lastChange=data.lastChange;
58)         for (el in data.scases) {
59)           this[el]=new SCase(false,data.scases[el]);
60)         }
61)       }
62)       catch(e) {
63)         for (el in this) {
64)           if (this.isSCase(this[el])) {
65)             delete this[el];
66)           }
67)         }
68)         myconfirm('Erreur en chargeant les données locales. On les purges ?',
69)           function(data) {
70)             delete localStorage.scases;
71)             location.reload();
72)           }
73)         );
74)       }
75)     }
76)     else {
77)       myconfirm("<h2>Bienvenu !</h2><p>Souhaitez-vous charger les données d'exemple ?</p>",
78)         function(data) {
79)           localStorage.scases=JSON.stringify(exampleData);
80)           location.reload();
81)         }
82)       );
83)     }
84)   }
85) 
86)   this.export=function() {
87)     return {
88)       'lastChange': this.lastChange,
89)       'scases': this.each(function(idx,scase) {
90)         return scase.export();
91)       })
92)     };
93)   }
94) 
95)   this.import=function(data) {
96)     ret={};
97)     for (el in this) {
98)       if (this.isSCase(this[el])) {
99)         delete ret[el];
100)       }
101)     }
102)     this.lastChange=data.lastChange;
103)     for (el in data.scases) {
104)       this[el]=new SCase(false,data.scases[el]);
105)     }
106)     return true;
107)   }
108) 
109)   this.save=function() {
110)     localStorage.scases=JSON.stringify(this.export());
111)   }
112) 
113)   this.each=function(fct) {
114)     var idx=0;
115)     var ret={};
116)     for (el in this) {
117)       if(this.isSCase(this[el])) {
118)         ret[el]=fct(idx++,this[el]);
119)       }
120)     }
121)     return ret;
122)   }
123) 
124)   this.count=function() {
125)     len=0;
126)     this.each(function(idx,scase) {
127)       len=len+1;
128)     });
129)     return len;
130)   }
131) 
132)   this.isSCase=function(el) {
133)     return (jQuery.type(el)=='object' && jQuery.type(el.isSCase)=='function' && el.isSCase());
134)   }
135) 
136)   this.byName=function(name) {
137)     for (el in this) {
138)       if(this.isSCase(this[el])) {
139)         if (this[el].name==name) {
140)           return this[el];
141)         }
142)       }
143)     }
144)     return false;
145)   }
146) 
147)   this.removeSCase=function(name) {
148)     for (el in this) {
149)       if (this.isSCase(this[el]) && this[el].name==name) {
150)         delete this[el];
151)         return true;
152)       }
153)     }
154)     return false;
155)   }
156) 
157)   this.newSCase=function(name) {
158)     if (!this.isSCase(this[name])) {
159)       this[name]=new SCase(name);
160)       return this[name];
161)     }
162)     return false;
163)   }
164) 
165)   this.renameSCase=function(name,newname) {
166)     var scase=this.byName(name);
167)     if (scase && !this.byName(newname)) {
168)       scase.name=newname;
169)       return scase;
170)     }
171)     return false;
172)   }
173) 
174)   this.copySCase=function(name,newname) {
175)     var orig_scase=this.byName(name);
176)     if (this.isSCase(orig_scase) && !this.byName(newname)) {
177)       this[newname]=new SCase(false,orig_scase.export());
178)       this[newname].name=newname;
179)       return this[newname];
180)     }
181)     return false;
182)   }
183) 
Benjamin Renard Add reset scase feature

Benjamin Renard authored 8 years ago

184)   this.resetSCase=function(name) {
185)     for (el in this) {
186)       if (this.isSCase(this[el]) && this[el].name==name) {
187)         return this[el].reset();
188)       }
189)     }
190)     return false;
191)   }
Benjamin Renard Initial commit

Benjamin Renard authored 8 years ago

192) }
193) 
194) function SCase(name,data) {
195)   this.name=name;
196)   this.cats=new CatList();
197) 
198)   this.isSCase=function() {
199)     return true;
200)   }
201) 
202)   this.export=function() {
203)     return {
204)       'name': encodeURIComponent(this.name),
205)       'cats': this.cats.export()
206)     };
207)   }
208) 
209)   this.byName=function(name) {
210)     for (idx in this.cats) {
211)       if (name==this.cats[idx].name) {
212)         return this.cats[idx];
213)       }
214)     }
215)     return false;
216)   }
217) 
218)   this.count=function() {
219)     return this.cats.length;
220)   }
221) 
Benjamin Renard Add reset scase feature

Benjamin Renard authored 8 years ago

222)   this.reset=function() {
223)     this.cats.each(function(idx,cat) {
224)       for (idx in cat.things) {
225)         if (cat.things[idx].checked) {
226)           cat.things[idx].checked=false;
227)         }
228)       }
229)     });
230)     return true;
231)   }
232)