source: node_modules/d3-scale/src/band.js

Last change on this file was e4c61dd, checked in by istevanoska <ilinastevanoska@…>, 6 months ago

Prototype 1.1

  • Property mode set to 100644
File size: 2.6 KB
Line 
1import {range as sequence} from "d3-array";
2import {initRange} from "./init.js";
3import ordinal from "./ordinal.js";
4
5export default function band() {
6 var scale = ordinal().unknown(undefined),
7 domain = scale.domain,
8 ordinalRange = scale.range,
9 r0 = 0,
10 r1 = 1,
11 step,
12 bandwidth,
13 round = false,
14 paddingInner = 0,
15 paddingOuter = 0,
16 align = 0.5;
17
18 delete scale.unknown;
19
20 function rescale() {
21 var n = domain().length,
22 reverse = r1 < r0,
23 start = reverse ? r1 : r0,
24 stop = reverse ? r0 : r1;
25 step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);
26 if (round) step = Math.floor(step);
27 start += (stop - start - step * (n - paddingInner)) * align;
28 bandwidth = step * (1 - paddingInner);
29 if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);
30 var values = sequence(n).map(function(i) { return start + step * i; });
31 return ordinalRange(reverse ? values.reverse() : values);
32 }
33
34 scale.domain = function(_) {
35 return arguments.length ? (domain(_), rescale()) : domain();
36 };
37
38 scale.range = function(_) {
39 return arguments.length ? ([r0, r1] = _, r0 = +r0, r1 = +r1, rescale()) : [r0, r1];
40 };
41
42 scale.rangeRound = function(_) {
43 return [r0, r1] = _, r0 = +r0, r1 = +r1, round = true, rescale();
44 };
45
46 scale.bandwidth = function() {
47 return bandwidth;
48 };
49
50 scale.step = function() {
51 return step;
52 };
53
54 scale.round = function(_) {
55 return arguments.length ? (round = !!_, rescale()) : round;
56 };
57
58 scale.padding = function(_) {
59 return arguments.length ? (paddingInner = Math.min(1, paddingOuter = +_), rescale()) : paddingInner;
60 };
61
62 scale.paddingInner = function(_) {
63 return arguments.length ? (paddingInner = Math.min(1, _), rescale()) : paddingInner;
64 };
65
66 scale.paddingOuter = function(_) {
67 return arguments.length ? (paddingOuter = +_, rescale()) : paddingOuter;
68 };
69
70 scale.align = function(_) {
71 return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;
72 };
73
74 scale.copy = function() {
75 return band(domain(), [r0, r1])
76 .round(round)
77 .paddingInner(paddingInner)
78 .paddingOuter(paddingOuter)
79 .align(align);
80 };
81
82 return initRange.apply(rescale(), arguments);
83}
84
85function pointish(scale) {
86 var copy = scale.copy;
87
88 scale.padding = scale.paddingOuter;
89 delete scale.paddingInner;
90 delete scale.paddingOuter;
91
92 scale.copy = function() {
93 return pointish(copy());
94 };
95
96 return scale;
97}
98
99export function point() {
100 return pointish(band.apply(null, arguments).paddingInner(1));
101}
Note: See TracBrowser for help on using the repository browser.