@@ -77,7 +77,7 @@ exports.hover = function hover(gd, evt, subplot, noHoverEvent) {
7777} ;
7878
7979/*
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
8181 * hoverItem should have keys:
8282 * - x and y (or x0, x1, y0, and y1):
8383 * the pixel position to mark, relative to opts.container
@@ -104,62 +104,15 @@ exports.hover = function hover(gd, evt, subplot, noHoverEvent) {
104104 * - outerContainer:
105105 * normally a parent of `container`, sets the bounding box to use to
106106 * 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.
107111 */
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 ;
162114 if ( ! Array . isArray ( hoverItems ) ) {
115+ multiHover = false ;
163116 hoverItems = [ hoverItems ] ;
164117 }
165118
@@ -200,7 +153,6 @@ exports.multiHovers = function multiHovers(hoverItems, opts) {
200153 } ;
201154 } ) ;
202155
203-
204156 var container3 = d3 . select ( opts . container ) ;
205157 var outerContainer3 = opts . outerContainer ? d3 . select ( opts . outerContainer ) : container3 ;
206158
@@ -239,7 +191,7 @@ exports.multiHovers = function multiHovers(hoverItems, opts) {
239191
240192 alignHoverText ( hoverLabel , fullOpts . rotateLabels ) ;
241193
242- return hoverLabel ;
194+ return multiHover ? hoverLabel : hoverLabel . node ( ) ;
243195} ;
244196
245197// The actual implementation is here:
0 commit comments