From 616dade81c25b10fc409aee1bcc9a93ddbfee81b Mon Sep 17 00:00:00 2001 From: Haocen Xu Date: Fri, 6 Jul 2018 14:42:36 -0400 Subject: Hotfix more sortable elements --- client/components/boards/boardBody.js | 4 +--- client/components/cards/cardDetails.js | 6 ++++++ client/components/cards/checklists.js | 4 +--- client/components/lists/list.js | 4 +--- client/components/swimlanes/swimlanes.js | 4 +--- client/lib/utils.js | 21 +++++++++++---------- 6 files changed, 21 insertions(+), 22 deletions(-) diff --git a/client/components/boards/boardBody.js b/client/components/boards/boardBody.js index 6ff40ca4..b68c9b12 100644 --- a/client/components/boards/boardBody.js +++ b/client/components/boards/boardBody.js @@ -75,9 +75,7 @@ BlazeComponent.extendComponent({ }); // ugly touch event hotfix - $('.js-swimlane:not(.placeholder)').each(function() { - enableClickOnTouch(this); - }); + enableClickOnTouch('.js-swimlane:not(.placeholder)'); function userIsMember() { return Meteor.user() && Meteor.user().isBoardMember() && !Meteor.user().isCommentOnly(); diff --git a/client/components/cards/cardDetails.js b/client/components/cards/cardDetails.js index 5fee1680..1583a51f 100644 --- a/client/components/cards/cardDetails.js +++ b/client/components/cards/cardDetails.js @@ -132,6 +132,9 @@ BlazeComponent.extendComponent({ }, }); + // ugly touch event hotfix + enableClickOnTouch('.card-checklist-items .js-checklist'); + const $subtasksDom = this.$('.card-subtasks-items'); $subtasksDom.sortable({ @@ -167,6 +170,9 @@ BlazeComponent.extendComponent({ }, }); + // ugly touch event hotfix + enableClickOnTouch('.card-subtasks-items .js-subtasks'); + function userIsMember() { return Meteor.user() && Meteor.user().isBoardMember(); } diff --git a/client/components/cards/checklists.js b/client/components/cards/checklists.js index 7fc54f9e..e014abba 100644 --- a/client/components/cards/checklists.js +++ b/client/components/cards/checklists.js @@ -38,9 +38,7 @@ function initSorting(items) { }); // ugly touch event hotfix - $('.js-checklist-item:not(.placeholder)').each(function() { - enableClickOnTouch(this); - }); + enableClickOnTouch('.js-checklist-item:not(.placeholder)'); } BlazeComponent.extendComponent({ diff --git a/client/components/lists/list.js b/client/components/lists/list.js index 3f7c6dea..267af31c 100644 --- a/client/components/lists/list.js +++ b/client/components/lists/list.js @@ -84,9 +84,7 @@ BlazeComponent.extendComponent({ }); // ugly touch event hotfix - $(itemsSelector).each(function() { - enableClickOnTouch(this); - }); + enableClickOnTouch(itemsSelector); // Disable drag-dropping if the current user is not a board member or is comment only this.autorun(() => { diff --git a/client/components/swimlanes/swimlanes.js b/client/components/swimlanes/swimlanes.js index 2acf4a82..865895a9 100644 --- a/client/components/swimlanes/swimlanes.js +++ b/client/components/swimlanes/swimlanes.js @@ -67,9 +67,7 @@ function initSortable(boardComponent, $listsDom) { }); // ugly touch event hotfix - $('.js-list:not(.js-list-composer)').each(function() { - enableClickOnTouch(this); - }); + enableClickOnTouch('.js-list:not(.js-list-composer)'); function userIsMember() { return Meteor.user() && Meteor.user().isBoardMember() && !Meteor.user().isCommentOnly(); diff --git a/client/lib/utils.js b/client/lib/utils.js index 7e2651d2..b70faec6 100644 --- a/client/lib/utils.js +++ b/client/lib/utils.js @@ -123,23 +123,24 @@ Utils = { ); }, - enableClickOnTouch(element) { + enableClickOnTouch(selector) { let touchStart = null; let lastTouch = null; - element.addEventListener('touchstart', function(e) { - touchStart = e.touches[0]; - }, false); - element.addEventListener('touchmove', function(e) { - const touches = e.touches; + + $(document).on('touchstart', selector, function(e) { + touchStart = e.originalEvent.touches[0]; + }); + $(document).on('touchmove', selector, function(e) { + const touches = e.originalEvent.touches; lastTouch = touches[touches.length - 1]; - }, true); - element.addEventListener('touchend', function() { + }); + $(document).on('touchend', selector, function(e) { if (touchStart && lastTouch && Utils.calculateTouchDistance(touchStart, lastTouch) <= 20) { const clickEvent = document.createEvent('MouseEvents'); clickEvent.initEvent('click', true, true); - this.dispatchEvent(clickEvent); + e.target.dispatchEvent(clickEvent); } - }, false); + }); }, }; -- cgit v1.2.3-1-g7c22