@@ -63,6 +63,7 @@ dc.coordinateGridMixin = function (_chart) {
63
63
var _zoom = d3 . zoom ( ) . on ( 'zoom' , onZoom ) ;
64
64
var _nullZoom = d3 . zoom ( ) . on ( 'zoom' , null ) ;
65
65
var _hasBeenMouseZoomable = false ;
66
+ var _stopBrushEvents = 0 , _stopZoomEvents = 0 ;
66
67
67
68
var _rangeChart ;
68
69
var _focusChart ;
@@ -1057,12 +1058,12 @@ dc.coordinateGridMixin = function (_chart) {
1057
1058
} ;
1058
1059
1059
1060
_chart . _brushing = function ( ) {
1060
- var event = d3 . event ;
1061
- // Avoids infinite recursion
1062
- // To ensure that when it is called because of brush.move there is no d3.event.sourceEvent
1063
- d3 . event = null ;
1064
- if ( ! event . sourceEvent ) { return ; }
1065
- var selection = event . selection ;
1061
+ if ( _stopBrushEvents ) {
1062
+ return ;
1063
+ }
1064
+ ++ _stopBrushEvents ;
1065
+
1066
+ var selection = d3 . event . selection ;
1066
1067
if ( selection ) {
1067
1068
selection = selection . map ( _chart . x ( ) . invert ) ;
1068
1069
}
@@ -1073,17 +1074,22 @@ dc.coordinateGridMixin = function (_chart) {
1073
1074
1074
1075
if ( _chart . brushIsEmpty ( selection ) ) {
1075
1076
dc . events . trigger ( function ( ) {
1077
+ ++ _stopBrushEvents ;
1076
1078
_chart . filter ( null ) ;
1077
1079
_chart . redrawGroup ( ) ;
1080
+ -- _stopBrushEvents ;
1078
1081
} , dc . constants . EVENT_DELAY ) ;
1079
1082
} else {
1080
1083
var rangedFilter = dc . filters . RangedFilter ( selection [ 0 ] , selection [ 1 ] ) ;
1081
1084
1082
1085
dc . events . trigger ( function ( ) {
1086
+ ++ _stopBrushEvents ;
1083
1087
_chart . replaceFilter ( rangedFilter ) ;
1084
1088
_chart . redrawGroup ( ) ;
1089
+ -- _stopBrushEvents ;
1085
1090
} , dc . constants . EVENT_DELAY ) ;
1086
1091
}
1092
+ -- _stopBrushEvents ;
1087
1093
} ;
1088
1094
1089
1095
_chart . redrawBrush = function ( selection ) {
@@ -1207,11 +1213,13 @@ dc.coordinateGridMixin = function (_chart) {
1207
1213
_chart . renderYAxis ( _chart . g ( ) ) ;
1208
1214
}
1209
1215
1216
+ ++ _stopBrushEvents ;
1210
1217
if ( render ) {
1211
1218
_chart . renderBrush ( _chart . g ( ) ) ;
1212
1219
} else {
1213
1220
_chart . redrawBrush ( _chart . filter ( ) ) ;
1214
1221
}
1222
+ -- _stopBrushEvents ;
1215
1223
_chart . fadeDeselectedArea ( _chart . filter ( ) ) ;
1216
1224
_resizing = false ;
1217
1225
}
@@ -1246,8 +1254,10 @@ dc.coordinateGridMixin = function (_chart) {
1246
1254
1247
1255
_chart . root ( ) . call ( _zoom ) ;
1248
1256
1249
- // Tell D3 zoom our current zoom/pan status
1257
+ // Tell D3 zoom our current zoom/pan status, but ignore any resulting events
1258
+ ++ _stopZoomEvents ;
1250
1259
updateD3zoomTransform ( ) ;
1260
+ -- _stopZoomEvents ;
1251
1261
} ;
1252
1262
1253
1263
_chart . _disableMouseZoom = function ( ) {
@@ -1300,14 +1310,15 @@ dc.coordinateGridMixin = function (_chart) {
1300
1310
}
1301
1311
1302
1312
function onZoom ( ) {
1303
- var event = d3 . event ;
1304
- // Avoids infinite recursion
1305
- // To ensure that when it is called because of programatic zoom there is no d3.event.sourceEvent
1306
- d3 . event = null ;
1307
- if ( ! event . sourceEvent ) { return ; }
1313
+ if ( _stopZoomEvents ) {
1314
+ return ;
1315
+ }
1316
+ ++ _stopZoomEvents ;
1308
1317
1309
1318
var newDomain = d3 . event . transform . rescaleX ( _origX ) . domain ( ) ;
1310
1319
_chart . focus ( newDomain , false ) ;
1320
+
1321
+ -- _stopZoomEvents ;
1311
1322
}
1312
1323
1313
1324
/**
0 commit comments