// Generated by CoffeeScript 1.12.7
/**
* Build the party's profile page
* @mixin party/profile
*/
'use strict';
var extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
hasProp = {}.hasOwnProperty;
app.controller('party/profile', [
'$scope', '$location', '$sce', 'displayService', 'constantService', 'messageService', 'party', function($scope, $location, $sce, display, constants, messages, party) {
var Item, Party, Volume, a, cl, collaborators, expirationdatest, i, ii, il, j, key, l, len, len1, len2, len3, m, namest, p, parties, partySort, pi, ref, ref1, ref2, ref3, ref4, ref5, ref6, ref7, s, stringSort, today, v, value, volumes, x;
display.title = party.name;
$scope.party = party;
Item = (function() {
function Item() {}
Item.prototype["class"] = function() {
var s;
switch (s = this.selected) {
case true:
return ["radio-selected"];
case void 0:
if ($scope.selected) {
return [];
} else {
return ["radio"];
}
default:
return ["user-access", constants.permission[s.individual]];
}
};
Object.defineProperty(Item.prototype, 'selected', {
get: function() {
return this.constructor.selection[this.id];
}
});
Item.prototype.select = function() {
var ref, s;
s = this.selected;
this.constructor.selection = {};
messages.clear(Item);
if (s === true) {
$scope.selected = void 0;
$scope.editable = void 0;
this.constructor.foreign.selection = {};
} else {
$scope.selected = this;
$scope.editable = (ref = this.volume) != null ? ref.checkPermission(constants.permission.ADMIN) : void 0;
this.constructor.selection[this.id] = true;
this.constructor.foreign.selection = this.access;
messages.add({
body: "Highlighting " + this.selectionMessage(),
type: 'dark',
owner: Item
});
this.selectionMessage();
}
};
return Item;
})();
/**
* party to show on the profile page
* @interface profile/Party
*/
Party = (function(superClass) {
extend(Party, superClass);
Party.all = {};
function Party(party1) {
this.party = party1;
this.access = {};
Party.all[this.party.id] = this;
}
Party.make = function(p) {
return Party.all[p.id] || new Party(p);
};
Object.defineProperty(Party.prototype, 'id', {
get: function() {
return this.party.id;
}
});
Party.selection = {};
Party.prototype.selectionMessage = function() {
return constants.message('profile.parties.selected', this.party.name);
};
Party.prototype.edit = function(t) {
if ($scope.editable) {
return $scope.selected.editAccess(this.party);
} else if (t) {
return $location.url(party.editRoute(t, this.party.id));
}
};
return Party;
})(Item);
/**
* volume to show on the profile page
* @interface profile/Volume
*/
Volume = (function(superClass) {
extend(Volume, superClass);
function Volume(volume) {
var a, i, len, p, ref;
this.volume = volume;
this.access = {};
ref = this.volume.access;
for (i = 0, len = ref.length; i < len; i++) {
a = ref[i];
if (!(a.party.id !== constants.party.STAFF)) {
continue;
}
p = Party.make(a.party);
p.access[this.volume.id] = a;
this.access[p.party.id] = a;
}
}
Object.defineProperty(Volume.prototype, 'id', {
get: function() {
return this.volume.id;
}
});
Object.defineProperty(Volume.prototype, 'self', {
get: function() {
return this.access[party.id];
}
});
Volume.selection = {};
Volume.prototype.selectionMessage = function() {
return constants.message('profile.volumes.selected', this.volume.displayName);
};
Volume.prototype.editAccess = function(p) {
return $location.url(this.volume.editRoute('access', p));
};
Volume.prototype.edit = function() {
var p, s;
if ((s = $scope.selected) && (s === this || (p = s.party)) && this.volume.checkPermission(constants.permission.ADMIN)) {
return this.editAccess(p);
} else if (this.volume.checkPermission(constants.permission.EDIT)) {
return $location.url(this.volume.editRoute());
}
};
return Volume;
})(Item);
Party.foreign = Volume;
Volume.foreign = Party;
volumes = {
individual: [],
collaborator: [],
inherited: {}
};
$scope.parties = parties = {
parents: (function() {
var i, len, ref, results;
ref = party.parents;
results = [];
for (i = 0, len = ref.length; i < len; i++) {
a = ref[i];
p = Party.make(a.party);
p.parent = a;
if (a.member) {
volumes.inherited[p.party.id] = [];
}
results.push(p);
}
return results;
})(),
children: [],
collaborators: []
};
collaborators = {};
ref = party.volumes;
for (i = 0, len = ref.length; i < len; i++) {
v = ref[i];
v = new Volume(v);
if (s = v.self) {
(s.individual >= constants.permission.ADMIN ? volumes.individual : volumes.collaborator).push(v);
} else {
ref1 = volumes.inherited;
for (ii in ref1) {
il = ref1[ii];
if ((ref2 = v.access[ii]) != null ? ref2.children : void 0) {
il.push(v);
}
}
}
if (v.volume.permission >= constants.permission.ADMIN) {
for (pi in v.access) {
collaborators[pi] = true;
}
}
}
delete collaborators[party.id];
ref3 = party.parents;
for (j = 0, len1 = ref3.length; j < len1; j++) {
a = ref3[j];
delete collaborators[a.party.id];
}
ref4 = party.children;
for (l = 0, len2 = ref4.length; l < len2; l++) {
a = ref4[l];
delete collaborators[a.party.id];
p = Party.make(a.party);
p.child = a;
(parties.children[a.member] || (parties.children[a.member] = [])).push(p);
if (!(a.member || a.site)) {
messages.add({
type: 'yellow',
body: $sce.trustAsHtml('<span>' + constants.message('auth.notice.pending', {
sce: $sce.HTML
}, a.party.name) + ' <a href="' + party.editRoute('grant', a.party.id) + '">Manage</a>.</span>')
});
}
}
parties.collaborators = (function() {
var results;
results = [];
for (pi in collaborators) {
results.push(Party.all[pi]);
}
return results;
})();
stringSort = function(a, b) {
return +(a > b) || +(a === b) - 1;
};
partySort = function(a, b) {
return stringSort(a.party.sortname, b.party.sortname);
};
volumes.individual.type = "individual";
volumes.collaborator.type = "collaborator";
$scope.volumes = [volumes.individual];
if (volumes.collaborator.length) {
$scope.volumes.push(volumes.collaborator);
}
ref5 = volumes.inherited;
for (ii in ref5) {
il = ref5[ii];
p = Party.all[ii];
il.type = "inherited";
il.parent = Party.all[ii];
$scope.volumes.push(il);
}
parties.parents.sort(partySort);
parties.parents.type = "parents";
ref6 = parties.children;
for (m = 0, len3 = ref6.length; m < len3; m++) {
cl = ref6[m];
if (cl) {
cl.sort(partySort);
}
}
parties.collaborators.sort(partySort);
parties.collaborators.type = 'collaborators';
today = Date.now();
$scope.isExpired = function(a) {
return new Date(a.expires) < today;
};
$scope.hasExpired = function(result) {
var expiredChildren, k, key, value;
expiredChildren = [];
for (key in result) {
value = result[key];
for (k in value) {
v = value[k];
if (new Date(v.child.expires) < today) {
expiredChildren.push(key);
}
}
}
if (expiredChildren.length > 0) {
return true;
} else {
return false;
}
};
$scope.memberhasCurrent = function(result) {
var currentChildren, key, value;
currentChildren = [];
for (key in result) {
value = result[key];
if (new Date(value.child.expires) >= today) {
currentChildren.push(key);
}
}
if (currentChildren.length > 0) {
return true;
} else {
return false;
}
};
/**
* Sort volumes
* @interface profile/sortVolumes
*/
$scope.sortVolumes = function(b) {
var ref7, volumeSort;
if ($scope.volumeSort === b) {
return;
}
volumeSort = (function() {
switch (b) {
case 'name':
return function(a, b) {
return stringSort(a.volume.displayName, b.volume.displayName);
};
case 'access':
return function(a, b) {
return b.volume.accessPreset - a.volume.accessPreset || b.self.children - a.self.children || b.volume.permission - a.volume.permission || stringSort(a.volume.displayName, b.volume.displayName);
};
case 'permission':
return function(a, b) {
return b.volume.permission - a.volume.permission || stringSort(a.volume.displayName, b.volume.displayName);
};
}
})();
volumes.individual.sort(volumeSort);
volumes.collaborator.sort(volumeSort);
ref7 = volumes.inherited;
for (ii in ref7) {
il = ref7[ii];
il.sort(volumeSort);
}
$scope.volumeSort = b;
sessionStorage.setItem('sort', b);
};
if (sessionStorage.getItem('sort')) {
$scope.sortVolumes(sessionStorage.getItem('sort'));
} else {
$scope.sortVolumes('permission');
}
parties.childrensort = [];
ref7 = parties.children;
for (key in ref7) {
value = ref7[key];
for (x in value) {
value[x]['member'] = key;
parties.childrensort.push(value[x]);
}
}
$scope.affiliateSort = 'accesslevel';
namest = false;
expirationdatest = false;
$scope.changeaffiliateSort = function(x) {
$scope.affiliateSort = x;
angular.element('.affilatesortdiv').not('.' + x + '-div').hide();
angular.element('.affilatesortdiv.' + x + '-div').show();
if (x === "name") {
if (namest === false) {
parties.childrensort.sort(function(a, b) {
return stringSort(a.party.prename, b.party.prename);
});
parties.childrensort.sort(function(a, b) {
return partySort(a, b);
});
namest = true;
} else {
parties.childrensort.sort(function(a, b) {
return stringSort(b.party.prename, a.party.prename);
});
parties.childrensort.sort(function(a, b) {
return partySort(b, a);
});
namest = false;
}
} else if (x === "expirationdate") {
if (expirationdatest === false) {
parties.childrensort.sort(function(a, b) {
return new Date(a.child.expires) - new Date(b.child.expires);
});
expirationdatest = true;
} else {
parties.childrensort.sort(function(a, b) {
return new Date(b.child.expires) - new Date(a.child.expires);
});
expirationdatest = false;
}
}
};
}
]);
//# sourceMappingURL=profile.js.map