936a009cedde04f891a230174102d67a2281044e
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) 
82)   this.removeContributor=function(c) {
83)     this.contributors=this.contributors.filter(function(v){
84)       return (v.name!=c);
85)     });
86)   }
87) 
88)   this.contributorByName=function(name) {
89)     for (c in this.contributors) {
90)       if (this.contributors[c].name == name) return this.contributors[c];
91)     }
92)     return undefined;
93)   }
94) 
95)   this.contributorByEmail=function(email) {
96)     for (c in this.contributors) {
97)       if (this.contributors[c].email == email) return this.contributors[c];
98)     }
99)     return undefined;
100)   }
101) 
102)   this.contributionsByContributorName=function(name) {
103)     var ret=[];
104)     for (idx in this.contributions) {
105)       if (this.contributions[idx].contributor.name==name) {
106)         ret.push(this.contributions[idx]);
107)       }
108)     }
109)     return ret;
110)   }
111) 
112)   this.addContribution=function(c) {
113)     c.id=this.contributions.length;
114)     this.contributions.push(c);
115)   }
116) 
117)   this.replaceContribution=function(idx,c) {
118)     c.id=idx;
119)     this.contributions[idx]=c;
120)   }
121) 
Benjamin Renard Add edit contributor feature

Benjamin Renard authored 10 years ago

122)   this.addContributor=function(c) {
123)     c.id=this.contributors.length;
124)     this.contributors.push(c);
125)   }
126) 
127)   this.replaceContributor=function(idx,c) {
128)     c.id=idx;
129)     this.contributors[idx]=c;
130)   }
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

131) 
132)   this.balance=function() {
133)     ret={}
134)     for (idx in this.contributors) {
135)       sum=0;
136)       c=this.contributors[idx].name;
137)       cl=this.contributionsByContributorName(c);
138)       for (idc in cl) {
139)         sum+=cl[idc].cost;
140)       }
141)       ret[c]=sum;
142)     }
143)     return ret;
144)   }
145) 
146)   if (jQuery.type(data)=='object') {
147)     try {
148)     this.name=data.name;
149)     if (jQuery.type(data.contributors) == 'array') {
150)       for (idx in data.contributors) {
151)         this.contributors.push(new Contributor(
152)           data.contributors[idx].name,
Benjamin Renard Add edit contributor feature

Benjamin Renard authored 10 years ago

153)           data.contributors[idx].email,
154)           idx
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

155)         ));
156)       }
157)     }
158)     if (jQuery.type(data.contributions) == 'array') {
159)       for (idx in data.contributions) {
160)         this.contributions.push(new Contribution(
161)           this.contributorByName(data.contributions[idx].contributor),
162)           data.contributions[idx].cost,
163)           data.contributions[idx].title,
164)           data.contributions[idx].date,
165)           idx
166)         ));
167)       }
168)     }
169)     }
170)     catch (e) {
171)       alert('Une erreur est survenue en chargeant le groupe '+this.name+' depuis le cache');
172)     }
173)   }
174) }
175) 
Benjamin Renard Add edit contributor feature

Benjamin Renard authored 10 years ago

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

Benjamin Renard authored 10 years ago

177)   this.name=name;
178)   this.email=email;
Benjamin Renard Add edit contributor feature

Benjamin Renard authored 10 years ago

179)   this.id=id;