// Test the rectangle element
describe('Core.Interaction', function() {
describe('point mode', function() {
- it ('should return all items under the point', function() {
- var chart = window.acquireChart({
+ beforeEach(function() {
+ this.chart = window.acquireChart({
type: 'line',
data: {
datasets: [{
labels: ['Point 1', 'Point 2', 'Point 3']
}
});
+ });
- // Trigger an event over top of the
+ it ('should return all items under the point', function() {
+ var chart = this.chart;
var meta0 = chart.getDatasetMeta(0);
var meta1 = chart.getDatasetMeta(1);
var point = meta0.data[1];
- var node = 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
+ type: 'click',
+ chart: chart,
+ native: true, // needed otherwise things its a DOM event
+ x: point._model.x,
+ y: point._model.y,
};
var elements = Chart.Interaction.modes.point(chart, evt);
});
it ('should return an empty array when no items are found', function() {
- var chart = window.acquireChart({
- type: 'line',
- data: {
- datasets: [{
- label: 'Dataset 1',
- data: [10, 20, 30],
- pointHoverBorderColor: 'rgb(255, 0, 0)',
- pointHoverBackgroundColor: 'rgb(0, 255, 0)'
- }, {
- label: 'Dataset 2',
- data: [40, 20, 40],
- pointHoverBorderColor: 'rgb(0, 0, 255)',
- pointHoverBackgroundColor: 'rgb(0, 255, 255)'
- }],
- labels: ['Point 1', 'Point 2', 'Point 3']
- }
- });
-
- // Trigger an event at (0, 0)
- var node = chart.canvas;
+ var chart = this.chart;
var evt = {
- view: window,
- bubbles: true,
- cancelable: true,
- clientX: 0,
- clientY: 0,
- currentTarget: node
+ type: 'click',
+ chart: chart,
+ native: true, // needed otherwise things its a DOM event
+ x: 0,
+ y: 0
};
var elements = Chart.Interaction.modes.point(chart, evt);
});
describe('index mode', function() {
- it ('should return all items at the same index', function() {
- var chart = window.acquireChart({
- type: 'line',
- data: {
- datasets: [{
- label: 'Dataset 1',
- data: [10, 20, 30],
- pointHoverBorderColor: 'rgb(255, 0, 0)',
- pointHoverBackgroundColor: 'rgb(0, 255, 0)'
- }, {
- label: 'Dataset 2',
- data: [40, 40, 40],
- pointHoverBorderColor: 'rgb(0, 0, 255)',
- pointHoverBackgroundColor: 'rgb(0, 255, 255)'
- }],
- labels: ['Point 1', 'Point 2', 'Point 3']
- }
+ describe('intersect: true', function() {
+ beforeEach(function() {
+ this.chart = window.acquireChart({
+ type: 'line',
+ data: {
+ datasets: [{
+ label: 'Dataset 1',
+ data: [10, 20, 30],
+ pointHoverBorderColor: 'rgb(255, 0, 0)',
+ pointHoverBackgroundColor: 'rgb(0, 255, 0)'
+ }, {
+ label: 'Dataset 2',
+ data: [40, 40, 40],
+ pointHoverBorderColor: 'rgb(0, 0, 255)',
+ pointHoverBackgroundColor: 'rgb(0, 255, 255)'
+ }],
+ labels: ['Point 1', 'Point 2', 'Point 3']
+ }
+ });
});
- // Trigger an event over top of the
- var meta0 = chart.getDatasetMeta(0);
- var meta1 = chart.getDatasetMeta(1);
- var point = meta0.data[1];
+ it ('gets correct items', function() {
+ var chart = this.chart;
+ var meta0 = chart.getDatasetMeta(0);
+ var meta1 = chart.getDatasetMeta(1);
+ var point = meta0.data[1];
+
+ var evt = {
+ type: 'click',
+ chart: chart,
+ native: true, // needed otherwise things its a DOM event
+ x: point._model.x,
+ y: point._model.y,
+ };
+
+ var elements = Chart.Interaction.modes.index(chart, evt, {intersect: true});
+ expect(elements).toEqual([point, meta1.data[1]]);
+ });
- var node = chart.canvas;
- var rect = node.getBoundingClientRect();
+ it ('returns empty array when nothing found', function() {
+ var chart = this.chart;
+ var evt = {
+ type: 'click',
+ chart: chart,
+ native: true, // needed otherwise things its a DOM event
+ x: 0,
+ y: 0,
+ };
+
+ var elements = Chart.Interaction.modes.index(chart, evt, {intersect: true});
+ expect(elements).toEqual([]);
+ });
+ });
- var evt = {
- view: window,
- bubbles: true,
- cancelable: true,
- clientX: rect.left + point._model.x,
- clientY: rect.top + point._model.y,
- currentTarget: node
+ describe ('intersect: false', function() {
+ var data = {
+ datasets: [{
+ label: 'Dataset 1',
+ data: [10, 20, 30],
+ pointHoverBorderColor: 'rgb(255, 0, 0)',
+ pointHoverBackgroundColor: 'rgb(0, 255, 0)'
+ }, {
+ label: 'Dataset 2',
+ data: [40, 40, 40],
+ pointHoverBorderColor: 'rgb(0, 0, 255)',
+ pointHoverBackgroundColor: 'rgb(0, 255, 255)'
+ }],
+ labels: ['Point 1', 'Point 2', 'Point 3']
};
- var elements = Chart.Interaction.modes.index(chart, evt, {intersect: true});
- expect(elements).toEqual([point, meta1.data[1]]);
- });
-
- it ('should return all items at the same index when intersect is false', function() {
- var chart = window.acquireChart({
- type: 'line',
- data: {
- datasets: [{
- label: 'Dataset 1',
- data: [10, 20, 30],
- pointHoverBorderColor: 'rgb(255, 0, 0)',
- pointHoverBackgroundColor: 'rgb(0, 255, 0)'
- }, {
- label: 'Dataset 2',
- data: [40, 40, 40],
- pointHoverBorderColor: 'rgb(0, 0, 255)',
- pointHoverBackgroundColor: 'rgb(0, 255, 255)'
- }],
- labels: ['Point 1', 'Point 2', 'Point 3']
- }
+ beforeEach(function() {
+ this.chart = window.acquireChart({
+ type: 'line',
+ data: data
+ });
});
- // Trigger an event over top of the
- var meta0 = chart.getDatasetMeta(0);
- var meta1 = chart.getDatasetMeta(1);
-
- var node = chart.canvas;
- var rect = node.getBoundingClientRect();
+ it ('axis: x gets correct items', function() {
+ var chart = this.chart;
+ var meta0 = chart.getDatasetMeta(0);
+ var meta1 = chart.getDatasetMeta(1);
+
+ var evt = {
+ type: 'click',
+ chart: chart,
+ native: true, // needed otherwise things its a DOM event
+ x: 0,
+ y: 0
+ };
+
+ var elements = Chart.Interaction.modes.index(chart, evt, {intersect: false});
+ expect(elements).toEqual([meta0.data[0], meta1.data[0]]);
+ });
- var evt = {
- view: window,
- bubbles: true,
- cancelable: true,
- clientX: rect.left,
- clientY: rect.top,
- currentTarget: node
- };
+ it ('axis: y gets correct items', function() {
+ var chart = window.acquireChart({
+ type: 'horizontalBar',
+ data: data
+ });
+
+ var meta0 = chart.getDatasetMeta(0);
+ var meta1 = chart.getDatasetMeta(1);
+ var center = meta0.data[0].getCenterPoint();
+
+ var evt = {
+ type: 'click',
+ chart: chart,
+ native: true, // needed otherwise things its a DOM event
+ x: center.x,
+ y: center.y + 30,
+ };
+
+ var elements = Chart.Interaction.modes.index(chart, evt, {axis: 'y', intersect: false});
+ expect(elements).toEqual([meta0.data[0], meta1.data[0]]);
+ });
- var elements = Chart.Interaction.modes.index(chart, evt, {intersect: false});
- expect(elements).toEqual([meta0.data[0], meta1.data[0]]);
+ it ('axis: xy gets correct items', function() {
+ var chart = this.chart;
+ var meta0 = chart.getDatasetMeta(0);
+ var meta1 = chart.getDatasetMeta(1);
+
+ var evt = {
+ type: 'click',
+ chart: chart,
+ native: true, // needed otherwise things its a DOM event
+ x: 0,
+ y: 0
+ };
+
+ var elements = Chart.Interaction.modes.index(chart, evt, {axis: 'xy', intersect: false});
+ expect(elements).toEqual([meta0.data[0], meta1.data[0]]);
+ });
});
});
describe('dataset mode', function() {
- it ('should return all items in the dataset of the first item found', function() {
- var chart = window.acquireChart({
- type: 'line',
- data: {
- datasets: [{
- label: 'Dataset 1',
- data: [10, 20, 30],
- pointHoverBorderColor: 'rgb(255, 0, 0)',
- pointHoverBackgroundColor: 'rgb(0, 255, 0)'
- }, {
- label: 'Dataset 2',
- data: [40, 40, 40],
- pointHoverBorderColor: 'rgb(0, 0, 255)',
- pointHoverBackgroundColor: 'rgb(0, 255, 255)'
- }],
- labels: ['Point 1', 'Point 2', 'Point 3']
- }
+ describe('intersect: true', function() {
+ beforeEach(function() {
+ this.chart = window.acquireChart({
+ type: 'line',
+ data: {
+ datasets: [{
+ label: 'Dataset 1',
+ data: [10, 20, 30],
+ pointHoverBorderColor: 'rgb(255, 0, 0)',
+ pointHoverBackgroundColor: 'rgb(0, 255, 0)'
+ }, {
+ label: 'Dataset 2',
+ data: [40, 40, 40],
+ pointHoverBorderColor: 'rgb(0, 0, 255)',
+ pointHoverBackgroundColor: 'rgb(0, 255, 255)'
+ }],
+ labels: ['Point 1', 'Point 2', 'Point 3']
+ }
+ });
});
- // Trigger an event over top of the
- var meta = chart.getDatasetMeta(0);
- var point = meta.data[1];
+ it ('should return all items in the dataset of the first item found', function() {
+ var chart = this.chart;
+ var meta = chart.getDatasetMeta(0);
+ var point = meta.data[1];
+
+ var evt = {
+ type: 'click',
+ chart: chart,
+ native: true, // needed otherwise things its a DOM event
+ x: point._model.x,
+ y: point._model.y
+ };
+
+ var elements = Chart.Interaction.modes.dataset(chart, evt, {intersect: true});
+ expect(elements).toEqual(meta.data);
+ });
- var node = chart.canvas;
- var rect = node.getBoundingClientRect();
+ it ('should return an empty array if nothing found', function() {
+ var chart = this.chart;
+ var evt = {
+ type: 'click',
+ chart: chart,
+ native: true, // needed otherwise things its a DOM event
+ x: 0,
+ y: 0
+ };
+
+ var elements = Chart.Interaction.modes.dataset(chart, evt, {intersect: true});
+ expect(elements).toEqual([]);
+ });
+ });
- var evt = {
- view: window,
- bubbles: true,
- cancelable: true,
- clientX: rect.left + point._model.x,
- clientY: rect.top + point._model.y,
- currentTarget: node
+ describe('intersect: false', function() {
+ var data = {
+ datasets: [{
+ label: 'Dataset 1',
+ data: [10, 20, 30],
+ pointHoverBorderColor: 'rgb(255, 0, 0)',
+ pointHoverBackgroundColor: 'rgb(0, 255, 0)'
+ }, {
+ label: 'Dataset 2',
+ data: [40, 40, 40],
+ pointHoverBorderColor: 'rgb(0, 0, 255)',
+ pointHoverBackgroundColor: 'rgb(0, 255, 255)'
+ }],
+ labels: ['Point 1', 'Point 2', 'Point 3']
};
- var elements = Chart.Interaction.modes.dataset(chart, evt, {intersect: true});
- expect(elements).toEqual(meta.data);
- });
-
- it ('should return all items in the dataset of the first item found when intersect is false', function() {
- var chart = window.acquireChart({
- type: 'line',
- data: {
- datasets: [{
- label: 'Dataset 1',
- data: [10, 20, 30],
- pointHoverBorderColor: 'rgb(255, 0, 0)',
- pointHoverBackgroundColor: 'rgb(0, 255, 0)'
- }, {
- label: 'Dataset 2',
- data: [40, 40, 40],
- pointHoverBorderColor: 'rgb(0, 0, 255)',
- pointHoverBackgroundColor: 'rgb(0, 255, 255)'
- }],
- labels: ['Point 1', 'Point 2', 'Point 3']
- }
+ beforeEach(function() {
+ this.chart = window.acquireChart({
+ type: 'line',
+ data: data
+ });
});
- var node = chart.canvas;
- var rect = node.getBoundingClientRect();
+ it ('axis: x gets correct items', function() {
+ var chart = window.acquireChart({
+ type: 'horizontalBar',
+ data: data
+ });
- var evt = {
- view: window,
- bubbles: true,
- cancelable: true,
- clientX: rect.left,
- clientY: rect.top,
- currentTarget: node
- };
-
- var elements = Chart.Interaction.modes.dataset(chart, evt, {intersect: false});
+ var evt = {
+ type: 'click',
+ chart: chart,
+ native: true, // needed otherwise things its a DOM event
+ x: 0,
+ y: 0
+ };
- var meta = chart.getDatasetMeta(1);
- expect(elements).toEqual(meta.data);
- });
- });
+ var elements = Chart.Interaction.modes.dataset(chart, evt, {axis: 'x', intersect: false});
- describe('nearest mode', function() {
- it ('should return the nearest item', function() {
- var chart = window.acquireChart({
- type: 'line',
- data: {
- datasets: [{
- label: 'Dataset 1',
- data: [10, 20, 30],
- pointHoverBorderColor: 'rgb(255, 0, 0)',
- pointHoverBackgroundColor: 'rgb(0, 255, 0)'
- }, {
- label: 'Dataset 2',
- data: [40, 40, 40],
- pointHoverBorderColor: 'rgb(0, 0, 255)',
- pointHoverBackgroundColor: 'rgb(0, 255, 255)'
- }],
- labels: ['Point 1', 'Point 2', 'Point 3']
- }
+ var meta = chart.getDatasetMeta(0);
+ expect(elements).toEqual(meta.data);
});
- // Trigger an event over top of the
- var meta = chart.getDatasetMeta(1);
- var node = chart.canvas;
- var evt = {
- view: window,
- bubbles: true,
- cancelable: true,
- clientX: 0,
- clientY: 0,
- currentTarget: node
- };
+ it ('axis: y gets correct items', function() {
+ var chart = this.chart;
+ var evt = {
+ type: 'click',
+ chart: chart,
+ native: true, // needed otherwise things its a DOM event
+ x: 0,
+ y: 0
+ };
- // Nearest to 0,0 (top left) will be first point of dataset 2
- var elements = Chart.Interaction.modes.nearest(chart, evt, {intersect: false});
- expect(elements).toEqual([meta.data[0]]);
- });
+ var elements = Chart.Interaction.modes.dataset(chart, evt, {axis: 'y', intersect: false});
- it ('should return the smallest item if more than 1 are at the same distance', function() {
- var chart = window.acquireChart({
- type: 'line',
- data: {
- datasets: [{
- label: 'Dataset 1',
- data: [10, 40, 30],
- pointRadius: [5, 5, 5],
- pointHoverBorderColor: 'rgb(255, 0, 0)',
- pointHoverBackgroundColor: 'rgb(0, 255, 0)'
- }, {
- label: 'Dataset 2',
- data: [40, 40, 40],
- pointRadius: [10, 10, 10],
- pointHoverBorderColor: 'rgb(0, 0, 255)',
- pointHoverBackgroundColor: 'rgb(0, 255, 255)'
- }],
- labels: ['Point 1', 'Point 2', 'Point 3']
- }
+ var meta = chart.getDatasetMeta(1);
+ expect(elements).toEqual(meta.data);
});
- // Trigger an event over top of the
- var meta0 = chart.getDatasetMeta(0);
- var meta1 = chart.getDatasetMeta(1);
+ it ('axis: xy gets correct items', function() {
+ var chart = this.chart;
+ var evt = {
+ type: 'click',
+ chart: chart,
+ native: true, // needed otherwise things its a DOM event
+ x: 0,
+ y: 0
+ };
- // Halfway between 2 mid points
- var pt = {
- x: meta0.data[1]._view.x,
- y: (meta0.data[1]._view.y + meta1.data[1]._view.y) / 2
- };
-
- var node = chart.canvas;
- var rect = node.getBoundingClientRect();
- var evt = {
- view: window,
- bubbles: true,
- cancelable: true,
- clientX: rect.left + pt.x,
- clientY: rect.top + pt.y,
- currentTarget: node
- };
+ var elements = Chart.Interaction.modes.dataset(chart, evt, {intersect: false});
- // Nearest to 0,0 (top left) will be first point of dataset 2
- var elements = Chart.Interaction.modes.nearest(chart, evt, {intersect: false});
- expect(elements).toEqual([meta0.data[1]]);
- });
-
- it ('should return the lowest dataset index if size and area are the same', function() {
- var chart = window.acquireChart({
- type: 'line',
- data: {
- datasets: [{
- label: 'Dataset 1',
- data: [10, 40, 30],
- pointRadius: [5, 10, 5],
- pointHoverBorderColor: 'rgb(255, 0, 0)',
- pointHoverBackgroundColor: 'rgb(0, 255, 0)'
- }, {
- label: 'Dataset 2',
- data: [40, 40, 40],
- pointRadius: [10, 10, 10],
- pointHoverBorderColor: 'rgb(0, 0, 255)',
- pointHoverBackgroundColor: 'rgb(0, 255, 255)'
- }],
- labels: ['Point 1', 'Point 2', 'Point 3']
- }
+ var meta = chart.getDatasetMeta(1);
+ expect(elements).toEqual(meta.data);
});
-
- // Trigger an event over top of the
- var meta0 = chart.getDatasetMeta(0);
- var meta1 = chart.getDatasetMeta(1);
-
- // Halfway between 2 mid points
- var pt = {
- x: meta0.data[1]._view.x,
- y: (meta0.data[1]._view.y + meta1.data[1]._view.y) / 2
- };
-
- var node = chart.canvas;
- var rect = node.getBoundingClientRect();
- var evt = {
- view: window,
- bubbles: true,
- cancelable: true,
- clientX: rect.left + pt.x,
- clientY: rect.top + pt.y,
- currentTarget: node
- };
-
- // Nearest to 0,0 (top left) will be first point of dataset 2
- var elements = Chart.Interaction.modes.nearest(chart, evt, {intersect: false});
- expect(elements).toEqual([meta0.data[1]]);
});
});
- describe('nearest intersect mode', function() {
- it ('should return the nearest item', function() {
- var chart = window.acquireChart({
- type: 'line',
- data: {
- datasets: [{
- label: 'Dataset 1',
- data: [10, 20, 30],
- pointHoverBorderColor: 'rgb(255, 0, 0)',
- pointHoverBackgroundColor: 'rgb(0, 255, 0)'
- }, {
- label: 'Dataset 2',
- data: [40, 40, 40],
- pointHoverBorderColor: 'rgb(0, 0, 255)',
- pointHoverBackgroundColor: 'rgb(0, 255, 255)'
- }],
- labels: ['Point 1', 'Point 2', 'Point 3']
- }
+ describe('nearest mode', function() {
+ describe('intersect: false', function() {
+ beforeEach(function() {
+ this.chart = window.acquireChart({
+ type: 'line',
+ data: {
+ datasets: [{
+ label: 'Dataset 1',
+ data: [10, 40, 30],
+ pointRadius: [5, 5, 5],
+ pointHoverBorderColor: 'rgb(255, 0, 0)',
+ pointHoverBackgroundColor: 'rgb(0, 255, 0)'
+ }, {
+ label: 'Dataset 2',
+ data: [40, 40, 40],
+ pointRadius: [10, 10, 10],
+ pointHoverBorderColor: 'rgb(0, 0, 255)',
+ pointHoverBackgroundColor: 'rgb(0, 255, 255)'
+ }],
+ labels: ['Point 1', 'Point 2', 'Point 3']
+ }
+ });
});
- // Trigger an event over top of the
- var meta = chart.getDatasetMeta(1);
- var point = meta.data[1];
-
- var node = chart.canvas;
- var rect = node.getBoundingClientRect();
- var evt = {
- view: window,
- bubbles: true,
- cancelable: true,
- clientX: rect.left + point._view.x + 15,
- clientY: rect.top + point._view.y,
- currentTarget: node
- };
+ it ('axis: xy should return the nearest item', function() {
+ var chart = this.chart;
+ var evt = {
+ type: 'click',
+ chart: chart,
+ native: true, // needed otherwise things its a DOM event
+ x: 0,
+ y: 0
+ };
+
+ // Nearest to 0,0 (top left) will be first point of dataset 2
+ var elements = Chart.Interaction.modes.nearest(chart, evt, {intersect: false});
+ var meta = chart.getDatasetMeta(1);
+ expect(elements).toEqual([meta.data[0]]);
+ });
- // Nothing intersects so find nothing
- var elements = Chart.Interaction.modes.nearest(chart, evt, {intersect: true});
- expect(elements).toEqual([]);
+ it ('should return the smallest item if more than 1 are at the same distance', function() {
+ var chart = this.chart;
+ var meta0 = chart.getDatasetMeta(0);
+ var meta1 = chart.getDatasetMeta(1);
+
+ // Halfway between 2 mid points
+ var pt = {
+ x: meta0.data[1]._view.x,
+ y: (meta0.data[1]._view.y + meta1.data[1]._view.y) / 2
+ };
+
+ var evt = {
+ type: 'click',
+ chart: chart,
+ native: true, // needed otherwise things its a DOM event
+ x: pt.x,
+ y: pt.y
+ };
+
+ // Nearest to 0,0 (top left) will be first point of dataset 2
+ var elements = Chart.Interaction.modes.nearest(chart, evt, {intersect: false});
+ expect(elements).toEqual([meta0.data[1]]);
+ });
- evt = {
- view: window,
- bubbles: true,
- cancelable: true,
- clientX: rect.left + point._view.x,
- clientY: rect.top + point._view.y,
- currentTarget: node
- };
- elements = Chart.Interaction.modes.nearest(chart, evt, {intersect: true});
- expect(elements).toEqual([point]);
+ it ('should return the lowest dataset index if size and area are the same', function() {
+ var chart = this.chart;
+ // Make equal sized points at index: 1
+ chart.data.datasets[0].pointRadius[1] = 10;
+ chart.update();
+
+ // Trigger an event over top of the
+ var meta0 = chart.getDatasetMeta(0);
+ var meta1 = chart.getDatasetMeta(1);
+
+ // Halfway between 2 mid points
+ var pt = {
+ x: meta0.data[1]._view.x,
+ y: (meta0.data[1]._view.y + meta1.data[1]._view.y) / 2
+ };
+
+ var evt = {
+ type: 'click',
+ chart: chart,
+ native: true, // needed otherwise things its a DOM event
+ x: pt.x,
+ y: pt.y
+ };
+
+ // Nearest to 0,0 (top left) will be first point of dataset 2
+ var elements = Chart.Interaction.modes.nearest(chart, evt, {intersect: false});
+ expect(elements).toEqual([meta0.data[1]]);
+ });
});
- it ('should return the nearest item even if 2 intersect', function() {
- var chart = window.acquireChart({
- type: 'line',
- data: {
- datasets: [{
- label: 'Dataset 1',
- data: [10, 39, 30],
- pointRadius: [5, 30, 5],
- pointHoverBorderColor: 'rgb(255, 0, 0)',
- pointHoverBackgroundColor: 'rgb(0, 255, 0)'
- }, {
- label: 'Dataset 2',
- data: [40, 40, 40],
- pointRadius: [10, 10, 10],
- pointHoverBorderColor: 'rgb(0, 0, 255)',
- pointHoverBackgroundColor: 'rgb(0, 255, 255)'
- }],
- labels: ['Point 1', 'Point 2', 'Point 3']
- }
+ describe('intersect: true', function() {
+ beforeEach(function() {
+ this.chart = window.acquireChart({
+ type: 'line',
+ data: {
+ datasets: [{
+ label: 'Dataset 1',
+ data: [10, 20, 30],
+ pointHoverBorderColor: 'rgb(255, 0, 0)',
+ pointHoverBackgroundColor: 'rgb(0, 255, 0)'
+ }, {
+ label: 'Dataset 2',
+ data: [40, 40, 40],
+ pointHoverBorderColor: 'rgb(0, 0, 255)',
+ pointHoverBackgroundColor: 'rgb(0, 255, 255)'
+ }],
+ labels: ['Point 1', 'Point 2', 'Point 3']
+ }
+ });
});
- // Trigger an event over top of the
- var meta0 = chart.getDatasetMeta(0);
+ it ('should return the nearest item', function() {
+ var chart = this.chart;
+ var meta = chart.getDatasetMeta(1);
+ var point = meta.data[1];
+
+ var evt = {
+ type: 'click',
+ chart: chart,
+ native: true, // needed otherwise things its a DOM event
+ x: point._view.x + 15,
+ y: point._view.y
+ };
+
+ // Nothing intersects so find nothing
+ var elements = Chart.Interaction.modes.nearest(chart, evt, {intersect: true});
+ expect(elements).toEqual([]);
+
+ evt = {
+ type: 'click',
+ chart: chart,
+ native: true,
+ x: point._view.x,
+ y: point._view.y
+ };
+ elements = Chart.Interaction.modes.nearest(chart, evt, {intersect: true});
+ expect(elements).toEqual([point]);
+ });
- // Halfway between 2 mid points
- var pt = {
- x: meta0.data[1]._view.x,
- y: meta0.data[1]._view.y
- };
+ it ('should return the nearest item even if 2 intersect', function() {
+ var chart = this.chart;
+ chart.data.datasets[0].pointRadius = [5, 30, 5];
+ chart.data.datasets[0].data[1] = 39;
- var node = chart.canvas;
- var rect = node.getBoundingClientRect();
- var evt = {
- view: window,
- bubbles: true,
- cancelable: true,
- clientX: rect.left + pt.x,
- clientY: rect.top + pt.y,
- currentTarget: node
- };
+ chart.data.datasets[1].pointRadius = [10, 10, 10];
- // Nearest to 0,0 (top left) will be first point of dataset 2
- var elements = Chart.Interaction.modes.nearest(chart, evt, {intersect: true});
- expect(elements).toEqual([meta0.data[1]]);
- });
+ // Trigger an event over top of the
+ var meta0 = chart.getDatasetMeta(0);
- it ('should return the smallest item if more than 1 are at the same distance', function() {
- var chart = window.acquireChart({
- type: 'line',
- data: {
- datasets: [{
- label: 'Dataset 1',
- data: [10, 40, 30],
- pointRadius: [5, 5, 5],
- pointHoverBorderColor: 'rgb(255, 0, 0)',
- pointHoverBackgroundColor: 'rgb(0, 255, 0)'
- }, {
- label: 'Dataset 2',
- data: [40, 40, 40],
- pointRadius: [10, 10, 10],
- pointHoverBorderColor: 'rgb(0, 0, 255)',
- pointHoverBackgroundColor: 'rgb(0, 255, 255)'
- }],
- labels: ['Point 1', 'Point 2', 'Point 3']
- }
- });
+ // Halfway between 2 mid points
+ var pt = {
+ x: meta0.data[1]._view.x,
+ y: meta0.data[1]._view.y
+ };
- // Trigger an event over top of the
- var meta0 = chart.getDatasetMeta(0);
+ var evt = {
+ type: 'click',
+ chart: chart,
+ native: true, // needed otherwise things its a DOM event
+ x: pt.x,
+ y: pt.y
+ };
- // Halfway between 2 mid points
- var pt = {
- x: meta0.data[1]._view.x,
- y: meta0.data[1]._view.y
- };
+ var elements = Chart.Interaction.modes.nearest(chart, evt, {intersect: true});
+ expect(elements).toEqual([meta0.data[1]]);
+ });
- var node = chart.canvas;
- var rect = node.getBoundingClientRect();
- var evt = {
- view: window,
- bubbles: true,
- cancelable: true,
- clientX: rect.left + pt.x,
- clientY: rect.top + pt.y,
- currentTarget: node
- };
+ it ('should return the smallest item if more than 1 are at the same distance', function() {
+ var chart = this.chart;
+ chart.data.datasets[0].pointRadius = [5, 5, 5];
+ chart.data.datasets[0].data[1] = 40;
- // Nearest to 0,0 (top left) will be first point of dataset 2
- var elements = Chart.Interaction.modes.nearest(chart, evt, {intersect: true});
- expect(elements).toEqual([meta0.data[1]]);
- });
+ chart.data.datasets[1].pointRadius = [10, 10, 10];
- it ('should return the item at the lowest dataset index if distance and area are the same', function() {
- var chart = window.acquireChart({
- type: 'line',
- data: {
- datasets: [{
- label: 'Dataset 1',
- data: [10, 40, 30],
- pointRadius: [5, 10, 5],
- pointHoverBorderColor: 'rgb(255, 0, 0)',
- pointHoverBackgroundColor: 'rgb(0, 255, 0)'
- }, {
- label: 'Dataset 2',
- data: [40, 40, 40],
- pointRadius: [10, 10, 10],
- pointHoverBorderColor: 'rgb(0, 0, 255)',
- pointHoverBackgroundColor: 'rgb(0, 255, 255)'
- }],
- labels: ['Point 1', 'Point 2', 'Point 3']
- }
- });
+ // Trigger an event over top of the
+ var meta0 = chart.getDatasetMeta(0);
- // Trigger an event over top of the
- var meta0 = chart.getDatasetMeta(0);
+ // Halfway between 2 mid points
+ var pt = {
+ x: meta0.data[1]._view.x,
+ y: meta0.data[1]._view.y
+ };
- // Halfway between 2 mid points
- var pt = {
- x: meta0.data[1]._view.x,
- y: meta0.data[1]._view.y
- };
+ var evt = {
+ type: 'click',
+ chart: chart,
+ native: true, // needed otherwise things its a DOM event
+ x: pt.x,
+ y: pt.y
+ };
- var node = chart.canvas;
- var rect = node.getBoundingClientRect();
- var evt = {
- view: window,
- bubbles: true,
- cancelable: true,
- clientX: rect.left + pt.x,
- clientY: rect.top + pt.y,
- currentTarget: node
- };
+ var elements = Chart.Interaction.modes.nearest(chart, evt, {intersect: true});
+ expect(elements).toEqual([meta0.data[1]]);
+ });
- // Nearest to 0,0 (top left) will be first point of dataset 2
- var elements = Chart.Interaction.modes.nearest(chart, evt, {intersect: true});
- expect(elements).toEqual([meta0.data[1]]);
+ it ('should return the item at the lowest dataset index if distance and area are the same', function() {
+ var chart = this.chart;
+ chart.data.datasets[0].pointRadius = [5, 10, 5];
+ chart.data.datasets[0].data[1] = 40;
+
+ chart.data.datasets[1].pointRadius = [10, 10, 10];
+
+ // Trigger an event over top of the
+ var meta0 = chart.getDatasetMeta(0);
+
+ // Halfway between 2 mid points
+ var pt = {
+ x: meta0.data[1]._view.x,
+ y: meta0.data[1]._view.y
+ };
+
+ var evt = {
+ type: 'click',
+ chart: chart,
+ native: true, // needed otherwise things its a DOM event
+ x: pt.x,
+ y: pt.y
+ };
+
+ // Nearest to 0,0 (top left) will be first point of dataset 2
+ var elements = Chart.Interaction.modes.nearest(chart, evt, {intersect: true});
+ expect(elements).toEqual([meta0.data[1]]);
+ });
});
});
describe('x mode', function() {
- it('should return items at the same x value when intersect is false', function() {
- var chart = window.acquireChart({
+ beforeEach(function() {
+ this.chart = window.acquireChart({
type: 'line',
data: {
datasets: [{
labels: ['Point 1', 'Point 2', 'Point 3']
}
});
+ });
- // Trigger an event over top of the
+ it('should return items at the same x value when intersect is false', function() {
+ var chart = this.chart;
var meta0 = chart.getDatasetMeta(0);
var meta1 = chart.getDatasetMeta(1);
y: meta0.data[1]._view.y
};
- var node = chart.canvas;
- var rect = node.getBoundingClientRect();
var evt = {
- view: window,
- bubbles: true,
- cancelable: true,
- clientX: rect.left + pt.x,
- clientY: rect.top,
- currentTarget: node
+ type: 'click',
+ chart: chart,
+ native: true, // needed otherwise things its a DOM event
+ x: pt.x,
+ y: 0
};
var elements = Chart.Interaction.modes.x(chart, evt, {intersect: false});
expect(elements).toEqual([meta0.data[1], meta1.data[1]]);
evt = {
- view: window,
- bubbles: true,
- cancelable: true,
- clientX: rect.left + pt.x + 20, // out of range
- clientY: rect.top,
- currentTarget: node
+ type: 'click',
+ chart: chart,
+ native: true, // needed otherwise things its a DOM event
+ x: pt.x + 20,
+ y: 0
};
elements = Chart.Interaction.modes.x(chart, evt, {intersect: false});
});
it('should return items at the same x value when intersect is true', function() {
- var chart = window.acquireChart({
- type: 'line',
- data: {
- datasets: [{
- label: 'Dataset 1',
- data: [10, 40, 30],
- pointRadius: [5, 10, 5],
- pointHoverBorderColor: 'rgb(255, 0, 0)',
- pointHoverBackgroundColor: 'rgb(0, 255, 0)'
- }, {
- label: 'Dataset 2',
- data: [40, 40, 40],
- pointRadius: [10, 10, 10],
- pointHoverBorderColor: 'rgb(0, 0, 255)',
- pointHoverBackgroundColor: 'rgb(0, 255, 255)'
- }],
- labels: ['Point 1', 'Point 2', 'Point 3']
- }
- });
-
- // Trigger an event over top of the
+ var chart = this.chart;
var meta0 = chart.getDatasetMeta(0);
var meta1 = chart.getDatasetMeta(1);
y: meta0.data[1]._view.y
};
- var node = chart.canvas;
- var rect = node.getBoundingClientRect();
var evt = {
- view: window,
- bubbles: true,
- cancelable: true,
- clientX: rect.left + pt.x,
- clientY: rect.top,
- currentTarget: node
+ type: 'click',
+ chart: chart,
+ native: true, // needed otherwise things its a DOM event
+ x: pt.x,
+ y: 0
};
var elements = Chart.Interaction.modes.x(chart, evt, {intersect: true});
expect(elements).toEqual([]); // we don't intersect anything
evt = {
- view: window,
- bubbles: true,
- cancelable: true,
- clientX: rect.left + pt.x,
- clientY: rect.top + pt.y,
- currentTarget: node
+ type: 'click',
+ chart: chart,
+ native: true, // needed otherwise things its a DOM event
+ x: pt.x,
+ y: pt.y
};
elements = Chart.Interaction.modes.x(chart, evt, {intersect: true});
});
describe('y mode', function() {
- it('should return items at the same y value when intersect is false', function() {
- var chart = window.acquireChart({
+ beforeEach(function() {
+ this.chart = window.acquireChart({
type: 'line',
data: {
datasets: [{
labels: ['Point 1', 'Point 2', 'Point 3']
}
});
+ });
- // Trigger an event over top of the
+ it('should return items at the same y value when intersect is false', function() {
+ var chart = this.chart;
var meta0 = chart.getDatasetMeta(0);
var meta1 = chart.getDatasetMeta(1);
y: meta0.data[1]._view.y
};
- var node = chart.canvas;
- var rect = node.getBoundingClientRect();
var evt = {
- view: window,
- bubbles: true,
- cancelable: true,
- clientX: rect.left,
- clientY: rect.top + pt.y,
- currentTarget: node
+ type: 'click',
+ chart: chart,
+ native: true,
+ x: 0,
+ y: pt.y,
};
var elements = Chart.Interaction.modes.y(chart, evt, {intersect: false});
expect(elements).toEqual([meta0.data[1], meta1.data[0], meta1.data[1], meta1.data[2]]);
evt = {
- view: window,
- bubbles: true,
- cancelable: true,
- clientX: rect.left + pt.x,
- clientY: rect.top + pt.y + 20, // out of range
- currentTarget: node
+ type: 'click',
+ chart: chart,
+ native: true,
+ x: pt.x,
+ y: pt.y + 20, // out of range
};
elements = Chart.Interaction.modes.y(chart, evt, {intersect: false});
});
it('should return items at the same y value when intersect is true', function() {
- var chart = window.acquireChart({
- type: 'line',
- data: {
- datasets: [{
- label: 'Dataset 1',
- data: [10, 40, 30],
- pointRadius: [5, 10, 5],
- pointHoverBorderColor: 'rgb(255, 0, 0)',
- pointHoverBackgroundColor: 'rgb(0, 255, 0)'
- }, {
- label: 'Dataset 2',
- data: [40, 40, 40],
- pointRadius: [10, 10, 10],
- pointHoverBorderColor: 'rgb(0, 0, 255)',
- pointHoverBackgroundColor: 'rgb(0, 255, 255)'
- }],
- labels: ['Point 1', 'Point 2', 'Point 3']
- }
- });
-
- // Trigger an event over top of the
+ var chart = this.chart;
var meta0 = chart.getDatasetMeta(0);
var meta1 = chart.getDatasetMeta(1);
y: meta0.data[1]._view.y
};
- var node = chart.canvas;
- var rect = node.getBoundingClientRect();
var evt = {
- view: window,
- bubbles: true,
- cancelable: true,
- clientX: rect.left,
- clientY: rect.top + pt.y,
- currentTarget: node
+ type: 'click',
+ chart: chart,
+ native: true,
+ x: 0,
+ y: pt.y
};
var elements = Chart.Interaction.modes.y(chart, evt, {intersect: true});
expect(elements).toEqual([]); // we don't intersect anything
evt = {
- view: window,
- bubbles: true,
- cancelable: true,
- clientX: rect.left + pt.x,
- clientY: rect.top + pt.y,
- currentTarget: node
+ type: 'click',
+ chart: chart,
+ native: true,
+ x: pt.x,
+ y: pt.y,
};
elements = Chart.Interaction.modes.y(chart, evt, {intersect: true});