| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- import {InternMap} from "d3-array";
- import {initRange} from "./init.js";
- export const implicit = Symbol("implicit");
- export default function ordinal() {
- var index = new InternMap(),
- domain = [],
- range = [],
- unknown = implicit;
- function scale(d) {
- let i = index.get(d);
- if (i === undefined) {
- if (unknown !== implicit) return unknown;
- index.set(d, i = domain.push(d) - 1);
- }
- return range[i % range.length];
- }
- scale.domain = function(_) {
- if (!arguments.length) return domain.slice();
- domain = [], index = new InternMap();
- for (const value of _) {
- if (index.has(value)) continue;
- index.set(value, domain.push(value) - 1);
- }
- 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;
- }
|