412617115c52d15fb0e44ae7863916fa6f7c9d74
Benjamin Renard Rework on data structure to...

Benjamin Renard authored 8 years ago

1) 
2) 
3) function SCaseList() {
4)   lastChange=0;
5) 
6)   this.importExampleData=function() {
7)     var exampleData={
8)       'Vacances': {
9)         'Papier': {
10)           'color': '#f00',
11)           'things': ['Papier blanc', 'Stylo', "Carte d'identité"]
12)         },
13)         'Multimédia' : {
14)           'color': '#0f0',
15)           'things': ['Montre', 'Chargeur montre', "PC portable"]
16)         }
17)       }
18)     };
19)     for (scaseName in exampleData) {
20)       var scase=this.newSCase(scaseName);
21)       for (catName in exampleData[scaseName]) {
22)         var cat=scase.cats.newCat(catName);
23)         for (idx in exampleData[scaseName][catName].things) {
24)           cat.newThing(exampleData[scaseName][catName].things[idx]);
Benjamin Renard Initial commit

Benjamin Renard authored 8 years ago

25)         }
26)       }
27)     }
28)   }
29) 
30)   this.loadFromLocalStorage=function() {
31)     if (jQuery.type(localStorage.scases)!='undefined') {
32)       try {
33)         var data=JSON.parse(localStorage.scases);
34)         this.lastChange=data.lastChange;
35)         for (el in data.scases) {
Benjamin Renard Rework on data structure to...

Benjamin Renard authored 8 years ago

36)           this[el]=new SCase(false,false,data.scases[el]);
Benjamin Renard Initial commit

Benjamin Renard authored 8 years ago

37)         }
38)       }
39)       catch(e) {
40)         for (el in this) {
41)           if (this.isSCase(this[el])) {
42)             delete this[el];
43)           }
44)         }
45)         myconfirm('Erreur en chargeant les données locales. On les purges ?',
46)           function(data) {
47)             delete localStorage.scases;
48)             location.reload();
49)           }
50)         );
51)       }
52)     }
53)     else {
54)       myconfirm("<h2>Bienvenu !</h2><p>Souhaitez-vous charger les données d'exemple ?</p>",
Benjamin Renard Rework on data structure to...

Benjamin Renard authored 8 years ago

55)         function(scases) {
56)           scases.importExampleData();
57)           scases.save();
58)           show_scases();
59)         },
60)         false,
61)         this
Benjamin Renard Initial commit

Benjamin Renard authored 8 years ago

62)       );
63)     }
64)   }
65) 
66)   this.export=function() {
67)     return {
68)       'lastChange': this.lastChange,
69)       'scases': this.each(function(idx,scase) {
70)         return scase.export();
71)       })
72)     };
73)   }
74) 
75)   this.import=function(data) {
76)     ret={};
77)     for (el in this) {
78)       if (this.isSCase(this[el])) {
79)         delete ret[el];
80)       }
81)     }
82)     this.lastChange=data.lastChange;
83)     for (el in data.scases) {
Benjamin Renard Rework on data structure to...

Benjamin Renard authored 8 years ago

84)       this[el]=new SCase(false,false,data.scases[el]);
Benjamin Renard Initial commit

Benjamin Renard authored 8 years ago

85)     }
86)     return true;
87)   }
88) 
89)   this.save=function() {
90)     localStorage.scases=JSON.stringify(this.export());
91)   }
92) 
93)   this.each=function(fct) {
94)     var idx=0;
95)     var ret={};
96)     for (el in this) {
97)       if(this.isSCase(this[el])) {
98)         ret[el]=fct(idx++,this[el]);
99)       }
100)     }
101)     return ret;
102)   }
103) 
104)   this.count=function() {
105)     len=0;
106)     this.each(function(idx,scase) {
107)       len=len+1;
108)     });
109)     return len;
110)   }
111) 
112)   this.isSCase=function(el) {
113)     return (jQuery.type(el)=='object' && jQuery.type(el.isSCase)=='function' && el.isSCase());
114)   }
115) 
116)   this.byName=function(name) {
117)     for (el in this) {
118)       if(this.isSCase(this[el])) {
119)         if (this[el].name==name) {
120)           return this[el];
121)         }
122)       }
123)     }
124)     return false;
125)   }
126) 
127)   this.removeSCase=function(name) {
128)     for (el in this) {
129)       if (this.isSCase(this[el]) && this[el].name==name) {
130)         delete this[el];
131)         return true;
132)       }
133)     }
134)     return false;
135)   }
136) 
137)   this.newSCase=function(name) {
Benjamin Renard Rework on data structure to...

Benjamin Renard authored 8 years ago

138)     if (!this.byName(this[name])) {
139)       var uuid=uuid||generate_uuid();
140)       this[uuid]=new SCase(uuid,name);
141)       return this[uuid];
Benjamin Renard Initial commit

Benjamin Renard authored 8 years ago

142)     }
143)     return false;
144)   }
145) 
146)   this.renameSCase=function(name,newname) {
147)     var scase=this.byName(name);
148)     if (scase && !this.byName(newname)) {
149)       scase.name=newname;
Benjamin Renard Rework on data structure to...

Benjamin Renard authored 8 years ago

150)       scase.lastChange=new Date().getTime();
Benjamin Renard Initial commit

Benjamin Renard authored 8 years ago

151)       return scase;
152)     }
153)     return false;
154)   }
155) 
156)   this.copySCase=function(name,newname) {
157)     var orig_scase=this.byName(name);
158)     if (this.isSCase(orig_scase) && !this.byName(newname)) {
Benjamin Renard Rework on data structure to...

Benjamin Renard authored 8 years ago

159)       var uuid=uuid||generate_uuid();
160)       this[uuid]=new SCase(false,false,orig_scase.export());
161)       this[uuid].uuid=uuid;
162)       this[uuid].lastChange=new Date().getTime();
163)       this[uuid].name=newname;
164)       return this[uuid];
Benjamin Renard Initial commit

Benjamin Renard authored 8 years ago

165)     }
166)     return false;
167)   }
168) 
Benjamin Renard Add reset scase feature

Benjamin Renard authored 8 years ago

169)   this.resetSCase=function(name) {
170)     for (el in this) {
171)       if (this.isSCase(this[el]) && this[el].name==name) {
172)         return this[el].reset();
173)       }
174)     }
175)     return false;
176)   }
Benjamin Renard Initial commit

Benjamin Renard authored 8 years ago

177) }
178) 
Benjamin Renard Rework on data structure to...

Benjamin Renard authored 8 years ago

179) function SCase(uuid,name,data) {
180)   this.uuid=uuid||generate_uuid();
Benjamin Renard Initial commit

Benjamin Renard authored 8 years ago

181)   this.name=name;
182)   this.cats=new CatList();
Benjamin Renard Rework on data structure to...

Benjamin Renard authored 8 years ago

183)   this.lastChange=new Date().getTime();
Benjamin Renard Initial commit

Benjamin Renard authored 8 years ago

184) 
185)   this.isSCase=function() {
186)     return true;
187)   }
188) 
Benjamin Renard Rework on data structure to...

Benjamin Renard authored 8 years ago

189)   this.import=function(data) {
190)     this.uuid=data.uuid || generate_uuid();
191)     this.lastChange=data.lastChange || new Date().getTime();
192)     this.name=decodeURIComponent(data.name);
193)     if (jQuery.type(data.cats) == 'object') {
194)       this.cats=new CatList(data.cats);
195)     }
196)     return true;
197)   }
198) 
Benjamin Renard Initial commit

Benjamin Renard authored 8 years ago

199)   this.export=function() {
200)     return {
Benjamin Renard Rework on data structure to...

Benjamin Renard authored 8 years ago

201)       'uuid': this.uuid,
202)       'lastChange': this.lastChange,
Benjamin Renard Initial commit

Benjamin Renard authored 8 years ago

203)       'name': encodeURIComponent(this.name),
204)       'cats': this.cats.export()
205)     };
206)   }
207) 
208)   this.byName=function(name) {
209)     for (idx in this.cats) {
210)       if (name==this.cats[idx].name) {
211)         return this.cats[idx];
212)       }
213)     }
214)     return false;
215)   }
216) 
Benjamin Renard Rework on home page

Benjamin Renard authored 8 years ago

217)   this.stats=function() {
218)     var cats=0;
219)     var things=0;
220)     var things_done=0;
221)     this.cats.each(function(cidx,cat) {
222)       cats++;
223)       for (idx in cat.things) {
224)         things++;
225)         if (cat.things[idx].checked) {
226)           things_done++;
227)         }
228)       }
229)     });
230)     return {
231)       'cats': cats,
232)       'things': things,
233)       'done': things_done
234)     }
Benjamin Renard Initial commit

Benjamin Renard authored 8 years ago

235)   }
236) 
Benjamin Renard Add reset scase feature

Benjamin Renard authored 8 years ago

237)   this.reset=function() {
238)     this.cats.each(function(idx,cat) {
239)       for (idx in cat.things) {
240)         if (cat.things[idx].checked) {
241)           cat.things[idx].checked=false;
242)         }
243)       }
244)     });
Benjamin Renard Rework on data structure to...

Benjamin Renard authored 8 years ago

245)     this.lastChange=new Date().getTime();
Benjamin Renard Add reset scase feature

Benjamin Renard authored 8 years ago

246)     return true;
247)   }
248) 
Benjamin Renard Initial commit

Benjamin Renard authored 8 years ago

249)   /*
250)    * Contructor
251)    */
252)   if (jQuery.type(data)=='object') {
253)     try {
Benjamin Renard Rework on data structure to...

Benjamin Renard authored 8 years ago

254)       this.import(data);
Benjamin Renard Initial commit

Benjamin Renard authored 8 years ago

255)     }
256)     catch (e) {
257)       console.log(e);
258)       alert('Une erreur est survenue en chargeant la valise '+this.name+' depuis le cache');
259)     }
260)   }
261) 
262) }
263) 
264) 
265) function CatList(data) {
266)   this.export=function() {
Benjamin Renard Rework on data structure to...

Benjamin Renard authored 8 years ago

267)     return this.each(function(idx,cat) {
268)       return cat.export();
269)     });
Benjamin Renard Initial commit

Benjamin Renard authored 8 years ago

270)   }
271) 
272)   this.import=function(data) {
273)     for (el in this) {
274)       if (this.isCat(this[el])) {
275)         delete this[el];
276)       }
277)     }
Benjamin Renard Rework on data structure to...

Benjamin Renard authored 8 years ago

278)     for (el in data) {
279)       this[el]=new Cat(el,false,false,data[el]);
Benjamin Renard Initial commit

Benjamin Renard authored 8 years ago

280)     }
281)     return true;
282)   }
283) 
284)   this.each=function(fct) {
285)     var idx=0;
286)     var ret={};
287)     for (el in this) {
288)       if(this.isCat(this[el])) {
289)         ret[el]=fct(idx++,this[el]);
290)       }
291)     }
292)     return ret;
293)   }
294) 
295)   this.count=function() {
296)     len=0;
297)     this.each(function(idx,cat) {
298)       len=len+1;
299)     });
300)     return len;
301)   }
302) 
303)   this.isCat=function(el) {
304)     return (jQuery.type(el)=='object' && jQuery.type(el.isCat)=='function' && el.isCat());
305)   }
306) 
307)   this.byName=function(name) {
308)     for (el in this) {
309)       if(this.isCat(this[el])) {
310)         if (this[el].name==name) {
311)           return this[el];
312)         }
313)       }
314)     }
315)     return false;
316)   }
317) 
318)   this.newCat=function(name) {
319)     if (!this.isCat(this[name])) {
Benjamin Renard Rework on data structure to...

Benjamin Renard authored 8 years ago

320)       var uuid=uuid||generate_uuid();
321)       this[uuid]=new Cat(uuid,name);
322)       return this[uuid];
Benjamin Renard Initial commit

Benjamin Renard authored 8 years ago

323)     }
324)     return false;
325)   }
326) 
327)   this.renameCat=function(name,newname) {
328)     var cat=this.byName(name);
329)     if (cat && !this.byName(newname)) {
330)       cat.name=newname;
Benjamin Renard Rework on data structure to...

Benjamin Renard authored 8 years ago

331)       cat.lastChange=new Date().getTime();
Benjamin Renard Initial commit

Benjamin Renard authored 8 years ago

332)       return cat;
333)     }
334)     return false;
335)   }
336) 
337)   this.removeCat=function(name) {
338)     for (el in this) {
339)       if (this.isCat(this[el]) && this[el].name==name) {
340)         delete this[el];
341)         return true;
342)       }
343)     }
344)     return false;
345)   }
346) 
347) 
348) 
349)   /*
350)    * Contructor
351)    */
352)   if (jQuery.type(data)=='object') {
353)     try {
354)       this.import(data);
355)     }
356)     catch (e) {
357)       console.log(e);
358)       alert('Une erreur est survenue en chargeant la liste de catégorie depuis le cache');
359)     }
360)   }
361) 
362) }
363) 
Benjamin Renard Rework on data structure to...

Benjamin Renard authored 8 years ago

364) function Cat(uuid,name,color,data) {
365)   this.uuid=generate_uuid();
366)   this.lastChange=new Date().getTime();
Benjamin Renard Initial commit

Benjamin Renard authored 8 years ago

367)   this.name=name;
368)   this.color=color || '#'+(0x1000000+(Math.random())*0xffffff).toString(16).substr(1,6);
Benjamin Renard Rework on data structure to...

Benjamin Renard authored 8 years ago

369)   this.things={};
Benjamin Renard Initial commit

Benjamin Renard authored 8 years ago

370) 
371)   this.isCat=function() {
372)     return true;
373)   }
374) 
Benjamin Renard Rework on data structure to...

Benjamin Renard authored 8 years ago

375)   this.import=function(data) {
376)     this.uuid=data.uuid || generate_uuid();
377)     this.lastChange=data.lastChange||new Date().getTime();
378)     this.name=decodeURIComponent(data.name);
379)     this.color=data.color;
380)     if (jQuery.type(data.things) == 'object') {
381)       for (tuuid in data.things) {
382)         this.things[tuuid]=new Thing(tuuid);
383)         this.things[tuuid].import(data.things[tuuid]);
384)       }
385)     }
386)     return true;
387)   }
388) 
Benjamin Renard Initial commit

Benjamin Renard authored 8 years ago

389)   this.export=function() {
Benjamin Renard Rework on data structure to...

Benjamin Renard authored 8 years ago

390)     var things={};
391)     for (tuuid in this.things) {
392)       things[tuuid]=this.things[tuuid].export();
Benjamin Renard Initial commit

Benjamin Renard authored 8 years ago

393)     }
394)     return {
Benjamin Renard Rework on data structure to...

Benjamin Renard authored 8 years ago

395)       'uuid': this.uuid,
396)       'lastChange': this.lastChange,
Benjamin Renard Initial commit

Benjamin Renard authored 8 years ago

397)       'name': encodeURIComponent(this.name),
398)       'color': this.color,
399)       'things': things
400)     };
401)   }
402) 
403)   this.byLabel=function(label) {
404)     for (idx in this.things) {
405)       if (label==this.things[idx].label) {
406)         return this.things[idx];
407)       }
408)     }
409)     return false;
410)   }
411) 
412)   this.count=function() {
Benjamin Renard Rework on data structure to...

Benjamin Renard authored 8 years ago

413)     return keys(this.things).length;
Benjamin Renard Initial commit

Benjamin Renard authored 8 years ago

414)   }
415) 
Benjamin Renard Rework on data structure to...

Benjamin Renard authored 8 years ago

416)   this.stats=function() {
Benjamin Renard Initial commit

Benjamin Renard authored 8 years ago

417)     var count=0;
Benjamin Renard Rework on data structure to...

Benjamin Renard authored 8 years ago

418)     var done=0;
Benjamin Renard Initial commit

Benjamin Renard authored 8 years ago

419)     for (idx in this.things) {
420)       if (this.things[idx].checked) {
Benjamin Renard Rework on data structure to...

Benjamin Renard authored 8 years ago

421)         done+=1;
Benjamin Renard Initial commit

Benjamin Renard authored 8 years ago

422)       }
Benjamin Renard Rework on data structure to...

Benjamin Renard authored 8 years ago

423)       count+=1;
Benjamin Renard Initial commit

Benjamin Renard authored 8 years ago

424)     }
Benjamin Renard Rework on data structure to...

Benjamin Renard authored 8 years ago

425)     return {
426)       'things': count,
427)       'done': done
428)     };
429)   }
430) 
431)   this.newThing=function(label) {
432)     if (!this.byLabel(label)) {
433)       var uuid=generate_uuid();
434)       this.things[uuid]=new Thing(uuid,label);
435)       return true;
436)     }
437)     return false;
Benjamin Renard Initial commit

Benjamin Renard authored 8 years ago

438)   }
439) 
440)   this.renameThing=function(label,newlabel) {
441)     var thing=this.byLabel(label);
442)     if (thing && !this.byLabel(newlabel)) {
443)       thing.label=newlabel;
Benjamin Renard Rework on data structure to...

Benjamin Renard authored 8 years ago

444)       thing.lastChange=new Date().getTime();
Benjamin Renard Initial commit

Benjamin Renard authored 8 years ago

445)       return thing;
446)     }
447)     return false;
448)   }
449) 
450)   this.removeThing=function(label) {
451)     for (idx in this.things) {
452)       if (this.things[idx].label==label) {
453)         delete this.things[idx];
454)         return true;
455)       }
456)     }
457)     return false;
458)   }
459) 
460)   /*
461)    * Contructor
462)    */
463)   if (jQuery.type(data)=='object') {
464)     try {
Benjamin Renard Rework on data structure to...

Benjamin Renard authored 8 years ago

465)       this.import(data);
Benjamin Renard Initial commit

Benjamin Renard authored 8 years ago

466)     }
467)     catch (e) {
468)       console.log(e);
469)       alert('Une erreur est survenue en chargeant la catégorie catégorie '+this.name+' depuis le cache');
470)     }
471)   }
472) 
473) }
474) 
Benjamin Renard Rework on data structure to...

Benjamin Renard authored 8 years ago

475) function Thing(uuid,label,checked) {
476)   this.uuid=uuid||generate_uuid();
477)   this.lastChange=new Date().getTime();
Benjamin Renard Initial commit

Benjamin Renard authored 8 years ago

478)   this.label=label;
479)   this.checked=checked;
Benjamin Renard Rework on data structure to...

Benjamin Renard authored 8 years ago

480) 
481)   this.import=function(data) {
482)     this.uuid=data.uuid||generate_uuid();
483)     this.lastChange=data.lastChange||new Date().getTime();
484)     this.label=decodeURIComponent(data.label),
485)     this.checked=data.checked;
486)   }
487) 
Benjamin Renard Initial commit

Benjamin Renard authored 8 years ago

488)   this.export=function() {
489)     return {
Benjamin Renard Rework on data structure to...

Benjamin Renard authored 8 years ago

490)       'uuid': this.uuid,
491)       'lastChange': this.lastChange,
Benjamin Renard Initial commit

Benjamin Renard authored 8 years ago

492)       'label': encodeURIComponent(this.label),
493)       'checked': this.checked
494)     };
495)   }
Benjamin Renard Rework on data structure to...

Benjamin Renard authored 8 years ago

496) 
497)   this.setChecked=function(value) {
498)     this.checked=value;
499)     this.lastChange=new Date().getTime();
500)   }