summaryrefslogtreecommitdiffstats
path: root/client/components/users/userAvatar.js
blob: deae01cf26d916ff431a3bd06ff80f408cac8f39 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
Meteor.subscribe('my-avatars');

Template.userAvatar.helpers({
  userData: function() {
    return Users.findOne(this.userId, {
      fields: {
        profile: 1,
        username: 1
      }
    });
  },

  memberType: function() {
    var user = Users.findOne(this.userId);
    return user && user.isBoardAdmin() ? 'admin' : 'normal';
  },

  presenceStatusClassName: function() {
    var userPresence = Presences.findOne({ userId: this.userId });
    if (! userPresence)
      return 'disconnected';
    else if (Session.equals('currentBoard', userPresence.state.currentBoardId))
      return 'active';
    else
      return 'idle';
  }
});

BlazeComponent.extendComponent({
  template: function() {
    return 'changeAvatarPopup';
  },

  avatarUrlOptions: function() {
    return {
      auth: false,
      brokenIsFine: true
    };
  },

  uploadedAvatars: function() {
    return Avatars.find({userId: Meteor.userId()});
  },

  isSelected: function() {
    var userProfile = Meteor.user().profile;
    var avatarUrl = userProfile && userProfile.avatarUrl;
    var currentAvatarUrl = this.currentData().url(this.avatarUrlOptions());
    return avatarUrl === currentAvatarUrl;
  },

  setAvatar: function(avatarUrl) {
    Meteor.users.update(Meteor.userId(), {
      $set: {
        'profile.avatarUrl': avatarUrl
      }
    });
  },

  events: function() {
    return [{
      'click .js-upload-avatar': function() {
        this.$('.js-upload-avatar-input').click();
      },
      'change .js-upload-avatar-input': function(evt) {
        var self = this;
        var file, fileUrl;

        FS.Utility.eachFile(evt, function(f) {
          file = Avatars.insert(new FS.File(f));
          fileUrl = file.url(self.avatarUrlOptions());
        });
        var fetchAvatarInterval = window.setInterval(function() {
          $.ajax({
            url: fileUrl,
            success: function() {
              self.setAvatar(file.url(self.avatarUrlOptions()));
              window.clearInterval(fetchAvatarInterval);
            }
          });
        }, 100);
      },
      'click .js-select-avatar': function() {
        var avatarUrl = this.currentData().url(this.avatarUrlOptions());
        this.setAvatar(avatarUrl);
      },
      'click .js-delete-avatar': function() {
        Avatars.remove(this.currentData()._id);
      }
    }];
  }
}).register('changeAvatarPopup');