From fb601dc21f66d4e9d69403c23761bfc6104f6fd9 Mon Sep 17 00:00:00 2001 From: Ricky Reusser Date: Thu, 14 Jan 2021 09:45:46 -0800 Subject: [PATCH 1/3] Fire unhover when dragging plot --- src/components/dragelement/unhover.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/dragelement/unhover.js b/src/components/dragelement/unhover.js index 3f4724f1189..9a892e87ac0 100644 --- a/src/components/dragelement/unhover.js +++ b/src/components/dragelement/unhover.js @@ -44,7 +44,7 @@ unhover.raw = function raw(gd, evt) { fullLayout._hoverlayer.selectAll('circle').remove(); gd._hoverdata = undefined; - if(evt.target && oldhoverdata) { + if((evt.target || gd._dragged) && oldhoverdata) { gd.emit('plotly_unhover', { event: evt, points: oldhoverdata From 2f25125eca291b67b973f8e2508ba929600b059b Mon Sep 17 00:00:00 2001 From: Ricky Reusser Date: Mon, 18 Jan 2021 13:10:56 -0800 Subject: [PATCH 2/3] Pass event to unhover --- src/components/dragelement/index.js | 2 +- src/components/dragelement/unhover.js | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/components/dragelement/index.js b/src/components/dragelement/index.js index 03dd3489d50..a917eea08ed 100644 --- a/src/components/dragelement/index.js +++ b/src/components/dragelement/index.js @@ -180,7 +180,7 @@ dragElement.init = function init(options) { if(dx || dy) { gd._dragged = true; - dragElement.unhover(gd); + dragElement.unhover(gd, e); } if(gd._dragged && options.moveFn && !rightClick) { diff --git a/src/components/dragelement/unhover.js b/src/components/dragelement/unhover.js index 9a892e87ac0..9cf687aae1a 100644 --- a/src/components/dragelement/unhover.js +++ b/src/components/dragelement/unhover.js @@ -34,7 +34,7 @@ unhover.raw = function raw(gd, evt) { var oldhoverdata = gd._hoverdata; if(!evt) evt = {}; - if(evt.target && + if(evt.target && !gd._dragged && Events.triggerHandler(gd, 'plotly_beforehover', evt) === false) { return; } @@ -44,7 +44,7 @@ unhover.raw = function raw(gd, evt) { fullLayout._hoverlayer.selectAll('circle').remove(); gd._hoverdata = undefined; - if((evt.target || gd._dragged) && oldhoverdata) { + if(evt.target && oldhoverdata) { gd.emit('plotly_unhover', { event: evt, points: oldhoverdata From a2f7bd591292ba0191edabb3ca0cce92db742cb5 Mon Sep 17 00:00:00 2001 From: Ricky Reusser Date: Mon, 25 Jan 2021 17:38:51 -0800 Subject: [PATCH 3/3] Add a test for drag triggering unhover --- test/jasmine/tests/hover_label_test.js | 49 ++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/test/jasmine/tests/hover_label_test.js b/test/jasmine/tests/hover_label_test.js index f98b9af9f5c..22aee441ae6 100644 --- a/test/jasmine/tests/hover_label_test.js +++ b/test/jasmine/tests/hover_label_test.js @@ -3632,6 +3632,55 @@ describe('hover updates', function() { }) .then(done, done.fail); }); + + it('drag should trigger unhover', function(done) { + var data = [{y: [1]}]; + + var layout = { + hovermode: 'x', + width: 400, + height: 200, + margin: {l: 0, t: 0, r: 0, b: 0}, + showlegend: false + }; + + var gd = createGraphDiv(); + + var hoverHandler = jasmine.createSpy('hover'); + var unhoverHandler = jasmine.createSpy('unhover'); + + var hoverPt = [200, 100]; + var dragPt = [210, 100]; + + function hover() { + mouseEvent('mousemove', hoverPt[0], hoverPt[1]); + Lib.clearThrottle(); + } + + function drag() { + mouseEvent('mousedown', hoverPt[0], hoverPt[1]); + mouseEvent('mousemove', dragPt[0], dragPt[1]); + mouseEvent('mouseup', dragPt[0], dragPt[1]); + Lib.clearThrottle(); + } + + Plotly.react(gd, data, layout) + .then(function() { + gd.on('plotly_hover', hoverHandler); + gd.on('plotly_unhover', unhoverHandler); + }) + .then(hover) + .then(function() { + expect(hoverHandler).toHaveBeenCalled(); + expect(unhoverHandler).not.toHaveBeenCalled(); + }) + .then(drag) + .then(function() { + expect(hoverHandler).toHaveBeenCalled(); + expect(unhoverHandler).toHaveBeenCalled(); + }) + .then(done, done.fail); + }); }); describe('Test hover label custom styling:', function() {