Skip to content

Commit d69cbbd

Browse files
committed
Adopt d3.map for d3.svg.line and d3.svg.area.
1 parent 6affe7e commit d69cbbd

6 files changed

Lines changed: 30 additions & 16 deletions

File tree

d3.v2.js

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3159,8 +3159,8 @@ function d3_svg_arcEndAngle(d) {
31593159
function d3_svg_line(projection) {
31603160
var x = d3_svg_lineX,
31613161
y = d3_svg_lineY,
3162-
interpolate = "linear",
3163-
interpolator = d3_svg_lineInterpolators[interpolate],
3162+
interpolate = d3_svg_lineInterpolatorDefault,
3163+
interpolator = d3_svg_lineInterpolators.get(interpolate),
31643164
tension = .7;
31653165

31663166
function line(d) {
@@ -3181,7 +3181,8 @@ function d3_svg_line(projection) {
31813181

31823182
line.interpolate = function(v) {
31833183
if (!arguments.length) return interpolate;
3184-
interpolator = d3_svg_lineInterpolators[interpolate = v];
3184+
if (!d3_svg_lineInterpolators.has(v += "")) v = d3_svg_lineInterpolatorDefault;
3185+
interpolator = d3_svg_lineInterpolators.get(interpolate = v);
31853186
return line;
31863187
};
31873188

@@ -3234,8 +3235,10 @@ function d3_svg_lineY(d) {
32343235
return d[1];
32353236
}
32363237

3238+
var d3_svg_lineInterpolatorDefault = "linear";
3239+
32373240
// The various interpolators supported by the `line` class.
3238-
var d3_svg_lineInterpolators = {
3241+
var d3_svg_lineInterpolators = d3.map({
32393242
"linear": d3_svg_lineLinear,
32403243
"step-before": d3_svg_lineStepBefore,
32413244
"step-after": d3_svg_lineStepAfter,
@@ -3247,7 +3250,7 @@ var d3_svg_lineInterpolators = {
32473250
"cardinal-open": d3_svg_lineCardinalOpen,
32483251
"cardinal-closed": d3_svg_lineCardinalClosed,
32493252
"monotone": d3_svg_lineMonotone
3250-
};
3253+
});
32513254

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

36513654
area.interpolate = function(x) {
36523655
if (!arguments.length) return interpolate;
3653-
i0 = d3_svg_lineInterpolators[interpolate = x];
3656+
if (!d3_svg_lineInterpolators.has(x += "")) x = d3_svg_lineInterpolatorDefault;
3657+
i0 = d3_svg_lineInterpolators.get(interpolate = x);
36543658
i1 = i0.reverse || i0;
36553659
return area;
36563660
};

d3.v2.min.js

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/svg/area.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,8 @@ function d3_svg_area(projection) {
5555

5656
area.interpolate = function(x) {
5757
if (!arguments.length) return interpolate;
58-
i0 = d3_svg_lineInterpolators[interpolate = x];
58+
if (!d3_svg_lineInterpolators.has(x += "")) x = d3_svg_lineInterpolatorDefault;
59+
i0 = d3_svg_lineInterpolators.get(interpolate = x);
5960
i1 = i0.reverse || i0;
6061
return area;
6162
};

src/svg/line.js

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
function d3_svg_line(projection) {
22
var x = d3_svg_lineX,
33
y = d3_svg_lineY,
4-
interpolate = "linear",
5-
interpolator = d3_svg_lineInterpolators[interpolate],
4+
interpolate = d3_svg_lineInterpolatorDefault,
5+
interpolator = d3_svg_lineInterpolators.get(interpolate),
66
tension = .7;
77

88
function line(d) {
@@ -23,7 +23,8 @@ function d3_svg_line(projection) {
2323

2424
line.interpolate = function(v) {
2525
if (!arguments.length) return interpolate;
26-
interpolator = d3_svg_lineInterpolators[interpolate = v];
26+
if (!d3_svg_lineInterpolators.has(v += "")) v = d3_svg_lineInterpolatorDefault;
27+
interpolator = d3_svg_lineInterpolators.get(interpolate = v);
2728
return line;
2829
};
2930

@@ -76,8 +77,10 @@ function d3_svg_lineY(d) {
7677
return d[1];
7778
}
7879

80+
var d3_svg_lineInterpolatorDefault = "linear";
81+
7982
// The various interpolators supported by the `line` class.
80-
var d3_svg_lineInterpolators = {
83+
var d3_svg_lineInterpolators = d3.map({
8184
"linear": d3_svg_lineLinear,
8285
"step-before": d3_svg_lineStepBefore,
8386
"step-after": d3_svg_lineStepAfter,
@@ -89,7 +92,7 @@ var d3_svg_lineInterpolators = {
8992
"cardinal-open": d3_svg_lineCardinalOpen,
9093
"cardinal-closed": d3_svg_lineCardinalClosed,
9194
"monotone": d3_svg_lineMonotone
92-
};
95+
});
9396

9497
// Linear interpolation; generates "L" commands.
9598
function d3_svg_lineLinear(points) {

test/svg/area-test.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,9 @@ suite.addBatch({
138138
assert.pathEqual(a([[0, 0], [1, 1]]), "M0,0V1H1L1,0H0V0Z");
139139
assert.equal(a.interpolate(), "step-before");
140140
},
141+
"invalid interpolates fallback to linear": function(area) {
142+
assert.equal(area().interpolate("__proto__").interpolate(), "linear");
143+
},
141144

142145
"tension defaults to .7": function(area) {
143146
assert.equal(area().tension(), .7);

test/svg/line-test.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,9 @@ suite.addBatch({
5757
assert.pathEqual(l([[0, 0], [1, 1]]), "M0,0V1H1");
5858
assert.equal(l.interpolate(), "step-before");
5959
},
60+
"invalid interpolates fallback to linear": function(line) {
61+
assert.equal(line().interpolate("__proto__").interpolate(), "linear");
62+
},
6063

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

0 commit comments

Comments
 (0)