@@ -14,6 +14,7 @@ var Drawing = require('../drawing');
14
14
var Color = require ( '../color' ) ;
15
15
var dragElement = require ( '../dragelement' ) ;
16
16
var Axes = require ( '../../plots/cartesian/axes' ) ;
17
+ var alignPeriod = require ( '../../plots/cartesian/align_period' ) ;
17
18
var Registry = require ( '../../registry' ) ;
18
19
19
20
var helpers = require ( './helpers' ) ;
@@ -779,8 +780,9 @@ function createHoverText(hoverData, opts, gd) {
779
780
var c0 = hoverData [ 0 ] ;
780
781
var xa = c0 . xa ;
781
782
var ya = c0 . ya ;
782
- var commonAttr = hovermode . charAt ( 0 ) === 'y' ? 'yLabel' : 'xLabel' ;
783
- var t0 = c0 [ commonAttr ] ;
783
+ var axLetter = hovermode . charAt ( 0 ) ;
784
+ var v0 = c0 [ axLetter + 'LabelVal' ] ;
785
+ var t0 = c0 [ axLetter + 'Label' ] ;
784
786
var t00 = ( String ( t0 ) || '' ) . split ( ' ' ) [ 0 ] ;
785
787
var outerContainerBB = outerContainer . node ( ) . getBoundingClientRect ( ) ;
786
788
var outerTop = outerContainerBB . top ;
@@ -978,23 +980,26 @@ function createHoverText(hoverData, opts, gd) {
978
980
979
981
function filterClosePoints ( hoverData ) {
980
982
return hoverData . filter ( function ( d ) {
981
- return ( d . zLabelVal !== undefined ) ||
982
- ( d [ commonAttr ] || '' ) . split ( ' ' ) [ 0 ] === t00 ;
983
- } ) ;
984
- }
985
-
986
- function unifiedFilterClosePoints ( hoverData ) {
987
- var out = [ ] ;
988
- var seen = [ ] ;
989
- for ( var i = 0 ; i < hoverData . length ; i ++ ) {
990
- var d = hoverData [ i ] ;
991
- var id = d . cd [ 0 ] . trace . index ;
992
- if ( ! seen [ id ] ) {
993
- seen [ id ] = 1 ;
994
- out . push ( d ) ;
983
+ if ( d . zLabelVal !== undefined ) return true ;
984
+ if ( ( d [ axLetter + 'Label' ] || '' ) . split ( ' ' ) [ 0 ] === t00 ) return true ;
985
+ if ( d . trace [ axLetter + 'period' ] ) {
986
+ var v = d [ axLetter + 'LabelVal' ] ;
987
+ var ax = d [ axLetter + 'a' ] ;
988
+ var trace = { } ;
989
+ trace [ axLetter + 'period' ] = d . trace [ axLetter + 'period' ] ;
990
+ trace [ axLetter + 'period0' ] = d . trace [ axLetter + 'period0' ] ;
991
+
992
+ trace [ axLetter + 'periodalignment' ] = 'start' ;
993
+
994
+ var start = alignPeriod ( trace , ax , axLetter , [ v ] ) [ 0 ] ;
995
+ trace [ axLetter + 'periodalignment' ] = 'end' ;
996
+ var end = alignPeriod ( trace , ax , axLetter , [ v ] ) [ 0 ] ;
997
+
998
+ if ( v0 >= start && v0 <= end ) return true ;
995
999
}
996
- }
997
- return out ;
1000
+
1001
+ return false ;
1002
+ } ) ;
998
1003
}
999
1004
1000
1005
// Show a single hover label
@@ -1003,7 +1008,7 @@ function createHoverText(hoverData, opts, gd) {
1003
1008
container . selectAll ( 'g.hovertext' ) . remove ( ) ;
1004
1009
1005
1010
// similarly to compare mode, we remove the "close but not quite together" points
1006
- if ( ( t0 !== undefined ) && ( c0 . distance <= opts . hoverdistance ) ) hoverData = unifiedFilterClosePoints ( hoverData ) ;
1011
+ if ( ( t0 !== undefined ) && ( c0 . distance <= opts . hoverdistance ) ) hoverData = filterClosePoints ( hoverData ) ;
1007
1012
1008
1013
// Return early if nothing is hovered on
1009
1014
if ( hoverData . length === 0 ) return ;
0 commit comments