mirror of
https://github.com/chartjs/Chart.js.git
synced 2024-10-06 12:19:08 +02:00
Allow specifying labels in time scale options (#6257)
This commit is contained in:
parent
03a3199306
commit
abbddd1298
@ -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.
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
@ -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);
|
||||
},
|
||||
@ -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;
|
||||
|
@ -519,7 +519,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) {
|
||||
|
@ -1682,6 +1682,57 @@ describe('Time scale tests', function() {
|
||||
});
|
||||
});
|
||||
|
||||
describe('labels', function() {
|
||||
it('should read labels from scale / xLabels / yLabels', function() {
|
||||
var timeOpts = {
|
||||
parser: 'YYYY',
|
||||
unit: 'year',
|
||||
displayFormats: {
|
||||
year: 'YYYY'
|
||||
}
|
||||
};
|
||||
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: timeOpts
|
||||
},
|
||||
{
|
||||
id: 'x2',
|
||||
type: 'time',
|
||||
time: timeOpts
|
||||
}],
|
||||
yAxes: [{
|
||||
id: 'y',
|
||||
type: 'time',
|
||||
time: timeOpts
|
||||
},
|
||||
{
|
||||
id: 'y2',
|
||||
type: 'time',
|
||||
labels: ['2005', '2006', '2007'],
|
||||
time: timeOpts
|
||||
}]
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
expect(getTicksLabels(chart.scales.x)).toEqual(['2015', '2016', '2017']);
|
||||
expect(getTicksLabels(chart.scales.x2)).toEqual(['1985', '1986', '1987']);
|
||||
expect(getTicksLabels(chart.scales.y)).toEqual(['1995', '1996', '1997']);
|
||||
expect(getTicksLabels(chart.scales.y2)).toEqual(['2005', '2006', '2007']);
|
||||
});
|
||||
});
|
||||
|
||||
describe('Deprecations', function() {
|
||||
describe('options.time.displayFormats', function() {
|
||||
it('should generate defaults from adapter presets', function() {
|
||||
|
Loading…
Reference in New Issue
Block a user