From 08e5a5073b9d753849be42f146a860616b62bdf3 Mon Sep 17 00:00:00 2001 From: Antoine Roy-Gobeil Date: Thu, 21 Feb 2019 12:36:26 -0500 Subject: [PATCH 1/2] properly set coordinates of node's origin prior to drag operation --- src/traces/sankey/render.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/traces/sankey/render.js b/src/traces/sankey/render.js index 88b27dbdafc..170b89d94e3 100644 --- a/src/traces/sankey/render.js +++ b/src/traces/sankey/render.js @@ -477,8 +477,8 @@ function attachDragHandler(sankeyNode, sankeyLink, callbacks) { var dragBehavior = d3.behavior.drag() .origin(function(d) { return { - x: d.node.x0, - y: d.node.y0 + x: d.node.x0 + d.visibleWidth / 2, + y: d.node.y0 + d.visibleHeight / 2 }; }) From 1f73366c52cecf8fb47a4aee26b7b72e2284e7f2 Mon Sep 17 00:00:00 2001 From: Antoine Roy-Gobeil Date: Thu, 21 Feb 2019 16:21:39 -0500 Subject: [PATCH 2/2] sankey: test dragging node --- test/jasmine/tests/sankey_test.js | 52 +++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/test/jasmine/tests/sankey_test.js b/test/jasmine/tests/sankey_test.js index 6471906d6e1..2fe954579b7 100644 --- a/test/jasmine/tests/sankey_test.js +++ b/test/jasmine/tests/sankey_test.js @@ -14,6 +14,7 @@ var createGraphDiv = require('../assets/create_graph_div'); var destroyGraphDiv = require('../assets/destroy_graph_div'); var failTest = require('../assets/fail_test'); var mouseEvent = require('../assets/mouse_event'); +var getNodeCoords = require('../assets/get_node_coords'); var assertHoverLabelStyle = require('../assets/custom_assertions').assertHoverLabelStyle; var supplyAllDefaults = require('../assets/supply_defaults'); var defaultColors = require('@src/components/color/attributes').defaults; @@ -905,6 +906,57 @@ describe('sankey tests', function() { }); }); + describe('Test drag interactions:', function() { + var gd; + + beforeEach(function() { + gd = createGraphDiv(); + }); + + afterEach(destroyGraphDiv); + + function _drag(fromX, fromY, dX, dY, delay) { + var toX = fromX + dX; + var toY = fromY + dY; + + return new Promise(function(resolve) { + mouseEvent('mousemove', fromX, fromY); + mouseEvent('mousedown', fromX, fromY); + mouseEvent('mousemove', toX, toY); + + setTimeout(function() { + mouseEvent('mouseup', toX, toY); + resolve(); + }, delay); + }); + } + + it('should change the position of a node', function(done) { + var fig = Lib.extendDeep({}, mock); + var nodes; + var node; + var position; + var nodePos = [404, 302]; + var move = [0, -100]; + + Plotly.plot(gd, fig) + .then(function() { + nodes = document.getElementsByClassName('sankey-node'); + node = nodes.item(4); // Selecting node with label 'Solid' + position = getNodeCoords(node); + return _drag(nodePos[0], nodePos[1], move[0], move[1], 500); + }) + .then(function() { + nodes = document.getElementsByClassName('sankey-node'); + node = nodes.item(nodes.length - 1); // Dragged node is now the last one + var newPosition = getNodeCoords(node); + expect(newPosition.x).toBeCloseTo(position.x + move[0]); + expect(newPosition.y).toBeCloseTo(position.y + move[1]); + }) + .catch(failTest) + .then(done); + }); + }); it('emits a warning if node.pad is too large', function(done) { var gd = createGraphDiv(); var mockCopy = Lib.extendDeep({}, mock);