events.js 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285
  1. // Template.cards.events({
  2. // // 'click .js-cancel': function(event, t) {
  3. // // var composer = t.$('.card-composer');
  4. // // // Keep the old value in memory to display it again next time
  5. // // var inputCacheKey = "addCard-" + this.listId;
  6. // // var oldValue = composer.find('.js-card-title').val();
  7. // // InputsCache.set(inputCacheKey, oldValue);
  8. // // // add composer hide class
  9. // // composer.addClass('hide');
  10. // // composer.find('.js-card-title').val('');
  11. // // // remove hide open link class
  12. // // $('.js-open-card-composer').removeClass('hide');
  13. // // },
  14. // 'submit': function(evt, tpl) {
  15. // evt.preventDefault();
  16. // var textarea = $(evt.currentTarget).find('textarea');
  17. // var title = textarea.val();
  18. // var lastCard = tpl.find('.js-minicard:last-child');
  19. // var sort;
  20. // if (lastCard === null) {
  21. // sort = 0;
  22. // } else {
  23. // sort = Blaze.getData(lastCard).sort + 1;
  24. // }
  25. // // debugger
  26. // // Clear the form in-memory cache
  27. // // var inputCacheKey = "addCard-" + this.listId;
  28. // // InputsCache.set(inputCacheKey, '');
  29. // // title trim if not empty then
  30. // if ($.trim(title)) {
  31. // Cards.insert({
  32. // title: title,
  33. // listId: Template.currentData().listId,
  34. // boardId: Template.currentData().board._id,
  35. // sort: sort
  36. // }, function(err, _id) {
  37. // // In case the filter is active we need to add the newly
  38. // // inserted card in the list of exceptions -- cards that are
  39. // // not filtered. Otherwise the card will disappear instantly.
  40. // // See https://github.com/libreboard/libreboard/issues/80
  41. // Filter.addException(_id);
  42. // });
  43. // // empty and focus.
  44. // textarea.val('').focus();
  45. // // focus complete then scroll top
  46. // Utils.Scroll(tpl.find('.js-minicards')).top(1000, true);
  47. // }
  48. // }
  49. // });
  50. // Template.cards.events({
  51. // 'click .member': Popup.open('cardMember')
  52. // });
  53. Template.cardMemberPopup.events({
  54. 'click .js-remove-member': function() {
  55. Cards.update(this.cardId, {$pull: {members: this.userId}});
  56. Popup.close();
  57. }
  58. });
  59. Template.WindowActivityModule.events({
  60. 'click .js-new-comment:not(.focus)': function(evt) {
  61. var $this = $(evt.currentTarget);
  62. $this.addClass('focus');
  63. },
  64. 'submit #CommentForm': function(evt, t) {
  65. var text = t.$('.js-new-comment-input');
  66. if ($.trim(text.val())) {
  67. CardComments.insert({
  68. boardId: this.card.boardId,
  69. cardId: this.card._id,
  70. text: text.val()
  71. });
  72. text.val('');
  73. $('.focus').removeClass('focus');
  74. }
  75. evt.preventDefault();
  76. }
  77. });
  78. Template.WindowSidebarModule.events({
  79. 'click .js-change-card-members': Popup.open('cardMembers'),
  80. 'click .js-edit-labels': Popup.open('cardLabels'),
  81. 'click .js-archive-card': function(evt) {
  82. // Update
  83. Cards.update(this.card._id, {
  84. $set: {
  85. archived: true
  86. }
  87. });
  88. evt.preventDefault();
  89. },
  90. 'click .js-unarchive-card': function(evt) {
  91. Cards.update(this.card._id, {
  92. $set: {
  93. archived: false
  94. }
  95. });
  96. evt.preventDefault();
  97. },
  98. 'click .js-delete-card': Popup.afterConfirm('cardDelete', function() {
  99. Cards.remove(this.card._id);
  100. // redirect board
  101. Utils.goBoardId(this.card.board()._id);
  102. Popup.close();
  103. }),
  104. 'click .js-more-menu': Popup.open('cardMore'),
  105. 'click .js-attach': Popup.open('cardAttachments')
  106. });
  107. Template.WindowAttachmentsModule.events({
  108. 'click .js-attach': Popup.open('cardAttachments'),
  109. 'click .js-confirm-delete': Popup.afterConfirm('attachmentDelete',
  110. function() {
  111. Attachments.remove(this._id);
  112. Popup.close();
  113. }
  114. ),
  115. // If we let this event bubble, Iron-Router will handle it and empty the
  116. // page content, see #101.
  117. 'click .js-open-viewer, click .js-download': function(event) {
  118. event.stopPropagation();
  119. },
  120. 'click .js-add-cover': function() {
  121. Cards.update(this.cardId, { $set: { coverId: this._id } });
  122. },
  123. 'click .js-remove-cover': function() {
  124. Cards.update(this.cardId, { $unset: { coverId: '' } });
  125. }
  126. });
  127. Template.cardMembersPopup.events({
  128. 'click .js-select-member': function(evt) {
  129. var cardId = Template.parentData(2).data._id;
  130. var memberId = this.userId;
  131. var operation;
  132. if (Cards.find({ _id: cardId, members: memberId}).count() === 0)
  133. operation = '$addToSet';
  134. else
  135. operation = '$pull';
  136. var query = {};
  137. query[operation] = {
  138. members: memberId
  139. };
  140. Cards.update(cardId, query);
  141. evt.preventDefault();
  142. }
  143. });
  144. Template.cardLabelsPopup.events({
  145. 'click .js-select-label': function(evt) {
  146. var cardId = Template.parentData(2).data._id;
  147. var labelId = this._id;
  148. var operation;
  149. if (Cards.find({ _id: cardId, labelIds: labelId}).count() === 0)
  150. operation = '$addToSet';
  151. else
  152. operation = '$pull';
  153. var query = {};
  154. query[operation] = {
  155. labelIds: labelId
  156. };
  157. Cards.update(cardId, query);
  158. evt.preventDefault();
  159. },
  160. 'click .js-edit-label': Popup.open('editLabel'),
  161. 'click .js-add-label': Popup.open('createLabel')
  162. });
  163. Template.formLabel.events({
  164. 'click .js-palette-color': function(evt) {
  165. var $this = $(evt.currentTarget);
  166. // hide selected ll colors
  167. $('.js-palette-select').addClass('hide');
  168. // show select color
  169. $this.find('.js-palette-select').removeClass('hide');
  170. }
  171. });
  172. Template.createLabelPopup.events({
  173. // Create the new label
  174. 'submit .create-label': function(evt, tpl) {
  175. var name = tpl.$('#labelName').val().trim();
  176. var boardId = Session.get('currentBoard');
  177. var selectLabelDom = tpl.$('.js-palette-select:not(.hide)').get(0);
  178. var selectLabel = Blaze.getData(selectLabelDom);
  179. Boards.update(boardId, {
  180. $push: {
  181. labels: {
  182. _id: Random.id(6),
  183. name: name,
  184. color: selectLabel.color
  185. }
  186. }
  187. });
  188. Popup.back();
  189. evt.preventDefault();
  190. }
  191. });
  192. Template.editLabelPopup.events({
  193. 'click .js-delete-label': Popup.afterConfirm('deleteLabel', function() {
  194. var boardId = Session.get('currentBoard');
  195. Boards.update(boardId, {
  196. $pull: {
  197. labels: {
  198. _id: this._id
  199. }
  200. }
  201. });
  202. Popup.back(2);
  203. }),
  204. 'submit .edit-label': function(evt, tpl) {
  205. var name = tpl.$('#labelName').val().trim();
  206. var boardId = Session.get('currentBoard');
  207. var getLabel = Utils.getLabelIndex(boardId, this._id);
  208. var selectLabelDom = tpl.$('.js-palette-select:not(.hide)').get(0);
  209. var selectLabel = Blaze.getData(selectLabelDom);
  210. var $set = {};
  211. // set label index
  212. $set[getLabel.key('name')] = name;
  213. // set color
  214. $set[getLabel.key('color')] = selectLabel.color;
  215. // update
  216. Boards.update(boardId, { $set: $set });
  217. // return to the previous popup view trigger
  218. Popup.back();
  219. evt.preventDefault();
  220. },
  221. 'click .js-select-label': function() {
  222. Cards.remove(this.cardId);
  223. // redirect board
  224. Utils.goBoardId(this.boardId);
  225. }
  226. });
  227. Template.cardMorePopup.events({
  228. 'click .js-delete': Popup.afterConfirm('cardDelete', function() {
  229. Cards.remove(this.card._id);
  230. // redirect board
  231. Utils.goBoardId(this.card.board()._id);
  232. })
  233. });
  234. Template.cardAttachmentsPopup.events({
  235. 'change .js-attach-file': function(evt) {
  236. var card = this.card;
  237. FS.Utility.eachFile(evt, function(f) {
  238. var file = new FS.File(f);
  239. // set Ids
  240. file.boardId = card.boardId;
  241. file.cardId = card._id;
  242. // upload file
  243. Attachments.insert(file);
  244. Popup.close();
  245. });
  246. },
  247. 'click .js-computer-upload': function(evt, t) {
  248. t.find('.js-attach-file').click();
  249. evt.preventDefault();
  250. }
  251. });