This was breaking setTimeout and setInterval in Node, since I've already
unplugged env-js' event loop. With that out of the way, we can write tests for
transitions!
The Selectors API guarantees that results are returned in document order, but
Sizzle does not, by default. So now we sort the results when using Sizzle. Yay
tests!
This fixes a bug with the usage of `require` in env-js, such that env-js now
uses proper relative paths rather than unshifting "." onto `require.paths`. The
behavior of `require` is documented here:
<http://nodejs.org/docs/v0.4.2/api/modules.html#all_Together...>
With this change in place, it's now possible to use env-js simply by require'ing
it from a script, rather than having env-js host and eval.
Also, this commit changes the initialization of env-js, such that the initial
document is immediately available when the env-js module is loaded. And, the
event loop is disabled so that env-js shuts down cleanly. This probably breaks
some parts of env-js, but it makes it much easier to use so I'm going to play
with it a bit.
The method existed previously, but it only makes sense in conjunction with the
newly-added `entries` operator; map keys are inherently unsorted. Originally I
envisioned that key-sorting could be done externally using `d3.entries`, but
that's tedious for hierarchical structures.
Still a work in progress. Need to decide on the appropriate API for representing
tree structures; not sure I want to go the heavyweight pv.dom route. May also
need rounding to exact pixel values.
Use the Floyd-Warshall algorithm to compute the shortest path between nodes, and
use that graph theoretic distance as the distance constraint for the Gauss-
Seidel relaxation. In addition, have the constraint alpha decay over time, as in
Simulated Annealing.
This allows scale interpolation in HSL space. For example:
var fill = d3.scale.linear()
.interpolate(d3.interpolateHsl)
.domain([0, 100])
.range([d3.hsl(180, .5, 1), d3.hsl(180, .5, 0)]);
You could approximate this in previous versions using d3.interpolateString, but
the new interpolation method is slightly faster and also provides backwards-
compatibility for browsers that only understand RGB.
This fixes a bug in the pie layout sorting where we want the sort order to
affect the layout, but not the order in which arcs are rendered—and furthermore
we want the order of arcs to always match the order of data. (If you want to
sort the data, do that before it is passed to the layout.)
This adds d3.layout.pie, which can be used to compute the start and end angles
for arcs given an arbitrary array of data. In addition, d3.svg.arc now has a
`centroid` method that computes the center of the arc, useful for labeling.
Together these changes greatly simplify the donut & pie examples.
This commit also includes a `map` method for selections, which is similar to the
`filter` method. This allows you to map the data bound to the current selection.
I'm not currently using it, but it seems like a useful feature for those cases
where you want to rebind the current selection to different (but related) data.