Skip to content

Commit 75c70b3

Browse files
author
wfr
committed
Fix 'reverse' -> 'reversed' everywhere, extend tests slightly
1 parent deff70e commit 75c70b3

3 files changed

Lines changed: 45 additions & 10 deletions

File tree

src/traces/sankey/plot.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -194,13 +194,13 @@ module.exports = function plot(gd, calcData) {
194194
hoverCenterY = (link.y0 + link.y1) / 2;
195195
}
196196
var vertical = link.trace.orientation === 'v';
197-
var reverse = link.trace.direction === 'reverse';
197+
var reversed = link.trace.direction === 'reversed';
198198
var center = [hoverCenterX, hoverCenterY];
199199
// Vertical orientation transposes x/y to match the group transform.
200200
if(vertical) center.reverse();
201-
// reverse direction additionally mirrors the flow axis (matching the translate).
202-
if(vertical && reverse) center[1] = d.parent.height - center[1];
203-
if(!vertical && reverse) center[0] = d.parent.width - center[0];
201+
// reversed direction additionally mirrors the flow axis (matching the translate).
202+
if(vertical && reversed) center[1] = d.parent.height - center[1];
203+
if(!vertical && reversed) center[0] = d.parent.width - center[0];
204204
center[0] += d.parent.translateX;
205205
center[1] += d.parent.translateY;
206206
return center;

src/traces/sankey/select.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ module.exports = function selectPoints(searchInfo, selectionTester) {
88
var model = fullData._sankey;
99
var nodes = model.graph.nodes;
1010
var vertical = fullData.orientation === 'v';
11-
var reverse = fullData.direction === 'reverse';
11+
var reversed = fullData.direction === 'reversed';
1212

1313
for(var i = 0; i < nodes.length; i++) {
1414
var node = nodes[i];
@@ -20,14 +20,14 @@ module.exports = function selectPoints(searchInfo, selectionTester) {
2020

2121
// Mirror/swap to match the group transform applied in render.js (sankeyTransform):
2222
// h + forward: (cx, cy)
23-
// h + reverse: (width - cx, cy) -> matrix(-1 0 0 1) + translate(width, 0)
23+
// h + reversed: (width - cx, cy) -> matrix(-1 0 0 1) + translate(width, 0)
2424
// v + forward: (cy, cx) -> matrix( 0 1 1 0) (swap x/y)
25-
// v + reverse: (cy, height - cx) -> matrix( 0 -1 1 0) + translate(0, height)
25+
// v + reversed: (cy, height - cx) -> matrix( 0 -1 1 0) + translate(0, height)
2626
var pos;
2727
if(vertical) {
28-
pos = [cy, reverse ? model.height - cx : cx];
28+
pos = [cy, reversed ? model.height - cx : cx];
2929
} else {
30-
pos = [reverse ? model.width - cx : cx, cy];
30+
pos = [reversed ? model.width - cx : cx, cy];
3131
}
3232

3333
if(selectionTester && selectionTester.contains(pos, false, i, searchInfo)) {

test/jasmine/tests/sankey_test.js

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -979,10 +979,12 @@ describe('sankey tests', function () {
979979
})
980980
.then(done, done.fail);
981981
});
982-
982+
983983
it('@noCI should position hover labels correctly - horizontal, reversed', function (done) {
984984
var gd = createGraphDiv();
985985
var forwardOffsetX;
986+
var forwardPosY;
987+
var forwardLinkLeft;
986988

987989
function plotWith(direction) {
988990
var fig = Lib.extendDeep({}, mock);
@@ -1001,6 +1003,8 @@ describe('sankey tests', function () {
10011003
var linkRect = rectForLink('Thermal generation', 'Losses');
10021004
var pos = d3Select('.hovertext').node().getBoundingClientRect();
10031005
forwardOffsetX = pos.x - (linkRect.left + linkRect.width / 2);
1006+
forwardPosY = pos.y;
1007+
forwardLinkLeft = linkRect.left;
10041008

10051009
return plotWith('reversed');
10061010
})
@@ -1029,13 +1033,29 @@ describe('sankey tests', function () {
10291033
-1.5,
10301034
'label offset from its link is direction-independent'
10311035
);
1036+
1037+
// matrix(-1 0 0 1 0 0) mirrors along x only.
1038+
expect(pos.y).toBeCloseTo(
1039+
forwardPosY,
1040+
-1.5,
1041+
'y position is unaffected by direction'
1042+
);
1043+
1044+
// Guard against a vacuously passing test: the offset above is
1045+
// only meaningful if the link actually moved.
1046+
expect(Math.abs(linkRect.left - forwardLinkLeft)).toBeGreaterThan(
1047+
50,
1048+
'link is actually mirrored along x'
1049+
);
10321050
})
10331051
.then(done, done.fail);
10341052
});
10351053

10361054
it('@noCI should position hover labels correctly - vertical, reversed', function (done) {
10371055
var gd = createGraphDiv();
10381056
var forwardOffsetY;
1057+
var forwardPosX;
1058+
var forwardLinkTop;
10391059

10401060
function plotWith(direction) {
10411061
var fig = Lib.extendDeep({}, mock);
@@ -1050,6 +1070,8 @@ describe('sankey tests', function () {
10501070
var linkRect = rectForLink('Thermal generation', 'Losses');
10511071
var pos = d3Select('.hovertext').node().getBoundingClientRect();
10521072
forwardOffsetY = pos.y - (linkRect.top + linkRect.height / 2);
1073+
forwardPosX = pos.x;
1074+
forwardLinkTop = linkRect.top;
10531075

10541076
return plotWith('reversed');
10551077
})
@@ -1070,6 +1092,19 @@ describe('sankey tests', function () {
10701092
-1.5,
10711093
'label offset from its link is direction-independent'
10721094
);
1095+
1096+
// matrix(0 -1 1 0 0 0) maps data y to screen x (unmirrored)
1097+
// and mirrors along screen y only.
1098+
expect(pos.x).toBeCloseTo(
1099+
forwardPosX,
1100+
-1.5,
1101+
'x position is unaffected by direction'
1102+
);
1103+
1104+
expect(Math.abs(linkRect.top - forwardLinkTop)).toBeGreaterThan(
1105+
50,
1106+
'link is actually mirrored along y'
1107+
);
10731108
})
10741109
.then(done, done.fail);
10751110
});

0 commit comments

Comments
 (0)