efe943361b7456e9179c48a3724f6248e6a1bb7e
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

1) function GroupList() {
2)   
3)   this.loadFromLocalStorage=function() {
4)     if (localStorage.groups!==undefined) {
5)       var groups=JSON.parse(localStorage.groups);
6)       for (el in groups) {
7)         this[el]=new Group(el,groups[el]);
8)       }
9)     }
10)   }
11) 
12)   this.export=function() {
13)     ret={};
14)     for (el in this) {
15)       if (this.isGroup(this[el])) {
16)         ret[el]=this[el].export();
17)       }
18)     }
19)     return ret;
20)   }
21) 
22)   this.save=function() {
23)     localStorage.groups=JSON.stringify(this.export());
24)   }
25) 
26)   this.each=function(fct) {
27)     var idx=0;
28)     for (el in this) {
29)       if(this.isGroup(this[el])) {
30)         fct(idx++,this[el]);
31)       }
32)     }
33)   }
34) 
35)   this.count=function() {
36)     len=0;
37)     for (el in this) {
38)       if (this.isGroup(this[el])) len=len+1;
39)     }
40)     return len;
41)   }
42) 
43)   this.isGroup=function(el) {
44)     return (el.isGroup!==undefined);
45)   }
46) 
47)   this.removeGroup=function(name) {
48)     if (this.isGroup(this[name])) {
49)       delete this[name];
50)       return true;
51)     }
52)     return false;
53)   }
54) }
55) 
56) function Group(name,data) {
57)   this.name=name;
58)   this.contributors=[];
59)   this.contributions=[];
60) 
61) 
62)   this.isGroup=function() {
63)     return true;
64)   }
65) 
66)   this.export=function() {
67)     var contributors=[];
68)     for (idx in this.contributors) {
69)       contributors.push(this.contributors[idx].export());
70)     }
71)     var contributions=[];
72)     for (idx in this.contributions) {
73)       contributions.push(this.contributions[idx].export());
74)     }
75)     return {
76)       'name': this.name,
77)       'contributors': contributors,
78)       'contributions': contributions
79)     };
80)   }
81) 
Benjamin Renard Clean code

Benjamin Renard authored 10 years ago

82)   /*
83)    * Contributors
84)    */
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

85)   this.removeContributor=function(c) {
86)     this.contributors=this.contributors.filter(function(v){
87)       return (v.name!=c);
88)     });
89)   }
90) 
91)   this.contributorByName=function(name) {
92)     for (c in this.contributors) {
93)       if (this.contributors[c].name == name) return this.contributors[c];
94)     }
95)     return undefined;
96)   }
97) 
98)   this.contributorByEmail=function(email) {
99)     for (c in this.contributors) {
100)       if (this.contributors[c].email == email) return this.contributors[c];
101)     }
102)     return undefined;
103)   }
104) 
Benjamin Renard Clean code

Benjamin Renard authored 10 years ago

105)   this.addContributor=function(c) {
106)     c.id=this.contributors.length;
107)     this.contributors.push(c);
108)   }
109) 
110)   this.replaceContributor=function(idx,c) {
111)     c.id=idx;
112)     this.contributors[idx]=c;
113)   }
114) 
115)   /*
116)    * Contributions
117)    */
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

118)   this.contributionsByContributorName=function(name) {
119)     var ret=[];
120)     for (idx in this.contributions) {
121)       if (this.contributions[idx].contributor.name==name) {
122)         ret.push(this.contributions[idx]);
123)       }
124)     }
125)     return ret;
126)   }
127) 
128)   this.addContribution=function(c) {
129)     c.id=this.contributions.length;
130)     this.contributions.push(c);
131)   }
132) 
133)   this.replaceContribution=function(idx,c) {
134)     c.id=idx;
135)     this.contributions[idx]=c;
136)   }
137) 
Benjamin Renard Clean code

Benjamin Renard authored 10 years ago

138)   /*
139)    * Balance
140)    */
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

141)   this.balance=function() {
142)     ret={}
143)     for (idx in this.contributors) {
144)       sum=0;
145)       c=this.contributors[idx].name;
146)       cl=this.contributionsByContributorName(c);
147)       for (idc in cl) {
148)         sum+=cl[idc].cost;
149)       }
150)       ret[c]=sum;
151)     }
152)     return ret;
153)   }
154) 
Benjamin Renard Clean code

Benjamin Renard authored 10 years ago

155)   /*
156)    * Contructor
157)    */
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

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

Benjamin Renard authored 10 years ago

160)       this.name=data.name;
161)       if (jQuery.type(data.contributors) == 'array') {
162)         for (idx in data.contributors) {
163)           this.contributors.push(new Contributor(
164)             data.contributors[idx].name,
165)             data.contributors[idx].email,
166)             idx
167)           ));
168)         }
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

169)       }
Benjamin Renard Clean code

Benjamin Renard authored 10 years ago

170)       if (jQuery.type(data.contributions) == 'array') {
171)         for (idx in data.contributions) {
172)           this.contributions.push(new Contribution(
173)             this.contributorByName(data.contributions[idx].contributor),
174)             data.contributions[idx].cost,
175)             data.contributions[idx].title,
176)             data.contributions[idx].date,
177)             idx
178)           ));
179)         }
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

180)       }
181)     }
182)     }
183)     catch (e) {
184)       alert('Une erreur est survenue en chargeant le groupe '+this.name+' depuis le cache');
185)     }
186)   }
187) }
188) 
Benjamin Renard Add edit contributor feature

Benjamin Renard authored 10 years ago

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

Benjamin Renard authored 10 years ago

190)   this.name=name;
191)   this.email=email;
Benjamin Renard Add edit contributor feature

Benjamin Renard authored 10 years ago

192)   this.id=id;