@@ -12,6 +12,7 @@ var minicharts_d3fns_few = function() {
12
12
var width = 400 ;
13
13
var height = 100 ;
14
14
var barHeight = 25 ;
15
+ var brushHeight = 80 ;
15
16
var options = {
16
17
view : null
17
18
} ;
@@ -43,8 +44,21 @@ var minicharts_d3fns_few = function() {
43
44
options . view . trigger ( 'querybuilder' , evt ) ;
44
45
}
45
46
47
+ function brushstart ( clickedBar ) {
48
+ // remove selections and half selections
49
+ var bars = d3 . selectAll ( options . view . queryAll ( 'rect.selectable' ) ) ;
50
+ bars . classed ( 'half' , false ) ;
51
+ bars . classed ( 'selected' , function ( ) {
52
+ return this === clickedBar ;
53
+ } ) ;
54
+ bars . classed ( 'unselected' , function ( ) {
55
+ return this !== clickedBar ;
56
+ } ) ;
57
+ }
58
+
46
59
function brushed ( ) {
47
60
var bars = d3 . selectAll ( options . view . queryAll ( 'rect.selectable' ) ) ;
61
+ var numSelected = options . view . queryAll ( 'rect.selectable.selected' ) . length ;
48
62
var s = brush . extent ( ) ;
49
63
50
64
bars . classed ( 'selected' , function ( d ) {
@@ -57,6 +71,16 @@ var minicharts_d3fns_few = function() {
57
71
var right = left + d . count ;
58
72
return s [ 0 ] > right || left > s [ 1 ] ;
59
73
} ) ;
74
+
75
+ if ( ! options . view ) return ;
76
+ if ( numSelected !== options . view . queryAll ( 'rect.selectable.selected' ) . length ) {
77
+ // number of selected items has changed, trigger querybuilder event
78
+ var evt = {
79
+ type : 'drag' ,
80
+ source : 'many'
81
+ } ;
82
+ options . view . trigger ( 'querybuilder' , evt ) ;
83
+ }
60
84
}
61
85
62
86
function brushend ( ) {
@@ -77,10 +101,12 @@ var minicharts_d3fns_few = function() {
77
101
78
102
function handleMouseDown ( ) {
79
103
var bar = this ;
104
+ var rect = $ ( this ) . find ( 'rect.selectable' ) [ 0 ] ;
80
105
var parent = $ ( this ) . closest ( '.minichart' ) ;
81
106
var background = parent . find ( 'g.brush > rect.background' ) [ 0 ] ;
82
107
var brushNode = parent . find ( 'g.brush' ) [ 0 ] ;
83
108
var start = xScale . invert ( d3 . mouse ( background ) [ 0 ] ) ;
109
+ brushstart . call ( brushNode , rect ) ;
84
110
85
111
var w = d3 . select ( window )
86
112
. on ( 'mousemove' , mousemove )
@@ -135,8 +161,8 @@ var minicharts_d3fns_few = function() {
135
161
. attr ( 'class' , 'brush' )
136
162
. call ( brush )
137
163
. selectAll ( 'rect' )
138
- . attr ( 'y' , 0 )
139
- . attr ( 'height' , height ) ;
164
+ . attr ( 'y' , ( height - brushHeight ) / 2 )
165
+ . attr ( 'height' , brushHeight ) ;
140
166
141
167
// select all g.bar elements
142
168
var bar = el . selectAll ( 'g.bar' )
@@ -160,8 +186,8 @@ var minicharts_d3fns_few = function() {
160
186
) ;
161
187
d . xpos = xpos ;
162
188
return 'translate(' + xScale ( xpos ) + ', ' + ( height - barHeight ) / 2 + ')' ;
163
- } ) ;
164
-
189
+ } )
190
+ . on ( 'mousedown' , handleMouseDown ) ;
165
191
166
192
barEnter . append ( 'rect' )
167
193
. attr ( 'class' , function ( d , i ) {
@@ -184,8 +210,7 @@ var minicharts_d3fns_few = function() {
184
210
. attr ( 'x' , 0 )
185
211
. attr ( 'height' , barHeight )
186
212
. on ( 'mouseover' , tip . show )
187
- . on ( 'mouseout' , tip . hide )
188
- . on ( 'mousedown' , handleMouseDown ) ;
213
+ . on ( 'mouseout' , tip . hide ) ;
189
214
190
215
bar . select ( 'rect.selectable' )
191
216
. transition ( )
0 commit comments