@@ -2566,24 +2566,40 @@ function clearAxesCalc(axList) {
2566
2566
2567
2567
plots . doSetPositions = function ( gd ) {
2568
2568
var fullLayout = gd . _fullLayout ;
2569
- var subplots = fullLayout . _subplots . cartesian ;
2570
2569
var modules = fullLayout . _visibleModules ;
2571
- var methods = [ ] ;
2572
- var i , j ;
2570
+ var hash = { } ;
2571
+ var i , j , k ;
2573
2572
2574
2573
// position and range calculations for traces that
2575
2574
// depend on each other ie bars (stacked or grouped)
2576
2575
// and boxes (grouped) push each other out of the way
2577
2576
2578
2577
for ( j = 0 ; j < modules . length ; j ++ ) {
2579
- Lib . pushUnique ( methods , modules [ j ] . setPositions ) ;
2578
+ var _module = modules [ j ] ;
2579
+ var fn = _module . setPositions ;
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
+ }
2580
2588
}
2581
- if ( ! methods . length ) return ;
2582
2589
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
+ }
2587
2603
}
2588
2604
}
2589
2605
} ;
0 commit comments