99
1010'use strict' ;
1111
12- var Registry = require ( '../../registry' ) ;
1312var Lib = require ( '../../lib' ) ;
1413var Color = require ( '../../components/color' ) ;
1514var Template = require ( '../../plot_api/plot_template' ) ;
@@ -20,31 +19,57 @@ var handleTypeDefaults = require('./type_defaults');
2019var handleAxisDefaults = require ( './axis_defaults' ) ;
2120var handleConstraintDefaults = require ( './constraint_defaults' ) ;
2221var handlePositionDefaults = require ( './position_defaults' ) ;
22+
2323var axisIds = require ( './axis_ids' ) ;
24+ var id2name = axisIds . id2name ;
25+ var name2id = axisIds . name2id ;
2426
27+ var Registry = require ( '../../registry' ) ;
28+ var traceIs = Registry . traceIs ;
29+ var getComponentMethod = Registry . getComponentMethod ;
30+
31+ function appendList ( cont , k , item ) {
32+ if ( Array . isArray ( cont [ k ] ) ) cont [ k ] . push ( item ) ;
33+ else cont [ k ] = [ item ] ;
34+ }
2535
2636module . exports = function supplyLayoutDefaults ( layoutIn , layoutOut , fullData ) {
37+ var ax2traces = { } ;
2738 var xaCheater = { } ;
2839 var xaNonCheater = { } ;
2940 var outerTicks = { } ;
3041 var noGrids = { } ;
31- var i ;
42+ var i , j ;
3243
3344 // look for axes in the data
3445 for ( i = 0 ; i < fullData . length ; i ++ ) {
3546 var trace = fullData [ i ] ;
36-
37- if ( ! Registry . traceIs ( trace , 'cartesian' ) && ! Registry . traceIs ( trace , 'gl2d' ) ) {
38- continue ;
47+ if ( ! traceIs ( trace , 'cartesian' ) && ! traceIs ( trace , 'gl2d' ) ) continue ;
48+
49+ var xaName ;
50+ if ( trace . xaxis ) {
51+ xaName = id2name ( trace . xaxis ) ;
52+ appendList ( ax2traces , xaName , trace ) ;
53+ } else if ( trace . xaxes ) {
54+ for ( j = 0 ; j < trace . xaxes . length ; j ++ ) {
55+ appendList ( ax2traces , id2name ( trace . xaxes [ j ] ) , trace ) ;
56+ }
3957 }
4058
41- var xaName = axisIds . id2name ( trace . xaxis ) ;
42- var yaName = axisIds . id2name ( trace . yaxis ) ;
59+ var yaName ;
60+ if ( trace . yaxis ) {
61+ yaName = id2name ( trace . yaxis ) ;
62+ appendList ( ax2traces , yaName , trace ) ;
63+ } else if ( trace . yaxes ) {
64+ for ( j = 0 ; j < trace . yaxes . length ; j ++ ) {
65+ appendList ( ax2traces , id2name ( trace . yaxes [ j ] ) , trace ) ;
66+ }
67+ }
4368
4469 // Two things trigger axis visibility:
4570 // 1. is not carpet
4671 // 2. carpet that's not cheater
47- if ( ! Registry . traceIs ( trace , 'carpet' ) || ( trace . type === 'carpet' && ! trace . _cheater ) ) {
72+ if ( ! traceIs ( trace , 'carpet' ) || ( trace . type === 'carpet' && ! trace . _cheater ) ) {
4873 if ( xaName ) xaNonCheater [ xaName ] = 1 ;
4974 }
5075
@@ -57,22 +82,22 @@ module.exports = function supplyLayoutDefaults(layoutIn, layoutOut, fullData) {
5782 }
5883
5984 // check for default formatting tweaks
60- if ( Registry . traceIs ( trace , '2dMap' ) ) {
61- outerTicks [ xaName ] = true ;
62- outerTicks [ yaName ] = true ;
85+ if ( traceIs ( trace , '2dMap' ) ) {
86+ outerTicks [ xaName ] = 1 ;
87+ outerTicks [ yaName ] = 1 ;
6388 }
6489
65- if ( Registry . traceIs ( trace , 'oriented' ) ) {
90+ if ( traceIs ( trace , 'oriented' ) ) {
6691 var positionAxis = trace . orientation === 'h' ? yaName : xaName ;
67- noGrids [ positionAxis ] = true ;
92+ noGrids [ positionAxis ] = 1 ;
6893 }
6994 }
7095
7196 var subplots = layoutOut . _subplots ;
7297 var xIds = subplots . xaxis ;
7398 var yIds = subplots . yaxis ;
74- var xNames = Lib . simpleMap ( xIds , axisIds . id2name ) ;
75- var yNames = Lib . simpleMap ( yIds , axisIds . id2name ) ;
99+ var xNames = Lib . simpleMap ( xIds , id2name ) ;
100+ var yNames = Lib . simpleMap ( yIds , id2name ) ;
76101 var axNames = xNames . concat ( yNames ) ;
77102
78103 // plot_bgcolor only makes sense if there's a (2D) plot!
@@ -108,7 +133,7 @@ module.exports = function supplyLayoutDefaults(layoutIn, layoutOut, fullData) {
108133 var axName2 = list [ j ] ;
109134
110135 if ( axName2 !== axName && ! ( layoutIn [ axName2 ] || { } ) . overlaying ) {
111- out . push ( axisIds . name2id ( axName2 ) ) ;
136+ out . push ( name2id ( axName2 ) ) ;
112137 }
113138 }
114139
@@ -127,7 +152,12 @@ module.exports = function supplyLayoutDefaults(layoutIn, layoutOut, fullData) {
127152 axLayoutIn = layoutIn [ axName ] ;
128153 axLayoutOut = Template . newContainer ( layoutOut , axName , axLetter + 'axis' ) ;
129154
130- handleTypeDefaults ( axLayoutIn , axLayoutOut , coerce , fullData , axName ) ;
155+ var traces = ax2traces [ axName ] || [ ] ;
156+ axLayoutOut . _traceIndices = traces . map ( function ( t ) { return t . _expandedIndex ; } ) ;
157+ axLayoutOut . _annIndices = [ ] ;
158+ axLayoutOut . _shapeIndices = [ ] ;
159+
160+ handleTypeDefaults ( axLayoutIn , axLayoutOut , coerce , traces , axName ) ;
131161
132162 var overlayableAxes = getOverlayableAxes ( axLetter , axName ) ;
133163
@@ -136,7 +166,7 @@ module.exports = function supplyLayoutDefaults(layoutIn, layoutOut, fullData) {
136166 font : layoutOut . font ,
137167 outerTicks : outerTicks [ axName ] ,
138168 showGrid : ! noGrids [ axName ] ,
139- data : fullData ,
169+ data : traces ,
140170 bgColor : bgColor ,
141171 calendar : layoutOut . calendar ,
142172 automargin : true ,
@@ -173,8 +203,8 @@ module.exports = function supplyLayoutDefaults(layoutIn, layoutOut, fullData) {
173203 }
174204
175205 // quick second pass for range slider and selector defaults
176- var rangeSliderDefaults = Registry . getComponentMethod ( 'rangeslider' , 'handleDefaults' ) ;
177- var rangeSelectorDefaults = Registry . getComponentMethod ( 'rangeselector' , 'handleDefaults' ) ;
206+ var rangeSliderDefaults = getComponentMethod ( 'rangeslider' , 'handleDefaults' ) ;
207+ var rangeSelectorDefaults = getComponentMethod ( 'rangeselector' , 'handleDefaults' ) ;
178208
179209 for ( i = 0 ; i < xNames . length ; i ++ ) {
180210 axName = xNames [ i ] ;
@@ -201,7 +231,7 @@ module.exports = function supplyLayoutDefaults(layoutIn, layoutOut, fullData) {
201231 axLayoutIn = layoutIn [ axName ] ;
202232 axLayoutOut = layoutOut [ axName ] ;
203233
204- var anchoredAxis = layoutOut [ axisIds . id2name ( axLayoutOut . anchor ) ] ;
234+ var anchoredAxis = layoutOut [ id2name ( axLayoutOut . anchor ) ] ;
205235
206236 var fixedRangeDflt = (
207237 anchoredAxis &&
0 commit comments