11
11
12
12
var subtypes = require ( './subtypes' ) ;
13
13
14
- function selectPoints ( searchInfo , polygon , retainOtherSelectModesState ) {
15
- var cd = searchInfo . cd ,
16
- xa = searchInfo . xaxis ,
17
- ya = searchInfo . yaxis ,
18
- selection = [ ] ,
19
- trace = cd [ 0 ] . trace ,
20
- i ,
21
- di ,
22
- x ,
23
- y ;
24
-
25
- var hasOnlyLines = ( ! subtypes . hasMarkers ( trace ) && ! subtypes . hasText ( trace ) ) ;
26
- if ( hasOnlyLines ) return [ ] ;
27
-
28
- if ( polygon === false ) { // clear selection
29
- _clearSelection ( cd ) ;
30
- }
31
- else {
32
- for ( i = 0 ; i < cd . length ; i ++ ) {
33
- di = cd [ i ] ;
34
- x = xa . c2p ( di . x ) ;
35
- y = ya . c2p ( di . y ) ;
36
-
37
- if ( polygon . contains ( [ x , y ] ) ) {
38
- selection . push ( _newSelectionItem ( i , xa . c2d ( di . x ) , ya . c2d ( di . y ) ) ) ;
39
- di . selected = 1 ;
40
- di . selectedByPolygon = true ;
41
- } else {
42
- if ( retainOtherSelectModesState && ! di . selectedByPolygon && di . selected === 1 ) {
43
- continue ;
44
- }
45
- di . selected = 0 ;
46
- delete di . selectedByPolygon ;
47
- }
48
- }
49
- }
50
-
51
- return selection ;
52
- }
53
-
54
- function selectPoint ( calcData , hoverDataItem , retain ) {
55
- return _togglePointSelectedState ( calcData , hoverDataItem , true , retain ) ;
56
- }
57
-
58
- function deselectPoint ( calcData , hoverDataItem , retain ) {
59
- return _togglePointSelectedState ( calcData , hoverDataItem , false , retain ) ;
60
- }
61
-
62
- function _togglePointSelectedState ( calcData , hoverDataItem , selected , retain ) {
14
+ function _togglePointSelectedState ( searchInfo , pointIds , selected ) {
63
15
var selection = [ ] ;
64
- var selectedPointNumber = hoverDataItem . pointNumber ;
65
- var cdItem = calcData [ selectedPointNumber ] ;
66
16
67
- if ( ! retain ) _clearSelection ( calcData ) ;
17
+ var calcData = searchInfo . cd ,
18
+ xAxis = searchInfo . xaxis ,
19
+ yAxis = searchInfo . yaxis ;
68
20
69
- if ( selected ) {
70
- cdItem . selected = 1 ;
71
- } else {
72
- cdItem . selected = 0 ;
21
+ // TODO use foreach?!
22
+ // Mutate state
23
+ for ( var j = 0 ; j < pointIds . length ; j ++ ) {
24
+ var pointId = pointIds [ j ] ;
25
+ calcData [ pointId ] . selected = selected ? 1 : 0 ;
73
26
}
74
27
28
+ // Compute selection array from internal state
75
29
for ( var i = 0 ; i < calcData . length ; i ++ ) {
76
- cdItem = calcData [ i ] ;
77
- if ( cdItem . selected === 1 ) {
30
+ if ( calcData [ i ] . selected === 1 ) {
78
31
selection . push ( _newSelectionItem (
79
32
i ,
80
- hoverDataItem . xaxis . c2d ( cdItem . x ) ,
81
- hoverDataItem . yaxis . c2d ( cdItem . y ) ) ) ;
33
+ xAxis . c2d ( calcData [ i ] . x ) ,
34
+ yAxis . c2d ( calcData [ i ] . y ) ) ) ;
82
35
}
83
36
}
84
37
85
38
return selection ;
86
39
}
87
40
88
- function _clearSelection ( calcData ) {
89
- for ( var i = 0 ; i < calcData . length ; i ++ ) {
90
- calcData [ i ] . selected = 0 ;
91
- }
92
- }
93
-
94
41
// TODO May be needed in other trace types as well, so may centralize somewhere
95
42
function _newSelectionItem ( pointNumber , xInData , yInData ) {
96
43
return {
@@ -100,8 +47,45 @@ function _newSelectionItem(pointNumber, xInData, yInData) {
100
47
} ;
101
48
}
102
49
103
- module . exports = {
104
- selectPoints : selectPoints ,
105
- selectPoint : selectPoint ,
106
- deselectPoint : deselectPoint
50
+ function _clearSelection ( calcData ) {
51
+ for ( var i = 0 ; i < calcData . length ; i ++ ) {
52
+ calcData [ i ] . selected = 0 ;
53
+ }
54
+ }
55
+
56
+ exports . getPointsIn = function ( searchInfo , polygon ) {
57
+ var pointsIn = [ ] ;
58
+
59
+ var calcData = searchInfo . cd ,
60
+ trace = calcData [ 0 ] . trace ,
61
+ xAxis = searchInfo . xaxis ,
62
+ yAxis = searchInfo . yaxis ,
63
+ i ,
64
+ x , y ;
65
+
66
+ var hasOnlyLines = ! subtypes . hasMarkers ( trace ) && ! subtypes . hasText ( trace ) ;
67
+ if ( hasOnlyLines ) return [ ] ;
68
+
69
+ for ( i = 0 ; i < calcData . length ; i ++ ) {
70
+ x = xAxis . c2p ( calcData [ i ] . x ) ;
71
+ y = yAxis . c2p ( calcData [ i ] . y ) ;
72
+
73
+ if ( polygon . contains ( [ x , y ] ) ) {
74
+ pointsIn . push ( i ) ;
75
+ }
76
+ }
77
+
78
+ return pointsIn ;
79
+ } ;
80
+
81
+ exports . selectPoints = function ( searchInfo , pointIds ) {
82
+ return _togglePointSelectedState ( searchInfo , pointIds , true ) ;
83
+ } ;
84
+
85
+ exports . deselectPoints = function ( searchInfo , pointIds ) {
86
+ return _togglePointSelectedState ( searchInfo , pointIds , false ) ;
87
+ } ;
88
+
89
+ exports . clearSelection = function ( searchInfo ) {
90
+ _clearSelection ( searchInfo . cd ) ;
107
91
} ;
0 commit comments