@@ -115,17 +115,43 @@ module.exports = function supplyLayoutDefaults(layoutIn, layoutOut, fullData) {
115115
116116 var bgColor = Color . combine ( plot_bgcolor , layoutOut . paper_bgcolor ) ;
117117
118- var axLayoutIn , axLayoutOut ;
118+ var axName , axLayoutIn , axLayoutOut ;
119119
120120 function coerce ( attr , dflt ) {
121121 return Lib . coerce ( axLayoutIn , axLayoutOut , layoutAttributes , attr , dflt ) ;
122122 }
123123
124- axesList . forEach ( function ( axName ) {
125- var axLetter = axName . charAt ( 0 ) ;
124+ function getCounterAxes ( axLetter ) {
125+ var list = { x : yaList , y : xaList } [ axLetter ] ;
126+ return Lib . simpleMap ( list , axisIds . name2id ) ;
127+ }
128+
129+ function getOverlayableAxes ( axLetter , axName ) {
130+ var list = { x : xaList , y : yaList } [ axLetter ] ;
131+ var out = [ ] ;
126132
127- axLayoutIn = layoutIn [ axName ] || { } ;
128- axLayoutOut = { } ;
133+ for ( var j = 0 ; j < list . length ; j ++ ) {
134+ var axName2 = list [ j ] ;
135+
136+ if ( axName2 !== axName && ! ( layoutIn [ axName2 ] || { } ) . overlaying ) {
137+ out . push ( axisIds . name2id ( axName2 ) ) ;
138+ }
139+ }
140+
141+ return out ;
142+ }
143+
144+ for ( i = 0 ; i < axesList . length ; i ++ ) {
145+ axName = axesList [ i ] ;
146+
147+ if ( ! Lib . isPlainObject ( layoutIn [ axName ] ) ) {
148+ layoutIn [ axName ] = { } ;
149+ }
150+
151+ axLayoutIn = layoutIn [ axName ] ;
152+ axLayoutOut = layoutOut [ axName ] = { } ;
153+
154+ var axLetter = axName . charAt ( 0 ) ;
129155
130156 var defaultOptions = {
131157 letter : axLetter ,
@@ -142,29 +168,21 @@ module.exports = function supplyLayoutDefaults(layoutIn, layoutOut, fullData) {
142168
143169 var positioningOptions = {
144170 letter : axLetter ,
145- counterAxes : { x : yaList , y : xaList } [ axLetter ] . map ( axisIds . name2id ) ,
146- overlayableAxes : { x : xaList , y : yaList } [ axLetter ] . filter ( function ( axName2 ) {
147- return axName2 !== axName && ! ( layoutIn [ axName2 ] || { } ) . overlaying ;
148- } ) . map ( axisIds . name2id )
171+ counterAxes : getCounterAxes ( axLetter ) ,
172+ overlayableAxes : getOverlayableAxes ( axLetter , axName )
149173 } ;
150174
151175 handlePositionDefaults ( axLayoutIn , axLayoutOut , coerce , positioningOptions ) ;
152176
153- layoutOut [ axName ] = axLayoutOut ;
154-
155- // so we don't have to repeat autotype unnecessarily,
156- // copy an autotype back to layoutIn
157- if ( ! layoutIn [ axName ] && axLayoutIn . type !== '-' ) {
158- layoutIn [ axName ] = { type : axLayoutIn . type } ;
159- }
160-
161- } ) ;
177+ axLayoutOut . _input = axLayoutIn ;
178+ }
162179
163180 // quick second pass for range slider and selector defaults
164181 var rangeSliderDefaults = Registry . getComponentMethod ( 'rangeslider' , 'handleDefaults' ) ,
165182 rangeSelectorDefaults = Registry . getComponentMethod ( 'rangeselector' , 'handleDefaults' ) ;
166183
167- xaList . forEach ( function ( axName ) {
184+ for ( i = 0 ; i < xaList . length ; i ++ ) {
185+ axName = xaList [ i ] ;
168186 axLayoutIn = layoutIn [ axName ] ;
169187 axLayoutOut = layoutOut [ axName ] ;
170188
@@ -181,9 +199,10 @@ module.exports = function supplyLayoutDefaults(layoutIn, layoutOut, fullData) {
181199 }
182200
183201 coerce ( 'fixedrange' ) ;
184- } ) ;
202+ }
185203
186- yaList . forEach ( function ( axName ) {
204+ for ( i = 0 ; i < yaList . length ; i ++ ) {
205+ axName = yaList [ i ] ;
187206 axLayoutIn = layoutIn [ axName ] ;
188207 axLayoutOut = layoutOut [ axName ] ;
189208
@@ -196,5 +215,5 @@ module.exports = function supplyLayoutDefaults(layoutIn, layoutOut, fullData) {
196215 ) ;
197216
198217 coerce ( 'fixedrange' , fixedRangeDflt ) ;
199- } ) ;
218+ }
200219} ;
0 commit comments