@@ -77,7 +77,7 @@ exports.hover = function hover(gd, evt, subplot, noHoverEvent) {
77
77
} ;
78
78
79
79
/*
80
- * Draw a single hover item in a pre-existing svg container somewhere
80
+ * Draw a single hover item or an array of hover item in a pre-existing svg container somewhere
81
81
* hoverItem should have keys:
82
82
* - x and y (or x0, x1, y0, and y1):
83
83
* the pixel position to mark, relative to opts.container
@@ -104,62 +104,15 @@ exports.hover = function hover(gd, evt, subplot, noHoverEvent) {
104
104
* - outerContainer:
105
105
* normally a parent of `container`, sets the bounding box to use to
106
106
* constrain the hover label and determine whether to show it on the left or right
107
+ * opts can have optional keys:
108
+ * - anchorIndex:
109
+ the index of the hover item used as an anchor for positioning.
110
+ The other hover items will be pushed up or down to prevent overlap.
107
111
*/
108
- exports . loneHover = function loneHover ( hoverItem , opts ) {
109
- var pointData = {
110
- color : hoverItem . color || Color . defaultLine ,
111
- x0 : hoverItem . x0 || hoverItem . x || 0 ,
112
- x1 : hoverItem . x1 || hoverItem . x || 0 ,
113
- y0 : hoverItem . y0 || hoverItem . y || 0 ,
114
- y1 : hoverItem . y1 || hoverItem . y || 0 ,
115
- xLabel : hoverItem . xLabel ,
116
- yLabel : hoverItem . yLabel ,
117
- zLabel : hoverItem . zLabel ,
118
- text : hoverItem . text ,
119
- name : hoverItem . name ,
120
- idealAlign : hoverItem . idealAlign ,
121
-
122
- // optional extra bits of styling
123
- borderColor : hoverItem . borderColor ,
124
- fontFamily : hoverItem . fontFamily ,
125
- fontSize : hoverItem . fontSize ,
126
- fontColor : hoverItem . fontColor ,
127
- nameLength : hoverItem . nameLength ,
128
- textAlign : hoverItem . textAlign ,
129
-
130
- // filler to make createHoverText happy
131
- trace : hoverItem . trace || {
132
- index : 0 ,
133
- hoverinfo : ''
134
- } ,
135
- xa : { _offset : 0 } ,
136
- ya : { _offset : 0 } ,
137
- index : 0 ,
138
-
139
- hovertemplate : hoverItem . hovertemplate || false ,
140
- eventData : hoverItem . eventData || false ,
141
- hovertemplateLabels : hoverItem . hovertemplateLabels || false ,
142
- } ;
143
-
144
- var container3 = d3 . select ( opts . container ) ;
145
- var outerContainer3 = opts . outerContainer ?
146
- d3 . select ( opts . outerContainer ) : container3 ;
147
-
148
- var fullOpts = {
149
- hovermode : 'closest' ,
150
- rotateLabels : false ,
151
- bgColor : opts . bgColor || Color . background ,
152
- container : container3 ,
153
- outerContainer : outerContainer3
154
- } ;
155
- var hoverLabel = createHoverText ( [ pointData ] , fullOpts , opts . gd ) ;
156
- alignHoverText ( hoverLabel , fullOpts . rotateLabels ) ;
157
-
158
- return hoverLabel . node ( ) ;
159
- } ;
160
-
161
- exports . multiHovers = function multiHovers ( hoverItems , opts ) {
112
+ exports . loneHover = function loneHover ( hoverItems , opts ) {
113
+ var multiHover = true ;
162
114
if ( ! Array . isArray ( hoverItems ) ) {
115
+ multiHover = false ;
163
116
hoverItems = [ hoverItems ] ;
164
117
}
165
118
@@ -200,7 +153,6 @@ exports.multiHovers = function multiHovers(hoverItems, opts) {
200
153
} ;
201
154
} ) ;
202
155
203
-
204
156
var container3 = d3 . select ( opts . container ) ;
205
157
var outerContainer3 = opts . outerContainer ? d3 . select ( opts . outerContainer ) : container3 ;
206
158
@@ -239,7 +191,7 @@ exports.multiHovers = function multiHovers(hoverItems, opts) {
239
191
240
192
alignHoverText ( hoverLabel , fullOpts . rotateLabels ) ;
241
193
242
- return hoverLabel ;
194
+ return multiHover ? hoverLabel : hoverLabel . node ( ) ;
243
195
} ;
244
196
245
197
// The actual implementation is here:
0 commit comments