@@ -449,8 +449,7 @@ plots.supplyDefaults = function(gd) {
449
449
newData = gd . data || [ ] ,
450
450
modules = gd . _modules = [ ] ;
451
451
452
- var i , trace , fullTrace , _module , axList , ax ;
453
-
452
+ var i , trace , _module , axList , ax ;
454
453
455
454
// first fill in what we can of layout without looking at data
456
455
// because fullData needs a few things from layout
@@ -460,24 +459,7 @@ plots.supplyDefaults = function(gd) {
460
459
newFullLayout . _dataLength = newData . length ;
461
460
462
461
// then do the data
463
- for ( i = 0 ; i < newData . length ; i ++ ) {
464
- trace = newData [ i ] ;
465
-
466
- fullTrace = plots . supplyDataDefaults ( trace , i , newFullLayout ) ;
467
- newFullData . push ( fullTrace ) ;
468
-
469
- // detect plot type
470
- if ( plots . traceIs ( fullTrace , 'cartesian' ) ) newFullLayout . _hasCartesian = true ;
471
- else if ( plots . traceIs ( fullTrace , 'gl3d' ) ) newFullLayout . _hasGL3D = true ;
472
- else if ( plots . traceIs ( fullTrace , 'geo' ) ) newFullLayout . _hasGeo = true ;
473
- else if ( plots . traceIs ( fullTrace , 'pie' ) ) newFullLayout . _hasPie = true ;
474
- else if ( plots . traceIs ( fullTrace , 'gl2d' ) ) newFullLayout . _hasGL2D = true ;
475
- else if ( plots . traceIs ( fullTrace , 'ternary' ) ) newFullLayout . _hasTernary = true ;
476
- else if ( 'r' in fullTrace ) newFullLayout . _hasPolar = true ;
477
-
478
- _module = fullTrace . _module ;
479
- if ( _module && modules . indexOf ( _module ) === - 1 ) modules . push ( _module ) ;
480
- }
462
+ plots . supplyDataDefaults ( newData , newFullData , newFullLayout , modules ) ;
481
463
482
464
// special cases that introduce interactions between traces
483
465
for ( i = 0 ; i < modules . length ; i ++ ) {
@@ -609,7 +591,53 @@ function relinkPrivateKeys(toLayout, fromLayout) {
609
591
}
610
592
}
611
593
612
- plots . supplyDataDefaults = function ( traceIn , i , layout ) {
594
+ plots . supplyDataDefaults = function ( dataIn , dataOut , layout , modules ) {
595
+ var cnt = 0 ;
596
+
597
+ // push to array if item isn't already in array
598
+ function fill ( arr , item ) {
599
+ if ( item && arr . indexOf ( item ) === - 1 ) return arr . push ( item ) ;
600
+ }
601
+
602
+ // detect plot type
603
+ function detect ( trace ) {
604
+ if ( plots . traceIs ( trace , 'cartesian' ) ) layout . _hasCartesian = true ;
605
+ else if ( plots . traceIs ( trace , 'gl3d' ) ) layout . _hasGL3D = true ;
606
+ else if ( plots . traceIs ( trace , 'geo' ) ) layout . _hasGeo = true ;
607
+ else if ( plots . traceIs ( trace , 'pie' ) ) layout . _hasPie = true ;
608
+ else if ( plots . traceIs ( trace , 'gl2d' ) ) layout . _hasGL2D = true ;
609
+ else if ( plots . traceIs ( trace , 'ternary' ) ) layout . _hasTernary = true ;
610
+ else if ( 'r' in trace ) layout . _hasPolar = true ;
611
+ }
612
+
613
+ for ( var i = 0 ; i < dataIn . length ; i ++ ) {
614
+ var trace = dataIn [ i ] ;
615
+
616
+ var fullTrace = plots . supplyTraceDefaults ( trace , cnt , layout ) ;
617
+
618
+ if ( fullTrace . _module && fullTrace . _module . expandData ) {
619
+ var expandedTraces = fullTrace . _module . expandData ( fullTrace , layout ) ;
620
+
621
+ for ( var j = 0 ; j < expandedTraces . length ; j ++ ) {
622
+ var expandedTrace = expandedTraces [ j ] ;
623
+ var fullExpandedTrace = plots . supplyTraceDefaults ( expandedTrace , cnt , layout ) ;
624
+
625
+ fill ( dataOut , fullExpandedTrace ) ;
626
+ fill ( modules , fullExpandedTrace . _module ) ;
627
+ detect ( fullExpandedTrace ) ;
628
+ cnt ++ ;
629
+ }
630
+ }
631
+ else {
632
+ fill ( dataOut , fullTrace ) ;
633
+ fill ( modules , fullTrace . _module ) ;
634
+ detect ( trace ) ;
635
+ cnt ++ ;
636
+ }
637
+ }
638
+ } ;
639
+
640
+ plots . supplyTraceDefaults = function ( traceIn , i , layout ) {
613
641
var traceOut = { } ,
614
642
defaultColor = Color . defaults [ i % Color . defaults . length ] ;
615
643
0 commit comments