Skip to content

Commit 54cc67b

Browse files
committed
make hover AND select use same event data pipeline
1 parent 2fcdb7c commit 54cc67b

File tree

3 files changed

+50
-27
lines changed

3 files changed

+50
-27
lines changed

src/components/fx/helpers.js

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,52 @@ exports.quadrature = function quadrature(dx, dy) {
8585
};
8686
};
8787

88+
/** Fill event data point object for hover and selection.
89+
* Invokes _module.eventData if present.
90+
*
91+
* N.B. note that point 'index' corresponds to input data array index
92+
* whereas 'number' is its post-transform version.
93+
*
94+
* If the hovered/selected pt corresponds to an multiple input points
95+
* (e.g. for histogram and transformed traces), 'pointNumbers` and 'pointIndices'
96+
* are include in the event data.
97+
*
98+
* @param {object} pt
99+
* @param {object} trace
100+
* @param {object} cd
101+
* @return {object}
102+
*/
103+
exports.makeEventData = function makeEventData(pt, trace, cd) {
104+
// hover uses 'index', select uses 'pointNumber'
105+
var pointNumber = 'index' in pt ? pt.index : pt.pointNumber;
106+
107+
var out = {
108+
data: trace._input,
109+
fullData: trace,
110+
curveNumber: trace.index,
111+
pointNumber: pointNumber
112+
};
113+
114+
115+
if(trace._module.eventData) {
116+
out = trace._module.eventData(out, pt, trace, cd, pointNumber);
117+
} else {
118+
if('xVal' in pt) out.x = pt.xVal;
119+
else if('x' in pt) out.x = pt.x;
120+
121+
if('yVal' in pt) out.y = pt.yVal;
122+
else if('y' in pt) out.y = pt.y;
123+
124+
if(pt.xa) out.xaxis = pt.xa;
125+
if(pt.ya) out.yaxis = pt.ya;
126+
if(pt.zLabelVal !== undefined) out.z = pt.zLabelVal;
127+
}
128+
129+
exports.appendArrayPointValue(out, trace, pointNumber);
130+
131+
return out;
132+
};
133+
88134
/** Appends values inside array attributes corresponding to given point number
89135
*
90136
* @param {object} pointData : point data object (gets mutated here)

src/components/fx/hover.js

Lines changed: 1 addition & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -417,26 +417,7 @@ function _hover(gd, evt, subplot, noHoverEvent) {
417417
// other people and send it to the event
418418
for(itemnum = 0; itemnum < hoverData.length; itemnum++) {
419419
var pt = hoverData[itemnum];
420-
421-
var out = {
422-
data: pt.trace._input,
423-
fullData: pt.trace,
424-
curveNumber: pt.trace.index,
425-
pointNumber: pt.index
426-
};
427-
428-
if(pt.trace._module.eventData) out = pt.trace._module.eventData(out, pt);
429-
else {
430-
out.x = pt.xVal;
431-
out.y = pt.yVal;
432-
out.xaxis = pt.xa;
433-
out.yaxis = pt.ya;
434-
435-
if(pt.zLabelVal !== undefined) out.z = pt.zLabelVal;
436-
}
437-
438-
helpers.appendArrayPointValue(out, pt.trace, pt.index);
439-
newhoverdata.push(out);
420+
newhoverdata.push(helpers.makeEventData(pt, pt.trace, pt.cd));
440421
}
441422

442423
gd._hoverdata = newhoverdata;

src/plots/cartesian/select.js

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ var polybool = require('polybooljs');
1313
var polygon = require('../../lib/polygon');
1414
var throttle = require('../../lib/throttle');
1515
var color = require('../../components/color');
16-
var appendArrayPointValue = require('../../components/fx/helpers').appendArrayPointValue;
16+
var makeEventData = require('../../components/fx/helpers').makeEventData;
1717

1818
var axes = require('./axes');
1919
var constants = require('./constants');
@@ -355,15 +355,11 @@ function mergePolygons(list, poly, subtract) {
355355

356356
function fillSelectionItem(selection, searchInfo) {
357357
if(Array.isArray(selection)) {
358+
var cd = searchInfo.cd;
358359
var trace = searchInfo.cd[0].trace;
359360

360361
for(var i = 0; i < selection.length; i++) {
361-
var sel = selection[i];
362-
363-
sel.curveNumber = trace.index;
364-
sel.data = trace._input;
365-
sel.fullData = trace;
366-
appendArrayPointValue(sel, trace, sel.pointNumber);
362+
selection[i] = makeEventData(selection[i], trace, cd);
367363
}
368364
}
369365

0 commit comments

Comments
 (0)