Files
wakapi-readme-stats/node_modules/d3-scale/src/ordinal.js
2020-07-28 00:48:25 +05:30

47 lines
1.0 KiB
JavaScript

import {initRange} from "./init.js";
export const implicit = Symbol("implicit");
export default function ordinal() {
var index = new Map(),
domain = [],
range = [],
unknown = implicit;
function scale(d) {
var key = d + "", i = index.get(key);
if (!i) {
if (unknown !== implicit) return unknown;
index.set(key, i = domain.push(d));
}
return range[(i - 1) % range.length];
}
scale.domain = function(_) {
if (!arguments.length) return domain.slice();
domain = [], index = new Map();
for (const value of _) {
const key = value + "";
if (index.has(key)) continue;
index.set(key, domain.push(value));
}
return scale;
};
scale.range = function(_) {
return arguments.length ? (range = Array.from(_), scale) : range.slice();
};
scale.unknown = function(_) {
return arguments.length ? (unknown = _, scale) : unknown;
};
scale.copy = function() {
return ordinal(domain, range).unknown(unknown);
};
initRange.apply(scale, arguments);
return scale;
}