Skip to content

Commit

Permalink
Adopt d3.map for d3.svg.line and d3.svg.area.
Browse files Browse the repository at this point in the history
  • Loading branch information
mbostock committed Feb 21, 2012
1 parent 6affe7e commit d69cbbd
Show file tree
Hide file tree
Showing 6 changed files with 30 additions and 16 deletions.
16 changes: 10 additions & 6 deletions d3.v2.js
Original file line number Diff line number Diff line change
Expand Up @@ -3159,8 +3159,8 @@ function d3_svg_arcEndAngle(d) {
function d3_svg_line(projection) {
var x = d3_svg_lineX,
y = d3_svg_lineY,
interpolate = "linear",
interpolator = d3_svg_lineInterpolators[interpolate],
interpolate = d3_svg_lineInterpolatorDefault,
interpolator = d3_svg_lineInterpolators.get(interpolate),
tension = .7;

function line(d) {
Expand All @@ -3181,7 +3181,8 @@ function d3_svg_line(projection) {

line.interpolate = function(v) {
if (!arguments.length) return interpolate;
interpolator = d3_svg_lineInterpolators[interpolate = v];
if (!d3_svg_lineInterpolators.has(v += "")) v = d3_svg_lineInterpolatorDefault;
interpolator = d3_svg_lineInterpolators.get(interpolate = v);
return line;
};

Expand Down Expand Up @@ -3234,8 +3235,10 @@ function d3_svg_lineY(d) {
return d[1];
}

var d3_svg_lineInterpolatorDefault = "linear";

// The various interpolators supported by the `line` class.
var d3_svg_lineInterpolators = {
var d3_svg_lineInterpolators = d3.map({
"linear": d3_svg_lineLinear,
"step-before": d3_svg_lineStepBefore,
"step-after": d3_svg_lineStepAfter,
Expand All @@ -3247,7 +3250,7 @@ var d3_svg_lineInterpolators = {
"cardinal-open": d3_svg_lineCardinalOpen,
"cardinal-closed": d3_svg_lineCardinalClosed,
"monotone": d3_svg_lineMonotone
};
});

// Linear interpolation; generates "L" commands.
function d3_svg_lineLinear(points) {
Expand Down Expand Up @@ -3650,7 +3653,8 @@ function d3_svg_area(projection) {

area.interpolate = function(x) {
if (!arguments.length) return interpolate;
i0 = d3_svg_lineInterpolators[interpolate = x];
if (!d3_svg_lineInterpolators.has(x += "")) x = d3_svg_lineInterpolatorDefault;
i0 = d3_svg_lineInterpolators.get(interpolate = x);
i1 = i0.reverse || i0;
return area;
};
Expand Down
8 changes: 4 additions & 4 deletions d3.v2.min.js

Large diffs are not rendered by default.

3 changes: 2 additions & 1 deletion src/svg/area.js
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,8 @@ function d3_svg_area(projection) {

area.interpolate = function(x) {
if (!arguments.length) return interpolate;
i0 = d3_svg_lineInterpolators[interpolate = x];
if (!d3_svg_lineInterpolators.has(x += "")) x = d3_svg_lineInterpolatorDefault;
i0 = d3_svg_lineInterpolators.get(interpolate = x);
i1 = i0.reverse || i0;
return area;
};
Expand Down
13 changes: 8 additions & 5 deletions src/svg/line.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
function d3_svg_line(projection) {
var x = d3_svg_lineX,
y = d3_svg_lineY,
interpolate = "linear",
interpolator = d3_svg_lineInterpolators[interpolate],
interpolate = d3_svg_lineInterpolatorDefault,
interpolator = d3_svg_lineInterpolators.get(interpolate),
tension = .7;

function line(d) {
Expand All @@ -23,7 +23,8 @@ function d3_svg_line(projection) {

line.interpolate = function(v) {
if (!arguments.length) return interpolate;
interpolator = d3_svg_lineInterpolators[interpolate = v];
if (!d3_svg_lineInterpolators.has(v += "")) v = d3_svg_lineInterpolatorDefault;
interpolator = d3_svg_lineInterpolators.get(interpolate = v);
return line;
};

Expand Down Expand Up @@ -76,8 +77,10 @@ function d3_svg_lineY(d) {
return d[1];
}

var d3_svg_lineInterpolatorDefault = "linear";

// The various interpolators supported by the `line` class.
var d3_svg_lineInterpolators = {
var d3_svg_lineInterpolators = d3.map({
"linear": d3_svg_lineLinear,
"step-before": d3_svg_lineStepBefore,
"step-after": d3_svg_lineStepAfter,
Expand All @@ -89,7 +92,7 @@ var d3_svg_lineInterpolators = {
"cardinal-open": d3_svg_lineCardinalOpen,
"cardinal-closed": d3_svg_lineCardinalClosed,
"monotone": d3_svg_lineMonotone
};
});

// Linear interpolation; generates "L" commands.
function d3_svg_lineLinear(points) {
Expand Down
3 changes: 3 additions & 0 deletions test/svg/area-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,9 @@ suite.addBatch({
assert.pathEqual(a([[0, 0], [1, 1]]), "M0,0V1H1L1,0H0V0Z");
assert.equal(a.interpolate(), "step-before");
},
"invalid interpolates fallback to linear": function(area) {
assert.equal(area().interpolate("__proto__").interpolate(), "linear");
},

"tension defaults to .7": function(area) {
assert.equal(area().tension(), .7);
Expand Down
3 changes: 3 additions & 0 deletions test/svg/line-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,9 @@ suite.addBatch({
assert.pathEqual(l([[0, 0], [1, 1]]), "M0,0V1H1");
assert.equal(l.interpolate(), "step-before");
},
"invalid interpolates fallback to linear": function(line) {
assert.equal(line().interpolate("__proto__").interpolate(), "linear");
},

"tension defaults to .7": function(line) {
assert.equal(line().tension(), .7);
Expand Down

0 comments on commit d69cbbd

Please sign in to comment.