eaf2c8d0f45914e5468a41da65204a3bb63674b8
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

1) function GroupList() {
Benjamin Renard Add lastChange field in obj...

Benjamin Renard authored 10 years ago

2) 
3)   lastChange=0;
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

4)   
5)   this.loadFromLocalStorage=function() {
Benjamin Renard Manage local data loading e...

Benjamin Renard authored 10 years ago

6)     if (jQuery.type(localStorage.groups)!='undefined') {
7)       try {
8)         var data=JSON.parse(localStorage.groups);
9)         this.lastChange=data.lastChange;
10)         for (el in data.groups) {
11)           this[el]=new Group(el,data.groups[el]);
12)         }
13)       }
14)       catch(e) {
15)         for (el in this) {
16)           if (this.isGroup(this[el])) {
17)             delete this[el];
18)           }
19)         }
20)         myconfirm('Erreur en chargeant les données locales. On les purges ?',
21)           function(data) {
22)             delete localStorage.groups;
23)             location.reload();
24)           }
25)         );
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

26)       }
27)     }
28)   }
29) 
30)   this.export=function() {
31)     ret={};
32)     for (el in this) {
33)       if (this.isGroup(this[el])) {
34)         ret[el]=this[el].export();
35)       }
36)     }
37)     return ret;
38)   }
39) 
Benjamin Renard Add login and sync support

Benjamin Renard authored 10 years ago

40)   this.import=function(groups) {
41)     ret={};
42)     for (el in this) {
43)       if (this.isGroup(this[el])) {
44)         delete ret[el];
45)       }
46)     }
47)     for (el in groups) {
48)       this[el]=new Group(el,groups[el]);
49)     }
50)     return true;
51)   }
52) 
53) 
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

54)   this.save=function() {
Benjamin Renard Add lastChange field in obj...

Benjamin Renard authored 10 years ago

55)     localStorage.groups=JSON.stringify({
56)       'lastChange': new Date().getTime(),
57)       'groups': this.export()
58)     });
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

59)   }
60) 
61)   this.each=function(fct) {
62)     var idx=0;
63)     for (el in this) {
64)       if(this.isGroup(this[el])) {
65)         fct(idx++,this[el]);
66)       }
67)     }
68)   }
69) 
70)   this.count=function() {
71)     len=0;
72)     for (el in this) {
73)       if (this.isGroup(this[el])) len=len+1;
74)     }
75)     return len;
76)   }
77) 
78)   this.isGroup=function(el) {
79)     return (el.isGroup!==undefined);
80)   }
81) 
82)   this.removeGroup=function(name) {
83)     if (this.isGroup(this[name])) {
84)       delete this[name];
85)       return true;
86)     }
87)     return false;
88)   }
89) }
90) 
91) function Group(name,data) {
92)   this.name=name;
93)   this.contributors=[];
94)   this.contributions=[];
95) 
96) 
97)   this.isGroup=function() {
98)     return true;
99)   }
100) 
101)   this.export=function() {
102)     var contributors=[];
103)     for (idx in this.contributors) {
104)       contributors.push(this.contributors[idx].export());
105)     }
106)     var contributions=[];
107)     for (idx in this.contributions) {
108)       contributions.push(this.contributions[idx].export());
109)     }
110)     return {
111)       'name': this.name,
112)       'contributors': contributors,
113)       'contributions': contributions
114)     };
115)   }
116) 
Benjamin Renard Clean code

Benjamin Renard authored 10 years ago

117)   /*
118)    * Contributors
119)    */
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

120)   this.removeContributor=function(c) {
121)     this.contributors=this.contributors.filter(function(v){
122)       return (v.name!=c);
123)     });
124)   }
125) 
126)   this.contributorByName=function(name) {
127)     for (c in this.contributors) {
128)       if (this.contributors[c].name == name) return this.contributors[c];
129)     }
130)     return undefined;
131)   }
132) 
133)   this.contributorByEmail=function(email) {
134)     for (c in this.contributors) {
135)       if (this.contributors[c].email == email) return this.contributors[c];
136)     }
137)     return undefined;
138)   }
139) 
Benjamin Renard Clean code

Benjamin Renard authored 10 years ago

140)   this.addContributor=function(c) {
141)     c.id=this.contributors.length;
142)     this.contributors.push(c);
143)   }
144) 
145)   this.replaceContributor=function(idx,c) {
146)     c.id=idx;
147)     this.contributors[idx]=c;
148)   }
149) 
150)   /*
151)    * Contributions
152)    */
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

153)   this.contributionsByContributorName=function(name) {
154)     var ret=[];
155)     for (idx in this.contributions) {
156)       if (this.contributions[idx].contributor.name==name) {
157)         ret.push(this.contributions[idx]);
158)       }
159)     }
160)     return ret;
161)   }
162) 
163)   this.addContribution=function(c) {
164)     c.id=this.contributions.length;
165)     this.contributions.push(c);
166)   }
167) 
168)   this.replaceContribution=function(idx,c) {
169)     c.id=idx;
170)     this.contributions[idx]=c;
171)   }
172) 
Benjamin Renard Clean code

Benjamin Renard authored 10 years ago

173)   /*
174)    * Balance
175)    */
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

176)   this.balance=function() {
177)     ret={}
178)     for (idx in this.contributors) {
179)       sum=0;
180)       c=this.contributors[idx].name;
181)       cl=this.contributionsByContributorName(c);
182)       for (idc in cl) {
183)         sum+=cl[idc].cost;
184)       }
185)       ret[c]=sum;
186)     }
187)     return ret;
188)   }
189) 
Benjamin Renard Clean code

Benjamin Renard authored 10 years ago

190)   /*
191)    * Contructor
192)    */
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

193)   if (jQuery.type(data)=='object') {
194)     try {
Benjamin Renard Clean code

Benjamin Renard authored 10 years ago

195)       this.name=data.name;
196)       if (jQuery.type(data.contributors) == 'array') {
197)         for (idx in data.contributors) {
198)           this.contributors.push(new Contributor(
199)             data.contributors[idx].name,
200)             data.contributors[idx].email,
201)             idx
202)           ));
203)         }
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

204)       }
Benjamin Renard Clean code

Benjamin Renard authored 10 years ago

205)       if (jQuery.type(data.contributions) == 'array') {
206)         for (idx in data.contributions) {
207)           this.contributions.push(new Contribution(
208)             this.contributorByName(data.contributions[idx].contributor),
209)             data.contributions[idx].cost,
210)             data.contributions[idx].title,
211)             data.contributions[idx].date,
Benjamin Renard Add lastChange field in obj...

Benjamin Renard authored 10 years ago

212)             idx,
213)             data.contributions[idx].lastChange
Benjamin Renard Clean code

Benjamin Renard authored 10 years ago

214)           ));
215)         }
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

216)       }
217)     }
218)     catch (e) {
219)       alert('Une erreur est survenue en chargeant le groupe '+this.name+' depuis le cache');
220)     }
221)   }
222) }
223) 
Benjamin Renard Add edit contributor feature

Benjamin Renard authored 10 years ago

224) function Contributor(name,email,id) {
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

225)   this.name=name;
226)   this.email=email;
Benjamin Renard Add edit contributor feature

Benjamin Renard authored 10 years ago

227)   this.id=id;
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

228)   this.export=function() {
229)     return {
230)       'name': this.name,
231)       'email': this.email
232)     };
233)   }
234) }
235) 
Benjamin Renard Add lastChange field in obj...

Benjamin Renard authored 10 years ago

236) function Contribution(contributor,cost,title,date,id,lastChange) {
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

237)   this.contributor=contributor;
238)   this.cost=cost;
239)   this.title=title;
240)   this.date=date;
241)   this.id=id;
Benjamin Renard Add lastChange field in obj...

Benjamin Renard authored 10 years ago

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

Benjamin Renard authored 10 years ago

243)   this.export=function() {
244)     return {
245)       'contributor': this.contributor.name,
246)       'cost': this.cost,
247)       'title': this.title,
248)       'date': this.date,
Benjamin Renard Add lastChange field in obj...

Benjamin Renard authored 10 years ago

249)       'lastChange': this.lastChange,
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

250)     };
251)   }
252) 
253)   this.getTitle=function() {
254)     if (jQuery.type(this.title)=='string') {
255)       return this.title;
256)     }
257)     return '';
258)   }
259) }