cb8e8c9e01894cb798a0d8b10b48a52c6adb8952
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() {
Benjamin Renard Improve GroupsList each() m...

Benjamin Renard authored 10 years ago

31)     return this.each(function(idx,group) {
32)       return group.export();
33)     });
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

34)   }
35) 
Benjamin Renard Add login and sync support

Benjamin Renard authored 10 years ago

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

Benjamin Renard authored 10 years ago

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

Benjamin Renard authored 10 years ago

51)     localStorage.groups=JSON.stringify({
52)       'lastChange': new Date().getTime(),
53)       'groups': this.export()
54)     });
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

55)   }
56) 
57)   this.each=function(fct) {
58)     var idx=0;
Benjamin Renard Improve GroupsList each() m...

Benjamin Renard authored 10 years ago

59)     var ret={};
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

60)     for (el in this) {
61)       if(this.isGroup(this[el])) {
Benjamin Renard Improve GroupsList each() m...

Benjamin Renard authored 10 years ago

62)         ret[el]=fct(idx++,this[el]);
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

63)       }
64)     }
Benjamin Renard Improve GroupsList each() m...

Benjamin Renard authored 10 years ago

65)     return ret;
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

66)   }
67) 
68)   this.count=function() {
69)     len=0;
Benjamin Renard Improve GroupsList each() m...

Benjamin Renard authored 10 years ago

70)     this.each(function(idx,group) {
71)       len=len+1;
72)     });
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

73)     return len;
74)   }
75) 
76)   this.isGroup=function(el) {
Benjamin Renard Improve GroupList isGroup()...

Benjamin Renard authored 10 years ago

77)     return (jQuery.type(el)=='object' && jQuery.type(el.isGroup)=='function' && el.isGroup());
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

78)   }
79) 
80)   this.removeGroup=function(name) {
81)     if (this.isGroup(this[name])) {
82)       delete this[name];
83)       return true;
84)     }
85)     return false;
86)   }
87) }
88) 
89) function Group(name,data) {
90)   this.name=name;
91)   this.contributors=[];
92)   this.contributions=[];
93) 
94) 
95)   this.isGroup=function() {
96)     return true;
97)   }
98) 
99)   this.export=function() {
100)     var contributors=[];
101)     for (idx in this.contributors) {
102)       contributors.push(this.contributors[idx].export());
103)     }
104)     var contributions=[];
105)     for (idx in this.contributions) {
106)       contributions.push(this.contributions[idx].export());
107)     }
108)     return {
109)       'name': this.name,
110)       'contributors': contributors,
111)       'contributions': contributions
112)     };
113)   }
114) 
Benjamin Renard Clean code

Benjamin Renard authored 10 years ago

115)   /*
116)    * Contributors
117)    */
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

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

Benjamin Renard authored 10 years ago

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

Benjamin Renard authored 10 years ago

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

Benjamin Renard authored 10 years ago

171)   /*
172)    * Balance
173)    */
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

174)   this.balance=function() {
Benjamin Renard Improve balance display

Benjamin Renard authored 10 years ago

175)     total={}
176)     min=-1;
177)     max=0;
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

178)     for (idx in this.contributors) {
Benjamin Renard Improve balance display

Benjamin Renard authored 10 years ago

179)       var sum=0;
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

180)       c=this.contributors[idx].name;
181)       cl=this.contributionsByContributorName(c);
182)       for (idc in cl) {
183)         sum+=cl[idc].cost;
184)       }
Benjamin Renard Improve balance display

Benjamin Renard authored 10 years ago

185)       if (min==-1 || min>sum) {
186)           min=sum;
187)         }
188)       if(max<sum) {
189)         max=sum;
190)       }
191)       total[c]=sum;
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

192)     }
Benjamin Renard Improve balance display

Benjamin Renard authored 10 years ago

193)     balance={}
194)     var sum=0;
195)     for (c in total) {
196)       balance[c]={
197)         'total': total[c],
198)         'diff': total[c]-max,
199)       }
200)       sum=sum+total[c];
201)     }
202)     return {
203)       'balance': balance,
204)       'sum': sum,
205)       'min': min,
206)       'max': max
207)     };
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

208)   }
209) 
Benjamin Renard Clean code

Benjamin Renard authored 10 years ago

210)   /*
211)    * Contructor
212)    */
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

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

Benjamin Renard authored 10 years ago

215)       this.name=data.name;
216)       if (jQuery.type(data.contributors) == 'array') {
217)         for (idx in data.contributors) {
218)           this.contributors.push(new Contributor(
219)             data.contributors[idx].name,
220)             data.contributors[idx].email,
221)             idx
222)           ));
223)         }
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

224)       }
Benjamin Renard Clean code

Benjamin Renard authored 10 years ago

225)       if (jQuery.type(data.contributions) == 'array') {
226)         for (idx in data.contributions) {
227)           this.contributions.push(new Contribution(
228)             this.contributorByName(data.contributions[idx].contributor),
229)             data.contributions[idx].cost,
230)             data.contributions[idx].title,
231)             data.contributions[idx].date,
Benjamin Renard Add lastChange field in obj...

Benjamin Renard authored 10 years ago

232)             idx,
233)             data.contributions[idx].lastChange
Benjamin Renard Clean code

Benjamin Renard authored 10 years ago

234)           ));
235)         }
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

236)       }
237)     }
238)     catch (e) {
239)       alert('Une erreur est survenue en chargeant le groupe '+this.name+' depuis le cache');
240)     }
241)   }
242) }
243) 
Benjamin Renard Add edit contributor feature

Benjamin Renard authored 10 years ago

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

Benjamin Renard authored 10 years ago

245)   this.name=name;
246)   this.email=email;
Benjamin Renard Add edit contributor feature

Benjamin Renard authored 10 years ago

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

Benjamin Renard authored 10 years ago

248)   this.export=function() {
249)     return {
250)       'name': this.name,
251)       'email': this.email
252)     };
253)   }
254) }
255) 
Benjamin Renard Add lastChange field in obj...

Benjamin Renard authored 10 years ago

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

Benjamin Renard authored 10 years ago

257)   this.contributor=contributor;
258)   this.cost=cost;
259)   this.title=title;
260)   this.date=date;
261)   this.id=id;
Benjamin Renard Add lastChange field in obj...

Benjamin Renard authored 10 years ago

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

Benjamin Renard authored 10 years ago

263)   this.export=function() {
264)     return {
265)       'contributor': this.contributor.name,
266)       'cost': this.cost,
267)       'title': this.title,
268)       'date': this.date,
Benjamin Renard Add lastChange field in obj...

Benjamin Renard authored 10 years ago

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

Benjamin Renard authored 10 years ago

270)     };
271)   }
272) 
273)   this.getTitle=function() {
274)     if (jQuery.type(this.title)=='string') {
275)       return this.title;
276)     }
277)     return '';
278)   }
279) }