MCPcopy Create free account
hub / github.com/idank/explainshell / d3_scale_ordinal

Function d3_scale_ordinal

explainshell/web/static/js/d3.v3.js:6618–6693  ·  view source on GitHub ↗
(domain, ranger)

Source from the content-addressed store, hash-verified

6616 });
6617 };
6618 function d3_scale_ordinal(domain, ranger) {
6619 var index, range, rangeBand;
6620 function scale(x) {
6621 return range[((index.get(x) || index.set(x, domain.push(x))) - 1) % range.length];
6622 }
6623 function steps(start, step) {
6624 return d3.range(domain.length).map(function(i) {
6625 return start + step * i;
6626 });
6627 }
6628 scale.domain = function(x) {
6629 if (!arguments.length) return domain;
6630 domain = [];
6631 index = new d3_Map();
6632 var i = -1, n = x.length, xi;
6633 while (++i < n) if (!index.has(xi = x[i])) index.set(xi, domain.push(xi));
6634 return scale[ranger.t].apply(scale, ranger.a);
6635 };
6636 scale.range = function(x) {
6637 if (!arguments.length) return range;
6638 range = x;
6639 rangeBand = 0;
6640 ranger = {
6641 t: "range",
6642 a: arguments
6643 };
6644 return scale;
6645 };
6646 scale.rangePoints = function(x, padding) {
6647 if (arguments.length < 2) padding = 0;
6648 var start = x[0], stop = x[1], step = (stop - start) / (Math.max(1, domain.length - 1) + padding);
6649 range = steps(domain.length < 2 ? (start + stop) / 2 : start + step * padding / 2, step);
6650 rangeBand = 0;
6651 ranger = {
6652 t: "rangePoints",
6653 a: arguments
6654 };
6655 return scale;
6656 };
6657 scale.rangeBands = function(x, padding, outerPadding) {
6658 if (arguments.length < 2) padding = 0;
6659 if (arguments.length < 3) outerPadding = padding;
6660 var reverse = x[1] < x[0], start = x[reverse - 0], stop = x[1 - reverse], step = (stop - start) / (domain.length - padding + 2 * outerPadding);
6661 range = steps(start + step * outerPadding, step);
6662 if (reverse) range.reverse();
6663 rangeBand = step * (1 - padding);
6664 ranger = {
6665 t: "rangeBands",
6666 a: arguments
6667 };
6668 return scale;
6669 };
6670 scale.rangeRoundBands = function(x, padding, outerPadding) {
6671 if (arguments.length < 2) padding = 0;
6672 if (arguments.length < 3) outerPadding = padding;
6673 var reverse = x[1] < x[0], start = x[reverse - 0], stop = x[1 - reverse], step = Math.floor((stop - start) / (domain.length - padding + 2 * outerPadding)), error = stop - start - (domain.length - padding) * step;
6674 range = steps(start + Math.round(error / 2), step);
6675 if (reverse) range.reverse();

Callers 1

d3.v3.jsFile · 0.85

Calls 2

stepsFunction · 0.85
d3_scaleExtentFunction · 0.85

Tested by

no test coverage detected