diff --git a/src/core/core.interaction.js b/src/core/core.interaction.js index fbfaf6ebbd7..5365f6c9108 100644 --- a/src/core/core.interaction.js +++ b/src/core/core.interaction.js @@ -166,7 +166,7 @@ function getNearestItems(chart, position, axis, intersect, useFinalPosition) { } const center = element.getCenterPoint(useFinalPosition); - if (!_isPointInArea(center, chart.chartArea, chart._minPadding)) { + if (!_isPointInArea(center, chart.chartArea, chart._minPadding) && !element.inRange(position.x, position.y, useFinalPosition)) { return; } const distance = distanceMetric(position, center); diff --git a/test/fixtures/core.interaction/nearest-partial-bar.js b/test/fixtures/core.interaction/nearest-partial-bar.js new file mode 100644 index 00000000000..420f849c95f --- /dev/null +++ b/test/fixtures/core.interaction/nearest-partial-bar.js @@ -0,0 +1,42 @@ +module.exports = { + config: { + type: 'bar', + data: { + labels: ['a', 'b', 'c'], + datasets: [ + { + data: [220, 250, 225], + }, + ], + }, + options: { + events: ['click'], + interaction: { + mode: 'nearest' + }, + plugins: { + tooltip: true, + legend: false + }, + scales: { + y: { + beginAtZero: false + } + } + } + }, + options: { + spriteText: true, + canvas: { + width: 256, + height: 256 + }, + async run(chart) { + const point = { + x: chart.chartArea.left + chart.chartArea.width / 2, + y: chart.chartArea.top + chart.chartArea.height / 2, + }; + await jasmine.triggerMouseEvent(chart, 'click', point); + } + } +}; diff --git a/test/fixtures/core.interaction/nearest-partial-bar.png b/test/fixtures/core.interaction/nearest-partial-bar.png new file mode 100644 index 00000000000..907795294c4 Binary files /dev/null and b/test/fixtures/core.interaction/nearest-partial-bar.png differ diff --git a/test/fixtures/core.interaction/nearest-point-behind-scale.js b/test/fixtures/core.interaction/nearest-point-behind-scale.js new file mode 100644 index 00000000000..6dfa25c1a2d --- /dev/null +++ b/test/fixtures/core.interaction/nearest-point-behind-scale.js @@ -0,0 +1,45 @@ +module.exports = { + config: { + type: 'scatter', + data: { + datasets: [{ + data: [{x: 1, y: 1}, {x: 48, y: 1}] + }] + }, + options: { + events: ['click'], + interaction: { + mode: 'nearest', + intersect: false + }, + plugins: { + tooltip: true, + legend: false + }, + scales: { + x: { + min: 5, + max: 50 + }, + y: { + min: 0, + max: 2 + } + }, + layout: { + padding: 50 + } + } + }, + options: { + spriteText: true, + canvas: { + width: 256, + height: 256 + }, + async run(chart) { + const point = chart.getDatasetMeta(0).data[0]; + await jasmine.triggerMouseEvent(chart, 'click', {y: point.y, x: chart.chartArea.left}); + } + } +}; diff --git a/test/fixtures/core.interaction/nearest-point-behind-scale.png b/test/fixtures/core.interaction/nearest-point-behind-scale.png new file mode 100644 index 00000000000..42d92874d51 Binary files /dev/null and b/test/fixtures/core.interaction/nearest-point-behind-scale.png differ diff --git a/test/specs/core.interaction.tests.js b/test/specs/core.interaction.tests.js index a3ce810db7f..f3e27aacb73 100644 --- a/test/specs/core.interaction.tests.js +++ b/test/specs/core.interaction.tests.js @@ -1,7 +1,6 @@ -// Tests of the interaction handlers in Core.Interaction - -// Test the rectangle element describe('Core.Interaction', function() { + describe('auto', jasmine.fixture.specs('core.interaction')); + describe('point mode', function() { beforeEach(function() { this.chart = window.acquireChart({