@@ -12,6 +12,7 @@ var minicharts_d3fns_few = function() {
1212 var width = 400 ;
1313 var height = 100 ;
1414 var barHeight = 25 ;
15+ var brushHeight = 80 ;
1516 var options = {
1617 view : null
1718 } ;
@@ -43,8 +44,21 @@ var minicharts_d3fns_few = function() {
4344 options . view . trigger ( 'querybuilder' , evt ) ;
4445 }
4546
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+
4659 function brushed ( ) {
4760 var bars = d3 . selectAll ( options . view . queryAll ( 'rect.selectable' ) ) ;
61+ var numSelected = options . view . queryAll ( 'rect.selectable.selected' ) . length ;
4862 var s = brush . extent ( ) ;
4963
5064 bars . classed ( 'selected' , function ( d ) {
@@ -57,6 +71,16 @@ var minicharts_d3fns_few = function() {
5771 var right = left + d . count ;
5872 return s [ 0 ] > right || left > s [ 1 ] ;
5973 } ) ;
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+ }
6084 }
6185
6286 function brushend ( ) {
@@ -77,10 +101,12 @@ var minicharts_d3fns_few = function() {
77101
78102 function handleMouseDown ( ) {
79103 var bar = this ;
104+ var rect = $ ( this ) . find ( 'rect.selectable' ) [ 0 ] ;
80105 var parent = $ ( this ) . closest ( '.minichart' ) ;
81106 var background = parent . find ( 'g.brush > rect.background' ) [ 0 ] ;
82107 var brushNode = parent . find ( 'g.brush' ) [ 0 ] ;
83108 var start = xScale . invert ( d3 . mouse ( background ) [ 0 ] ) ;
109+ brushstart . call ( brushNode , rect ) ;
84110
85111 var w = d3 . select ( window )
86112 . on ( 'mousemove' , mousemove )
@@ -135,8 +161,8 @@ var minicharts_d3fns_few = function() {
135161 . attr ( 'class' , 'brush' )
136162 . call ( brush )
137163 . selectAll ( 'rect' )
138- . attr ( 'y' , 0 )
139- . attr ( 'height' , height ) ;
164+ . attr ( 'y' , ( height - brushHeight ) / 2 )
165+ . attr ( 'height' , brushHeight ) ;
140166
141167 // select all g.bar elements
142168 var bar = el . selectAll ( 'g.bar' )
@@ -160,8 +186,8 @@ var minicharts_d3fns_few = function() {
160186 ) ;
161187 d . xpos = xpos ;
162188 return 'translate(' + xScale ( xpos ) + ', ' + ( height - barHeight ) / 2 + ')' ;
163- } ) ;
164-
189+ } )
190+ . on ( 'mousedown' , handleMouseDown ) ;
165191
166192 barEnter . append ( 'rect' )
167193 . attr ( 'class' , function ( d , i ) {
@@ -184,8 +210,7 @@ var minicharts_d3fns_few = function() {
184210 . attr ( 'x' , 0 )
185211 . attr ( 'height' , barHeight )
186212 . on ( 'mouseover' , tip . show )
187- . on ( 'mouseout' , tip . hide )
188- . on ( 'mousedown' , handleMouseDown ) ;
213+ . on ( 'mouseout' , tip . hide ) ;
189214
190215 bar . select ( 'rect.selectable' )
191216 . transition ( )
0 commit comments