Skip to content

Commit b15a4c9

Browse files
committed
make dragmode -> scene.dragmode logic more robust
1 parent 8a57ba1 commit b15a4c9

File tree

2 files changed

+16
-14
lines changed

2 files changed

+16
-14
lines changed

src/plots/gl3d/layout/defaults.js

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
'use strict';
1111

12+
var Lib = require('../../../lib');
1213
var Color = require('../../../components/color');
1314

1415
var handleSubplotDefaults = require('../../subplot_defaults');
@@ -17,20 +18,14 @@ var supplyGl3dAxisLayoutDefaults = require('./axis_defaults');
1718

1819

1920
module.exports = function supplyLayoutDefaults(layoutIn, layoutOut, fullData) {
20-
var hasNon3D = (
21-
layoutOut._has('cartesian') ||
22-
layoutOut._has('geo') ||
23-
layoutOut._has('gl2d') ||
24-
layoutOut._has('pie') ||
25-
layoutOut._has('ternary')
26-
);
21+
var hasNon3D = layoutOut._basePlotModules.length > 1;
2722

2823
// some layout-wide attribute are used in all scenes
2924
// if 3D is the only visible plot type
3025
function getDfltFromLayout(attr) {
3126
if(hasNon3D) return;
3227

33-
var isValid = layoutAttributes[attr].values.indexOf(layoutIn[attr]) !== -1;
28+
var isValid = Lib.validate(layoutIn[attr], layoutAttributes[attr]);
3429
if(isValid) return layoutIn[attr];
3530
}
3631

test/jasmine/tests/gl3dlayout_test.js

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
var Gl3d = require('@src/plots/gl3d');
2-
var Plots = require('@src/plots/plots');
32

43
var tinycolor = require('tinycolor2');
54
var Color = require('@src/components/color');
@@ -14,9 +13,7 @@ describe('Test Gl3d layout defaults', function() {
1413
var supplyLayoutDefaults = Gl3d.supplyLayoutDefaults;
1514

1615
beforeEach(function() {
17-
layoutOut = {
18-
_has: Plots._hasPlotType
19-
};
16+
layoutOut = { _basePlotModules: ['gl3d'] };
2017

2118
// needs a scene-ref in a trace in order to be detected
2219
fullData = [ { type: 'scatter3d', scene: 'scene' }];
@@ -174,8 +171,13 @@ describe('Test Gl3d layout defaults', function() {
174171
expect(layoutOut.scene.dragmode)
175172
.toBe('orbit', 'to user layout val if valid and 3d only');
176173

174+
layoutIn = { scene: {}, dragmode: 'invalid' };
175+
supplyLayoutDefaults(layoutIn, layoutOut, fullData);
176+
expect(layoutOut.scene.dragmode)
177+
.toBe('turntable', 'to turntable if invalid and 3d only');
178+
177179
layoutIn = { scene: {}, dragmode: 'orbit' };
178-
layoutOut._basePlotModules = [{ name: 'cartesian' }];
180+
layoutOut._basePlotModules.push({ name: 'cartesian' });
179181
supplyLayoutDefaults(layoutIn, layoutOut, fullData);
180182
expect(layoutOut.scene.dragmode)
181183
.toBe('turntable', 'to default if not 3d only');
@@ -202,8 +204,13 @@ describe('Test Gl3d layout defaults', function() {
202204
expect(layoutOut.scene.hovermode)
203205
.toBe(false, 'to user layout val if valid and 3d only');
204206

207+
layoutIn = { scene: {}, hovermode: 'invalid' };
208+
supplyLayoutDefaults(layoutIn, layoutOut, fullData);
209+
expect(layoutOut.scene.hovermode)
210+
.toBe('closest', 'to closest if invalid and 3d only');
211+
205212
layoutIn = { scene: {}, hovermode: false };
206-
layoutOut._basePlotModules = [{ name: 'cartesian' }];
213+
layoutOut._basePlotModules.push({ name: 'cartesian' });
207214
supplyLayoutDefaults(layoutIn, layoutOut, fullData);
208215
expect(layoutOut.scene.hovermode)
209216
.toBe('closest', 'to default if not 3d only');

0 commit comments

Comments
 (0)