@@ -35,51 +35,57 @@ function appendList(cont, k, item) {
35
35
36
36
module . exports = function supplyLayoutDefaults ( layoutIn , layoutOut , fullData ) {
37
37
var ax2traces = { } ;
38
- var xaCheater = { } ;
39
- var xaNonCheater = { } ;
38
+ var hideX = { } ;
39
+ var hideY = { } ;
40
40
var outerTicks = { } ;
41
41
var noGrids = { } ;
42
42
var i , j ;
43
+ var trace ;
44
+ var xaName , yaName ;
43
45
44
- // look for axes in the data
45
- for ( i = 0 ; i < fullData . length ; i ++ ) {
46
- var trace = fullData [ i ] ;
47
- if ( ! traceIs ( trace , 'cartesian' ) && ! traceIs ( trace , 'gl2d' ) ) continue ;
46
+ function skipType ( ) {
47
+ return ( ! traceIs ( trace , 'cartesian' ) && ! traceIs ( trace , 'gl2d' ) ) ;
48
+ }
49
+
50
+ function append ( list ) {
51
+ for ( var k = 0 ; k < list . length ; k ++ ) {
52
+ appendList ( ax2traces , id2name ( list [ k ] ) , trace ) ;
53
+ }
54
+ }
48
55
49
- var xaName ;
56
+ function listXnames ( trace ) {
57
+ var list = [ ] ;
50
58
if ( trace . xaxis ) {
51
- xaName = id2name ( trace . xaxis ) ;
52
- appendList ( ax2traces , xaName , trace ) ;
59
+ list = [ trace . xaxis ] ;
53
60
} else if ( trace . xaxes ) {
54
- for ( j = 0 ; j < trace . xaxes . length ; j ++ ) {
55
- appendList ( ax2traces , id2name ( trace . xaxes [ j ] ) , trace ) ;
56
- }
61
+ list = trace . xaxes ;
57
62
}
58
63
59
- var yaName ;
64
+ append ( list ) ;
65
+ }
66
+
67
+ function listYnames ( trace ) {
68
+ var list = [ ] ;
60
69
if ( trace . yaxis ) {
61
- yaName = id2name ( trace . yaxis ) ;
62
- appendList ( ax2traces , yaName , trace ) ;
70
+ list = [ trace . yaxis ] ;
63
71
} else if ( trace . yaxes ) {
64
- for ( j = 0 ; j < trace . yaxes . length ; j ++ ) {
65
- appendList ( ax2traces , id2name ( trace . yaxes [ j ] ) , trace ) ;
66
- }
72
+ list = trace . yaxes ;
67
73
}
68
74
69
- // Two things trigger axis visibility:
70
- // 1. is not carpet
71
- // 2. carpet that's not cheater
72
- if ( ! traceIs ( trace , 'carpet' ) || ( trace . type === 'carpet' && ! trace . _cheater ) ) {
73
- if ( xaName ) xaNonCheater [ xaName ] = 1 ;
74
- }
75
+ append ( list ) ;
76
+ }
75
77
76
- // The above check for definitely-not-cheater is not adequate. This
77
- // second list tracks which axes *could* be a cheater so that the
78
- // full condition triggering hiding is:
79
- // *could* be a cheater and *is not definitely visible*
80
- if ( trace . type === 'carpet' && trace . _cheater ) {
81
- if ( xaName ) xaCheater [ xaName ] = 1 ;
82
- }
78
+ // look for axes in the data
79
+ for ( i = 0 ; i < fullData . length ; i ++ ) {
80
+ trace = fullData [ i ] ;
81
+ if ( skipType ( trace ) ) continue ;
82
+
83
+ // create lists
84
+ listXnames ( trace ) ;
85
+ listYnames ( trace ) ;
86
+
87
+ xaName = ( trace . xaxis ) ? id2name ( trace . xaxis ) : undefined ; // TODO: why these should be left undefined?
88
+ yaName = ( trace . yaxis ) ? id2name ( trace . yaxis ) : undefined ;
83
89
84
90
// check for default formatting tweaks
85
91
if ( traceIs ( trace , '2dMap' ) ) {
@@ -93,6 +99,80 @@ module.exports = function supplyLayoutDefaults(layoutIn, layoutOut, fullData) {
93
99
}
94
100
}
95
101
102
+ function getXname ( ) {
103
+ return ( trace . xaxis ) ? id2name ( trace . xaxis ) : undefined ; // TODO: why these should be left undefined?
104
+ }
105
+
106
+ function getYname ( ) {
107
+ return ( trace . yaxis ) ? id2name ( trace . yaxis ) : undefined ; // TODO: why these should be left undefined?
108
+ }
109
+
110
+ function includesOnly ( desiredType , xaNameIn , yaNameIn ) {
111
+ var result = false ;
112
+ for ( var k = 0 ; k < fullData . length ; k ++ ) {
113
+ var otherTrace = fullData [ k ] ;
114
+ if ( skipType ( otherTrace ) ) continue ;
115
+
116
+ if (
117
+ xaNameIn !== getXname ( otherTrace ) ||
118
+ yaNameIn !== getYname ( otherTrace )
119
+ ) continue ;
120
+
121
+ var found = false ;
122
+
123
+ if ( desiredType === 'cheater' && traceIs ( trace , 'carpet' ) && trace . _cheater !== false ) {
124
+ found = true ;
125
+ } else if ( trace . type === desiredType ) {
126
+ found = true ;
127
+ }
128
+
129
+ if ( ! found ) {
130
+ result = false ;
131
+ break ;
132
+ }
133
+ result = true ;
134
+ }
135
+ return result ;
136
+ }
137
+
138
+ var funnelOnlyX = { } ;
139
+ var funnelOnlyY = { } ;
140
+ var cheaterOnlyX = { } ;
141
+
142
+ for ( i = 0 ; i < fullData . length ; i ++ ) {
143
+ trace = fullData [ i ] ;
144
+ if ( skipType ( trace ) ) continue ;
145
+
146
+ xaName = getXname ( trace ) ;
147
+ yaName = getYname ( trace ) ;
148
+
149
+ if ( funnelOnlyX [ xaName ] !== false ) funnelOnlyX [ xaName ] = includesOnly ( 'funnel' , xaName , yaName ) ;
150
+ if ( funnelOnlyY [ yaName ] !== false ) funnelOnlyY [ yaName ] = includesOnly ( 'funnel' , xaName , yaName ) ;
151
+ if ( cheaterOnlyX [ xaName ] !== false ) cheaterOnlyX [ xaName ] = includesOnly ( 'cheater' , xaName , yaName ) ;
152
+ }
153
+
154
+ for ( i = 0 ; i < fullData . length ; i ++ ) {
155
+ trace = fullData [ i ] ;
156
+ if ( skipType ( trace ) ) continue ;
157
+
158
+ xaName = getXname ( trace ) ;
159
+ yaName = getYname ( trace ) ;
160
+
161
+ if ( traceIs ( trace , 'carpet' ) && trace . _cheater ) {
162
+ if ( cheaterOnlyX [ xaName ] && xaName ) hideX [ xaName ] = 1 ;
163
+ }
164
+
165
+ if ( trace . type === 'funnel' ) {
166
+ if ( funnelOnlyX [ xaName ] && trace . orientation === 'h' ) {
167
+ hideX [ xaName ] = 1 ;
168
+ }
169
+
170
+ if ( funnelOnlyY [ yaName ] && trace . orientation === 'v' ) {
171
+ hideY [ yaName ] = 1 ;
172
+ }
173
+ }
174
+ }
175
+
96
176
var subplots = layoutOut . _subplots ;
97
177
var xIds = subplots . xaxis ;
98
178
var yIds = subplots . yaxis ;
@@ -176,7 +256,7 @@ module.exports = function supplyLayoutDefaults(layoutIn, layoutOut, fullData) {
176
256
bgColor : bgColor ,
177
257
calendar : layoutOut . calendar ,
178
258
automargin : true ,
179
- cheateronly : axLetter === 'x' && xaCheater [ axName ] && ! xaNonCheater [ axName ] ,
259
+ visibleDflt : ( axLetter === 'x' && ! ! hideX [ axName ] ) || ( axLetter === 'y' && ! ! hideY [ axName ] ) ,
180
260
splomStash : ( ( layoutOut . _splomAxes || { } ) [ axLetter ] || { } ) [ id ]
181
261
} ;
182
262
0 commit comments