plotly.js
Version:
The open source javascript graphing library that powers plotly
42 lines (35 loc) • 1.46 kB
JavaScript
;
module.exports = function selectPoints(searchInfo, selectionTester) {
var cd = searchInfo.cd;
var selection = [];
var fullData = cd[0].trace;
var model = fullData._sankey;
var nodes = model.graph.nodes;
var vertical = fullData.orientation === 'v';
var reversed = fullData.direction === 'reversed';
for(var i = 0; i < nodes.length; i++) {
var node = nodes[i];
if(node.partOfGroup) continue; // Those are invisible
// Position of node's centroid in the layout frame
var cx = (node.x0 + node.x1) / 2;
var cy = (node.y0 + node.y1) / 2;
// Mirror/swap to match the group transform applied in render.js (sankeyTransform):
// h + forward: (cx, cy)
// h + reversed: (width - cx, cy) -> matrix(-1 0 0 1) + translate(width, 0)
// v + forward: (cy, cx) -> matrix( 0 1 1 0) (swap x/y)
// v + reversed: (cy, height - cx) -> matrix( 0 -1 1 0) + translate(0, height)
var pos;
if(vertical) {
pos = [cy, reversed ? model.height - cx : cx];
} else {
pos = [reversed ? model.width - cx : cx, cy];
}
if(selectionTester && selectionTester.contains(pos, false, i, searchInfo)) {
selection.push({
pointNumber: node.pointNumber
// TODO: add eventData
});
}
}
return selection;
};