Skip to content

Commit 3c511d2

Browse files
authored
Merge pull request #6258 from plotly/selections-patch-0
Fix `mapbox` shift select regression
2 parents 41b0fd2 + 4ca4423 commit 3c511d2

File tree

3 files changed

+35
-31
lines changed

3 files changed

+35
-31
lines changed

src/components/selections/select.js

+24-13
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
'use strict';
22

33
var polybool = require('polybooljs');
4-
var pointInPolygon = require('point-in-polygon/nested');
4+
var pointInPolygon = require('point-in-polygon/nested'); // could we use contains lib/polygon instead?
55

66
var Registry = require('../../registry');
77
var dashStyle = require('../drawing').dashStyle;
@@ -32,7 +32,7 @@ var activateLastSelection = require('./draw').activateLastSelection;
3232

3333
var Lib = require('../../lib');
3434
var ascending = Lib.sorterAsc;
35-
var polygon = require('../../lib/polygon');
35+
var libPolygon = require('../../lib/polygon');
3636
var throttle = require('../../lib/throttle');
3737
var getFromId = require('../../plots/cartesian/axis_ids').getFromId;
3838
var clearGlCanvases = require('../../lib/clear_gl_canvases');
@@ -42,8 +42,8 @@ var redrawReglTraces = require('../../plot_api/subroutines').redrawReglTraces;
4242
var constants = require('./constants');
4343
var MINSELECT = constants.MINSELECT;
4444

45-
var filteredPolygon = polygon.filter;
46-
var polygonTester = polygon.tester;
45+
var filteredPolygon = libPolygon.filter;
46+
var polygonTester = libPolygon.tester;
4747

4848
var helpers = require('./helpers');
4949
var p2r = helpers.p2r;
@@ -350,7 +350,7 @@ function prepSelect(evt, startX, startY, dragOptions, mode) {
350350

351351
fillRangeItems(eventData, poly);
352352

353-
dragOptions.gd.emit('plotly_selecting', eventData);
353+
emitSelecting(gd, eventData);
354354
}
355355
);
356356
}
@@ -381,7 +381,7 @@ function prepSelect(evt, startX, startY, dragOptions, mode) {
381381

382382
clearSelectionsCache(dragOptions);
383383

384-
gd.emit('plotly_deselect', null);
384+
emitDeselect(gd);
385385

386386
if(searchTraces.length) {
387387
var clickedXaxis = searchTraces[0].xaxis;
@@ -419,7 +419,7 @@ function prepSelect(evt, startX, startY, dragOptions, mode) {
419419
// but in case anyone depends on it we don't want to break it now.
420420
// Note that click-to-select introduced pre v3 also emitts proper
421421
// event data when clickmode is having 'select' in its flag list.
422-
gd.emit('plotly_selected', undefined);
422+
emitSelected(gd, undefined);
423423
}
424424
}
425425

@@ -452,7 +452,7 @@ function prepSelect(evt, startX, startY, dragOptions, mode) {
452452
}
453453

454454
eventData.selections = gd.layout.selections;
455-
dragOptions.gd.emit('plotly_selected', eventData);
455+
emitSelected(gd, eventData);
456456
}).catch(Lib.error);
457457
};
458458
}
@@ -491,7 +491,7 @@ function selectOnClick(evt, gd, xAxes, yAxes, subplot, dragOptions, polygonOutli
491491
clearSelectionsCache(dragOptions);
492492

493493
if(sendEvents) {
494-
gd.emit('plotly_deselect', null);
494+
emitDeselect(gd);
495495
}
496496
} else {
497497
subtract = evt.shiftKey &&
@@ -531,7 +531,7 @@ function selectOnClick(evt, gd, xAxes, yAxes, subplot, dragOptions, polygonOutli
531531

532532
if(sendEvents) {
533533
eventData.selections = gd.layout.selections;
534-
gd.emit('plotly_selected', eventData);
534+
emitSelected(gd, eventData);
535535
}
536536
}
537537
}
@@ -596,7 +596,7 @@ function multiTester(list) {
596596
if(isPointSelectionDef(list[i])) {
597597
testers.push(newPointNumTester(list[i]));
598598
} else {
599-
var tester = polygon.tester(list[i]);
599+
var tester = polygonTester(list[i]);
600600
tester.subtract = !!list[i].subtract;
601601
testers.push(tester);
602602

@@ -1196,7 +1196,7 @@ function reselect(gd, selectionTesters, searchTraces, dragOptions) {
11961196
}
11971197

11981198
eventData.selections = gd.layout.selections;
1199-
gd.emit('plotly_selected', eventData);
1199+
emitSelected(gd, eventData);
12001200
}
12011201

12021202
fullLayout._reselect = false;
@@ -1217,7 +1217,7 @@ function reselect(gd, selectionTesters, searchTraces, dragOptions) {
12171217
if(sendEvents) {
12181218
if(eventData.points.length) {
12191219
eventData.selections = gd.layout.selections;
1220-
gd.emit('plotly_selected', eventData);
1220+
emitSelected(gd, eventData);
12211221
} else {
12221222
gd.emit('plotly_deselect', null);
12231223
}
@@ -1506,6 +1506,17 @@ function getFillRangeItems(dragOptions) {
15061506
);
15071507
}
15081508

1509+
function emitSelecting(gd, eventData) {
1510+
gd.emit('plotly_selecting', eventData);
1511+
}
1512+
1513+
function emitSelected(gd, eventData) {
1514+
gd.emit('plotly_selected', eventData);
1515+
}
1516+
1517+
function emitDeselect(gd) {
1518+
gd.emit('plotly_deselect', null);
1519+
}
15091520

15101521
module.exports = {
15111522
reselect: reselect,

src/plots/geo/geo.js

+5-9
Original file line numberDiff line numberDiff line change
@@ -429,22 +429,18 @@ proto.updateFx = function(fullLayout, geoLayout) {
429429
]);
430430
}
431431

432-
var fillRangeItems;
433-
434-
if(dragMode === 'select') {
435-
fillRangeItems = function(eventData, poly) {
432+
var fillRangeItems = function(eventData, poly) {
433+
if(poly.isRect) {
436434
var ranges = eventData.range = {};
437435
ranges[_this.id] = [
438436
invert([poly.xmin, poly.ymin]),
439437
invert([poly.xmax, poly.ymax])
440438
];
441-
};
442-
} else if(dragMode === 'lasso') {
443-
fillRangeItems = function(eventData, poly) {
439+
} else {
444440
var dataPts = eventData.lassoPoints = {};
445441
dataPts[_this.id] = poly.map(invert);
446-
};
447-
}
442+
}
443+
};
448444

449445
// Note: dragOptions is needed to be declared for all dragmodes because
450446
// it's the object that holds persistent selection state.

src/plots/mapbox/mapbox.js

+6-9
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ var dragElement = require('../../components/dragelement');
1010

1111
var Fx = require('../../components/fx');
1212
var dragHelpers = require('../../components/dragelement/helpers');
13-
var rectMode = dragHelpers.rectMode;
1413
var drawMode = dragHelpers.drawMode;
1514
var selectMode = dragHelpers.selectMode;
1615

@@ -550,20 +549,18 @@ proto.updateFx = function(fullLayout) {
550549
var dragMode = fullLayout.dragmode;
551550
var fillRangeItems;
552551

553-
if(rectMode(dragMode)) {
554-
fillRangeItems = function(eventData, poly) {
552+
fillRangeItems = function(eventData, poly) {
553+
if(poly.isRect) {
555554
var ranges = eventData.range = {};
556555
ranges[self.id] = [
557556
invert([poly.xmin, poly.ymin]),
558557
invert([poly.xmax, poly.ymax])
559558
];
560-
};
561-
} else {
562-
fillRangeItems = function(eventData, pts) {
559+
} else {
563560
var dataPts = eventData.lassoPoints = {};
564-
dataPts[self.id] = pts.map(invert);
565-
};
566-
}
561+
dataPts[self.id] = poly.map(invert);
562+
}
563+
};
567564

568565
// Note: dragOptions is needed to be declared for all dragmodes because
569566
// it's the object that holds persistent selection state.

0 commit comments

Comments
 (0)