Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 680d8bd

Browse files
committed
handle splom
1 parent 6497363 commit 680d8bd

File tree

2 files changed

+80
-10
lines changed

2 files changed

+80
-10
lines changed

src/components/fx/hover.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -566,7 +566,11 @@ function _hover(gd, evt, subplot, noHoverEvent, eventTarget) {
566566
if(trace._module && trace._module.hoverPoints) {
567567
var newPoints = trace._module.hoverPoints(pointData, xval, yval, _mode, {
568568
finiteRange: true,
569-
hoverLayer: fullLayout._hoverlayer
569+
hoverLayer: fullLayout._hoverlayer,
570+
571+
// options for splom when hovering on same axis
572+
hoversameaxis: hoversameaxis,
573+
gd: gd
570574
});
571575

572576
if(newPoints) {

src/traces/splom/hover.js

Lines changed: 75 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,64 @@
22

33
var helpers = require('./helpers');
44
var calcHover = require('../scattergl/hover').calcHover;
5+
var getFromId = require('../../plots/cartesian/axes').getFromId;
6+
var extendFlat = require('../../lib/extend').extendFlat;
57

6-
function hoverPoints(pointData, xval, yval) {
8+
function hoverPoints(pointData, xval, yval, hovermode, opts) {
9+
if(!opts) opts = {};
10+
11+
var hovermodeHasX = (hovermode || '').charAt(0) === 'x';
12+
var hovermodeHasY = (hovermode || '').charAt(0) === 'y';
13+
14+
var xpx = pointData.xa.c2p(xval);
15+
var ypx = pointData.ya.c2p(yval);
16+
17+
var points = _hoverPoints(pointData, xpx, ypx);
18+
19+
if(opts.hoversameaxis && (hovermodeHasX || hovermodeHasY)) {
20+
var _xpx = points[0]._xpx;
21+
var _ypx = points[0]._ypx;
22+
23+
if(
24+
(hovermodeHasX && _xpx !== undefined) ||
25+
(hovermodeHasY && _ypx !== undefined)
26+
) {
27+
var subplotsWith = (
28+
hovermodeHasX ?
29+
pointData.xa :
30+
pointData.ya
31+
)._subplotsWith;
32+
33+
var gd = opts.gd;
34+
35+
var _pointData = extendFlat({}, pointData);
36+
37+
for(var i = 0; i < subplotsWith.length; i++) {
38+
var spId = subplotsWith[i];
39+
40+
if(hovermodeHasY) {
41+
_pointData.xa = getFromId(gd, spId, 'x');
42+
} else { // hovermodeHasX
43+
_pointData.ya = getFromId(gd, spId, 'y');
44+
}
45+
46+
var newPoints = _hoverPoints(_pointData, _xpx, _ypx, hovermodeHasX, hovermodeHasY);
47+
48+
points = points.concat(newPoints);
49+
}
50+
}
51+
}
52+
53+
return points;
54+
}
55+
56+
function _hoverPoints(pointData, xpx, ypx, hoversameaxisX, hoversameaxisY) {
757
var cd = pointData.cd;
858
var trace = cd[0].trace;
959
var scene = pointData.scene;
1060
var cdata = scene.matrixOptions.cdata;
1161
var xa = pointData.xa;
1262
var ya = pointData.ya;
13-
var xpx = xa.c2p(xval);
14-
var ypx = ya.c2p(yval);
1563
var maxDistance = pointData.distance;
1664

1765
var xi = helpers.getDimIndex(trace, xa);
@@ -21,19 +69,34 @@ function hoverPoints(pointData, xval, yval) {
2169
var x = cdata[xi];
2270
var y = cdata[yi];
2371

24-
var id, dxy;
72+
var id, dxy, _xpx, _ypx;
2573
var minDist = maxDistance;
2674

2775
for(var i = 0; i < x.length; i++) {
2876
var ptx = x[i];
2977
var pty = y[i];
30-
var dx = xa.c2p(ptx) - xpx;
31-
var dy = ya.c2p(pty) - ypx;
32-
var dist = Math.sqrt(dx * dx + dy * dy);
78+
var thisXpx = xa.c2p(ptx);
79+
var thisYpx = ya.c2p(pty);
80+
81+
var dx = thisXpx - xpx;
82+
var dy = thisYpx - ypx;
83+
var dist = 0;
84+
85+
var pick = false;
86+
if(hoversameaxisX) {
87+
if(dx === 0) pick = true;
88+
} else if(hoversameaxisY) {
89+
if(dy === 0) pick = true;
90+
} else {
91+
dist = Math.sqrt(dx * dx + dy * dy);
92+
if(dist < minDist) pick = true;
93+
}
3394

34-
if(dist < minDist) {
95+
if(pick) {
3596
minDist = dxy = dist;
3697
id = i;
98+
_xpx = thisXpx;
99+
_ypx = thisYpx;
37100
}
38101
}
39102

@@ -43,7 +106,10 @@ function hoverPoints(pointData, xval, yval) {
43106

44107
if(id === undefined) return [pointData];
45108

46-
return [calcHover(pointData, x, y, trace)];
109+
var out = calcHover(pointData, x, y, trace);
110+
out._xpx = _xpx;
111+
out._ypx = _ypx;
112+
return [out];
47113
}
48114

49115
module.exports = {

0 commit comments

Comments
 (0)