Skip to content

Commit be1d805

Browse files
committed
keep _rangeInitial0 & _rangeInitial1 instead of _rangeInitial array
1 parent 4527d5d commit be1d805

File tree

5 files changed

+92
-41
lines changed

5 files changed

+92
-41
lines changed

src/components/modebar/buttons.js

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -271,12 +271,16 @@ function handleCartesian(gd, ev) {
271271
if(val === 'auto') {
272272
aobj[axName + '.autorange'] = true;
273273
} else if(val === 'reset') {
274-
if(ax._rangeInitial === undefined) {
274+
if(ax._rangeInitial0 === undefined && ax._rangeInitial1 === undefined) {
275275
aobj[axName + '.autorange'] = true;
276+
} else if(ax._rangeInitial0 === undefined) {
277+
aobj[axName + '.autorange'] = 'min';
278+
aobj[axName + '.range'] = [null, ax._rangeInitial1];
279+
} else if(ax._rangeInitial1 === undefined) {
280+
aobj[axName + '.range'] = [ax._rangeInitial0, null];
281+
aobj[axName + '.autorange'] = 'max';
276282
} else {
277-
var rangeInitial = ax._rangeInitial.slice();
278-
aobj[axName + '.range[0]'] = rangeInitial[0];
279-
aobj[axName + '.range[1]'] = rangeInitial[1];
283+
aobj[axName + '.range'] = [ax._rangeInitial0, ax._rangeInitial1];
280284
}
281285

282286
// N.B. "reset" also resets showspikes

src/plots/cartesian/axes.js

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -321,14 +321,18 @@ axes.saveRangeInitial = function(gd, overwrite) {
321321

322322
for(var i = 0; i < axList.length; i++) {
323323
var ax = axList[i];
324-
var isNew = (ax._rangeInitial === undefined);
325-
var hasChanged = isNew || !(
326-
ax.range[0] === ax._rangeInitial[0] &&
327-
ax.range[1] === ax._rangeInitial[1]
324+
var isNew =
325+
ax._rangeInitial0 === undefined &&
326+
ax._rangeInitial1 === undefined;
327+
328+
var hasChanged = isNew || (
329+
ax.range[0] !== ax._rangeInitial0 ||
330+
ax.range[1] !== ax._rangeInitial1
328331
);
329332

330-
if((isNew && ax.autorange === false) || (overwrite && hasChanged)) {
331-
ax._rangeInitial = ax.range.slice();
333+
if((isNew && ax.autorange !== true) || (overwrite && hasChanged)) {
334+
ax._rangeInitial0 = ax.autorange === 'min' ? undefined : ax.range[0];
335+
ax._rangeInitial1 = ax.autorange === 'max' ? undefined : ax.range[1];
332336
hasOneAxisChanged = true;
333337
}
334338
}

src/plots/cartesian/dragbox.js

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -773,7 +773,7 @@ function makeDragBox(gd, plotinfo, x, y, w, h, ns, ew) {
773773
if(matches.yaxes) axList = axList.concat(matches.yaxes);
774774

775775
var attrs = {};
776-
var ax, i, rangeInitial;
776+
var ax, i;
777777

778778
// For reset+autosize mode:
779779
// If *any* of the main axes is not at its initial range
@@ -785,11 +785,15 @@ function makeDragBox(gd, plotinfo, x, y, w, h, ns, ew) {
785785

786786
for(i = 0; i < axList.length; i++) {
787787
ax = axList[i];
788-
if((ax._rangeInitial && (
789-
ax.range[0] !== ax._rangeInitial[0] ||
790-
ax.range[1] !== ax._rangeInitial[1]
788+
var hasRangeInitial =
789+
ax._rangeInitial0 !== undefined ||
790+
ax._rangeInitial1 !== undefined;
791+
792+
if((hasRangeInitial && (
793+
ax.range[0] !== ax._rangeInitial0 ||
794+
ax.range[1] !== ax._rangeInitial1
791795
)) ||
792-
(!ax._rangeInitial && !ax.autorange)
796+
(!hasRangeInitial && ax.autorange !== true)
793797
) {
794798
doubleClickConfig = 'reset';
795799
break;
@@ -819,12 +823,17 @@ function makeDragBox(gd, plotinfo, x, y, w, h, ns, ew) {
819823
ax = axList[i];
820824

821825
if(!ax.fixedrange) {
822-
if(!ax._rangeInitial) {
823-
attrs[ax._name + '.autorange'] = true;
826+
var axName = ax._name;
827+
if(ax._rangeInitial0 === undefined && ax._rangeInitial1 === undefined) {
828+
attrs[axName + '.autorange'] = true;
829+
} else if(ax._rangeInitial0 === undefined) {
830+
attrs[axName + '.autorange'] = 'min';
831+
attrs[axName + '.range'] = [null, ax._rangeInitial1];
832+
} else if(ax._rangeInitial1 === undefined) {
833+
attrs[axName + '.range'] = [ax._rangeInitial0, null];
834+
attrs[axName + '.autorange'] = 'max';
824835
} else {
825-
rangeInitial = ax._rangeInitial;
826-
attrs[ax._name + '.range[0]'] = rangeInitial[0];
827-
attrs[ax._name + '.range[1]'] = rangeInitial[1];
836+
attrs[axName + '.range'] = [ax._rangeInitial0, ax._rangeInitial1];
828837
}
829838
}
830839
}

test/jasmine/tests/axes_test.js

Lines changed: 41 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2524,47 +2524,72 @@ describe('Test axes', function() {
25242524
};
25252525
});
25262526

2527-
it('should save range when autosize turned off and rangeInitial isn\'t defined', function() {
2527+
it('should save range when autosize turned off and rangeInitials are not defined', function() {
25282528
['xaxis', 'yaxis', 'xaxis2', 'yaxis2'].forEach(function(ax) {
25292529
gd._fullLayout[ax].autorange = false;
25302530
});
25312531

25322532
hasOneAxisChanged = saveRangeInitial(gd);
25332533

25342534
expect(hasOneAxisChanged).toBe(true);
2535-
expect(gd._fullLayout.xaxis._rangeInitial).toEqual([0, 0.5]);
2536-
expect(gd._fullLayout.yaxis._rangeInitial).toEqual([0, 0.5]);
2537-
expect(gd._fullLayout.xaxis2._rangeInitial).toEqual([0.5, 1]);
2538-
expect(gd._fullLayout.yaxis2._rangeInitial).toEqual([0.5, 1]);
2535+
expect(gd._fullLayout.xaxis._rangeInitial0).toEqual(0);
2536+
expect(gd._fullLayout.xaxis._rangeInitial1).toEqual(0.5);
2537+
2538+
expect(gd._fullLayout.yaxis._rangeInitial0).toEqual(0);
2539+
expect(gd._fullLayout.yaxis._rangeInitial1).toEqual(0.5);
2540+
2541+
expect(gd._fullLayout.xaxis2._rangeInitial0).toEqual(0.5);
2542+
expect(gd._fullLayout.xaxis2._rangeInitial1).toEqual(1);
2543+
2544+
expect(gd._fullLayout.yaxis2._rangeInitial0).toEqual(0.5);
2545+
expect(gd._fullLayout.yaxis2._rangeInitial1).toEqual(1);
25392546
});
25402547

2541-
it('should not overwrite saved range if rangeInitial is defined', function() {
2548+
it('should not overwrite saved range if rangeInitials are defined', function() {
25422549
['xaxis', 'yaxis', 'xaxis2', 'yaxis2'].forEach(function(ax) {
2543-
gd._fullLayout[ax]._rangeInitial = gd._fullLayout[ax].range.slice();
2550+
gd._fullLayout[ax]._rangeInitial0 = gd._fullLayout[ax].range[0];
2551+
gd._fullLayout[ax]._rangeInitial1 = gd._fullLayout[ax].range[1];
25442552
gd._fullLayout[ax].range = [0, 1];
25452553
});
25462554

25472555
hasOneAxisChanged = saveRangeInitial(gd);
25482556

25492557
expect(hasOneAxisChanged).toBe(false);
2550-
expect(gd._fullLayout.xaxis._rangeInitial).toEqual([0, 0.5]);
2551-
expect(gd._fullLayout.yaxis._rangeInitial).toEqual([0, 0.5]);
2552-
expect(gd._fullLayout.xaxis2._rangeInitial).toEqual([0.5, 1]);
2553-
expect(gd._fullLayout.yaxis2._rangeInitial).toEqual([0.5, 1]);
2558+
2559+
expect(gd._fullLayout.xaxis._rangeInitial0).toEqual(0);
2560+
expect(gd._fullLayout.xaxis._rangeInitial1).toEqual(0.5);
2561+
2562+
expect(gd._fullLayout.yaxis._rangeInitial0).toEqual(0);
2563+
expect(gd._fullLayout.yaxis._rangeInitial1).toEqual(0.5);
2564+
2565+
expect(gd._fullLayout.xaxis2._rangeInitial0).toEqual(0.5);
2566+
expect(gd._fullLayout.xaxis2._rangeInitial1).toEqual(1);
2567+
2568+
expect(gd._fullLayout.yaxis2._rangeInitial0).toEqual(0.5);
2569+
expect(gd._fullLayout.yaxis2._rangeInitial1).toEqual(1);
25542570
});
25552571

25562572
it('should save range when overwrite option is on and range has changed', function() {
25572573
['xaxis', 'yaxis', 'xaxis2', 'yaxis2'].forEach(function(ax) {
2558-
gd._fullLayout[ax]._rangeInitial = gd._fullLayout[ax].range.slice();
2574+
gd._fullLayout[ax]._rangeInitial0 = gd._fullLayout[ax].range[0];
2575+
gd._fullLayout[ax]._rangeInitial1 = gd._fullLayout[ax].range[1];
25592576
});
25602577
gd._fullLayout.xaxis2.range = [0.2, 0.4];
25612578

25622579
hasOneAxisChanged = saveRangeInitial(gd, true);
25632580
expect(hasOneAxisChanged).toBe(true);
2564-
expect(gd._fullLayout.xaxis._rangeInitial).toEqual([0, 0.5]);
2565-
expect(gd._fullLayout.yaxis._rangeInitial).toEqual([0, 0.5]);
2566-
expect(gd._fullLayout.xaxis2._rangeInitial).toEqual([0.2, 0.4]);
2567-
expect(gd._fullLayout.yaxis2._rangeInitial).toEqual([0.5, 1]);
2581+
2582+
expect(gd._fullLayout.xaxis._rangeInitial0).toEqual(0);
2583+
expect(gd._fullLayout.xaxis._rangeInitial1).toEqual(0.5);
2584+
2585+
expect(gd._fullLayout.yaxis._rangeInitial0).toEqual(0);
2586+
expect(gd._fullLayout.yaxis._rangeInitial1).toEqual(0.5);
2587+
2588+
expect(gd._fullLayout.xaxis2._rangeInitial0).toEqual(0.2);
2589+
expect(gd._fullLayout.xaxis2._rangeInitial1).toEqual(0.4);
2590+
2591+
expect(gd._fullLayout.yaxis2._rangeInitial0).toEqual(0.5);
2592+
expect(gd._fullLayout.yaxis2._rangeInitial1).toEqual(1);
25682593
});
25692594
});
25702595

test/jasmine/tests/click_test.js

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -958,9 +958,14 @@ describe('Test click interactions:', function() {
958958
var ya = fullLayout.yaxis;
959959
var ya2 = fullLayout.yaxis2;
960960

961-
expect(xa._rangeInitial).toBe(undefined);
962-
expect(ya._rangeInitial).toBe(undefined);
963-
expect(ya2._rangeInitial).toBe(undefined);
961+
expect(xa._rangeInitial0).toBe(undefined);
962+
expect(xa._rangeInitial1).toBe(undefined);
963+
964+
expect(ya._rangeInitial0).toBe(undefined);
965+
expect(ya._rangeInitial1).toBe(undefined);
966+
967+
expect(ya2._rangeInitial0).toBe(undefined);
968+
expect(ya2._rangeInitial1).toBe(undefined);
964969

965970
expect(xa.range).toBeCloseToArray(exp.xRng, 1, msg);
966971
expect(ya.range).toBeCloseToArray(exp.yRng, 1, msg);
@@ -969,8 +974,12 @@ describe('Test click interactions:', function() {
969974

970975
Plotly.newPlot(gd, [], {})
971976
.then(function() {
972-
expect(gd._fullLayout.xaxis._rangeInitial).toBe(undefined);
973-
expect(gd._fullLayout.yaxis._rangeInitial).toBe(undefined);
977+
expect(gd._fullLayout.xaxis._rangeInitial0).toBe(undefined);
978+
expect(gd._fullLayout.xaxis._rangeInitial1).toBe(undefined);
979+
980+
expect(gd._fullLayout.yaxis._rangeInitial0).toBe(undefined);
981+
expect(gd._fullLayout.yaxis._rangeInitial1).toBe(undefined);
982+
974983
expect(gd._fullLayout.yaxis2).toBe(undefined);
975984
})
976985
.then(function() { return Plotly.react(gd, fig); })

0 commit comments

Comments
 (0)