'use strict';
-var adapter = require('../core/core.adapters')._date;
+var adapters = require('../core/core.adapters');
var defaults = require('../core/core.defaults');
var helpers = require('../helpers/index');
var Scale = require('../core/core.scale');
return prev[tkey] + offset;
}
-function toTimestamp(input, options) {
+function toTimestamp(scale, input) {
+ var adapter = scale._adapter;
+ var options = scale.options.time;
var parser = options.parser;
var format = parser || options.format;
var value = input;
return value;
}
-function parse(input, scale) {
+function parse(scale, input) {
if (helpers.isNullOrUndef(input)) {
return null;
}
var options = scale.options.time;
- var value = toTimestamp(scale.getRightValue(input), options);
+ var value = toTimestamp(scale, scale.getRightValue(input));
if (value === null) {
return value;
}
if (options.round) {
- value = +adapter.startOf(value, options.round);
+ value = +scale._adapter.startOf(value, options.round);
}
return value;
/**
* Figures out what unit to format a set of ticks with
*/
-function determineUnitForFormatting(ticks, minUnit, min, max) {
+function determineUnitForFormatting(scale, ticks, minUnit, min, max) {
var ilen = UNITS.length;
var i, unit;
for (i = ilen - 1; i >= UNITS.indexOf(minUnit); i--) {
unit = UNITS[i];
- if (INTERVALS[unit].common && adapter.diff(max, min, unit) >= ticks.length) {
+ if (INTERVALS[unit].common && scale._adapter.diff(max, min, unit) >= ticks.length) {
return unit;
}
}
* Important: this method can return ticks outside the min and max range, it's the
* responsibility of the calling code to clamp values if needed.
*/
-function generate(min, max, capacity, options) {
+function generate(scale, min, max, capacity) {
+ var adapter = scale._adapter;
+ var options = scale.options;
var timeOpts = options.time;
var minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, capacity);
var major = determineMajorUnit(minor);
return {start: start, end: end};
}
-function ticksFromTimestamps(values, majorUnit) {
+function ticksFromTimestamps(scale, values, majorUnit) {
var ticks = [];
var i, ilen, value, major;
for (i = 0, ilen = values.length; i < ilen; ++i) {
value = values[i];
- major = majorUnit ? value === +adapter.startOf(value, majorUnit) : false;
+ major = majorUnit ? value === +scale._adapter.startOf(value, majorUnit) : false;
ticks.push({
value: value,
*/
bounds: 'data',
+ adapters: {},
time: {
parser: false, // false == a pattern string from https://momentjs.com/docs/#/parsing/string-format/ or a custom callback that converts its argument to a moment
format: false, // DEPRECATED false == date objects, moment object, callback or a pattern string from https://momentjs.com/docs/#/parsing/string-format/
var me = this;
var options = me.options;
var time = options.time || (options.time = {});
+ var adapter = me._adapter = new adapters._date(options.adapters.date);
// DEPRECATIONS: output a message only one time per update
if (time.format) {
determineDataLimits: function() {
var me = this;
var chart = me.chart;
+ var adapter = me._adapter;
var timeOpts = me.options.time;
var unit = timeOpts.unit || 'day';
var min = MAX_INTEGER;
// Convert labels to timestamps
for (i = 0, ilen = dataLabels.length; i < ilen; ++i) {
- labels.push(parse(dataLabels[i], me));
+ labels.push(parse(me, dataLabels[i]));
}
// Convert data to timestamps
datasets[i] = [];
for (j = 0, jlen = data.length; j < jlen; ++j) {
- timestamp = parse(data[j], me);
+ timestamp = parse(me, data[j]);
timestamps.push(timestamp);
datasets[i][j] = timestamp;
}
max = Math.max(max, timestamps[timestamps.length - 1]);
}
- min = parse(timeOpts.min, me) || min;
- max = parse(timeOpts.max, me) || max;
+ min = parse(me, timeOpts.min) || min;
+ max = parse(me, timeOpts.max) || max;
// In case there is no valid min/max, set limits based on unit time option
min = min === MAX_INTEGER ? +adapter.startOf(Date.now(), unit) : min;
break;
case 'auto':
default:
- timestamps = generate(min, max, me.getLabelCapacity(min), options);
+ timestamps = generate(me, min, max, me.getLabelCapacity(min), options);
}
if (options.bounds === 'ticks' && timestamps.length) {
}
// Enforce limits with user min/max options
- min = parse(timeOpts.min, me) || min;
- max = parse(timeOpts.max, me) || max;
+ min = parse(me, timeOpts.min) || min;
+ max = parse(me, timeOpts.max) || max;
// Remove ticks outside the min/max range
for (i = 0, ilen = timestamps.length; i < ilen; ++i) {
me.max = max;
// PRIVATE
- me._unit = timeOpts.unit || determineUnitForFormatting(ticks, timeOpts.minUnit, me.min, me.max);
+ me._unit = timeOpts.unit || determineUnitForFormatting(me, ticks, timeOpts.minUnit, me.min, me.max);
me._majorUnit = determineMajorUnit(me._unit);
me._table = buildLookupTable(me._timestamps.data, min, max, options.distribution);
me._offsets = computeOffsets(me._table, ticks, min, max, options);
ticks.reverse();
}
- return ticksFromTimestamps(ticks, me._majorUnit);
+ return ticksFromTimestamps(me, ticks, me._majorUnit);
},
getLabelForIndex: function(index, datasetIndex) {
var me = this;
+ var adapter = me._adapter;
var data = me.chart.data;
var timeOpts = me.options.time;
var label = data.labels && index < data.labels.length ? data.labels[index] : '';
label = me.getRightValue(value);
}
if (timeOpts.tooltipFormat) {
- return adapter.format(toTimestamp(label, timeOpts), timeOpts.tooltipFormat);
+ return adapter.format(toTimestamp(me, label), timeOpts.tooltipFormat);
}
if (typeof label === 'string') {
return label;
}
- return adapter.format(toTimestamp(label, timeOpts), timeOpts.displayFormats.datetime);
+ return adapter.format(toTimestamp(me, label), timeOpts.displayFormats.datetime);
},
/**
*/
tickFormatFunction: function(time, index, ticks, format) {
var me = this;
+ var adapter = me._adapter;
var options = me.options;
var formats = options.time.displayFormats;
var minorFormat = formats[me._unit];
}
if (time === null) {
- time = parse(value, me);
+ time = parse(me, value);
}
if (time !== null) {
var time = interpolate(me._table, 'pos', pos, 'time');
// DEPRECATION, we should return time directly
- return adapter._create(time);
+ return me._adapter._create(time);
},
/**