checklists.js 3.0 KB

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