checklists.js 3.1 KB

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