There was an error while loading. Please reload this page.
1 parent ad76418 commit 5b27271Copy full SHA for 5b27271
4 files changed
d3.js
@@ -2495,15 +2495,21 @@ function d3_scale_polylinear(domain, range, uninterpolate, interpolate) {
2495
var u = [],
2496
i = [],
2497
j = 0,
2498
- n = domain.length;
+ k = domain.length - 1;
2499
2500
- while (++j < n) {
+ // Handle descending domains.
2501
+ if (domain[k] < domain[0]) {
2502
+ domain = domain.slice().reverse();
2503
+ range = range.slice().reverse();
2504
+ }
2505
+
2506
+ while (++j <= k) {
2507
u.push(uninterpolate(domain[j - 1], domain[j]));
2508
i.push(interpolate(range[j - 1], range[j]));
2509
}
2510
2511
return function(x) {
- var j = d3.bisect(domain, x, 1, domain.length - 1) - 1;
2512
+ var j = d3.bisect(domain, x, 1, k) - 1;
2513
return i[j](u[j](x));
2514
};
2515
d3.min.js
src/scale/polylinear.js
@@ -2,15 +2,21 @@ function d3_scale_polylinear(domain, range, uninterpolate, interpolate) {
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
test/scale/linear-test.js
@@ -148,6 +148,20 @@ suite.addBatch({
148
assert.inDelta(x.invert(new Date(1990, 6, 2, 13)), .5, 1e-6);
149
var x = linear().range(["#000", "#fff"]);
150
assert.isNaN(x.invert("#999"));
151
+ },
152
+ "can invert a polylinear descending domain": function(linear) {
153
+ var x = linear().domain([4, 2, 1]).range([1, 2, 4]);
154
+ assert.inDelta(x(1.5), 3, 1e-6);
155
+ assert.inDelta(x(3), 1.5, 1e-6);
156
+ assert.inDelta(x.invert(1.5), 3, 1e-6);
157
+ assert.inDelta(x.invert(3), 1.5, 1e-6);
158
159
+ "can invert a polylinear descending range": function(linear) {
160
+ var x = linear().domain([1, 2, 4]).range([4, 2, 1]);
161
162
163
164
165
166
},
167
0 commit comments