The renaming of attributes is totally not worth the hassle of maintaining an
externs file (or using the awkward `foo["bar"]` syntax). The file size
reduction from the advanced optimizations was negligible, besides!
Two new XHR utilities are included in this commit for fetching XML and HTML
data. The latter can be used to scrape data from websites that don't support a
more suitable API (such as JSON or XML), conveniently using the W3C DOM API
including selectors.
Parsing HTML is surprisingly tricky, as browser support for it is poorly
standardized. It's possible to embed the HTML in the current document or an
iframe, but that runs embedded scripts and loads external resources (images,
stylesheets), which is a security hazard!
Our approach uses the DOM Level 2 Range API, and the nonstandard
createContextualFragment method, which is supported by major browsers.
Strangely, WebKit (Chrome & Safari) can only access the body of the loaded
HTML document, whereas Firefox parses the whole document.
We now use the same property accessors (startAngle, endAngle and radius) for
two source and target objects. Note that you don't have to structure your data
hierarchically; you can define a source and target accessor that restructures
the data on the fly.
These are symmetric operators for splitting and merging (blending) arrays. The
split operator is useful for line and area charts where some of the data
points may be undefined; split the data into subarrays and render each as its
own line or area. This commit also fixes a bug in d3.svg.line when the data
array is empty.
The `property` action allows the setting of arbitrary properties on selected
element, such as the "value" of a form input. The `call` action invokes the
specified function, being passed the current selection (`this`) and optional
additional arguments. This makes it easier to have functions which define sets
of actions, and then apply those actions to any number of selections, similar
to mixin inheritance.
This includes only the quantitative scale functions, which is primarily the
linear scale. Also included are `log` and `pow` scales, which are simple
transforms of linear scales. All the scale functions use the existing
interpolator logic, so you can specify an output range of numbers, colors,
fonts, paths... pretty much anything.