From 9a4158372ef0c3d92dd249a569a5edcd91184e5f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20T=C3=A9treault-Pinard?= Date: Mon, 18 Mar 2019 16:39:28 -0400 Subject: [PATCH] dig in `_scatterStackOpts` to pin orientation:h stacked scatter traces --- src/components/fx/layout_defaults.js | 16 +++++++++------- test/jasmine/tests/fx_test.js | 18 ++++++++++++++++++ 2 files changed, 27 insertions(+), 7 deletions(-) diff --git a/src/components/fx/layout_defaults.js b/src/components/fx/layout_defaults.js index c2400f135a6..9c26962c242 100644 --- a/src/components/fx/layout_defaults.js +++ b/src/components/fx/layout_defaults.js @@ -28,7 +28,7 @@ module.exports = function supplyLayoutDefaults(layoutIn, layoutOut, fullData) { } else { // flag for 'horizontal' plots: // determines the state of the mode bar 'compare' hovermode button - layoutOut._isHoriz = isHoriz(fullData); + layoutOut._isHoriz = isHoriz(fullData, layoutOut); hovermodeDflt = layoutOut._isHoriz ? 'y' : 'x'; } } @@ -55,17 +55,19 @@ module.exports = function supplyLayoutDefaults(layoutIn, layoutOut, fullData) { } }; -function isHoriz(fullData) { - var out = true; +function isHoriz(fullData, fullLayout) { + var stackOpts = fullLayout._scatterStackOpts || {}; for(var i = 0; i < fullData.length; i++) { var trace = fullData[i]; + var subplot = trace.xaxis + trace.yaxis; + var subplotStackOpts = stackOpts[subplot] || {}; + var groupOpts = subplotStackOpts[trace.stackgroup] || {}; - if(trace.orientation !== 'h') { - out = false; - break; + if(trace.orientation !== 'h' && groupOpts.orientation !== 'h') { + return false; } } - return out; + return true; } diff --git a/test/jasmine/tests/fx_test.js b/test/jasmine/tests/fx_test.js index 50b2172c9e9..fbdf6ad0b97 100644 --- a/test/jasmine/tests/fx_test.js +++ b/test/jasmine/tests/fx_test.js @@ -58,6 +58,24 @@ describe('Fx defaults', function() { expect(layoutOut._isHoriz).toBe(true, 'isHoriz to true'); }); + it('should default (cartesian horizontal version, stacked scatter)', function() { + var layoutOut = _supply([{ + orientation: 'h', + stackgroup: '1', + x: [1, 2, 3], + y: [1, 2, 1] + }, { + stackgroup: '1', + x: [1, 2, 3], + y: [1, 2, 1] + }]) + .layout; + + expect(layoutOut.hovermode).toBe('y', 'hovermode to y'); + expect(layoutOut.dragmode).toBe('zoom', 'dragmode to zoom'); + expect(layoutOut._isHoriz).toBe(true, 'isHoriz to true'); + }); + it('should default (gl3d version)', function() { var layoutOut = _supply([{ type: 'scatter3d',