source: node_modules/d3-time/src/ticks.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.5 KB
RevLine 
[e4c61dd]1import {bisector, tickStep} from "d3-array";
2import {durationDay, durationHour, durationMinute, durationMonth, durationSecond, durationWeek, durationYear} from "./duration.js";
3import {millisecond} from "./millisecond.js";
4import {second} from "./second.js";
5import {timeMinute, utcMinute} from "./minute.js";
6import {timeHour, utcHour} from "./hour.js";
7import {timeDay, unixDay} from "./day.js";
8import {timeSunday, utcSunday} from "./week.js";
9import {timeMonth, utcMonth} from "./month.js";
10import {timeYear, utcYear} from "./year.js";
11
12function ticker(year, month, week, day, hour, minute) {
13
14 const tickIntervals = [
15 [second, 1, durationSecond],
16 [second, 5, 5 * durationSecond],
17 [second, 15, 15 * durationSecond],
18 [second, 30, 30 * durationSecond],
19 [minute, 1, durationMinute],
20 [minute, 5, 5 * durationMinute],
21 [minute, 15, 15 * durationMinute],
22 [minute, 30, 30 * durationMinute],
23 [ hour, 1, durationHour ],
24 [ hour, 3, 3 * durationHour ],
25 [ hour, 6, 6 * durationHour ],
26 [ hour, 12, 12 * durationHour ],
27 [ day, 1, durationDay ],
28 [ day, 2, 2 * durationDay ],
29 [ week, 1, durationWeek ],
30 [ month, 1, durationMonth ],
31 [ month, 3, 3 * durationMonth ],
32 [ year, 1, durationYear ]
33 ];
34
35 function ticks(start, stop, count) {
36 const reverse = stop < start;
37 if (reverse) [start, stop] = [stop, start];
38 const interval = count && typeof count.range === "function" ? count : tickInterval(start, stop, count);
39 const ticks = interval ? interval.range(start, +stop + 1) : []; // inclusive stop
40 return reverse ? ticks.reverse() : ticks;
41 }
42
43 function tickInterval(start, stop, count) {
44 const target = Math.abs(stop - start) / count;
45 const i = bisector(([,, step]) => step).right(tickIntervals, target);
46 if (i === tickIntervals.length) return year.every(tickStep(start / durationYear, stop / durationYear, count));
47 if (i === 0) return millisecond.every(Math.max(tickStep(start, stop, count), 1));
48 const [t, step] = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];
49 return t.every(step);
50 }
51
52 return [ticks, tickInterval];
53}
54
55const [utcTicks, utcTickInterval] = ticker(utcYear, utcMonth, utcSunday, unixDay, utcHour, utcMinute);
56const [timeTicks, timeTickInterval] = ticker(timeYear, timeMonth, timeSunday, timeDay, timeHour, timeMinute);
57
58export {utcTicks, utcTickInterval, timeTicks, timeTickInterval};
Note: See TracBrowser for help on using the repository browser.