(domain, ranger)
| 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(); |
no test coverage detected