| Index: charted/lib/core/scales/time_scale.dart
|
| diff --git a/charted/lib/core/scales/time_scale.dart b/charted/lib/core/scales/time_scale.dart
|
| deleted file mode 100644
|
| index 8fba314aad972840a764e92919ac282e4f75d8c7..0000000000000000000000000000000000000000
|
| --- a/charted/lib/core/scales/time_scale.dart
|
| +++ /dev/null
|
| @@ -1,185 +0,0 @@
|
| -//
|
| -// Copyright 2014 Google Inc. All rights reserved.
|
| -//
|
| -// Use of this source code is governed by a BSD-style
|
| -// license that can be found in the LICENSE file or at
|
| -// https://developers.google.com/open-source/licenses/bsd
|
| -//
|
| -
|
| -part of charted.core.scales;
|
| -
|
| -/// TimeScale is a linear scale that operates on time.
|
| -class TimeScale extends LinearScale {
|
| - static const _scaleSteps = const [
|
| - 1e3, // 1-second
|
| - 5e3, // 5-second
|
| - 15e3, // 15-second
|
| - 3e4, // 30-second
|
| - 6e4, // 1-minute
|
| - 3e5, // 5-minute
|
| - 9e5, // 15-minute
|
| - 18e5, // 30-minute
|
| - 36e5, // 1-hour
|
| - 108e5, // 3-hour
|
| - 216e5, // 6-hour
|
| - 432e5, // 12-hour
|
| - 864e5, // 1-day
|
| - 1728e5, // 2-day
|
| - 6048e5, // 1-week
|
| - 2592e6, // 1-month
|
| - 7776e6, // 3-month
|
| - 31536e6 // 1-year
|
| - ];
|
| -
|
| - static final _scaleLocalMethods = [
|
| - [TimeInterval.second, 1],
|
| - [TimeInterval.second, 5],
|
| - [TimeInterval.second, 15],
|
| - [TimeInterval.second, 30],
|
| - [TimeInterval.minute, 1],
|
| - [TimeInterval.minute, 5],
|
| - [TimeInterval.minute, 15],
|
| - [TimeInterval.minute, 30],
|
| - [TimeInterval.hour, 1],
|
| - [TimeInterval.hour, 3],
|
| - [TimeInterval.hour, 6],
|
| - [TimeInterval.hour, 12],
|
| - [TimeInterval.day, 1],
|
| - [TimeInterval.day, 2],
|
| - [TimeInterval.week, 1],
|
| - [TimeInterval.month, 1],
|
| - [TimeInterval.month, 3],
|
| - [TimeInterval.year, 1]
|
| - ];
|
| -
|
| - static TimeFormatFunction _scaleLocalFormat = new TimeFormat().multi([
|
| - [".%L", (DateTime d) => d.millisecond > 0],
|
| - [":%S", (DateTime d) => d.second > 0],
|
| - ["%I:%M", (DateTime d) => d.minute > 0],
|
| - ["%I %p", (DateTime d) => d.hour > 0],
|
| - ["%a %d", (DateTime d) => (d.weekday % 7) > 0 && d.day != 1],
|
| - ["%b %d", (DateTime d) => d.day != 1],
|
| - ["%B", (DateTime d) => d.month > 1],
|
| - ["%Y", (d) => true]
|
| - ]);
|
| -
|
| - TimeScale();
|
| - TimeScale._clone(TimeScale source) : super._clone(source);
|
| -
|
| - @override
|
| - scale(dynamic val) =>
|
| - super.scale(val is DateTime ? val.millisecondsSinceEpoch : val);
|
| -
|
| - @override
|
| - set domain(Iterable value) {
|
| - super.domain = value.map(
|
| - (d) => d is DateTime ? d.millisecondsSinceEpoch : d).toList();
|
| - }
|
| -
|
| - @override
|
| - FormatFunction createTickFormatter([String format]) => _scaleLocalFormat;
|
| -
|
| - @override
|
| - TimeScale clone() => new TimeScale._clone(this);
|
| -
|
| - List _getTickMethod(Extent extent, int count) {
|
| - var target = (extent.max - extent.min) / count,
|
| - i = ScaleUtils.bisect(_scaleSteps, target);
|
| -
|
| - return i == _scaleSteps.length
|
| - ? [ TimeInterval.year, _linearTickRange(
|
| - new Extent(extent.min / 31536e6, extent.max / 31536e6)).step ]
|
| - : i == 0
|
| - ? [ new ScaleMilliSeconds(), _linearTickRange(extent).step ]
|
| - : _scaleLocalMethods[
|
| - target / _scaleSteps[i - 1] < _scaleSteps[i] / target ? i - 1 : i];
|
| - }
|
| -
|
| - List niceInterval(int ticksCount, [int skip = 1]) {
|
| - var extent = ScaleUtils.extent(domain),
|
| - method = _getTickMethod(extent, ticksCount),
|
| - interval;
|
| -
|
| - if (method != null) {
|
| - interval = method[0];
|
| - skip = method[1];
|
| - }
|
| -
|
| - bool skipped(var date) {
|
| - if (date is DateTime) date = date.millisecondsSinceEpoch;
|
| - return (interval as TimeInterval)
|
| - .range(date, date + 1, skip).length == 0;
|
| - }
|
| -
|
| - if (skip > 1) {
|
| - domain = ScaleUtils.nice(domain, new RoundingFunctions(
|
| - (date) {
|
| - while (skipped(date = (interval as TimeInterval).floor(date))) {
|
| - date = new DateTime.fromMillisecondsSinceEpoch(
|
| - date.millisecondsSinceEpoch - 1);
|
| - }
|
| - return date.millisecondsSinceEpoch;
|
| - },
|
| - (date) {
|
| - while (skipped(date = (interval as TimeInterval).ceil(date))) {
|
| - date = new DateTime.fromMillisecondsSinceEpoch(
|
| - date.millisecondsSinceEpoch + 1);
|
| - }
|
| - return date.millisecondsSinceEpoch;
|
| - }
|
| - ));
|
| - } else {
|
| - domain = ScaleUtils.nice(
|
| - domain, new RoundingFunctions(
|
| - (date) => interval.floor(date).millisecondsSinceEpoch,
|
| - (date) => interval.ceil(date).millisecondsSinceEpoch));
|
| - }
|
| - return domain;
|
| - }
|
| -
|
| - @override
|
| - set nice(bool value) {
|
| - assert(value != null);
|
| - if (value != null && _nice != value) {
|
| - _nice = value;
|
| - domain = niceInterval(_ticksCount);
|
| - }
|
| - }
|
| -
|
| - List ticksInterval(int ticksCount, [int skip]) {
|
| - var extent = ScaleUtils.extent(domain),
|
| - method = _getTickMethod(extent, ticksCount),
|
| - interval;
|
| - if (method != null) {
|
| - interval = method[0];
|
| - skip = method[1];
|
| - }
|
| - return interval.range(extent.min, extent.max + 1, skip < 1 ? 1 : skip);
|
| - }
|
| -
|
| - @override
|
| - List get ticks => ticksInterval(ticksCount);
|
| -}
|
| -
|
| -class ScaleMilliSeconds implements TimeInterval {
|
| - DateTime _toDateTime(x) {
|
| - assert (x is int || x is DateTime);
|
| - return x is num ? new DateTime.fromMillisecondsSinceEpoch(x) : x;
|
| - }
|
| - DateTime floor(dynamic val) => _toDateTime(val);
|
| - DateTime ceil(dynamic val) => _toDateTime(val);
|
| - DateTime round(dynamic val) => _toDateTime(val);
|
| -
|
| - DateTime offset(dynamic val, num dt) {
|
| - assert(val is int || val is DateTime);
|
| - return new DateTime.fromMillisecondsSinceEpoch(
|
| - val is int ? val + dt : (val as DateTime).millisecondsSinceEpoch + dt);
|
| - }
|
| -
|
| - List range(var t0, var t1, int step) {
|
| - int start = t0 is DateTime ? t0.millisecondsSinceEpoch : t0,
|
| - stop = t1 is DateTime ? t1.millisecondsSinceEpoch : t1;
|
| - return new Range((start / step).ceil() * step, stop, step).map(
|
| - (d) => new DateTime.fromMillisecondsSinceEpoch(d)).toList();
|
| - }
|
| -}
|
|
|