@@ -2236,7 +2236,7 @@ plots.transition = function(gd, data, layout, traces, frameOpts, transitionOpts)
22362236
22372237 plots . supplyDefaults ( gd ) ;
22382238 plots . doCalcdata ( gd ) ;
2239- plots . doSetPositions ( gd ) ;
2239+ plots . doCrossTraceCalc ( gd ) ;
22402240 Registry . getComponentMethod ( 'errorbars' , 'calc' ) ( gd ) ;
22412241
22422242 return Promise . resolve ( ) ;
@@ -2564,26 +2564,42 @@ function clearAxesCalc(axList) {
25642564 }
25652565}
25662566
2567- plots . doSetPositions = function ( gd ) {
2567+ plots . doCrossTraceCalc = function ( gd ) {
25682568 var fullLayout = gd . _fullLayout ;
2569- var subplots = fullLayout . _subplots . cartesian ;
25702569 var modules = fullLayout . _visibleModules ;
2571- var methods = [ ] ;
2572- var i , j ;
2570+ var hash = { } ;
2571+ var i , j , k ;
25732572
25742573 // position and range calculations for traces that
25752574 // depend on each other ie bars (stacked or grouped)
25762575 // and boxes (grouped) push each other out of the way
25772576
25782577 for ( j = 0 ; j < modules . length ; j ++ ) {
2579- Lib . pushUnique ( methods , modules [ j ] . setPositions ) ;
2578+ var _module = modules [ j ] ;
2579+ var fn = _module . crossTraceCalc ;
2580+ if ( fn ) {
2581+ var spType = _module . basePlotModule . name ;
2582+ if ( hash [ spType ] ) {
2583+ Lib . pushUnique ( hash [ spType ] , fn ) ;
2584+ } else {
2585+ hash [ spType ] = [ fn ] ;
2586+ }
2587+ }
25802588 }
2581- if ( ! methods . length ) return ;
25822589
2583- for ( i = 0 ; i < subplots . length ; i ++ ) {
2584- var subplotInfo = fullLayout . _plots [ subplots [ i ] ] ;
2585- for ( j = 0 ; j < methods . length ; j ++ ) {
2586- methods [ j ] ( gd , subplotInfo ) ;
2590+ for ( k in hash ) {
2591+ var methods = hash [ k ] ;
2592+ var subplots = fullLayout . _subplots [ k ] ;
2593+
2594+ for ( i = 0 ; i < subplots . length ; i ++ ) {
2595+ var sp = subplots [ i ] ;
2596+ var spInfo = k === 'cartesian' ?
2597+ fullLayout . _plots [ sp ] :
2598+ fullLayout [ sp ] ;
2599+
2600+ for ( j = 0 ; j < methods . length ; j ++ ) {
2601+ methods [ j ] ( gd , spInfo ) ;
2602+ }
25872603 }
25882604 }
25892605} ;
0 commit comments