Skip to content

Commit faccfc6

Browse files
committed
validate partial ranges and set autorange true for invalid partial ranges
1 parent 5d4f665 commit faccfc6

File tree

3 files changed

+50
-10
lines changed

3 files changed

+50
-10
lines changed

src/plots/cartesian/axis_defaults.js

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -97,11 +97,28 @@ module.exports = function handleAxisDefaults(containerIn, containerOut, coerce,
9797
var range = coerce('range');
9898

9999
var autorangeDflt = containerOut.getAutorangeDflt(range, options);
100+
var autorange = coerce('autorange', autorangeDflt);
101+
var autorangeTrue;
102+
103+
// validate range and set autorange true for invalid partial ranges
104+
if(range && (
105+
(range[0] === null && range[1] === null) ||
106+
(range[0] !== null && (autorange === 'min' || autorange === 'max reversed')) ||
107+
(range[1] !== null && (autorange === 'max' || autorange === 'min reversed'))
108+
)) {
109+
range = undefined;
110+
delete containerOut.range;
111+
containerOut.autorange = true;
112+
autorangeTrue = true;
113+
}
100114

101-
var autoRange = coerce('autorange', autorangeDflt);
102-
if(autoRange) {
103-
handleAutorangeOptionsDefaults(coerce, autoRange, range);
115+
if(!autorangeTrue) {
116+
autorangeDflt = containerOut.getAutorangeDflt(range, options);
117+
autorange = coerce('autorange', autorangeDflt);
118+
}
104119

120+
if(autorange) {
121+
handleAutorangeOptionsDefaults(coerce, autorange, range);
105122
if(axType === 'linear' || axType === '-') coerce('rangemode');
106123
}
107124

src/plots/polar/layout_defaults.js

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -82,11 +82,29 @@ function handleDefaults(contIn, contOut, coerce, opts) {
8282
var range = coerceAxis('range');
8383

8484
var autorangeDflt = axOut.getAutorangeDflt(range);
85+
var autorange = coerceAxis('autorange', autorangeDflt);
86+
var autorangeTrue;
87+
88+
// validate range and set autorange true for invalid partial ranges
89+
if(range && (
90+
(range[0] === null && range[1] === null) ||
91+
(range[0] !== null && (autorange === 'min' || autorange === 'max reversed')) ||
92+
(range[1] !== null && (autorange === 'max' || autorange === 'min reversed'))
93+
)) {
94+
range = undefined;
95+
delete axOut.range;
96+
axOut.autorange = true;
97+
autorangeTrue = true;
98+
}
99+
100+
if(!autorangeTrue) {
101+
autorangeDflt = axOut.getAutorangeDflt(range);
102+
autorange = coerceAxis('autorange', autorangeDflt);
103+
}
85104

86-
var autoRange = coerceAxis('autorange', autorangeDflt);
87-
axIn.autorange = autoRange;
88-
if(autoRange) {
89-
handleAutorangeOptionsDefaults(coerceAxis, autoRange, range);
105+
axIn.autorange = autorange;
106+
if(autorange) {
107+
handleAutorangeOptionsDefaults(coerceAxis, autorange, range);
90108

91109
if(axType === 'linear' || axType === '-') coerceAxis('rangemode');
92110
if(axOut.isReversed()) axOut._m = -1;

test/jasmine/tests/axes_test.js

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -719,12 +719,17 @@ describe('Test axes', function() {
719719
layoutIn = {
720720
xaxis: { range: 'not-gonna-work' },
721721
xaxis2: { range: [1] },
722+
xaxis3: { range: [null, null] },
722723
yaxis: { range: ['a', 2] },
723724
yaxis2: { range: [1, 'b'] },
724-
yaxis3: { range: [undefined, {}] }
725+
yaxis3: { range: [undefined, {}] },
726+
yaxis4: { range: [1, null], autorange: 'min' }, // second range is null not first
727+
yaxis5: { range: [null, 2], autorange: 'max' }, // first range is null not second
728+
yaxis6: { range: [1, null], autorange: 'max reversed' }, // second range is null not first
729+
yaxis7: { range: [null, 2], autorange: 'min reversed' }, // first range is null not second
725730
};
726-
layoutOut._subplots.cartesian.push('x2y2', 'xy3');
727-
layoutOut._subplots.yaxis.push('x2', 'y2', 'y3');
731+
layoutOut._subplots.cartesian.push('x2y2', 'xy3', 'x3y4', 'x3y5', 'x3y6', 'x3y7');
732+
layoutOut._subplots.yaxis.push('x2', 'x3', 'y2', 'y3', 'y4', 'y5', 'y6', 'y7');
728733

729734
supplyLayoutDefaults(layoutIn, layoutOut, fullData);
730735

0 commit comments

Comments
 (0)