Skip to content

Commit

Permalink
Put scale as first arg
Browse files Browse the repository at this point in the history
  • Loading branch information
benmccann committed Feb 15, 2019
1 parent 38ee545 commit 18f94ed
Showing 1 changed file with 33 additions and 23 deletions.
56 changes: 33 additions & 23 deletions src/scales/scale.time.js
Original file line number Diff line number Diff line change
Expand Up @@ -177,7 +177,9 @@ function interpolate(table, skey, sval, tkey) {
return prev[tkey] + offset;
}

function toTimestamp(input, adapter, 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;
Expand Down Expand Up @@ -211,13 +213,14 @@ function toTimestamp(input, adapter, options) {
return value;
}

function parse(input, adapter, scale) {
function parse(scale, input) {
if (helpers.isNullOrUndef(input)) {
return null;
}

var adapter = scale._adapter;
var options = scale.options.time;
var value = toTimestamp(scale.getRightValue(input), adapter, options);
var value = toTimestamp(scale, scale.getRightValue(input));
if (value === null) {
return value;
}
Expand Down Expand Up @@ -276,13 +279,14 @@ function determineUnitForAutoTicks(minUnit, min, max, capacity) {
/**
* Figures out what unit to format a set of ticks with
*/
function determineUnitForFormatting(ticks, adapter, minUnit, min, max) {
function determineUnitForFormatting(scale, ticks) {
var minUnit = scale.options.time.minUnit;
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(scale.max, scale.min, unit) >= ticks.length) {
return unit;
}
}
Expand All @@ -304,7 +308,12 @@ function determineMajorUnit(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(adapter, min, max, capacity, options) {
function generate(scale) {
var adapter = scale._adapter;
var min = scale.min;
var max = scale.max;
var capacity = scale.getLabelCapacity(min);
var options = scale.options;
var timeOpts = options.time;
var minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, capacity);
var major = determineMajorUnit(minor);
Expand Down Expand Up @@ -388,13 +397,14 @@ function computeOffsets(table, ticks, min, max, options) {
return {start: start, end: end};
}

function ticksFromTimestamps(values, adapter, majorUnit) {
function ticksFromTimestamps(scale, values) {
var majorUnit = scale._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,
Expand All @@ -408,7 +418,8 @@ function ticksFromTimestamps(values, adapter, majorUnit) {
/**
* Return the time format for the label with the most parts (milliseconds, second, etc.)
*/
function determineLabelFormat(timestamps, adapter) {
function determineLabelFormat(scale, timestamps) {
var adapter = scale._adapter;
var presets = adapter.presets();
var ilen = timestamps.length;
var i, ts, hasTime;
Expand Down Expand Up @@ -530,7 +541,7 @@ module.exports = Scale.extend({

// Convert labels to timestamps
for (i = 0, ilen = dataLabels.length; i < ilen; ++i) {
labels.push(parse(dataLabels[i], adapter, me));
labels.push(parse(me, dataLabels[i]));
}

// Convert data to timestamps
Expand All @@ -543,7 +554,7 @@ module.exports = Scale.extend({
datasets[i] = [];

for (j = 0, jlen = data.length; j < jlen; ++j) {
timestamp = parse(data[j], adapter, me);
timestamp = parse(me, data[j]);
timestamps.push(timestamp);
datasets[i][j] = timestamp;
}
Expand Down Expand Up @@ -571,8 +582,8 @@ module.exports = Scale.extend({
max = Math.max(max, timestamps[timestamps.length - 1]);
}

min = parse(timeOpts.min, adapter, me) || min;
max = parse(timeOpts.max, adapter, 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;
Expand All @@ -596,7 +607,6 @@ module.exports = Scale.extend({
var me = this;
var min = me.min;
var max = me.max;
var adapter = me._adapter;
var options = me.options;
var timeOpts = options.time;
var timestamps = [];
Expand All @@ -612,7 +622,7 @@ module.exports = Scale.extend({
break;
case 'auto':
default:
timestamps = generate(adapter, min, max, me.getLabelCapacity(min), options);
timestamps = generate(me);
}

if (options.bounds === 'ticks' && timestamps.length) {
Expand All @@ -621,8 +631,8 @@ module.exports = Scale.extend({
}

// Enforce limits with user min/max options
min = parse(timeOpts.min, adapter, me) || min;
max = parse(timeOpts.max, adapter, 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) {
Expand All @@ -636,17 +646,17 @@ module.exports = Scale.extend({
me.max = max;

// PRIVATE
me._unit = timeOpts.unit || determineUnitForFormatting(ticks, adapter, timeOpts.minUnit, me.min, me.max);
me._unit = timeOpts.unit || determineUnitForFormatting(me, ticks);
me._majorUnit = determineMajorUnit(me._unit);
me._table = buildLookupTable(me._timestamps.data, min, max, options.distribution);
me._offsets = computeOffsets(me._table, ticks, min, max, options);
me._labelFormat = determineLabelFormat(me._timestamps.data, adapter);
me._labelFormat = determineLabelFormat(me, me._timestamps.data);

if (options.ticks.reverse) {
ticks.reverse();
}

return ticksFromTimestamps(ticks, adapter, me._majorUnit);
return ticksFromTimestamps(me, ticks);
},

getLabelForIndex: function(index, datasetIndex) {
Expand All @@ -661,13 +671,13 @@ module.exports = Scale.extend({
label = me.getRightValue(value);
}
if (timeOpts.tooltipFormat) {
return adapter.format(toTimestamp(label, adapter, timeOpts), timeOpts.tooltipFormat);
return adapter.format(toTimestamp(me, label), timeOpts.tooltipFormat);
}
if (typeof label === 'string') {
return label;
}

return adapter.format(toTimestamp(label, adapter, timeOpts), me._labelFormat);
return adapter.format(toTimestamp(me, label), me._labelFormat);
},

/**
Expand Down Expand Up @@ -726,7 +736,7 @@ module.exports = Scale.extend({
}

if (time === null) {
time = parse(value, me._adapter, me);
time = parse(me, value);
}

if (time !== null) {
Expand Down

0 comments on commit 18f94ed

Please sign in to comment.