@@ -14,6 +14,7 @@ var Registry = require('../../registry');
14
14
15
15
var handleXYDefaults = require ( '../scatter/xy_defaults' ) ;
16
16
var handleStyleDefaults = require ( '../bar/style_defaults' ) ;
17
+ var getAxisGroup = require ( '../../plots/cartesian/axis_ids' ) . getAxisGroup ;
17
18
var attributes = require ( './attributes' ) ;
18
19
19
20
function supplyDefaults ( traceIn , traceOut , defaultColor , layout ) {
@@ -76,21 +77,16 @@ function supplyDefaults(traceIn, traceOut, defaultColor, layout) {
76
77
errorBarsSupplyDefaults ( traceIn , traceOut , lineColor || Color . defaultLine , { axis : 'y' } ) ;
77
78
errorBarsSupplyDefaults ( traceIn , traceOut , lineColor || Color . defaultLine , { axis : 'x' , inherit : 'y' } ) ;
78
79
79
- handleGroupingDefaults ( traceIn , traceOut , layout , coerce ) ;
80
-
81
80
Lib . coerceSelectionMarkerOpacity ( traceOut , coerce ) ;
82
81
}
83
82
84
- function handleGroupingDefaults ( traceIn , traceOut , layout , coerce ) {
83
+ function handleGroupingDefaults ( traceIn , traceOut , fullLayout , coerce ) {
85
84
var orientation = traceOut . orientation ;
86
- // TODO make this work across matching axes too?!?
87
- // TODO should this work per trace-type?
88
- // one set for bar/histogram another for box/violin?
89
- // or just one set for all trace trace types?
85
+ // N.B. grouping is done across all trace trace types that support it
90
86
var posAxId = traceOut [ { v : 'x' , h : 'y' } [ orientation ] + 'axis' ] ;
91
- var groupId = posAxId + orientation ;
87
+ var groupId = getAxisGroup ( fullLayout , posAxId ) + orientation ;
92
88
93
- var alignmentOpts = layout . _alignmentOpts || { } ;
89
+ var alignmentOpts = fullLayout . _alignmentOpts || { } ;
94
90
var alignmentgroup = coerce ( 'alignmentgroup' ) ;
95
91
96
92
var alignmentGroups = alignmentOpts [ groupId ] ;
@@ -123,7 +119,27 @@ function handleGroupingDefaults(traceIn, traceOut, layout, coerce) {
123
119
}
124
120
}
125
121
122
+ function crossTraceDefaults ( fullData , fullLayout ) {
123
+ var traceIn , traceOut ;
124
+
125
+ function coerce ( attr ) {
126
+ return Lib . coerce ( traceOut . _input , traceOut , attributes , attr ) ;
127
+ }
128
+
129
+ for ( var i = 0 ; i < fullData . length ; i ++ ) {
130
+ traceOut = fullData [ i ] ;
131
+
132
+ if ( traceOut . type === 'bar' ) {
133
+ traceIn = traceOut . _input ;
134
+ if ( fullLayout . barmode === 'group' ) {
135
+ handleGroupingDefaults ( traceIn , traceOut , fullLayout , coerce ) ;
136
+ }
137
+ }
138
+ }
139
+ }
140
+
126
141
module . exports = {
127
142
supplyDefaults : supplyDefaults ,
143
+ crossTraceDefaults : crossTraceDefaults ,
128
144
handleGroupingDefaults : handleGroupingDefaults
129
145
} ;
0 commit comments