Source: party/profile.js

// 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