c4618104628457f407f8b397a41e4ec1bcc70668
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)   }
Benjamin Renard Add GroupList balances() me...

Benjamin Renard authored 10 years ago

87) 
88)   this.balances=function(fct) {
89)     return this.each(function(idx,group) {
90)       return group.balance();
91)     });
92)   }
93) 
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

94) }
95) 
96) function Group(name,data) {
97)   this.name=name;
98)   this.contributors=[];
99)   this.contributions=[];
100) 
101) 
102)   this.isGroup=function() {
103)     return true;
104)   }
105) 
106)   this.export=function() {
107)     var contributors=[];
108)     for (idx in this.contributors) {
109)       contributors.push(this.contributors[idx].export());
110)     }
111)     var contributions=[];
112)     for (idx in this.contributions) {
113)       contributions.push(this.contributions[idx].export());
114)     }
115)     return {
Benjamin Renard Encode/Decode on import/exp...

Benjamin Renard authored 10 years ago

116)       'name': encodeURIComponent(this.name),
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

117)       'contributors': contributors,
118)       'contributions': contributions
119)     };
120)   }
121) 
Benjamin Renard Clean code

Benjamin Renard authored 10 years ago

122)   /*
123)    * Contributors
124)    */
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

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

Benjamin Renard authored 10 years ago

145)   this.addContributor=function(c) {
146)     c.id=this.contributors.length;
147)     this.contributors.push(c);
148)   }
149) 
150)   this.replaceContributor=function(idx,c) {
151)     c.id=idx;
152)     this.contributors[idx]=c;
153)   }
154) 
155)   /*
156)    * Contributions
157)    */
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

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

Benjamin Renard authored 10 years ago

178)   /*
179)    * Balance
180)    */
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

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

Benjamin Renard authored 10 years ago

182)     total={}
183)     min=-1;
184)     max=0;
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

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

Benjamin Renard authored 10 years ago

186)       var sum=0;
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

187)       c=this.contributors[idx].name;
188)       cl=this.contributionsByContributorName(c);
189)       for (idc in cl) {
190)         sum+=cl[idc].cost;
191)       }
Benjamin Renard Improve balance display

Benjamin Renard authored 10 years ago

192)       if (min==-1 || min>sum) {
193)           min=sum;
194)         }
195)       if(max<sum) {
196)         max=sum;
197)       }
198)       total[c]=sum;
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

199)     }
Benjamin Renard Improve balance display

Benjamin Renard authored 10 years ago

200)     balance={}
201)     var sum=0;
202)     for (c in total) {
203)       balance[c]={
204)         'total': total[c],
205)         'diff': total[c]-max,
206)       }
207)       sum=sum+total[c];
208)     }
209)     return {
210)       'balance': balance,
211)       'sum': sum,
212)       'min': min,
213)       'max': max
214)     };
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

215)   }
216) 
Benjamin Renard Clean code

Benjamin Renard authored 10 years ago

217)   /*
218)    * Contructor
219)    */
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

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

Benjamin Renard authored 10 years ago

222)       this.name=data.name;
223)       if (jQuery.type(data.contributors) == 'array') {
224)         for (idx in data.contributors) {
225)           this.contributors.push(new Contributor(
Benjamin Renard Encode/Decode on import/exp...

Benjamin Renard authored 10 years ago

226)             decodeURIComponent(data.contributors[idx].name),
227)             decodeURIComponent(data.contributors[idx].email),
Benjamin Renard Clean code

Benjamin Renard authored 10 years ago

228)             idx
229)           ));
230)         }
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

231)       }
Benjamin Renard Clean code

Benjamin Renard authored 10 years ago

232)       if (jQuery.type(data.contributions) == 'array') {
233)         for (idx in data.contributions) {
234)           this.contributions.push(new Contribution(
235)             this.contributorByName(data.contributions[idx].contributor),
236)             data.contributions[idx].cost,
Benjamin Renard Encode/Decode on import/exp...

Benjamin Renard authored 10 years ago

237)             decodeURIComponent(data.contributions[idx].title),
Benjamin Renard Clean code

Benjamin Renard authored 10 years ago

238)             data.contributions[idx].date,
Benjamin Renard Add lastChange field in obj...

Benjamin Renard authored 10 years ago

239)             idx,
240)             data.contributions[idx].lastChange
Benjamin Renard Clean code

Benjamin Renard authored 10 years ago

241)           ));
242)         }
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

243)       }
244)     }
245)     catch (e) {
246)       alert('Une erreur est survenue en chargeant le groupe '+this.name+' depuis le cache');
247)     }
248)   }
249) }
250) 
Benjamin Renard Add edit contributor feature

Benjamin Renard authored 10 years ago

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

Benjamin Renard authored 10 years ago

252)   this.name=name;
253)   this.email=email;
Benjamin Renard Add edit contributor feature

Benjamin Renard authored 10 years ago

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

Benjamin Renard authored 10 years ago

255)   this.export=function() {
256)     return {
Benjamin Renard Encode/Decode on import/exp...

Benjamin Renard authored 10 years ago

257)       'name': encodeURIComponent(this.name),
258)       'email': encodeURIComponent(this.email)
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

259)     };
260)   }
261) }
262) 
Benjamin Renard Add lastChange field in obj...

Benjamin Renard authored 10 years ago

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

Benjamin Renard authored 10 years ago

264)   this.contributor=contributor;
265)   this.cost=cost;
266)   this.title=title;
267)   this.date=date;
268)   this.id=id;
Benjamin Renard Add lastChange field in obj...

Benjamin Renard authored 10 years ago

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

Benjamin Renard authored 10 years ago

270)   this.export=function() {
271)     return {
Benjamin Renard Encode/Decode on import/exp...

Benjamin Renard authored 10 years ago

272)       'contributor': encodeURIComponent(this.contributor.name),
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

273)       'cost': this.cost,
Benjamin Renard Encode/Decode on import/exp...

Benjamin Renard authored 10 years ago

274)       'title': encodeURIComponent(this.title),
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

275)       'date': this.date,
Benjamin Renard Add lastChange field in obj...

Benjamin Renard authored 10 years ago

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

Benjamin Renard authored 10 years ago

277)     };
278)   }
279) 
280)   this.getTitle=function() {
281)     if (jQuery.type(this.title)=='string') {
282)       return this.title;
283)     }
284)     return '';
285)   }
286) }