userAvatar.js 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  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. Template.userAvatarInitials.helpers({
  26. initials: function() {
  27. var user = Users.findOne(this.userId);
  28. return user && user.getInitials();
  29. },
  30. viewPortWidth: function() {
  31. var user = Users.findOne(this.userId);
  32. return (user && user.getInitials().length || 1) * 12;
  33. }
  34. });
  35. BlazeComponent.extendComponent({
  36. template: function() {
  37. return 'changeAvatarPopup';
  38. },
  39. avatarUrlOptions: function() {
  40. return {
  41. auth: false,
  42. brokenIsFine: true
  43. };
  44. },
  45. uploadedAvatars: function() {
  46. return Avatars.find({userId: Meteor.userId()});
  47. },
  48. isSelected: function() {
  49. var userProfile = Meteor.user().profile;
  50. var avatarUrl = userProfile && userProfile.avatarUrl;
  51. var currentAvatarUrl = this.currentData().url(this.avatarUrlOptions());
  52. return avatarUrl === currentAvatarUrl;
  53. },
  54. noAvatarUrl: function() {
  55. var userProfile = Meteor.user().profile;
  56. var avatarUrl = userProfile && userProfile.avatarUrl;
  57. return ! avatarUrl;
  58. },
  59. setAvatar: function(avatarUrl) {
  60. Meteor.users.update(Meteor.userId(), {
  61. $set: {
  62. 'profile.avatarUrl': avatarUrl
  63. }
  64. });
  65. },
  66. events: function() {
  67. return [{
  68. 'click .js-upload-avatar': function() {
  69. this.$('.js-upload-avatar-input').click();
  70. },
  71. 'change .js-upload-avatar-input': function(evt) {
  72. var self = this;
  73. var file, fileUrl;
  74. FS.Utility.eachFile(evt, function(f) {
  75. file = Avatars.insert(new FS.File(f));
  76. fileUrl = file.url(self.avatarUrlOptions());
  77. });
  78. var fetchAvatarInterval = window.setInterval(function() {
  79. $.ajax({
  80. url: fileUrl,
  81. success: function() {
  82. self.setAvatar(file.url(self.avatarUrlOptions()));
  83. window.clearInterval(fetchAvatarInterval);
  84. }
  85. });
  86. }, 100);
  87. },
  88. 'click .js-select-avatar': function() {
  89. var avatarUrl = this.currentData().url(this.avatarUrlOptions());
  90. this.setAvatar(avatarUrl);
  91. },
  92. 'click .js-select-initials': function() {
  93. this.setAvatar('');
  94. },
  95. 'click .js-delete-avatar': function() {
  96. Avatars.remove(this.currentData()._id);
  97. }
  98. }];
  99. }
  100. }).register('changeAvatarPopup');
  101. Template.cardMembersPopup.helpers({
  102. isCardMember: function() {
  103. var cardId = Template.parentData()._id;
  104. var cardMembers = Cards.findOne(cardId).members || [];
  105. return _.contains(cardMembers, this.userId);
  106. },
  107. user: function() {
  108. return Users.findOne(this.userId);
  109. }
  110. });
  111. Template.cardMembersPopup.events({
  112. 'click .js-select-member': function(evt) {
  113. var cardId = Template.parentData(2).data._id;
  114. var memberId = this.userId;
  115. var operation;
  116. if (Cards.find({ _id: cardId, members: memberId}).count() === 0)
  117. operation = '$addToSet';
  118. else
  119. operation = '$pull';
  120. var query = {};
  121. query[operation] = {
  122. members: memberId
  123. };
  124. Cards.update(cardId, query);
  125. evt.preventDefault();
  126. }
  127. });
  128. Template.cardMemberPopup.events({
  129. 'click .js-remove-member': function() {
  130. Cards.update(this.cardId, {$pull: {members: this.userId}});
  131. Popup.close();
  132. }
  133. });