@@ -115,17 +115,43 @@ module.exports = function supplyLayoutDefaults(layoutIn, layoutOut, fullData) {
115
115
116
116
var bgColor = Color . combine ( plot_bgcolor , layoutOut . paper_bgcolor ) ;
117
117
118
- var axLayoutIn , axLayoutOut ;
118
+ var axName , axLayoutIn , axLayoutOut ;
119
119
120
120
function coerce ( attr , dflt ) {
121
121
return Lib . coerce ( axLayoutIn , axLayoutOut , layoutAttributes , attr , dflt ) ;
122
122
}
123
123
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 = [ ] ;
126
132
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 ) ;
129
155
130
156
var defaultOptions = {
131
157
letter : axLetter ,
@@ -142,29 +168,21 @@ module.exports = function supplyLayoutDefaults(layoutIn, layoutOut, fullData) {
142
168
143
169
var positioningOptions = {
144
170
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 )
149
173
} ;
150
174
151
175
handlePositionDefaults ( axLayoutIn , axLayoutOut , coerce , positioningOptions ) ;
152
176
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
+ }
162
179
163
180
// quick second pass for range slider and selector defaults
164
181
var rangeSliderDefaults = Registry . getComponentMethod ( 'rangeslider' , 'handleDefaults' ) ,
165
182
rangeSelectorDefaults = Registry . getComponentMethod ( 'rangeselector' , 'handleDefaults' ) ;
166
183
167
- xaList . forEach ( function ( axName ) {
184
+ for ( i = 0 ; i < xaList . length ; i ++ ) {
185
+ axName = xaList [ i ] ;
168
186
axLayoutIn = layoutIn [ axName ] ;
169
187
axLayoutOut = layoutOut [ axName ] ;
170
188
@@ -181,9 +199,10 @@ module.exports = function supplyLayoutDefaults(layoutIn, layoutOut, fullData) {
181
199
}
182
200
183
201
coerce ( 'fixedrange' ) ;
184
- } ) ;
202
+ }
185
203
186
- yaList . forEach ( function ( axName ) {
204
+ for ( i = 0 ; i < yaList . length ; i ++ ) {
205
+ axName = yaList [ i ] ;
187
206
axLayoutIn = layoutIn [ axName ] ;
188
207
axLayoutOut = layoutOut [ axName ] ;
189
208
@@ -196,5 +215,5 @@ module.exports = function supplyLayoutDefaults(layoutIn, layoutOut, fullData) {
196
215
) ;
197
216
198
217
coerce ( 'fixedrange' , fixedRangeDflt ) ;
199
- } ) ;
218
+ }
200
219
} ;
0 commit comments