5891b19968667992e881a6c0471058f279c31612
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() {
6)     if (localStorage.groups!==undefined) {
Benjamin Renard Add lastChange field in obj...

Benjamin Renard authored 10 years ago

7)       var data=JSON.parse(localStorage.groups);
8)       this.lastChange=data.lastChange;
9)       for (el in data.groups) {
10)         this[el]=new Group(el,data.groups[el]);
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

11)       }
12)     }
13)   }
14) 
15)   this.export=function() {
16)     ret={};
17)     for (el in this) {
18)       if (this.isGroup(this[el])) {
19)         ret[el]=this[el].export();
20)       }
21)     }
22)     return ret;
23)   }
24) 
Benjamin Renard Add login and sync support

Benjamin Renard authored 10 years ago

25)   this.import=function(groups) {
26)     ret={};
27)     for (el in this) {
28)       if (this.isGroup(this[el])) {
29)         delete ret[el];
30)       }
31)     }
32)     for (el in groups) {
33)       this[el]=new Group(el,groups[el]);
34)     }
35)     return true;
36)   }
37) 
38) 
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

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

Benjamin Renard authored 10 years ago

40)     localStorage.groups=JSON.stringify({
41)       'lastChange': new Date().getTime(),
42)       'groups': this.export()
43)     });
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

44)   }
45) 
46)   this.each=function(fct) {
47)     var idx=0;
48)     for (el in this) {
49)       if(this.isGroup(this[el])) {
50)         fct(idx++,this[el]);
51)       }
52)     }
53)   }
54) 
55)   this.count=function() {
56)     len=0;
57)     for (el in this) {
58)       if (this.isGroup(this[el])) len=len+1;
59)     }
60)     return len;
61)   }
62) 
63)   this.isGroup=function(el) {
64)     return (el.isGroup!==undefined);
65)   }
66) 
67)   this.removeGroup=function(name) {
68)     if (this.isGroup(this[name])) {
69)       delete this[name];
70)       return true;
71)     }
72)     return false;
73)   }
74) }
75) 
76) function Group(name,data) {
77)   this.name=name;
78)   this.contributors=[];
79)   this.contributions=[];
80) 
81) 
82)   this.isGroup=function() {
83)     return true;
84)   }
85) 
86)   this.export=function() {
87)     var contributors=[];
88)     for (idx in this.contributors) {
89)       contributors.push(this.contributors[idx].export());
90)     }
91)     var contributions=[];
92)     for (idx in this.contributions) {
93)       contributions.push(this.contributions[idx].export());
94)     }
95)     return {
96)       'name': this.name,
97)       'contributors': contributors,
98)       'contributions': contributions
99)     };
100)   }
101) 
Benjamin Renard Clean code

Benjamin Renard authored 10 years ago

102)   /*
103)    * Contributors
104)    */
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

105)   this.removeContributor=function(c) {
106)     this.contributors=this.contributors.filter(function(v){
107)       return (v.name!=c);
108)     });
109)   }
110) 
111)   this.contributorByName=function(name) {
112)     for (c in this.contributors) {
113)       if (this.contributors[c].name == name) return this.contributors[c];
114)     }
115)     return undefined;
116)   }
117) 
118)   this.contributorByEmail=function(email) {
119)     for (c in this.contributors) {
120)       if (this.contributors[c].email == email) return this.contributors[c];
121)     }
122)     return undefined;
123)   }
124) 
Benjamin Renard Clean code

Benjamin Renard authored 10 years ago

125)   this.addContributor=function(c) {
126)     c.id=this.contributors.length;
127)     this.contributors.push(c);
128)   }
129) 
130)   this.replaceContributor=function(idx,c) {
131)     c.id=idx;
132)     this.contributors[idx]=c;
133)   }
134) 
135)   /*
136)    * Contributions
137)    */
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

138)   this.contributionsByContributorName=function(name) {
139)     var ret=[];
140)     for (idx in this.contributions) {
141)       if (this.contributions[idx].contributor.name==name) {
142)         ret.push(this.contributions[idx]);
143)       }
144)     }
145)     return ret;
146)   }
147) 
148)   this.addContribution=function(c) {
149)     c.id=this.contributions.length;
150)     this.contributions.push(c);
151)   }
152) 
153)   this.replaceContribution=function(idx,c) {
154)     c.id=idx;
155)     this.contributions[idx]=c;
156)   }
157) 
Benjamin Renard Clean code

Benjamin Renard authored 10 years ago

158)   /*
159)    * Balance
160)    */
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

161)   this.balance=function() {
162)     ret={}
163)     for (idx in this.contributors) {
164)       sum=0;
165)       c=this.contributors[idx].name;
166)       cl=this.contributionsByContributorName(c);
167)       for (idc in cl) {
168)         sum+=cl[idc].cost;
169)       }
170)       ret[c]=sum;
171)     }
172)     return ret;
173)   }
174) 
Benjamin Renard Clean code

Benjamin Renard authored 10 years ago

175)   /*
176)    * Contructor
177)    */
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

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

Benjamin Renard authored 10 years ago

180)       this.name=data.name;
181)       if (jQuery.type(data.contributors) == 'array') {
182)         for (idx in data.contributors) {
183)           this.contributors.push(new Contributor(
184)             data.contributors[idx].name,
185)             data.contributors[idx].email,
186)             idx
187)           ));
188)         }
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

189)       }
Benjamin Renard Clean code

Benjamin Renard authored 10 years ago

190)       if (jQuery.type(data.contributions) == 'array') {
191)         for (idx in data.contributions) {
192)           this.contributions.push(new Contribution(
193)             this.contributorByName(data.contributions[idx].contributor),
194)             data.contributions[idx].cost,
195)             data.contributions[idx].title,
196)             data.contributions[idx].date,
Benjamin Renard Add lastChange field in obj...

Benjamin Renard authored 10 years ago

197)             idx,
198)             data.contributions[idx].lastChange
Benjamin Renard Clean code

Benjamin Renard authored 10 years ago

199)           ));
200)         }
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

201)       }
202)     }
203)     catch (e) {
204)       alert('Une erreur est survenue en chargeant le groupe '+this.name+' depuis le cache');
205)     }
206)   }
207) }
208) 
Benjamin Renard Add edit contributor feature

Benjamin Renard authored 10 years ago

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

Benjamin Renard authored 10 years ago

210)   this.name=name;
211)   this.email=email;
Benjamin Renard Add edit contributor feature

Benjamin Renard authored 10 years ago

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

Benjamin Renard authored 10 years ago

213)   this.export=function() {
214)     return {
215)       'name': this.name,
216)       'email': this.email
217)     };
218)   }
219) }
220) 
Benjamin Renard Add lastChange field in obj...

Benjamin Renard authored 10 years ago

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

Benjamin Renard authored 10 years ago

222)   this.contributor=contributor;
223)   this.cost=cost;
224)   this.title=title;
225)   this.date=date;
226)   this.id=id;
Benjamin Renard Add lastChange field in obj...

Benjamin Renard authored 10 years ago

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

Benjamin Renard authored 10 years ago

228)   this.export=function() {
229)     return {
230)       'contributor': this.contributor.name,
231)       'cost': this.cost,
232)       'title': this.title,
233)       'date': this.date,
Benjamin Renard Add lastChange field in obj...

Benjamin Renard authored 10 years ago

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

Benjamin Renard authored 10 years ago

235)     };
236)   }
237) 
238)   this.getTitle=function() {
239)     if (jQuery.type(this.title)=='string') {
240)       return this.title;
241)     }
242)     return '';
243)   }
244) }