Skip to content

Commit 74e8bb9

Browse files
authored
Merge pull request #3764 from plotly/dry-hover
DRY loneHover routine
2 parents df35b38 + 9e4b128 commit 74e8bb9

File tree

4 files changed

+11
-60
lines changed

4 files changed

+11
-60
lines changed

src/components/fx/hover.js

+9-57
Original file line numberDiff line numberDiff line change
@@ -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:

src/components/fx/index.js

-1
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,6 @@ module.exports = {
4646
unhover: dragElement.unhover,
4747

4848
loneHover: hoverModule.loneHover,
49-
multiHovers: hoverModule.multiHovers,
5049
loneUnhover: loneUnhover,
5150

5251
click: require('./click')

src/traces/parcats/parcats.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -969,7 +969,7 @@ function mouseoverCategoryBand(bandViewModel) {
969969
}
970970

971971
if(hoverItems) {
972-
Fx.multiHovers(hoverItems, {
972+
Fx.loneHover(hoverItems, {
973973
container: fullLayout._hoverlayer.node(),
974974
outerContainer: fullLayout._paper.node(),
975975
gd: gd

src/traces/sankey/plot.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -221,7 +221,7 @@ module.exports = function plot(gd, calcData) {
221221
});
222222
}
223223

224-
var tooltips = Fx.multiHovers(hoverItems, {
224+
var tooltips = Fx.loneHover(hoverItems, {
225225
container: fullLayout._hoverlayer.node(),
226226
outerContainer: fullLayout._paper.node(),
227227
gd: gd,

0 commit comments

Comments
 (0)