Spaces:
Sleeping
Sleeping
| import "../core/functor"; | |
| import "../core/identity"; | |
| import "../core/true"; | |
| import "../geom/point"; | |
| import "svg"; | |
| import "line"; | |
| function d3_svg_area(projection) { | |
| var x0 = d3_geom_pointX, | |
| x1 = d3_geom_pointX, | |
| y0 = 0, | |
| y1 = d3_geom_pointY, | |
| defined = d3_true, | |
| interpolate = d3_svg_lineLinear, | |
| interpolateKey = interpolate.key, | |
| interpolateReverse = interpolate, | |
| L = "L", | |
| tension = 0.7; | |
| function area(data) { | |
| var segments = [], | |
| points0 = [], | |
| points1 = [], | |
| i = -1, | |
| n = data.length, | |
| d, | |
| fx0 = d3_functor(x0), | |
| fy0 = d3_functor(y0), | |
| fx1 = x0 === x1 ? function() { return x; } : d3_functor(x1), | |
| fy1 = y0 === y1 ? function() { return y; } : d3_functor(y1), | |
| x, | |
| y; | |
| function segment() { | |
| segments.push("M", interpolate(projection(points1), tension), | |
| L, interpolateReverse(projection(points0.reverse()), tension), | |
| "Z"); | |
| } | |
| while (++i < n) { | |
| if (defined.call(this, d = data[i], i)) { | |
| points0.push([x = +fx0.call(this, d, i), y = +fy0.call(this, d, i)]); | |
| points1.push([+fx1.call(this, d, i), +fy1.call(this, d, i)]); | |
| } else if (points0.length) { | |
| segment(); | |
| points0 = []; | |
| points1 = []; | |
| } | |
| } | |
| if (points0.length) segment(); | |
| return segments.length ? segments.join("") : null; | |
| } | |
| area.x = function(_) { | |
| if (!arguments.length) return x1; | |
| x0 = x1 = _; | |
| return area; | |
| }; | |
| area.x0 = function(_) { | |
| if (!arguments.length) return x0; | |
| x0 = _; | |
| return area; | |
| }; | |
| area.x1 = function(_) { | |
| if (!arguments.length) return x1; | |
| x1 = _; | |
| return area; | |
| }; | |
| area.y = function(_) { | |
| if (!arguments.length) return y1; | |
| y0 = y1 = _; | |
| return area; | |
| }; | |
| area.y0 = function(_) { | |
| if (!arguments.length) return y0; | |
| y0 = _; | |
| return area; | |
| }; | |
| area.y1 = function(_) { | |
| if (!arguments.length) return y1; | |
| y1 = _; | |
| return area; | |
| }; | |
| area.defined = function(_) { | |
| if (!arguments.length) return defined; | |
| defined = _; | |
| return area; | |
| }; | |
| area.interpolate = function(_) { | |
| if (!arguments.length) return interpolateKey; | |
| if (typeof _ === "function") interpolateKey = interpolate = _; | |
| else interpolateKey = (interpolate = d3_svg_lineInterpolators.get(_) || d3_svg_lineLinear).key; | |
| interpolateReverse = interpolate.reverse || interpolate; | |
| L = interpolate.closed ? "M" : "L"; | |
| return area; | |
| }; | |
| area.tension = function(_) { | |
| if (!arguments.length) return tension; | |
| tension = _; | |
| return area; | |
| }; | |
| return area; | |
| } | |
| d3_svg_lineStepBefore.reverse = d3_svg_lineStepAfter; | |
| d3_svg_lineStepAfter.reverse = d3_svg_lineStepBefore; | |
| d3.svg.area = function() { | |
| return d3_svg_area(d3_identity); | |
| }; | |