details.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. BlazeComponent.extendComponent({
  2. template: function() {
  3. return 'cardDetails';
  4. },
  5. mixins: function() {
  6. return [Mixins.InfiniteScrolling];
  7. },
  8. calculateNextPeak: function() {
  9. var altitude = this.find('.js-card-detail').scrollHeight;
  10. this.callFirstWith(this, 'setNextPeak', altitude);
  11. },
  12. reachNextPeak: function() {
  13. var activitiesComponent = this.componentChildren('activities')[0];
  14. activitiesComponent.loadNextPage();
  15. },
  16. onRendered: function() {
  17. var bodyBoardComponent = this.componentParent();
  18. var additionalMargin = 550;
  19. var $cardDetails = this.$(this.firstNode());
  20. var scollLeft = $cardDetails.offset().left + additionalMargin;
  21. bodyBoardComponent.scrollLeft(scollLeft);
  22. },
  23. events: function() {
  24. return [{
  25. 'click .js-move-card': Popup.open('moveCard'),
  26. 'submit .js-card-description': function(evt) {
  27. evt.preventDefault();
  28. var cardId = Session.get('currentCard');
  29. var form = this.componentChildren('inlinedForm')[0];
  30. var newDescription = form.getValue();
  31. Cards.update(cardId, {
  32. $set: {
  33. description: newDescription
  34. }
  35. });
  36. form.close();
  37. },
  38. 'click .js-close-card-detail': function() {
  39. Utils.goBoardId(Session.get('currentBoard'));
  40. },
  41. 'click .editable .js-card-title': function(event, t) {
  42. var editable = t.$('.card-detail-title');
  43. // add class editing and focus
  44. $('.editing').removeClass('editing');
  45. editable.addClass('editing');
  46. editable.find('#title').focus();
  47. },
  48. 'click .js-edit-desc': function(event, t) {
  49. var editable = t.$('.card-detail-item');
  50. // editing remove based and add current editing.
  51. $('.editing').removeClass('editing');
  52. editable.addClass('editing');
  53. editable.find('#desc').focus();
  54. event.preventDefault();
  55. },
  56. 'click .js-cancel-edit': function() {
  57. // remove editing hide.
  58. $('.editing').removeClass('editing');
  59. },
  60. 'submit #WindowTitleEdit': function(event, t) {
  61. var title = t.find('#title').value;
  62. if ($.trim(title)) {
  63. Cards.update(this.card._id, {
  64. $set: {
  65. title: title
  66. }
  67. }, function(err) {
  68. if (! err) $('.editing').removeClass('editing');
  69. });
  70. }
  71. event.preventDefault();
  72. },
  73. 'submit #WindowDescEdit': function(event, t) {
  74. Cards.update(this.card._id, {
  75. $set: {
  76. description: t.find('#desc').value
  77. }
  78. }, function(err) {
  79. if (! err) $('.editing').removeClass('editing');
  80. });
  81. event.preventDefault();
  82. },
  83. 'click .member': Popup.open('cardMember'),
  84. 'click .js-details-edit-members': Popup.open('cardMembers'),
  85. 'click .js-details-edit-labels': Popup.open('cardLabels')
  86. }];
  87. }
  88. }).register('cardDetails');
  89. Template.moveCardPopup.events({
  90. 'click .js-select-list': function() {
  91. // XXX We should *not* get the currentCard from the global state, but
  92. // instead from a “component” state.
  93. var cardId = Session.get('currentCard');
  94. var newListId = this._id;
  95. Cards.update(cardId, {
  96. $set: {
  97. listId: newListId
  98. }
  99. });
  100. }
  101. });