@@ -2445,6 +2445,9 @@ function diffData(gd, oldFullData, newFullData, immutable, transition, newDataRe
24452445
24462446 var flags = editTypes . traceFlags ( ) ;
24472447 flags . arrays = { } ;
2448+ flags . nChanges = 0 ;
2449+ flags . nChangesAnim = 0 ;
2450+
24482451 var i , trace ;
24492452
24502453 function getTraceValObject ( parts ) {
@@ -2456,6 +2459,8 @@ function diffData(gd, oldFullData, newFullData, immutable, transition, newDataRe
24562459 flags : flags ,
24572460 immutable : immutable ,
24582461 transition : transition ,
2462+ nChanges : 0 ,
2463+ nChangesAnim : 0 ,
24592464 newDataRevision : newDataRevision ,
24602465 gd : gd
24612466 } ;
@@ -2475,6 +2480,10 @@ function diffData(gd, oldFullData, newFullData, immutable, transition, newDataRe
24752480 flags . fullReplot = true ;
24762481 }
24772482
2483+ if ( transition && flags . nChanges && flags . nChangesAnim ) {
2484+ flags . anim = flags . nChanges === flags . nChangesAnim ? 'all' : 'some' ;
2485+ }
2486+
24782487 return flags ;
24792488}
24802489
@@ -2483,6 +2492,8 @@ function diffLayout(gd, oldFullLayout, newFullLayout, immutable, transition) {
24832492 flags . arrays = { } ;
24842493 flags . rangesAltered = { } ;
24852494 flags . autorangedAxes = { } ;
2495+ flags . nChanges = 0 ;
2496+ flags . nChangesAnim = 0 ;
24862497
24872498 function getLayoutValObject ( parts ) {
24882499 return PlotSchema . getLayoutValObject ( newFullLayout , parts ) ;
@@ -2502,6 +2513,10 @@ function diffLayout(gd, oldFullLayout, newFullLayout, immutable, transition) {
25022513 flags . layoutReplot = true ;
25032514 }
25042515
2516+ if ( transition && flags . nChanges && flags . nChangesAnim ) {
2517+ flags . anim = flags . nChanges === flags . nChangesAnim ? 'all' : 'some' ;
2518+ }
2519+
25052520 return flags ;
25062521}
25072522
@@ -2521,14 +2536,11 @@ function getDiffFlags(oldContainer, newContainer, outerparts, opts) {
25212536 return ;
25222537 }
25232538 editTypes . update ( flags , valObject ) ;
2539+ flags . nChanges ++ ;
25242540
25252541 // track animatable changes
2526- if ( opts . transition ) {
2527- if ( flags . anim === 'all' && ! valObject . anim ) {
2528- flags . anim = 'some' ;
2529- } else if ( ! flags . anim && valObject . anim ) {
2530- flags . anim = 'all' ;
2531- }
2542+ if ( opts . transition && valObject . anim ) {
2543+ flags . nChangesAnim ++ ;
25322544 }
25332545
25342546 // track cartesian axes with altered ranges
0 commit comments