From 92ddb48380025579b4492f6f8bc76d64e13d4b51 Mon Sep 17 00:00:00 2001 From: Matt Traynham Date: Wed, 25 Mar 2015 16:57:12 -0400 Subject: [PATCH] Attempt at non-filtered brushing --- src/coordinate-grid-mixin.js | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/src/coordinate-grid-mixin.js b/src/coordinate-grid-mixin.js index 658c0d869..e7ee55a76 100644 --- a/src/coordinate-grid-mixin.js +++ b/src/coordinate-grid-mixin.js @@ -74,6 +74,7 @@ dc.coordinateGridMixin = function (_chart) { var _brush = d3.svg.brush(); var _brushOn = true; + var _filterOnBrushEnd = false; var _round; var _renderHorizontalGridLine = false; @@ -842,7 +843,13 @@ dc.coordinateGridMixin = function (_chart) { _chart.renderBrush = function (g) { if (_brushOn) { - _brush.on('brush', _chart._brushing); + if (!_filterOnBrushEnd) { + _brush.on('brush', _chart._brushing); + _brush.on('brushend.filter', null); + } else { + _brush.on('brush', _chart._nonFilteredBrushing); + _brush.on('brushend.filter', _chart._brushing); + } _brush.on('brushstart', _chart._disableMouseZoom); _brush.on('brushend', configureMouseZoom); @@ -903,6 +910,11 @@ dc.coordinateGridMixin = function (_chart) { } }; + _chart._nonFilteredBrushing = function () { + _chart.extendBrush(); + _chart.redrawBrush(_g); + }; + _chart.redrawBrush = function (g) { if (_brushOn) { if (_chart.filter() && _chart.brush().empty()) { @@ -1131,10 +1143,27 @@ dc.coordinateGridMixin = function (_chart) { if (!arguments.length) { return _brushOn; } + if (_brushOn !== _ && _chart.hasFilter()) { + _chart.filterAll(); + } _brushOn = _; return _chart; }; + /** + #### .filterOnBrushEnd([boolean]) + Allows one to specify when the brush filtering should be performed. If this is false, + filtering happens at every move of the brush. If this is true, filtering occurs when the + brush is dropped. Default: false + */ + _chart.filterOnBrushEnd = function (_) { + if (!arguments.length) { + return _filterOnBrushEnd; + } + _filterOnBrushEnd = _; + return _chart; + }; + function hasRangeSelected(range) { return range instanceof Array && range.length > 1; }