import {bisect} from "d3-array"; | |
import {initRange} from "./init.js"; | |
export default function threshold() { | |
var domain = [0.5], | |
range = [0, 1], | |
unknown, | |
n = 1; | |
function scale(x) { | |
return x != null && x <= x ? range[bisect(domain, x, 0, n)] : unknown; | |
} | |
scale.domain = function(_) { | |
return arguments.length ? (domain = Array.from(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice(); | |
}; | |
scale.range = function(_) { | |
return arguments.length ? (range = Array.from(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice(); | |
}; | |
scale.invertExtent = function(y) { | |
var i = range.indexOf(y); | |
return [domain[i - 1], domain[i]]; | |
}; | |
scale.unknown = function(_) { | |
return arguments.length ? (unknown = _, scale) : unknown; | |
}; | |
scale.copy = function() { | |
return threshold() | |
.domain(domain) | |
.range(range) | |
.unknown(unknown); | |
}; | |
return initRange.apply(scale, arguments); | |
} | |