Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Allow specifying labels in time scale options #6257

Merged
merged 5 commits into from May 21, 2019
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/axes/cartesian/time.md
Expand Up @@ -149,7 +149,7 @@ The `ticks.source` property controls the ticks generation.

* `'auto'`: generates "optimal" ticks based on scale size and time options
* `'data'`: generates ticks from data (including labels from data `{t|x|y}` objects)
* `'labels'`: generates ticks from user given `data.labels` values ONLY
* `'labels'`: generates ticks from user given `labels` ONLY

### Parser
If this property is defined as a string, it is interpreted as a custom format to be used by Moment.js to parse the date.
Expand Down
8 changes: 8 additions & 0 deletions src/core/core.scale.js
Expand Up @@ -214,6 +214,14 @@ var Scale = Element.extend({
return this._ticks;
},

/**
* @private
*/
_getLabels: function() {
var data = this.chart.data;
return this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels;
},

// These methods are ordered by lifecyle. Utilities then follow.
// Any function defined here is inherited by all scale types.
// Any function can be extended by the scale type
Expand Down
16 changes: 3 additions & 13 deletions src/scales/scale.category.js
Expand Up @@ -7,19 +7,9 @@ var defaultConfig = {
};

module.exports = Scale.extend({
/**
* Internal function to get the correct labels. If data.xLabels or data.yLabels are defined, use those
* else fall back to data.labels
* @private
*/
getLabels: function() {
var data = this.chart.data;
return this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels;
},

determineDataLimits: function() {
var me = this;
var labels = me.getLabels();
var labels = me._getLabels();
me.minIndex = 0;
me.maxIndex = labels.length - 1;
var findIndex;
Expand All @@ -42,7 +32,7 @@ module.exports = Scale.extend({

buildTicks: function() {
var me = this;
var labels = me.getLabels();
var labels = me._getLabels();
// If we are viewing some subset of labels, slice the original array
me.ticks = (me.minIndex === 0 && me.maxIndex === labels.length - 1) ? labels : labels.slice(me.minIndex, me.maxIndex + 1);
},
Expand Down Expand Up @@ -72,7 +62,7 @@ module.exports = Scale.extend({
valueCategory = me.isHorizontal() ? value.x : value.y;
}
if (valueCategory !== undefined || (value !== undefined && isNaN(index))) {
var labels = me.getLabels();
var labels = me._getLabels();
value = valueCategory || value;
var idx = labels.indexOf(value);
index = idx !== -1 ? idx : index;
Expand Down
2 changes: 1 addition & 1 deletion src/scales/scale.time.js
Expand Up @@ -523,7 +523,7 @@ module.exports = Scale.extend({
var datasets = [];
var labels = [];
var i, j, ilen, jlen, data, timestamp;
var dataLabels = chart.data.labels || [];
var dataLabels = me._getLabels();

// Convert labels to timestamps
for (i = 0, ilen = dataLabels.length; i < ilen; ++i) {
Expand Down
52 changes: 52 additions & 0 deletions test/specs/scale.time.tests.js
Expand Up @@ -1644,6 +1644,58 @@ describe('Time scale tests', function() {
});
});

describe('labels', function() {
it('should read labels from scale / xLabels / yLabels', function() {
var chart = window.acquireChart({
type: 'line',
data: {
labels: ['1975', '1976', '1977'],
xLabels: ['1985', '1986', '1987'],
yLabels: ['1995', '1996', '1997']
},
options: {
scales: {
xAxes: [{
id: 'x',
type: 'time',
labels: ['2015', '2016', '2017'],
time: {
parser: 'YYYY',
}
},
{
id: 'x2',
type: 'time',
time: {
parser: 'YYYY',
}
}],
yAxes: [{
id: 'y',
type: 'time',
time: {
parser: 'YYYY',
}
},
{
id: 'y2',
type: 'time',
labels: ['2005', '2006', '2007'],
time: {
parser: 'YYYY',
}
}]
}
}
});

expect(getTicksLabels(chart.scales.x)).toEqual(['Jan 2015', 'Jan 2016', 'Jan 2017']);
expect(getTicksLabels(chart.scales.x2)).toEqual(['Jan 1985', 'Jan 1986', 'Jan 1987']);
expect(getTicksLabels(chart.scales.y)).toEqual(['Jan 1995', 'Jan 1996', 'Jan 1997']);
expect(getTicksLabels(chart.scales.y2)).toEqual(['Jan 2005', 'Jan 2006', 'Jan 2007']);
});
});

describe('Deprecations', function() {
describe('options.time.displayFormats', function() {
it('should generate defaults from adapter presets', function() {
Expand Down