10dc9ff15f08a0c7f86a7bbe6679f937da02eef1
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) {
Benjamin Renard Add trash feature on scase,...

Benjamin Renard authored 7 years ago

130)         this[el].remove();
Benjamin Renard Initial commit

Benjamin Renard authored 8 years ago

131)         return true;
132)       }
133)     }
134)     return false;
135)   }
136) 
137)   this.newSCase=function(name) {
Benjamin Renard Add trash feature on scase,...

Benjamin Renard authored 7 years ago

138)     if (this.byName(this[name])) {
139)       var scase=this.byName(name);
140)       if (scase.removed) {
141)         scase.restore();
142)         return true;
143)       }
144) 
145)     }
146)     else {
Benjamin Renard Rework on data structure to...

Benjamin Renard authored 8 years ago

147)       var uuid=uuid||generate_uuid();
148)       this[uuid]=new SCase(uuid,name);
149)       return this[uuid];
Benjamin Renard Initial commit

Benjamin Renard authored 8 years ago

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

Benjamin Renard authored 8 years ago

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

Benjamin Renard authored 8 years ago

159)       return scase;
160)     }
161)     return false;
162)   }
163) 
164)   this.copySCase=function(name,newname) {
165)     var orig_scase=this.byName(name);
166)     if (this.isSCase(orig_scase) && !this.byName(newname)) {
Benjamin Renard Rework on data structure to...

Benjamin Renard authored 8 years ago

167)       var uuid=uuid||generate_uuid();
168)       this[uuid]=new SCase(false,false,orig_scase.export());
169)       this[uuid].uuid=uuid;
170)       this[uuid].lastChange=new Date().getTime();
171)       this[uuid].name=newname;
172)       return this[uuid];
Benjamin Renard Initial commit

Benjamin Renard authored 8 years ago

173)     }
174)     return false;
175)   }
176) 
Benjamin Renard Add reset scase feature

Benjamin Renard authored 8 years ago

177)   this.resetSCase=function(name) {
178)     for (el in this) {
179)       if (this.isSCase(this[el]) && this[el].name==name) {
180)         return this[el].reset();
181)       }
182)     }
183)     return false;
184)   }
Benjamin Renard Initial commit

Benjamin Renard authored 8 years ago

185) }
186) 
Benjamin Renard Rework on data structure to...

Benjamin Renard authored 8 years ago

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

Benjamin Renard authored 8 years ago

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

Benjamin Renard authored 8 years ago

191)   this.lastChange=new Date().getTime();
Benjamin Renard Add trash feature on scase,...

Benjamin Renard authored 7 years ago

192)   this.removed=false;
Benjamin Renard Initial commit

Benjamin Renard authored 8 years ago

193) 
194)   this.isSCase=function() {
195)     return true;
196)   }
197) 
Benjamin Renard Rework on data structure to...

Benjamin Renard authored 8 years ago

198)   this.import=function(data) {
199)     this.uuid=data.uuid || generate_uuid();
200)     this.lastChange=data.lastChange || new Date().getTime();
201)     this.name=decodeURIComponent(data.name);
Benjamin Renard Add trash feature on scase,...

Benjamin Renard authored 7 years ago

202)     this.removed=data.removed||false;
Benjamin Renard Rework on data structure to...

Benjamin Renard authored 8 years ago

203)     if (jQuery.type(data.cats) == 'object') {
204)       this.cats=new CatList(data.cats);
205)     }
206)     return true;
207)   }
208) 
Benjamin Renard Initial commit

Benjamin Renard authored 8 years ago

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

Benjamin Renard authored 8 years ago

211)       'uuid': this.uuid,
212)       'lastChange': this.lastChange,
Benjamin Renard Initial commit

Benjamin Renard authored 8 years ago

213)       'name': encodeURIComponent(this.name),
Benjamin Renard Add trash feature on scase,...

Benjamin Renard authored 7 years ago

214)       'removed': this.removed,
Benjamin Renard Initial commit

Benjamin Renard authored 8 years ago

215)       'cats': this.cats.export()
216)     };
217)   }
218) 
219)   this.byName=function(name) {
220)     for (idx in this.cats) {
221)       if (name==this.cats[idx].name) {
222)         return this.cats[idx];
223)       }
224)     }
225)     return false;
226)   }
227) 
Benjamin Renard Rework on home page

Benjamin Renard authored 8 years ago

228)   this.stats=function() {
229)     var cats=0;
230)     var things=0;
231)     var things_done=0;
232)     this.cats.each(function(cidx,cat) {
233)       cats++;
234)       for (idx in cat.things) {
235)         things++;
236)         if (cat.things[idx].checked) {
237)           things_done++;
238)         }
239)       }
240)     });
241)     return {
242)       'cats': cats,
243)       'things': things,
244)       'done': things_done
245)     }
Benjamin Renard Initial commit

Benjamin Renard authored 8 years ago

246)   }
247) 
Benjamin Renard Add reset scase feature

Benjamin Renard authored 8 years ago

248)   this.reset=function() {
249)     this.cats.each(function(idx,cat) {
250)       for (idx in cat.things) {
251)         if (cat.things[idx].checked) {
252)           cat.things[idx].checked=false;
253)         }
254)       }
255)     });
Benjamin Renard Rework on data structure to...

Benjamin Renard authored 8 years ago

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

Benjamin Renard authored 8 years ago

257)     return true;
258)   }
259) 
Benjamin Renard Add trash feature on scase,...

Benjamin Renard authored 7 years ago

260)   this.remove=function() {
261)     this.removed=true;
262)     this.lastChange=new Date().getTime();
263)   }
264) 
265)   this.restore=function() {
266)     this.removed=false;
267)     this.lastChange=new Date().getTime();
268)   }
269) 
Benjamin Renard Initial commit

Benjamin Renard authored 8 years ago

270)   /*
271)    * Contructor
272)    */
273)   if (jQuery.type(data)=='object') {
274)     try {
Benjamin Renard Rework on data structure to...

Benjamin Renard authored 8 years ago

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

Benjamin Renard authored 8 years ago

276)     }
277)     catch (e) {
278)       console.log(e);
279)       alert('Une erreur est survenue en chargeant la valise '+this.name+' depuis le cache');
280)     }
281)   }
282) 
283) }
284) 
285) 
286) function CatList(data) {
287)   this.export=function() {
Benjamin Renard Rework on data structure to...

Benjamin Renard authored 8 years ago

288)     return this.each(function(idx,cat) {
289)       return cat.export();
290)     });
Benjamin Renard Initial commit

Benjamin Renard authored 8 years ago

291)   }
292) 
293)   this.import=function(data) {
294)     for (el in this) {
295)       if (this.isCat(this[el])) {
296)         delete this[el];
297)       }
298)     }
Benjamin Renard Rework on data structure to...

Benjamin Renard authored 8 years ago

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

Benjamin Renard authored 8 years ago

301)     }
302)     return true;
303)   }
304) 
305)   this.each=function(fct) {
306)     var idx=0;
307)     var ret={};
308)     for (el in this) {
309)       if(this.isCat(this[el])) {
310)         ret[el]=fct(idx++,this[el]);
311)       }
312)     }
313)     return ret;
314)   }
315) 
316)   this.count=function() {
317)     len=0;
318)     this.each(function(idx,cat) {
319)       len=len+1;
320)     });
321)     return len;
322)   }
323) 
324)   this.isCat=function(el) {
325)     return (jQuery.type(el)=='object' && jQuery.type(el.isCat)=='function' && el.isCat());
326)   }
327) 
328)   this.byName=function(name) {
329)     for (el in this) {
330)       if(this.isCat(this[el])) {
331)         if (this[el].name==name) {
332)           return this[el];
333)         }
334)       }
335)     }
336)     return false;
337)   }
338) 
339)   this.newCat=function(name) {
Benjamin Renard Add trash feature on scase,...

Benjamin Renard authored 7 years ago

340)     if (this.byName(name)) {
341)       var cat=this.byName(name);
342)       if (cat.removed) {
343)         cat.restore();
344)         return true;
345)       }
346)     }
347)     else {
Benjamin Renard Rework on data structure to...

Benjamin Renard authored 8 years ago

348)       var uuid=uuid||generate_uuid();
349)       this[uuid]=new Cat(uuid,name);
350)       return this[uuid];
Benjamin Renard Initial commit

Benjamin Renard authored 8 years ago

351)     }
352)     return false;
353)   }
354) 
355)   this.renameCat=function(name,newname) {
356)     var cat=this.byName(name);
357)     if (cat && !this.byName(newname)) {
358)       cat.name=newname;
Benjamin Renard Rework on data structure to...

Benjamin Renard authored 8 years ago

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

Benjamin Renard authored 8 years ago

360)       return cat;
361)     }
362)     return false;
363)   }
364) 
365)   this.removeCat=function(name) {
366)     for (el in this) {
367)       if (this.isCat(this[el]) && this[el].name==name) {
Benjamin Renard Add trash feature on scase,...

Benjamin Renard authored 7 years ago

368)         this[el].remove();
Benjamin Renard Initial commit

Benjamin Renard authored 8 years ago

369)         return true;
370)       }
371)     }
372)     return false;
373)   }
374) 
Benjamin Renard Add trash feature on scase,...

Benjamin Renard authored 7 years ago

375)   this.restoreCat=function(name) {
376)     for (el in this) {
377)       if (this.isCat(this[el]) && this[el].name==name && this[el].removed) {
378)         this[el].restore();
379)         return true;
380)       }
381)     }
382)     return false;
383)   }
Benjamin Renard Initial commit

Benjamin Renard authored 8 years ago

384) 
385) 
386)   /*
387)    * Contructor
388)    */
389)   if (jQuery.type(data)=='object') {
390)     try {
391)       this.import(data);
392)     }
393)     catch (e) {
394)       console.log(e);
395)       alert('Une erreur est survenue en chargeant la liste de catégorie depuis le cache');
396)     }
397)   }
398) 
399) }
400) 
Benjamin Renard Rework on data structure to...

Benjamin Renard authored 8 years ago

401) function Cat(uuid,name,color,data) {
402)   this.uuid=generate_uuid();
403)   this.lastChange=new Date().getTime();
Benjamin Renard Initial commit

Benjamin Renard authored 8 years ago

404)   this.name=name;
405)   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

406)   this.things={};
Benjamin Renard Add trash feature on scase,...

Benjamin Renard authored 7 years ago

407)   this.removed=false;
Benjamin Renard Initial commit

Benjamin Renard authored 8 years ago

408) 
409)   this.isCat=function() {
410)     return true;
411)   }
412) 
Benjamin Renard Rework on data structure to...

Benjamin Renard authored 8 years ago

413)   this.import=function(data) {
414)     this.uuid=data.uuid || generate_uuid();
415)     this.lastChange=data.lastChange||new Date().getTime();
416)     this.name=decodeURIComponent(data.name);
417)     this.color=data.color;
Benjamin Renard Add trash feature on scase,...

Benjamin Renard authored 7 years ago

418)     this.removed=data.removed||false;
Benjamin Renard Rework on data structure to...

Benjamin Renard authored 8 years ago

419)     if (jQuery.type(data.things) == 'object') {
420)       for (tuuid in data.things) {
421)         this.things[tuuid]=new Thing(tuuid);
422)         this.things[tuuid].import(data.things[tuuid]);
423)       }
424)     }
425)     return true;
426)   }
427) 
Benjamin Renard Initial commit

Benjamin Renard authored 8 years ago

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

Benjamin Renard authored 8 years ago

429)     var things={};
430)     for (tuuid in this.things) {
431)       things[tuuid]=this.things[tuuid].export();
Benjamin Renard Initial commit

Benjamin Renard authored 8 years ago

432)     }
433)     return {
Benjamin Renard Rework on data structure to...

Benjamin Renard authored 8 years ago

434)       'uuid': this.uuid,
435)       'lastChange': this.lastChange,
Benjamin Renard Initial commit

Benjamin Renard authored 8 years ago

436)       'name': encodeURIComponent(this.name),
437)       'color': this.color,
Benjamin Renard Add trash feature on scase,...

Benjamin Renard authored 7 years ago

438)       'removed': this.removed,
Benjamin Renard Initial commit

Benjamin Renard authored 8 years ago

439)       'things': things
440)     };
441)   }
442) 
443)   this.byLabel=function(label) {
444)     for (idx in this.things) {
445)       if (label==this.things[idx].label) {
446)         return this.things[idx];
447)       }
448)     }
449)     return false;
450)   }
451) 
452)   this.count=function() {
Benjamin Renard Rework on data structure to...

Benjamin Renard authored 8 years ago

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

Benjamin Renard authored 8 years ago

454)   }
455) 
Benjamin Renard Rework on data structure to...

Benjamin Renard authored 8 years ago

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

Benjamin Renard authored 8 years ago

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

Benjamin Renard authored 8 years ago

458)     var done=0;
Benjamin Renard Initial commit

Benjamin Renard authored 8 years ago

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

Benjamin Renard authored 8 years ago

461)         done+=1;
Benjamin Renard Initial commit

Benjamin Renard authored 8 years ago

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

Benjamin Renard authored 8 years ago

463)       count+=1;
Benjamin Renard Initial commit

Benjamin Renard authored 8 years ago

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

Benjamin Renard authored 8 years ago

465)     return {
466)       'things': count,
467)       'done': done
468)     };
469)   }
470) 
471)   this.newThing=function(label) {
Benjamin Renard Add trash feature on scase,...

Benjamin Renard authored 7 years ago

472)     if (this.byLabel(label)) {
473)       var thing=this.byLabel(label);
474)       if (thing.removed) {
475)         thing.restore();
476)         thing.setChecked(false);
477)         return true;
478)       }
479)     }
480)     else {
Benjamin Renard Rework on data structure to...

Benjamin Renard authored 8 years ago

481)       var uuid=generate_uuid();
482)       this.things[uuid]=new Thing(uuid,label);
483)       return true;
484)     }
485)     return false;
Benjamin Renard Initial commit

Benjamin Renard authored 8 years ago

486)   }
487) 
488)   this.renameThing=function(label,newlabel) {
489)     var thing=this.byLabel(label);
490)     if (thing && !this.byLabel(newlabel)) {
491)       thing.label=newlabel;
Benjamin Renard Rework on data structure to...

Benjamin Renard authored 8 years ago

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

Benjamin Renard authored 8 years ago

493)       return thing;
494)     }
495)     return false;
496)   }
497) 
498)   this.removeThing=function(label) {
499)     for (idx in this.things) {
500)       if (this.things[idx].label==label) {
Benjamin Renard Add trash feature on scase,...

Benjamin Renard authored 7 years ago

501)         this.things[idx].remove();
502)         return true;
503)       }
504)     }
505)     return false;
506)   }
507) 
508)   this.restoreThing=function(label) {
509)     for (idx in this.things) {
510)       if (this.things[idx].label==label && this.things[idx].removed) {
511)         this.things[idx].restore();
Benjamin Renard Initial commit

Benjamin Renard authored 8 years ago

512)         return true;
513)       }
514)     }
515)     return false;
516)   }
517) 
Benjamin Renard Add trash feature on scase,...

Benjamin Renard authored 7 years ago

518)   this.remove=function() {
519)     this.removed=true;
520)     this.lastChange=new Date().getTime();
521)   }
522) 
523)   this.restore=function() {
524)     this.removed=false;
525)     this.lastChange=new Date().getTime();
526)   }
527) 
528) 
Benjamin Renard Initial commit

Benjamin Renard authored 8 years ago

529)   /*
530)    * Contructor
531)    */
532)   if (jQuery.type(data)=='object') {
533)     try {
Benjamin Renard Rework on data structure to...

Benjamin Renard authored 8 years ago

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

Benjamin Renard authored 8 years ago

535)     }
536)     catch (e) {
537)       console.log(e);
538)       alert('Une erreur est survenue en chargeant la catégorie catégorie '+this.name+' depuis le cache');
539)     }
540)   }
541) 
542) }
543) 
Benjamin Renard Rework on data structure to...

Benjamin Renard authored 8 years ago

544) function Thing(uuid,label,checked) {
545)   this.uuid=uuid||generate_uuid();
546)   this.lastChange=new Date().getTime();
Benjamin Renard Initial commit

Benjamin Renard authored 8 years ago

547)   this.label=label;
548)   this.checked=checked;
Benjamin Renard Add trash feature on scase,...

Benjamin Renard authored 7 years ago

549)   this.removed=false;
Benjamin Renard Rework on data structure to...

Benjamin Renard authored 8 years ago

550) 
551)   this.import=function(data) {
552)     this.uuid=data.uuid||generate_uuid();
553)     this.lastChange=data.lastChange||new Date().getTime();
554)     this.label=decodeURIComponent(data.label),
555)     this.checked=data.checked;
Benjamin Renard Add trash feature on scase,...

Benjamin Renard authored 7 years ago

556)     this.removed=data.removed||false;
Benjamin Renard Rework on data structure to...

Benjamin Renard authored 8 years ago

557)   }
558) 
Benjamin Renard Initial commit

Benjamin Renard authored 8 years ago

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

Benjamin Renard authored 8 years ago

561)       'uuid': this.uuid,
562)       'lastChange': this.lastChange,
Benjamin Renard Initial commit

Benjamin Renard authored 8 years ago

563)       'label': encodeURIComponent(this.label),
Benjamin Renard Add trash feature on scase,...

Benjamin Renard authored 7 years ago

564)       'checked': this.checked,
565)       'removed': this.removed,
Benjamin Renard Initial commit

Benjamin Renard authored 8 years ago

566)     };
567)   }
Benjamin Renard Rework on data structure to...

Benjamin Renard authored 8 years ago

568) 
569)   this.setChecked=function(value) {
570)     this.checked=value;
571)     this.lastChange=new Date().getTime();
572)   }
Benjamin Renard Add trash feature on scase,...

Benjamin Renard authored 7 years ago

573) 
574)   this.remove=function() {
575)     this.removed=true;
576)     this.lastChange=new Date().getTime();
577)   }
578) 
579)   this.restore=function() {
580)     this.removed=false;
581)     this.lastChange=new Date().getTime();
582)   }