From eea7758b6e2f4788343d3c0efdaa8825bf53b30b Mon Sep 17 00:00:00 2001 From: Gordon Woodhull Date: Mon, 25 Jul 2016 13:58:10 -0400 Subject: [PATCH] d3.transition differs from d3.selection for #1167 apparently this is the only place where our use of dc.selection is risky, because we don't use the *tween functions very much places where this problem is currently avoided: - lineChart has .ease commented-out - numberDisplay does not use dc.transition --- src/pie-chart.js | 38 +++++++++++++++++++++++--------------- 1 file changed, 23 insertions(+), 15 deletions(-) diff --git a/src/pie-chart.js b/src/pie-chart.js index b30648855..b5f52aa08 100644 --- a/src/pie-chart.js +++ b/src/pie-chart.js @@ -236,22 +236,30 @@ dc.pieChart = function (parent, chartGroup) { }); polyline.exit().remove(); - dc.transition(polyline, _chart.transitionDuration()) - .attrTween('points', function (d) { - this._current = this._current || d; - var interpolate = d3.interpolate(this._current, d); - this._current = interpolate(0); - return function (t) { - var arc2 = d3.svg.arc() - .outerRadius(_radius - _externalRadiusPadding + _externalLabelRadius) - .innerRadius(_radius - _externalRadiusPadding); - var d2 = interpolate(t); - return [arc.centroid(d2), arc2.centroid(d2)]; - }; - }) - .style('visibility', function (d) { - return d.endAngle - d.startAngle < 0.0001 ? 'hidden' : 'visible'; + var arc2 = d3.svg.arc() + .outerRadius(_radius - _externalRadiusPadding + _externalLabelRadius) + .innerRadius(_radius - _externalRadiusPadding); + var transition = dc.transition(polyline, _chart.transitionDuration()); + // this is one rare case where d3.selection differs from d3.transition + if (transition.attrTween) { + transition + .attrTween('points', function (d) { + this._current = this._current || d; + var interpolate = d3.interpolate(this._current, d); + this._current = interpolate(0); + return function (t) { + var d2 = interpolate(t); + return [arc.centroid(d2), arc2.centroid(d2)]; + }; + }); + } else { + transition.attr('points', function (d) { + return [arc.centroid(d), arc2.centroid(d)]; }); + } + transition.style('visibility', function (d) { + return d.endAngle - d.startAngle < 0.0001 ? 'hidden' : 'visible'; + }); }