9
9
10
10
'use strict' ;
11
11
12
- var Registry = require ( '../../registry' ) ;
13
12
var Lib = require ( '../../lib' ) ;
14
13
var Color = require ( '../../components/color' ) ;
15
14
var Template = require ( '../../plot_api/plot_template' ) ;
@@ -20,31 +19,57 @@ var handleTypeDefaults = require('./type_defaults');
20
19
var handleAxisDefaults = require ( './axis_defaults' ) ;
21
20
var handleConstraintDefaults = require ( './constraint_defaults' ) ;
22
21
var handlePositionDefaults = require ( './position_defaults' ) ;
22
+
23
23
var axisIds = require ( './axis_ids' ) ;
24
+ var id2name = axisIds . id2name ;
25
+ var name2id = axisIds . name2id ;
24
26
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
+ }
25
35
26
36
module . exports = function supplyLayoutDefaults ( layoutIn , layoutOut , fullData ) {
37
+ var ax2traces = { } ;
27
38
var xaCheater = { } ;
28
39
var xaNonCheater = { } ;
29
40
var outerTicks = { } ;
30
41
var noGrids = { } ;
31
- var i ;
42
+ var i , j ;
32
43
33
44
// look for axes in the data
34
45
for ( i = 0 ; i < fullData . length ; i ++ ) {
35
46
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
+ }
39
57
}
40
58
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
+ }
43
68
44
69
// Two things trigger axis visibility:
45
70
// 1. is not carpet
46
71
// 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 ) ) {
48
73
if ( xaName ) xaNonCheater [ xaName ] = 1 ;
49
74
}
50
75
@@ -57,22 +82,22 @@ module.exports = function supplyLayoutDefaults(layoutIn, layoutOut, fullData) {
57
82
}
58
83
59
84
// 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 ;
63
88
}
64
89
65
- if ( Registry . traceIs ( trace , 'oriented' ) ) {
90
+ if ( traceIs ( trace , 'oriented' ) ) {
66
91
var positionAxis = trace . orientation === 'h' ? yaName : xaName ;
67
- noGrids [ positionAxis ] = true ;
92
+ noGrids [ positionAxis ] = 1 ;
68
93
}
69
94
}
70
95
71
96
var subplots = layoutOut . _subplots ;
72
97
var xIds = subplots . xaxis ;
73
98
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 ) ;
76
101
var axNames = xNames . concat ( yNames ) ;
77
102
78
103
// plot_bgcolor only makes sense if there's a (2D) plot!
@@ -108,7 +133,7 @@ module.exports = function supplyLayoutDefaults(layoutIn, layoutOut, fullData) {
108
133
var axName2 = list [ j ] ;
109
134
110
135
if ( axName2 !== axName && ! ( layoutIn [ axName2 ] || { } ) . overlaying ) {
111
- out . push ( axisIds . name2id ( axName2 ) ) ;
136
+ out . push ( name2id ( axName2 ) ) ;
112
137
}
113
138
}
114
139
@@ -127,7 +152,12 @@ module.exports = function supplyLayoutDefaults(layoutIn, layoutOut, fullData) {
127
152
axLayoutIn = layoutIn [ axName ] ;
128
153
axLayoutOut = Template . newContainer ( layoutOut , axName , axLetter + 'axis' ) ;
129
154
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 ) ;
131
161
132
162
var overlayableAxes = getOverlayableAxes ( axLetter , axName ) ;
133
163
@@ -136,7 +166,7 @@ module.exports = function supplyLayoutDefaults(layoutIn, layoutOut, fullData) {
136
166
font : layoutOut . font ,
137
167
outerTicks : outerTicks [ axName ] ,
138
168
showGrid : ! noGrids [ axName ] ,
139
- data : fullData ,
169
+ data : traces ,
140
170
bgColor : bgColor ,
141
171
calendar : layoutOut . calendar ,
142
172
automargin : true ,
@@ -173,8 +203,8 @@ module.exports = function supplyLayoutDefaults(layoutIn, layoutOut, fullData) {
173
203
}
174
204
175
205
// 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' ) ;
178
208
179
209
for ( i = 0 ; i < xNames . length ; i ++ ) {
180
210
axName = xNames [ i ] ;
@@ -201,7 +231,7 @@ module.exports = function supplyLayoutDefaults(layoutIn, layoutOut, fullData) {
201
231
axLayoutIn = layoutIn [ axName ] ;
202
232
axLayoutOut = layoutOut [ axName ] ;
203
233
204
- var anchoredAxis = layoutOut [ axisIds . id2name ( axLayoutOut . anchor ) ] ;
234
+ var anchoredAxis = layoutOut [ id2name ( axLayoutOut . anchor ) ] ;
205
235
206
236
var fixedRangeDflt = (
207
237
anchoredAxis &&
0 commit comments