| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177 |
- /* *
- *
- * (c) 2010-2020 Torstein Honsi
- *
- * License: www.highcharts.com/license
- *
- * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
- *
- * */
- 'use strict';
- import Axis from './Axis.js';
- import U from '../Utilities.js';
- var addEvent = U.addEvent, getMagnitude = U.getMagnitude, normalizeTickInterval = U.normalizeTickInterval, timeUnits = U.timeUnits;
- /* eslint-disable valid-jsdoc */
- var DateTimeAxisAdditions = /** @class */ (function () {
- /* *
- *
- * Constructors
- *
- * */
- function DateTimeAxisAdditions(axis) {
- this.axis = axis;
- }
- /* *
- *
- * Functions
- *
- * */
- /**
- * Get a normalized tick interval for dates. Returns a configuration object
- * with unit range (interval), count and name. Used to prepare data for
- * `getTimeTicks`. Previously this logic was part of getTimeTicks, but as
- * `getTimeTicks` now runs of segments in stock charts, the normalizing
- * logic was extracted in order to prevent it for running over again for
- * each segment having the same interval. #662, #697.
- * @private
- */
- /**
- * Get a normalized tick interval for dates. Returns a configuration object
- * with unit range (interval), count and name. Used to prepare data for
- * `getTimeTicks`. Previously this logic was part of getTimeTicks, but as
- * `getTimeTicks` now runs of segments in stock charts, the normalizing
- * logic was extracted in order to prevent it for running over again for
- * each segment having the same interval. #662, #697.
- * @private
- */
- DateTimeAxisAdditions.prototype.normalizeTimeTickInterval = function (tickInterval, unitsOption) {
- var units = unitsOption || [[
- 'millisecond',
- [1, 2, 5, 10, 20, 25, 50, 100, 200, 500] // allowed multiples
- ], [
- 'second',
- [1, 2, 5, 10, 15, 30]
- ], [
- 'minute',
- [1, 2, 5, 10, 15, 30]
- ], [
- 'hour',
- [1, 2, 3, 4, 6, 8, 12]
- ], [
- 'day',
- [1, 2]
- ], [
- 'week',
- [1, 2]
- ], [
- 'month',
- [1, 2, 3, 4, 6]
- ], [
- 'year',
- null
- ]], unit = units[units.length - 1], // default unit is years
- interval = timeUnits[unit[0]], multiples = unit[1], count, i;
- // loop through the units to find the one that best fits the
- // tickInterval
- for (i = 0; i < units.length; i++) {
- unit = units[i];
- interval = timeUnits[unit[0]];
- multiples = unit[1];
- if (units[i + 1]) {
- // lessThan is in the middle between the highest multiple and
- // the next unit.
- var lessThan = (interval *
- multiples[multiples.length - 1] +
- timeUnits[units[i + 1][0]]) / 2;
- // break and keep the current unit
- if (tickInterval <= lessThan) {
- break;
- }
- }
- }
- // prevent 2.5 years intervals, though 25, 250 etc. are allowed
- if (interval === timeUnits.year && tickInterval < 5 * interval) {
- multiples = [1, 2, 5];
- }
- // get the count
- count = normalizeTickInterval(tickInterval / interval, multiples, unit[0] === 'year' ? // #1913, #2360
- Math.max(getMagnitude(tickInterval / interval), 1) :
- 1);
- return {
- unitRange: interval,
- count: count,
- unitName: unit[0]
- };
- };
- return DateTimeAxisAdditions;
- }());
- /**
- * Date and time support for axes.
- *
- * @private
- * @class
- */
- var DateTimeAxis = /** @class */ (function () {
- function DateTimeAxis() {
- }
- /* *
- *
- * Static Functions
- *
- * */
- /**
- * Extends axis class with date and time support.
- * @private
- */
- DateTimeAxis.compose = function (AxisClass) {
- AxisClass.keepProps.push('dateTime');
- var axisProto = AxisClass.prototype;
- /**
- * Set the tick positions to a time unit that makes sense, for example
- * on the first of each month or on every Monday. Return an array with
- * the time positions. Used in datetime axes as well as for grouping
- * data on a datetime axis.
- *
- * @private
- * @function Highcharts.Axis#getTimeTicks
- *
- * @param {Highcharts.TimeNormalizeObject} normalizedInterval
- * The interval in axis values (ms) and thecount.
- *
- * @param {number} min
- * The minimum in axis values.
- *
- * @param {number} max
- * The maximum in axis values.
- *
- * @param {number} startOfWeek
- *
- * @return {Highcharts.AxisTickPositionsArray}
- */
- axisProto.getTimeTicks = function () {
- return this.chart.time.getTimeTicks.apply(this.chart.time, arguments);
- };
- /* eslint-disable no-invalid-this */
- addEvent(AxisClass, 'init', function (e) {
- var axis = this;
- var options = e.userOptions;
- if (options.type !== 'datetime') {
- axis.dateTime = void 0;
- return;
- }
- if (!axis.dateTime) {
- axis.dateTime = new DateTimeAxisAdditions(axis);
- }
- });
- /* eslint-enable no-invalid-this */
- };
- /* *
- *
- * Static Properties
- *
- * */
- DateTimeAxis.AdditionsClass = DateTimeAxisAdditions;
- return DateTimeAxis;
- }());
- DateTimeAxis.compose(Axis);
- export default DateTimeAxis;
|