Skip to content

Commit 5db82e6

Browse files
committed
ensure unhover event is not emitted if beforehover handler returns false
1 parent 50fce27 commit 5db82e6

1 file changed

Lines changed: 7 additions & 4 deletions

File tree

‎src/components/dragelement/unhover.js‎

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,14 @@ unhover.wrapped = function(gd, evt, subplot) {
1616
throttle.clear(gd._fullLayout._uid + hoverConstants.HOVERID);
1717
}
1818

19-
var oldhoverdata = gd._hoverdata;
19+
const oldhoverdata = gd._hoverdata;
2020

21-
unhover.raw(gd, evt, subplot);
21+
const shouldEmitUnhover = unhover.raw(gd, evt, subplot);
2222

2323
// Special handling for `hoveranywhere`, to ensure we emit exactly one unhover event
2424
// when the cursor leaves the plot area.
2525
// gd._hoverAnywhereActive is set in fx/hover.js when we emit an empty-space hover event.
26-
if(gd._hoverAnywhereActive) {
26+
if(shouldEmitUnhover && gd._hoverAnywhereActive) {
2727
gd._hoverAnywhereActive = false;
2828

2929
// Make sure hoveranywhere is still enabled
@@ -38,14 +38,16 @@ unhover.wrapped = function(gd, evt, subplot) {
3838

3939

4040
// remove hover effects on mouse out, and emit unhover event
41+
// returns false if unhover was skipped due to the plotly_beforehover handler returning false;
42+
// returns true otherwise
4143
unhover.raw = function raw(gd, evt) {
4244
var fullLayout = gd._fullLayout;
4345
var oldhoverdata = gd._hoverdata;
4446

4547
if(!evt) evt = {};
4648
if(evt.target && !gd._dragged &&
4749
Events.triggerHandler(gd, 'plotly_beforehover', evt) === false) {
48-
return;
50+
return false;
4951
}
5052

5153
fullLayout._hoverlayer.selectAll('g').remove();
@@ -59,4 +61,5 @@ unhover.raw = function raw(gd, evt) {
5961
points: oldhoverdata
6062
});
6163
}
64+
return true;
6265
};

0 commit comments

Comments
 (0)