hasValue: function() {
return helpers.isNumber(this._model.x) && helpers.isNumber(this._model.y);
+ },
+
+
+ skipIndexAdjustment: function(config) {
+ var moreThanOneAxes = config.options.scales.xAxes.length > 1;
+ var min = config.options.scales.xAxes[0].ticks.min;
+ return this._adjustedIndex || min === undefined || moreThanOneAxes;
+ },
+
+ adjustIndex: function(config) {
+ var min = config.options.scales.xAxes[0].ticks.min;
+
+ if (this.skipIndexAdjustment(config)) {
+ return;
+ }
+
+ this._index -= config.data.labels.indexOf(min);
+ this._adjustedIndex = true;
}
});
for (j = 0, jlen = meta.data.length; j < jlen; ++j) {
var element = meta.data[j];
if (!element._view.skip) {
+ element.adjustIndex(chart.config);
handler(element);
}
}
colorProp: 'rgb(64, 64, 0)',
});
});
+
+ it ('should adjust the index of the element passed in', function() {
+ var chartConfig = {
+ options: {
+ scales: {
+ xAxes: [{
+ ticks: {
+ min: 'Point 2'
+ }
+ }]
+ }
+ },
+ data: {
+ labels: ['Point 1', 'Point 2', 'Point 3']
+ }
+ };
+
+ var element = new Chart.Element({
+ _index: 1
+ });
+
+ element.adjustIndex(chartConfig);
+
+ expect(element._adjustedIndex).toEqual(true);
+ expect(element._index).toEqual(0);
+ });
+
+ describe ('skipIndexAdjustment method', function() {
+ var element;
+
+ beforeEach(function() {
+ element = new Chart.Element({});
+ });
+
+ it ('should return true when min is undefined', function() {
+ var chartConfig = {
+ options: {
+ scales: {
+ xAxes: [{
+ ticks: {
+ min: undefined
+ }
+ }]
+ }
+ }
+ };
+ expect(element.skipIndexAdjustment(chartConfig)).toEqual(true);
+ });
+
+ it ('should return true when index is already adjusted (_adjustedIndex = true)', function() {
+ var chartConfig = {
+ options: {
+ scales: {
+ xAxes: [{
+ ticks: {
+ min: 'Point 1'
+ }
+ }]
+ }
+ }
+ };
+ element._adjustedIndex = true;
+ expect(element.skipIndexAdjustment(chartConfig)).toEqual(true);
+ });
+
+ it ('should return true when more than one xAxes is defined', function() {
+ var chartConfig = {
+ options: {
+ scales: {
+ xAxes: [{
+ ticks: {
+ min: 'Point 1'
+ }
+ }, {
+ ticks: {
+ min: 'Point 2'
+ }
+ }]
+ }
+ }
+ };
+ expect(element.skipIndexAdjustment(chartConfig)).toEqual(true);
+ });
+ });
});
expect(elements).toEqual([point, meta1.data[1]]);
});
+ it ('should start at index 0 within sliced dataset when min is defined', function() {
+ var chartInstance = window.acquireChart({
+ type: 'line',
+ options: {
+ scales: {
+ xAxes: [{
+ ticks: {
+ min: 'March',
+ max: 'May'
+ },
+ categoryPercentage: 1,
+ barPercentage: 1,
+ }]
+ }
+ },
+ data: {
+ datasets: [{
+ label: 'Dataset 1',
+ data: [10, 30, 39, 20, 25, 34, 1],
+ }, {
+ label: 'Dataset 2',
+ data: [10, 30, 39, 20, 25, 34, 1],
+ }],
+ labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'],
+ }
+ });
+
+ // Trigger an event over top of the
+ var meta0 = chartInstance.getDatasetMeta(0);
+ var point = meta0.data[2];
+
+ var node = chartInstance.chart.canvas;
+ var rect = node.getBoundingClientRect();
+
+ var evt = {
+ view: window,
+ bubbles: true,
+ cancelable: true,
+ clientX: rect.left + point._model.x,
+ clientY: rect.top + point._model.y,
+ currentTarget: node
+ };
+
+ var elements = Chart.Interaction.modes.point(chartInstance, evt);
+
+ elements.forEach(function(element) {
+ expect(element._index).toEqual(0);
+ expect(element._adjustedIndex).toBeTruthy();
+ });
+ });
+
it ('should return an empty array when no items are found', function() {
var chartInstance = window.acquireChart({
type: 'line',