summaryrefslogtreecommitdiffstats
path: root/client/components/cards/checklists.js
diff options
context:
space:
mode:
authorLauri Ojansivu <x@xet7.org>2017-09-30 16:55:10 +0300
committerLauri Ojansivu <x@xet7.org>2017-09-30 16:55:10 +0300
commit8680d7727b306ad18a0c46743459dead9ef87d7a (patch)
tree9996b255cb06fb9dd70bec98e6244ebae25aa8b5 /client/components/cards/checklists.js
parent222c071925ecb62024092e3189deac644c5fd42e (diff)
parentd8169138e57de08a1caaca65c034966e3365508e (diff)
downloadwekan-8680d7727b306ad18a0c46743459dead9ef87d7a.tar.gz
wekan-8680d7727b306ad18a0c46743459dead9ef87d7a.tar.bz2
wekan-8680d7727b306ad18a0c46743459dead9ef87d7a.zip
Merge branch 'amadilsons-issue881' into devel
Confirm popup appears before Checklist Delete. Thanks to amadilsons ! Closes #881
Diffstat (limited to 'client/components/cards/checklists.js')
-rw-r--r--client/components/cards/checklists.js75
1 files changed, 57 insertions, 18 deletions
diff --git a/client/components/cards/checklists.js b/client/components/cards/checklists.js
index ba3384a9..1cd77c9f 100644
--- a/client/components/cards/checklists.js
+++ b/client/components/cards/checklists.js
@@ -66,6 +66,7 @@ Template.checklists.onRendered(function () {
});
BlazeComponent.extendComponent({
+
addChecklist(event) {
event.preventDefault();
const textarea = this.find('textarea.js-add-checklist-item');
@@ -101,6 +102,26 @@ BlazeComponent.extendComponent({
textarea.focus();
},
+ canModifyCard() {
+ return Meteor.user() && Meteor.user().isBoardMember() && !Meteor.user().isCommentOnly();
+ },
+
+ deleteChecklist() {
+ const checklist = this.currentData().checklist;
+ if (checklist && checklist._id) {
+ Checklists.remove(checklist._id);
+ this.toggleDeleteDialog.set(false);
+ }
+ },
+
+ deleteItem() {
+ const checklist = this.currentData().checklist;
+ const item = this.currentData().item;
+ if (checklist && item && item._id) {
+ checklist.removeItem(item._id);
+ }
+ },
+
editChecklist(event) {
event.preventDefault();
const textarea = this.find('textarea.js-edit-checklist-item');
@@ -109,10 +130,6 @@ BlazeComponent.extendComponent({
checklist.setTitle(title);
},
- canModifyCard() {
- return Meteor.user() && Meteor.user().isBoardMember() && !Meteor.user().isCommentOnly();
- },
-
editChecklistItem(event) {
event.preventDefault();
@@ -123,19 +140,9 @@ BlazeComponent.extendComponent({
checklist.editItem(itemId, title);
},
- deleteItem() {
- const checklist = this.currentData().checklist;
- const item = this.currentData().item;
- if (checklist && item && item._id) {
- checklist.removeItem(item._id);
- }
- },
-
- deleteChecklist() {
- const checklist = this.currentData().checklist;
- if (checklist && checklist._id) {
- Checklists.remove(checklist._id);
- }
+ onCreated() {
+ this.toggleDeleteDialog = new ReactiveVar(false);
+ this.checklistToDelete = null; //Store data context to pass to checklistDeleteDialog template
},
pressKey(event) {
@@ -148,18 +155,50 @@ BlazeComponent.extendComponent({
},
events() {
+ const events = {
+ 'click .toggle-delete-checklist-dialog'(event) {
+ if($(event.target).hasClass('js-delete-checklist')){
+ this.checklistToDelete = this.currentData().checklist; //Store data context
+ }
+ this.toggleDeleteDialog.set(!this.toggleDeleteDialog.get());
+ },
+ };
+
return [{
+ ...events,
'submit .js-add-checklist': this.addChecklist,
'submit .js-edit-checklist-title': this.editChecklist,
'submit .js-add-checklist-item': this.addChecklistItem,
'submit .js-edit-checklist-item': this.editChecklistItem,
'click .js-delete-checklist-item': this.deleteItem,
- 'click .js-delete-checklist': this.deleteChecklist,
+ 'click .confirm-checklist-delete': this.deleteChecklist,
keydown: this.pressKey,
}];
},
}).register('checklists');
+Template.checklistDeleteDialog.onCreated(() => {
+ const $cardDetails = this.$('.card-details');
+ this.scrollState = { position: $cardDetails.scrollTop(), //save current scroll position
+ top: false, //required for smooth scroll animation
+ };
+ //Callback's purpose is to only prevent scrolling after animation is complete
+ $cardDetails.animate({ scrollTop: 0 }, 500, () => { this.scrollState.top = true; });
+
+ //Prevent scrolling while dialog is open
+ $cardDetails.on('scroll', () => {
+ if(this.scrollState.top) { //If it's already in position, keep it there. Otherwise let animation scroll
+ $cardDetails.scrollTop(0);
+ }
+ });
+});
+
+Template.checklistDeleteDialog.onDestroyed(() => {
+ const $cardDetails = this.$('.card-details');
+ $cardDetails.off('scroll'); //Reactivate scrolling
+ $cardDetails.animate( { scrollTop: this.scrollState.position });
+});
+
Template.itemDetail.helpers({
canModifyCard() {
return Meteor.user() && Meteor.user().isBoardMember() && !Meteor.user().isCommentOnly();