userAvatar.js 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. Meteor.subscribe('my-avatars');
  2. Template.userAvatar.helpers({
  3. userData: function() {
  4. return Users.findOne(this.userId, {
  5. fields: {
  6. profile: 1,
  7. username: 1
  8. }
  9. });
  10. },
  11. memberType: function() {
  12. var user = Users.findOne(this.userId);
  13. return user && user.isBoardAdmin() ? 'admin' : 'normal';
  14. },
  15. presenceStatusClassName: function() {
  16. var userPresence = Presences.findOne({ userId: this.userId });
  17. if (! userPresence)
  18. return 'disconnected';
  19. else if (Session.equals('currentBoard', userPresence.state.currentBoardId))
  20. return 'active';
  21. else
  22. return 'idle';
  23. }
  24. });
  25. BlazeComponent.extendComponent({
  26. template: function() {
  27. return 'changeAvatarPopup';
  28. },
  29. avatarUrlOptions: function() {
  30. return {
  31. auth: false,
  32. brokenIsFine: true
  33. };
  34. },
  35. uploadedAvatars: function() {
  36. return Avatars.find({userId: Meteor.userId()});
  37. },
  38. isSelected: function() {
  39. var userProfile = Meteor.user().profile;
  40. var avatarUrl = userProfile && userProfile.avatarUrl;
  41. var currentAvatarUrl = this.currentData().url(this.avatarUrlOptions());
  42. return avatarUrl === currentAvatarUrl;
  43. },
  44. setAvatar: function(avatarUrl) {
  45. Meteor.users.update(Meteor.userId(), {
  46. $set: {
  47. 'profile.avatarUrl': avatarUrl
  48. }
  49. });
  50. },
  51. events: function() {
  52. return [{
  53. 'click .js-upload-avatar': function() {
  54. this.$('.js-upload-avatar-input').click();
  55. },
  56. 'change .js-upload-avatar-input': function(evt) {
  57. var self = this;
  58. var file, fileUrl;
  59. FS.Utility.eachFile(evt, function(f) {
  60. file = Avatars.insert(new FS.File(f));
  61. fileUrl = file.url(self.avatarUrlOptions());
  62. });
  63. var fetchAvatarInterval = window.setInterval(function() {
  64. $.ajax({
  65. url: fileUrl,
  66. success: function() {
  67. self.setAvatar(file.url(self.avatarUrlOptions()));
  68. window.clearInterval(fetchAvatarInterval);
  69. }
  70. });
  71. }, 100);
  72. },
  73. 'click .js-select-avatar': function() {
  74. var avatarUrl = this.currentData().url(this.avatarUrlOptions());
  75. this.setAvatar(avatarUrl);
  76. },
  77. 'click .js-delete-avatar': function() {
  78. Avatars.remove(this.currentData()._id);
  79. }
  80. }];
  81. }
  82. }).register('changeAvatarPopup');