1 | "use strict";
|
2 |
|
3 | Object.defineProperty(exports, "__esModule", {
|
4 | value: true
|
5 | });
|
6 | exports.default = void 0;
|
7 |
|
8 | var SNAP_COUNT_ARRAY = [1, 1.2, 1.5, 2, 2.2, 2.4, 2.5, 3, 4, 5, 6, 7.5, 8, 10];
|
9 | var DEFAULT_COUNT = 5;
|
10 | var _default = exports.default = function _default(cfg) {
|
11 | var _a = cfg || {},
|
12 | tickCount = _a.tickCount,
|
13 | tickInterval = _a.tickInterval;
|
14 | var _b = cfg || {},
|
15 | min = _b.min,
|
16 | max = _b.max;
|
17 | min = isNaN(min) ? 0 : min;
|
18 | max = isNaN(max) ? 0 : max;
|
19 | var count = tickCount && tickCount >= 2 ? tickCount : DEFAULT_COUNT;
|
20 |
|
21 | var interval = tickInterval || getBestInterval({
|
22 | tickCount: count,
|
23 | max: max,
|
24 | min: min
|
25 | });
|
26 |
|
27 | var minTick = Math.floor(min / interval) * interval;
|
28 |
|
29 | if (tickInterval) {
|
30 | var intervalCount = Math.abs(Math.ceil((max - minTick) / tickInterval)) + 1;
|
31 |
|
32 | count = Math.max(count, intervalCount);
|
33 | }
|
34 | var tickLength = 0;
|
35 | var fixedLength = getFixedLength(interval);
|
36 | if (min < 0 && max > 0 && count === 2) {
|
37 | return [toFixed(minTick, fixedLength), toFixed(Math.ceil(max / interval) * interval, fixedLength)];
|
38 | }
|
39 | var ticks = [];
|
40 | while (tickLength < count) {
|
41 | ticks.push(toFixed(minTick + tickLength * interval, fixedLength));
|
42 | tickLength++;
|
43 | }
|
44 | return ticks;
|
45 | };
|
46 | var DECIMAL_LENGTH = 12;
|
47 | function getFactor(number) {
|
48 |
|
49 | number = Math.abs(number);
|
50 | var factor = 1;
|
51 | if (number === 0) {
|
52 | return factor;
|
53 | }
|
54 |
|
55 | if (number < 1) {
|
56 | var count = 0;
|
57 | while (number < 1) {
|
58 | factor = factor / 10;
|
59 | number = number * 10;
|
60 | count++;
|
61 | }
|
62 |
|
63 | if (factor.toString().length > DECIMAL_LENGTH) {
|
64 | factor = parseFloat(factor.toFixed(count));
|
65 | }
|
66 | return factor;
|
67 | }
|
68 |
|
69 | while (number > 10) {
|
70 | factor = factor * 10;
|
71 | number = number / 10;
|
72 | }
|
73 | return factor;
|
74 | }
|
75 |
|
76 | function getBestInterval(_a) {
|
77 | var tickCount = _a.tickCount,
|
78 | min = _a.min,
|
79 | max = _a.max;
|
80 |
|
81 | if (min === max) {
|
82 | return 1 * getFactor(max);
|
83 | }
|
84 |
|
85 | var avgInterval = (max - min) / (tickCount - 1);
|
86 |
|
87 | var factor = getFactor(avgInterval);
|
88 | var calInterval = avgInterval / factor;
|
89 | var calMax = max / factor;
|
90 | var calMin = min / factor;
|
91 |
|
92 | var similarityIndex = 0;
|
93 | for (var index = 0; index < SNAP_COUNT_ARRAY.length; index++) {
|
94 | var item = SNAP_COUNT_ARRAY[index];
|
95 | if (calInterval <= item) {
|
96 | similarityIndex = index;
|
97 | break;
|
98 | }
|
99 | }
|
100 | var similarityInterval = min < 0 && max > 0 && tickCount === 2 ? SNAP_COUNT_ARRAY[similarityIndex] : getInterval(similarityIndex, tickCount, calMin, calMax);
|
101 |
|
102 | var fixedLength = getFixedLength(similarityInterval) + getFixedLength(factor);
|
103 | return toFixed(similarityInterval * factor, fixedLength);
|
104 | }
|
105 | function getInterval(startIndex, tickCount, min, max) {
|
106 | var verify = false;
|
107 | var interval = SNAP_COUNT_ARRAY[startIndex];
|
108 |
|
109 | for (var i = startIndex; i < SNAP_COUNT_ARRAY.length; i++) {
|
110 | if (intervalIsVerify({
|
111 | interval: SNAP_COUNT_ARRAY[i],
|
112 | tickCount: tickCount,
|
113 | max: max,
|
114 | min: min
|
115 | })) {
|
116 |
|
117 | interval = SNAP_COUNT_ARRAY[i];
|
118 | verify = true;
|
119 | break;
|
120 | }
|
121 | }
|
122 |
|
123 | if (!verify) {
|
124 | return 10 * getInterval(0, tickCount, min / 10, max / 10);
|
125 | }
|
126 | return interval;
|
127 | }
|
128 |
|
129 | function intervalIsVerify(_a) {
|
130 | var interval = _a.interval,
|
131 | tickCount = _a.tickCount,
|
132 | max = _a.max,
|
133 | min = _a.min;
|
134 | var minTick = Math.floor(min / interval) * interval;
|
135 | if (minTick + (tickCount - 1) * interval >= max) {
|
136 | return true;
|
137 | }
|
138 | return false;
|
139 | }
|
140 |
|
141 | function getFixedLength(num) {
|
142 | var str = num.toString();
|
143 | var index = str.indexOf('.');
|
144 | var indexOfExp = str.indexOf('e-');
|
145 | var length = indexOfExp >= 0 ? parseInt(str.substr(indexOfExp + 2), 10) : str.substr(index + 1).length;
|
146 | if (length > 20) {
|
147 |
|
148 | length = 20;
|
149 | }
|
150 | return length;
|
151 | }
|
152 |
|
153 | function toFixed(v, length) {
|
154 | return parseFloat(v.toFixed(length));
|
155 | } |
\ | No newline at end of file |