198 lines
4.2 KiB
JavaScript
198 lines
4.2 KiB
JavaScript
function GroupList() {
|
|
|
|
this.loadFromLocalStorage=function() {
|
|
if (localStorage.groups!==undefined) {
|
|
var groups=JSON.parse(localStorage.groups);
|
|
for (el in groups) {
|
|
this[el]=new Group(el,groups[el]);
|
|
}
|
|
}
|
|
}
|
|
|
|
this.export=function() {
|
|
ret={};
|
|
for (el in this) {
|
|
if (this.isGroup(this[el])) {
|
|
ret[el]=this[el].export();
|
|
}
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
this.save=function() {
|
|
localStorage.groups=JSON.stringify(this.export());
|
|
}
|
|
|
|
this.each=function(fct) {
|
|
var idx=0;
|
|
for (el in this) {
|
|
if(this.isGroup(this[el])) {
|
|
fct(idx++,this[el]);
|
|
}
|
|
}
|
|
}
|
|
|
|
this.count=function() {
|
|
len=0;
|
|
for (el in this) {
|
|
if (this.isGroup(this[el])) len=len+1;
|
|
}
|
|
return len;
|
|
}
|
|
|
|
this.isGroup=function(el) {
|
|
return (el.isGroup!==undefined);
|
|
}
|
|
|
|
this.removeGroup=function(name) {
|
|
if (this.isGroup(this[name])) {
|
|
delete this[name];
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
}
|
|
|
|
function Group(name,data) {
|
|
this.name=name;
|
|
this.contributors=[];
|
|
this.contributions=[];
|
|
|
|
|
|
this.isGroup=function() {
|
|
return true;
|
|
}
|
|
|
|
this.export=function() {
|
|
var contributors=[];
|
|
for (idx in this.contributors) {
|
|
contributors.push(this.contributors[idx].export());
|
|
}
|
|
var contributions=[];
|
|
for (idx in this.contributions) {
|
|
contributions.push(this.contributions[idx].export());
|
|
}
|
|
return {
|
|
'name': this.name,
|
|
'contributors': contributors,
|
|
'contributions': contributions
|
|
};
|
|
}
|
|
|
|
this.removeContributor=function(c) {
|
|
this.contributors=this.contributors.filter(function(v){
|
|
return (v.name!=c);
|
|
});
|
|
}
|
|
|
|
this.contributorByName=function(name) {
|
|
for (c in this.contributors) {
|
|
if (this.contributors[c].name == name) return this.contributors[c];
|
|
}
|
|
return undefined;
|
|
}
|
|
|
|
this.contributorByEmail=function(email) {
|
|
for (c in this.contributors) {
|
|
if (this.contributors[c].email == email) return this.contributors[c];
|
|
}
|
|
return undefined;
|
|
}
|
|
|
|
this.contributionsByContributorName=function(name) {
|
|
var ret=[];
|
|
for (idx in this.contributions) {
|
|
if (this.contributions[idx].contributor.name==name) {
|
|
ret.push(this.contributions[idx]);
|
|
}
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
this.addContribution=function(c) {
|
|
c.id=this.contributions.length;
|
|
this.contributions.push(c);
|
|
}
|
|
|
|
this.replaceContribution=function(idx,c) {
|
|
c.id=idx;
|
|
this.contributions[idx]=c;
|
|
}
|
|
|
|
|
|
this.balance=function() {
|
|
ret={}
|
|
for (idx in this.contributors) {
|
|
sum=0;
|
|
c=this.contributors[idx].name;
|
|
cl=this.contributionsByContributorName(c);
|
|
for (idc in cl) {
|
|
sum+=cl[idc].cost;
|
|
}
|
|
ret[c]=sum;
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
if (jQuery.type(data)=='object') {
|
|
try {
|
|
this.name=data.name;
|
|
if (jQuery.type(data.contributors) == 'array') {
|
|
for (idx in data.contributors) {
|
|
this.contributors.push(new Contributor(
|
|
data.contributors[idx].name,
|
|
data.contributors[idx].email
|
|
));
|
|
}
|
|
}
|
|
if (jQuery.type(data.contributions) == 'array') {
|
|
for (idx in data.contributions) {
|
|
this.contributions.push(new Contribution(
|
|
this.contributorByName(data.contributions[idx].contributor),
|
|
data.contributions[idx].cost,
|
|
data.contributions[idx].title,
|
|
data.contributions[idx].date,
|
|
idx
|
|
));
|
|
}
|
|
}
|
|
}
|
|
catch (e) {
|
|
alert('Une erreur est survenue en chargeant le groupe '+this.name+' depuis le cache');
|
|
}
|
|
}
|
|
}
|
|
|
|
function Contributor(name,email) {
|
|
this.name=name;
|
|
this.email=email;
|
|
this.export=function() {
|
|
return {
|
|
'name': this.name,
|
|
'email': this.email
|
|
};
|
|
}
|
|
}
|
|
|
|
function Contribution(contributor,cost,title,date,id) {
|
|
this.contributor=contributor;
|
|
this.cost=cost;
|
|
this.title=title;
|
|
this.date=date;
|
|
this.id=id;
|
|
this.export=function() {
|
|
return {
|
|
'contributor': this.contributor.name,
|
|
'cost': this.cost,
|
|
'title': this.title,
|
|
'date': this.date,
|
|
};
|
|
}
|
|
|
|
this.getTitle=function() {
|
|
if (jQuery.type(this.title)=='string') {
|
|
return this.title;
|
|
}
|
|
return '';
|
|
}
|
|
}
|