@@ -2466,6 +2466,8 @@ function diffData(gd, oldFullData, newFullData, immutable) {
24662466function diffLayout ( gd , oldFullLayout , newFullLayout , immutable ) {
24672467 var flags = editTypes . layoutFlags ( ) ;
24682468 flags . arrays = { } ;
2469+ flags . rangesAltered = { } ;
2470+ flags . autorangedAxes = { } ;
24692471
24702472 function getLayoutValObject ( parts ) {
24712473 return PlotSchema . getLayoutValObject ( newFullLayout , parts ) ;
@@ -2503,6 +2505,11 @@ function getDiffFlags(oldContainer, newContainer, outerparts, opts) {
25032505 return ;
25042506 }
25052507 editTypes . update ( flags , valObject ) ;
2508+
2509+ // track cartesian axes with altered ranges
2510+ if ( AX_RANGE_RE . test ( astr ) || AX_AUTORANGE_RE . test ( astr ) ) {
2511+ flags . rangesAltered [ outerparts [ 0 ] ] = 1 ;
2512+ }
25062513 }
25072514
25082515 function valObjectCanBeDataArray ( valObject ) {
@@ -2515,6 +2522,13 @@ function getDiffFlags(oldContainer, newContainer, outerparts, opts) {
25152522
25162523 var oldVal = oldContainer [ key ] ;
25172524 var newVal = newContainer [ key ] ;
2525+ var parts = outerparts . concat ( key ) ;
2526+ astr = parts . join ( '.' ) ;
2527+
2528+ // track auto-ranged cartesian axes, changed or not
2529+ if ( AX_AUTORANGE_RE . test ( astr ) && newVal === true ) {
2530+ flags . autorangedAxes [ outerparts [ 0 ] ] = 1 ;
2531+ }
25182532
25192533 if ( key . charAt ( 0 ) === '_' || typeof oldVal === 'function' || oldVal === newVal ) continue ;
25202534
@@ -2530,7 +2544,6 @@ function getDiffFlags(oldContainer, newContainer, outerparts, opts) {
25302544 if ( key === 'range' && newContainer . autorange ) continue ;
25312545 if ( ( key === 'zmin' || key === 'zmax' ) && newContainer . type === 'contourcarpet' ) continue ;
25322546
2533- var parts = outerparts . concat ( key ) ;
25342547 valObject = getValObject ( parts ) ;
25352548
25362549 // in case type changed, we may not even *have* a valObject.
0 commit comments