Skip to content

Commit c5c6b10

Browse files
Merge remote-tracking branch 'remotes/github/MAGETWO-96412' into EPAM-PR-34
2 parents c53f861 + 9333cf8 commit c5c6b10

File tree

1 file changed

+60
-29
lines changed
  • app/code/Magento/Ui/view/base/web/js/dynamic-rows

1 file changed

+60
-29
lines changed

app/code/Magento/Ui/view/base/web/js/dynamic-rows/dnd.js

Lines changed: 60 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,7 @@ define([
1515
], function (ko, $, _, Element) {
1616
'use strict';
1717

18-
var transformProp,
19-
isTouchDevice = typeof document.ontouchstart !== 'undefined';
18+
var transformProp;
2019

2120
/**
2221
* Get element context
@@ -110,11 +109,7 @@ define([
110109
* @param {Object} data - element data
111110
*/
112111
initListeners: function (elem, data) {
113-
if (isTouchDevice) {
114-
$(elem).on('touchstart', this.mousedownHandler.bind(this, data, elem));
115-
} else {
116-
$(elem).on('mousedown', this.mousedownHandler.bind(this, data, elem));
117-
}
112+
$(elem).on('mousedown touchstart', this.mousedownHandler.bind(this, data, elem));
118113
},
119114

120115
/**
@@ -131,26 +126,20 @@ define([
131126
$table = $(elem).parents('table').eq(0),
132127
$tableWrapper = $table.parent();
133128

129+
this.disableScroll();
134130
$(recordNode).addClass(this.draggableElementClass);
135131
$(originRecord).addClass(this.draggableElementClass);
136132
this.step = this.step === 'auto' ? originRecord.height() / 2 : this.step;
137133
drEl.originRow = originRecord;
138134
drEl.instance = recordNode = this.processingStyles(recordNode, elem);
139135
drEl.instanceCtx = this.getRecord(originRecord[0]);
140-
drEl.eventMousedownY = isTouchDevice ? event.originalEvent.touches[0].pageY : event.pageY;
136+
drEl.eventMousedownY = this.getPageY(event);
141137
drEl.minYpos =
142138
$table.offset().top - originRecord.offset().top + $table.children('thead').outerHeight();
143139
drEl.maxYpos = drEl.minYpos + $table.children('tbody').outerHeight() - originRecord.outerHeight();
144140
$tableWrapper.append(recordNode);
145-
146-
if (isTouchDevice) {
147-
this.body.bind('touchmove', this.mousemoveHandler);
148-
this.body.bind('touchend', this.mouseupHandler);
149-
} else {
150-
this.body.bind('mousemove', this.mousemoveHandler);
151-
this.body.bind('mouseup', this.mouseupHandler);
152-
}
153-
141+
this.body.bind('mousemove touchmove', this.mousemoveHandler);
142+
this.body.bind('mouseup touchend', this.mouseupHandler);
154143
},
155144

156145
/**
@@ -160,16 +149,13 @@ define([
160149
*/
161150
mousemoveHandler: function (event) {
162151
var depEl = this.draggableElement,
163-
pageY = isTouchDevice ? event.originalEvent.touches[0].pageY : event.pageY,
152+
pageY = this.getPageY(event),
164153
positionY = pageY - depEl.eventMousedownY,
165154
processingPositionY = positionY + 'px',
166155
processingMaxYpos = depEl.maxYpos + 'px',
167156
processingMinYpos = depEl.minYpos + 'px',
168157
depElement = this.getDepElement(depEl.instance, positionY, depEl.originRow);
169158

170-
event.stopPropagation();
171-
event.preventDefault();
172-
173159
if (depElement) {
174160
depEl.depElement ? depEl.depElement.elem.removeClass(depEl.depElement.className) : false;
175161
depEl.depElement = depElement;
@@ -194,9 +180,10 @@ define([
194180
mouseupHandler: function (event) {
195181
var depElementCtx,
196182
drEl = this.draggableElement,
197-
pageY = isTouchDevice ? event.originalEvent.touches[0].pageY : event.pageY,
183+
pageY = this.getPageY(event),
198184
positionY = pageY - drEl.eventMousedownY;
199185

186+
this.enableScroll();
200187
drEl.depElement = this.getDepElement(drEl.instance, positionY, this.draggableElement.originRow);
201188

202189
drEl.instance.remove();
@@ -212,13 +199,8 @@ define([
212199

213200
drEl.originRow.removeClass(this.draggableElementClass);
214201

215-
if (isTouchDevice) {
216-
this.body.unbind('touchmove', this.mousemoveHandler);
217-
this.body.unbind('touchend', this.mouseupHandler);
218-
} else {
219-
this.body.unbind('mousemove', this.mousemoveHandler);
220-
this.body.unbind('mouseup', this.mouseupHandler);
221-
}
202+
this.body.unbind('mousemove touchmove', this.mousemoveHandler);
203+
this.body.unbind('mouseup touchend', this.mouseupHandler);
222204

223205
this.draggableElement = {};
224206
},
@@ -402,6 +384,55 @@ define([
402384
index = _.isFunction(ctx.$index) ? ctx.$index() : ctx.$index;
403385

404386
return this.recordsCache()[index];
387+
},
388+
389+
/**
390+
* Get correct page Y
391+
*
392+
* @param {Object} event - current event
393+
* @returns {integer}
394+
*/
395+
getPageY: function (event) {
396+
var pageY;
397+
398+
if (event.type.indexOf('touch') >= 0) {
399+
if (event.originalEvent.touches[0]) {
400+
pageY = event.originalEvent.touches[0].pageY;
401+
} else {
402+
pageY = event.originalEvent.changedTouches[0].pageY;
403+
}
404+
} else {
405+
pageY = event.pageY;
406+
}
407+
408+
return pageY;
409+
},
410+
411+
/**
412+
* Disable page scrolling
413+
*/
414+
disableScroll: function () {
415+
document.body.addEventListener('touchmove', this.preventDefault, {
416+
passive: false
417+
});
418+
},
419+
420+
/**
421+
* Enable page scrolling
422+
*/
423+
enableScroll: function () {
424+
document.body.removeEventListener('touchmove', this.preventDefault, {
425+
passive: false
426+
});
427+
},
428+
429+
/**
430+
* Prevent default function
431+
*
432+
* @param {Object} event - event object
433+
*/
434+
preventDefault: function (event) {
435+
event.preventDefault();
405436
}
406437

407438
});

0 commit comments

Comments
 (0)