checklists.js 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. BlazeComponent.extendComponent({
  2. addChecklist(event) {
  3. event.preventDefault();
  4. const textarea = this.find('textarea.js-add-checklist-item');
  5. const title = textarea.value.trim();
  6. const cardId = this.currentData().cardId;
  7. Checklists.insert({
  8. cardId,
  9. title,
  10. });
  11. },
  12. addChecklistItem(event) {
  13. event.preventDefault();
  14. const textarea = this.find('textarea.js-add-checklist-item');
  15. const title = textarea.value.trim();
  16. const checklist = this.currentData().checklist;
  17. checklist.addItem(title);
  18. },
  19. editChecklist(event) {
  20. event.preventDefault();
  21. const textarea = this.find('textarea.js-edit-checklist-item');
  22. const title = textarea.value.trim();
  23. const checklist = this.currentData().checklist;
  24. checklist.setTitle(title);
  25. },
  26. canModifyCard() {
  27. return Meteor.user() && Meteor.user().isBoardMember() && !Meteor.user().isCommentOnly();
  28. },
  29. editChecklistItem(event) {
  30. event.preventDefault();
  31. const textarea = this.find('textarea.js-edit-checklist-item');
  32. const title = textarea.value.trim();
  33. const itemId = this.currentData().item._id;
  34. const checklist = this.currentData().checklist;
  35. checklist.editItem(itemId, title);
  36. },
  37. deleteItem() {
  38. const checklist = this.currentData().checklist;
  39. const item = this.currentData().item;
  40. if (checklist && item && item._id) {
  41. checklist.removeItem(item._id);
  42. }
  43. },
  44. deleteChecklist() {
  45. const checklist = this.currentData().checklist;
  46. if (checklist && checklist._id) {
  47. Checklists.remove(checklist._id);
  48. }
  49. },
  50. pressKey(event) {
  51. //If user press enter key inside a form, submit it, so user doesn't have to leave keyboard to submit a form.
  52. if (event.keyCode === 13) {
  53. event.preventDefault();
  54. const $form = $(event.currentTarget).closest('form');
  55. $form.find('button[type=submit]').click();
  56. }
  57. },
  58. events() {
  59. return [{
  60. 'submit .js-add-checklist': this.addChecklist,
  61. 'submit .js-edit-checklist-title': this.editChecklist,
  62. 'submit .js-add-checklist-item': this.addChecklistItem,
  63. 'submit .js-edit-checklist-item': this.editChecklistItem,
  64. 'click .js-delete-checklist-item': this.deleteItem,
  65. 'click .js-delete-checklist': this.deleteChecklist,
  66. keydown: this.pressKey,
  67. }];
  68. },
  69. }).register('checklists');
  70. Template.itemDetail.helpers({
  71. canModifyCard() {
  72. return Meteor.user() && Meteor.user().isBoardMember() && !Meteor.user().isCommentOnly();
  73. },
  74. });
  75. BlazeComponent.extendComponent({
  76. toggleItem() {
  77. const checklist = this.currentData().checklist;
  78. const item = this.currentData().item;
  79. if (checklist && item && item._id) {
  80. checklist.toggleItem(item._id);
  81. }
  82. },
  83. events() {
  84. return [{
  85. 'click .item .check-box': this.toggleItem,
  86. }];
  87. },
  88. }).register('itemDetail');