| import {timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeTicks, timeTickInterval} from "d3-time"; |
| import {timeFormat} from "d3-time-format"; |
| import continuous, {copy} from "./continuous.js"; |
| import {initRange} from "./init.js"; |
| import nice from "./nice.js"; |
|
|
| function date(t) { |
| return new Date(t); |
| } |
|
|
| function number(t) { |
| return t instanceof Date ? +t : +new Date(+t); |
| } |
|
|
| export function calendar(ticks, tickInterval, year, month, week, day, hour, minute, second, format) { |
| var scale = continuous(), |
| invert = scale.invert, |
| domain = scale.domain; |
|
|
| var formatMillisecond = format(".%L"), |
| formatSecond = format(":%S"), |
| formatMinute = format("%I:%M"), |
| formatHour = format("%I %p"), |
| formatDay = format("%a %d"), |
| formatWeek = format("%b %d"), |
| formatMonth = format("%B"), |
| formatYear = format("%Y"); |
|
|
| function tickFormat(date) { |
| return (second(date) < date ? formatMillisecond |
| : minute(date) < date ? formatSecond |
| : hour(date) < date ? formatMinute |
| : day(date) < date ? formatHour |
| : month(date) < date ? (week(date) < date ? formatDay : formatWeek) |
| : year(date) < date ? formatMonth |
| : formatYear)(date); |
| } |
|
|
| scale.invert = function(y) { |
| return new Date(invert(y)); |
| }; |
|
|
| scale.domain = function(_) { |
| return arguments.length ? domain(Array.from(_, number)) : domain().map(date); |
| }; |
|
|
| scale.ticks = function(interval) { |
| var d = domain(); |
| return ticks(d[0], d[d.length - 1], interval == null ? 10 : interval); |
| }; |
|
|
| scale.tickFormat = function(count, specifier) { |
| return specifier == null ? tickFormat : format(specifier); |
| }; |
|
|
| scale.nice = function(interval) { |
| var d = domain(); |
| if (!interval || typeof interval.range !== "function") interval = tickInterval(d[0], d[d.length - 1], interval == null ? 10 : interval); |
| return interval ? domain(nice(d, interval)) : scale; |
| }; |
|
|
| scale.copy = function() { |
| return copy(scale, calendar(ticks, tickInterval, year, month, week, day, hour, minute, second, format)); |
| }; |
|
|
| return scale; |
| } |
|
|
| export default function time() { |
| return initRange.apply(calendar(timeTicks, timeTickInterval, timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]), arguments); |
| } |
|
|