53faf901ef0869092b1c00224987bbd5ee48d0ed
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) 
25)   this.save=function() {
Benjamin Renard Add lastChange field in obj...

Benjamin Renard authored 10 years ago

26)     localStorage.groups=JSON.stringify({
27)       'lastChange': new Date().getTime(),
28)       'groups': this.export()
29)     });
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

30)   }
31) 
32)   this.each=function(fct) {
33)     var idx=0;
34)     for (el in this) {
35)       if(this.isGroup(this[el])) {
36)         fct(idx++,this[el]);
37)       }
38)     }
39)   }
40) 
41)   this.count=function() {
42)     len=0;
43)     for (el in this) {
44)       if (this.isGroup(this[el])) len=len+1;
45)     }
46)     return len;
47)   }
48) 
49)   this.isGroup=function(el) {
50)     return (el.isGroup!==undefined);
51)   }
52) 
53)   this.removeGroup=function(name) {
54)     if (this.isGroup(this[name])) {
55)       delete this[name];
56)       return true;
57)     }
58)     return false;
59)   }
60) }
61) 
62) function Group(name,data) {
63)   this.name=name;
64)   this.contributors=[];
65)   this.contributions=[];
66) 
67) 
68)   this.isGroup=function() {
69)     return true;
70)   }
71) 
72)   this.export=function() {
73)     var contributors=[];
74)     for (idx in this.contributors) {
75)       contributors.push(this.contributors[idx].export());
76)     }
77)     var contributions=[];
78)     for (idx in this.contributions) {
79)       contributions.push(this.contributions[idx].export());
80)     }
81)     return {
82)       'name': this.name,
83)       'contributors': contributors,
84)       'contributions': contributions
85)     };
86)   }
87) 
Benjamin Renard Clean code

Benjamin Renard authored 10 years ago

88)   /*
89)    * Contributors
90)    */
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

91)   this.removeContributor=function(c) {
92)     this.contributors=this.contributors.filter(function(v){
93)       return (v.name!=c);
94)     });
95)   }
96) 
97)   this.contributorByName=function(name) {
98)     for (c in this.contributors) {
99)       if (this.contributors[c].name == name) return this.contributors[c];
100)     }
101)     return undefined;
102)   }
103) 
104)   this.contributorByEmail=function(email) {
105)     for (c in this.contributors) {
106)       if (this.contributors[c].email == email) return this.contributors[c];
107)     }
108)     return undefined;
109)   }
110) 
Benjamin Renard Clean code

Benjamin Renard authored 10 years ago

111)   this.addContributor=function(c) {
112)     c.id=this.contributors.length;
113)     this.contributors.push(c);
114)   }
115) 
116)   this.replaceContributor=function(idx,c) {
117)     c.id=idx;
118)     this.contributors[idx]=c;
119)   }
120) 
121)   /*
122)    * Contributions
123)    */
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

124)   this.contributionsByContributorName=function(name) {
125)     var ret=[];
126)     for (idx in this.contributions) {
127)       if (this.contributions[idx].contributor.name==name) {
128)         ret.push(this.contributions[idx]);
129)       }
130)     }
131)     return ret;
132)   }
133) 
134)   this.addContribution=function(c) {
135)     c.id=this.contributions.length;
136)     this.contributions.push(c);
137)   }
138) 
139)   this.replaceContribution=function(idx,c) {
140)     c.id=idx;
141)     this.contributions[idx]=c;
142)   }
143) 
Benjamin Renard Clean code

Benjamin Renard authored 10 years ago

144)   /*
145)    * Balance
146)    */
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

147)   this.balance=function() {
148)     ret={}
149)     for (idx in this.contributors) {
150)       sum=0;
151)       c=this.contributors[idx].name;
152)       cl=this.contributionsByContributorName(c);
153)       for (idc in cl) {
154)         sum+=cl[idc].cost;
155)       }
156)       ret[c]=sum;
157)     }
158)     return ret;
159)   }
160) 
Benjamin Renard Clean code

Benjamin Renard authored 10 years ago

161)   /*
162)    * Contructor
163)    */
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

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

Benjamin Renard authored 10 years ago

166)       this.name=data.name;
167)       if (jQuery.type(data.contributors) == 'array') {
168)         for (idx in data.contributors) {
169)           this.contributors.push(new Contributor(
170)             data.contributors[idx].name,
171)             data.contributors[idx].email,
172)             idx
173)           ));
174)         }
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

175)       }
Benjamin Renard Clean code

Benjamin Renard authored 10 years ago

176)       if (jQuery.type(data.contributions) == 'array') {
177)         for (idx in data.contributions) {
178)           this.contributions.push(new Contribution(
179)             this.contributorByName(data.contributions[idx].contributor),
180)             data.contributions[idx].cost,
181)             data.contributions[idx].title,
182)             data.contributions[idx].date,
Benjamin Renard Add lastChange field in obj...

Benjamin Renard authored 10 years ago

183)             idx,
184)             data.contributions[idx].lastChange
Benjamin Renard Clean code

Benjamin Renard authored 10 years ago

185)           ));
186)         }
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

187)       }
188)     }
189)     catch (e) {
190)       alert('Une erreur est survenue en chargeant le groupe '+this.name+' depuis le cache');
191)     }
192)   }
193) }
194) 
Benjamin Renard Add edit contributor feature

Benjamin Renard authored 10 years ago

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

Benjamin Renard authored 10 years ago

196)   this.name=name;
197)   this.email=email;
Benjamin Renard Add edit contributor feature

Benjamin Renard authored 10 years ago

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

Benjamin Renard authored 10 years ago

199)   this.export=function() {
200)     return {
201)       'name': this.name,
202)       'email': this.email
203)     };
204)   }
205) }
206) 
Benjamin Renard Add lastChange field in obj...

Benjamin Renard authored 10 years ago

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

Benjamin Renard authored 10 years ago

208)   this.contributor=contributor;
209)   this.cost=cost;
210)   this.title=title;
211)   this.date=date;
212)   this.id=id;
Benjamin Renard Add lastChange field in obj...

Benjamin Renard authored 10 years ago

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

Benjamin Renard authored 10 years ago

214)   this.export=function() {
215)     return {
216)       'contributor': this.contributor.name,
217)       'cost': this.cost,
218)       'title': this.title,
219)       'date': this.date,
Benjamin Renard Add lastChange field in obj...

Benjamin Renard authored 10 years ago

220)       'lastChange': this.lastChange,