@@ -14,6 +14,7 @@ var Registry = require('../../registry');
1414
1515var handleXYDefaults = require ( '../scatter/xy_defaults' ) ;
1616var handleStyleDefaults = require ( '../bar/style_defaults' ) ;
17+ var getAxisGroup = require ( '../../plots/cartesian/axis_ids' ) . getAxisGroup ;
1718var attributes = require ( './attributes' ) ;
1819
1920function supplyDefaults ( traceIn , traceOut , defaultColor , layout ) {
@@ -76,21 +77,16 @@ function supplyDefaults(traceIn, traceOut, defaultColor, layout) {
7677 errorBarsSupplyDefaults ( traceIn , traceOut , lineColor || Color . defaultLine , { axis : 'y' } ) ;
7778 errorBarsSupplyDefaults ( traceIn , traceOut , lineColor || Color . defaultLine , { axis : 'x' , inherit : 'y' } ) ;
7879
79- handleGroupingDefaults ( traceIn , traceOut , layout , coerce ) ;
80-
8180 Lib . coerceSelectionMarkerOpacity ( traceOut , coerce ) ;
8281}
8382
84- function handleGroupingDefaults ( traceIn , traceOut , layout , coerce ) {
83+ function handleGroupingDefaults ( traceIn , traceOut , fullLayout , coerce ) {
8584 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
9086 var posAxId = traceOut [ { v : 'x' , h : 'y' } [ orientation ] + 'axis' ] ;
91- var groupId = posAxId + orientation ;
87+ var groupId = getAxisGroup ( fullLayout , posAxId ) + orientation ;
9288
93- var alignmentOpts = layout . _alignmentOpts || { } ;
89+ var alignmentOpts = fullLayout . _alignmentOpts || { } ;
9490 var alignmentgroup = coerce ( 'alignmentgroup' ) ;
9591
9692 var alignmentGroups = alignmentOpts [ groupId ] ;
@@ -123,7 +119,27 @@ function handleGroupingDefaults(traceIn, traceOut, layout, coerce) {
123119 }
124120}
125121
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+
126141module . exports = {
127142 supplyDefaults : supplyDefaults ,
143+ crossTraceDefaults : crossTraceDefaults ,
128144 handleGroupingDefaults : handleGroupingDefaults
129145} ;
0 commit comments