For consistency with CSS3's 2D transforms, two transforms with the same
number of transform functions and corresponding functions of the same
type are treated differently: each transform function is interpolated in
isolation.
This allows us to interpolate many transforms that contain constant
functions in a more useful way, e.g.
"rotate(<variable>)translate(<constant>)"
The variable rotation angle would now be linearly interpolated on its
own, keeping the constant translation vector constant.
There appears to be a bug in Chrome causing the whole tab to crash when
setting svgNode.className.baseVal = "" for a newly-created element
without a non-empty class name:
https://code.google.com/p/chromium/issues/detail?id=138552
This fix is a minor optimisation: if the current class is empty then
removing a class should be a no-op. It also conveniently works around
the Chrome bug.
Firstly, the last-touched-time was being set on touchend, even if a pan
gesture had occurred. This caused a pan quickly followed by a single tap
to be interpreted as a double-tap. In this fix, the time is only set on
touchstart.
Secondly, the time is cleared on touchmove, so that a pan gesture
cancels double-tap detection.
The previous method of subtracting slightly from the radius introduces
distortion where smaller circles are disproportionately reduced. For example,
subtracting 1px from the radius scales a circle of radius 5px by 0.64x, while a
circle of radius 50px is only reduced by 0.96x.
By incorporating padding into the layout algorithm, the leaf circles’ area is
still proportional to the associated value. Due to the scale-independent nature
of the layout, the specified padding value is only approximate.
The axis component no longer uses a transition for the text elements' dy and
text-anchor attributes. This makes it easier to style the labels using post-
selection, since the transition will not override custom attribute values.
Prior to this change, transitions used transition.each internally, which had the
unexpected side-effect of enabling transitions on d3.transition(selection) when
called from within a tween function. This would only occur on the first
invocation of the tween function when the elapsed time between the transition
creation and the transition start was greater than the transition delay;
however, this is fairly common as the default delay for transitions is zero.
This bug caused unexpected behavior if you tried to redraw an axis within a
custom tween function: in some cases, the synchronous redraw of the axis would
compete with a concurrent transition, causing unexpected behavior. By avoiding
the use of transition.each internally, the user now controls when automatic
transitions are enabled.