Skip to content

Commit f4384de

Browse files
committed
Transition scattergeo trace type to new selection interface [1852]
- Thereby fix failing geo_point-selection.json image test.
1 parent 8428bbc commit f4384de

File tree

2 files changed

+53
-26
lines changed

2 files changed

+53
-26
lines changed

src/traces/scattergeo/index.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@ ScatterGeo.style = require('./style');
2020
ScatterGeo.styleOnSelect = require('../scatter/style').styleOnSelect;
2121
ScatterGeo.hoverPoints = require('./hover');
2222
ScatterGeo.eventData = require('./event_data');
23-
ScatterGeo.selectPoints = require('./select');
23+
ScatterGeo.getPointsIn = require('./select').getPointsIn;
24+
ScatterGeo.toggleSelected = require('./select').toggleSelected;
2425

2526
ScatterGeo.moduleType = 'trace';
2627
ScatterGeo.name = 'scattergeo';

src/traces/scattergeo/select.js

Lines changed: 51 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -9,40 +9,66 @@
99
'use strict';
1010

1111
var subtypes = require('../scatter/subtypes');
12+
var arrayRange = require('array-range');
1213

13-
module.exports = function selectPoints(searchInfo, polygon) {
14+
exports.getPointsIn = function(searchInfo, polygon) {
15+
var pointsIn = [];
1416
var cd = searchInfo.cd;
17+
var trace = cd[0].trace;
18+
var hasOnlyLines = (!subtypes.hasMarkers(trace) && !subtypes.hasText(trace));
1519
var xa = searchInfo.xaxis;
1620
var ya = searchInfo.yaxis;
17-
var selection = [];
18-
var trace = cd[0].trace;
19-
20-
var di, lonlat, x, y, i;
21+
var di;
22+
var lonlat;
23+
var x;
24+
var y;
25+
var i;
2126

22-
var hasOnlyLines = (!subtypes.hasMarkers(trace) && !subtypes.hasText(trace));
2327
if(hasOnlyLines) return [];
2428

25-
if(polygon === false) {
26-
for(i = 0; i < cd.length; i++) {
27-
cd[i].selected = 0;
29+
for(i = 0; i < cd.length; i++) {
30+
di = cd[i];
31+
lonlat = di.lonlat;
32+
x = xa.c2p(lonlat);
33+
y = ya.c2p(lonlat);
34+
35+
if(polygon.contains([x, y])) {
36+
pointsIn.push(i);
2837
}
29-
} else {
30-
for(i = 0; i < cd.length; i++) {
31-
di = cd[i];
38+
}
39+
40+
return pointsIn;
41+
};
42+
43+
exports.toggleSelected = function(searchInfo, selected, pointIds) {
44+
var selection = [];
45+
var cd = searchInfo.cd;
46+
var modifyAll = !Array.isArray(pointIds);
47+
var di;
48+
var pointId;
49+
var lonlat;
50+
var i;
51+
52+
if(modifyAll) {
53+
pointIds = arrayRange(cd.length);
54+
}
55+
56+
// Mutate state
57+
for(i = 0; i < pointIds.length; i++) {
58+
pointId = pointIds[i];
59+
cd[pointId].selected = selected ? 1 : 0;
60+
}
61+
62+
// Compute selection array from internal state
63+
for(i = 0; i < cd.length; i++) {
64+
di = cd[i];
65+
if(di.selected === 1) {
3266
lonlat = di.lonlat;
33-
x = xa.c2p(lonlat);
34-
y = ya.c2p(lonlat);
35-
36-
if(polygon.contains([x, y])) {
37-
selection.push({
38-
pointNumber: i,
39-
lon: lonlat[0],
40-
lat: lonlat[1]
41-
});
42-
di.selected = 1;
43-
} else {
44-
di.selected = 0;
45-
}
67+
selection.push({
68+
pointNumber: i,
69+
lon: lonlat[0],
70+
lat: lonlat[1]
71+
});
4672
}
4773
}
4874

0 commit comments

Comments
 (0)