Skip to content

Commit b235c09

Browse files
committed
Add gl2d test for panning
1 parent 4bc25be commit b235c09

File tree

3 files changed

+61
-4
lines changed

3 files changed

+61
-4
lines changed

src/components/dragelement/index.js

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,8 @@ dragElement.init = function init(options) {
124124
var clampFn = options.clampFn || _clampFn;
125125

126126
function onStart(e) {
127+
e.preventDefault();
128+
127129
// make dragging and dragged into properties of gd
128130
// so that others can look at and modify them
129131
gd._dragged = false;
@@ -164,11 +166,12 @@ dragElement.init = function init(options) {
164166
document.addEventListener('touchmove', onMove);
165167
document.addEventListener('touchend', onDone);
166168

167-
e.preventDefault();
168169
return;
169170
}
170171

171172
function onMove(e) {
173+
e.preventDefault();
174+
172175
var offset = pointerOffset(e);
173176
var minDrag = options.minDrag || constants.MINDRAG;
174177
var dxdy = clampFn(offset[0] - startX, offset[1] - startY, minDrag);
@@ -182,7 +185,6 @@ dragElement.init = function init(options) {
182185

183186
if(gd._dragged && options.moveFn && !rightClick) options.moveFn(dx, dy);
184187

185-
e.preventDefault();
186188
return;
187189
}
188190

@@ -192,6 +194,8 @@ dragElement.init = function init(options) {
192194
document.removeEventListener('touchmove', onMove);
193195
document.removeEventListener('touchend', onDone);
194196

197+
e.preventDefault();
198+
195199
if(hasHover) {
196200
Lib.removeElement(dragCover);
197201
}
@@ -248,7 +252,6 @@ dragElement.init = function init(options) {
248252

249253
gd._dragged = false;
250254

251-
e.preventDefault();
252255
return;
253256
}
254257
};

src/plots/gl2d/camera.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -294,7 +294,7 @@ function createCamera(scene) {
294294
scene.relayoutCallback();
295295

296296
return true;
297-
});
297+
}, true);
298298

299299
return result;
300300
}

test/jasmine/tests/gl2d_plot_interact_test.js

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ var createGraphDiv = require('../assets/create_graph_div');
99
var destroyGraphDiv = require('../assets/destroy_graph_div');
1010
var fail = require('../assets/fail_test');
1111
var mouseEvent = require('../assets/mouse_event');
12+
var touchEvent = require('../assets/touch_event');
1213
var drag = require('../assets/drag');
1314
var selectButton = require('../assets/modebar_button');
1415
var delay = require('../assets/delay');
@@ -605,4 +606,57 @@ describe('Test gl2d plots', function() {
605606
.catch(fail)
606607
.then(done);
607608
});
609+
610+
it('should not scroll document while panning', function(done) {
611+
var mock = {
612+
data: [
613+
{ type: 'scattergl', y: [1, 2, 3], x: [1, 2, 3] }
614+
],
615+
layout: {
616+
width: 500,
617+
height: 500
618+
}
619+
};
620+
621+
var sceneTarget, relayoutCallback = jasmine.createSpy('relayoutCallback');
622+
623+
function scroll(target, amt) {
624+
return new Promise(function(resolve) {
625+
target.dispatchEvent(new WheelEvent('wheel', {deltaY: amt || 1, cancelable: true}));
626+
setTimeout(resolve, 0);
627+
});
628+
}
629+
630+
function touchDrag(target, start, end) {
631+
return new Promise(function(resolve) {
632+
touchEvent('touchstart', start[0], start[1], {element: target});
633+
touchEvent('touchmove', end[0], end[1], {element: target});
634+
touchEvent('touchend', end[0], end[1], {element: target});
635+
setTimeout(resolve, 0);
636+
});
637+
}
638+
639+
function assertEvent(e) {
640+
expect(e.defaultPrevented).toEqual(true);
641+
relayoutCallback();
642+
}
643+
644+
gd.addEventListener('touchstart', assertEvent);
645+
gd.addEventListener('wheel', assertEvent);
646+
647+
Plotly.plot(gd, mock)
648+
.then(function() {
649+
sceneTarget = gd.querySelector('.nsewdrag');
650+
651+
return touchDrag(sceneTarget, [100, 100], [0, 0]);
652+
})
653+
.then(function() {
654+
return scroll(sceneTarget);
655+
})
656+
.then(function() {
657+
expect(relayoutCallback).toHaveBeenCalledTimes(1);
658+
})
659+
.catch(fail)
660+
.then(done);
661+
});
608662
});

0 commit comments

Comments
 (0)