Skip to content

Commit d976c80

Browse files
committed
Merge branch 'quantize-invert' of github.com:scottcheng/d3 into invert-extent
2 parents 34633ae + c4dd577 commit d976c80

5 files changed

Lines changed: 44 additions & 7 deletions

File tree

d3.js

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6957,6 +6957,11 @@ d3 = function() {
69576957
scale.copy = function() {
69586958
return d3_scale_quantize(x0, x1, range);
69596959
};
6960+
scale.invertExtent = function(y) {
6961+
y = range.indexOf(y);
6962+
y = y < 0 ? NaN : y / kx + x0;
6963+
return [ y, y + 1 / kx ];
6964+
};
69606965
return rescale();
69616966
}
69626967
d3.scale.threshold = function() {
@@ -6977,8 +6982,8 @@ d3 = function() {
69776982
return scale;
69786983
};
69796984
scale.invertExtent = function(y) {
6980-
var i = range.indexOf(y);
6981-
return [ domain[i - 1], domain[i] ];
6985+
y = range.indexOf(y);
6986+
return [ domain[y - 1], domain[y] ];
69826987
};
69836988
scale.copy = function() {
69846989
return d3_scale_threshold(domain, range);

d3.min.js

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

src/scale/quantize.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,5 +34,11 @@ function d3_scale_quantize(x0, x1, range) {
3434
return d3_scale_quantize(x0, x1, range); // copy on write
3535
};
3636

37+
scale.invertExtent = function(y) {
38+
y = range.indexOf(y);
39+
y = y < 0 ? NaN : y / kx + x0;
40+
return [y, y + 1 / kx];
41+
};
42+
3743
return rescale();
3844
}

src/scale/threshold.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ function d3_scale_threshold(domain, range) {
2424
};
2525

2626
scale.invertExtent = function(y) {
27-
var i = range.indexOf(y);
28-
return [domain[i - 1], domain[i]];
27+
y = range.indexOf(y);
28+
return [domain[y - 1], domain[y]];
2929
};
3030

3131
scale.copy = function() {

test/scale/quantize-test.js

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,32 @@ suite.addBatch({
5959
assert.equal(x(.6), b);
6060
assert.equal(x(.8), c);
6161
assert.equal(x(1), c);
62+
},
63+
"invertExtent": {
64+
"maps a value in the range to a domain extent": function(quantize) {
65+
var x = quantize().range([0, 1, 2, 3]);
66+
assert.deepEqual(x.invertExtent(0), [0, .25]);
67+
assert.deepEqual(x.invertExtent(1), [.25, .5]);
68+
assert.deepEqual(x.invertExtent(2), [.5, .75]);
69+
assert.deepEqual(x.invertExtent(3), [.75, 1]);
70+
},
71+
"allows arbitrary range values": function(quantize) {
72+
var a = {}, b = {}, x = quantize().range([a, b]);
73+
assert.deepEqual(x.invertExtent(a), [0, .5]);
74+
assert.deepEqual(x.invertExtent(b), [.5, 1]);
75+
},
76+
"returns [NaN, NaN] when the given value is not in the range": function(quantize) {
77+
var x = quantize();
78+
assert.ok(x.invertExtent(-1).every(isNaN));
79+
assert.ok(x.invertExtent(.5).every(isNaN));
80+
assert.ok(x.invertExtent(2).every(isNaN));
81+
assert.ok(x.invertExtent('a').every(isNaN));
82+
},
83+
"returns the first match if duplicate values exist in the range": function(quantize) {
84+
var x = quantize().range([0, 1, 2, 0]);
85+
assert.deepEqual(x.invertExtent(0), [0, .25]);
86+
assert.deepEqual(x.invertExtent(1), [.25, .5]);
87+
}
6288
}
6389
}
6490
});

0 commit comments

Comments
 (0)