66* LICENSE file in the root directory of this source tree.
77*/
88
9-
109'use strict' ;
1110
1211var Lib = require ( '../../lib' ) ;
@@ -15,9 +14,10 @@ var Registry = require('../../registry');
1514
1615var handleXYDefaults = require ( '../scatter/xy_defaults' ) ;
1716var handleStyleDefaults = require ( '../bar/style_defaults' ) ;
17+ var getAxisGroup = require ( '../../plots/cartesian/axis_ids' ) . getAxisGroup ;
1818var attributes = require ( './attributes' ) ;
1919
20- module . exports = function supplyDefaults ( traceIn , traceOut , defaultColor , layout ) {
20+ function supplyDefaults ( traceIn , traceOut , defaultColor , layout ) {
2121 function coerce ( attr , dflt ) {
2222 return Lib . coerce ( traceIn , traceOut , attributes , attr , dflt ) ;
2323 }
@@ -78,4 +78,68 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout
7878 errorBarsSupplyDefaults ( traceIn , traceOut , lineColor || Color . defaultLine , { axis : 'x' , inherit : 'y' } ) ;
7979
8080 Lib . coerceSelectionMarkerOpacity ( traceOut , coerce ) ;
81+ }
82+
83+ function handleGroupingDefaults ( traceIn , traceOut , fullLayout , coerce ) {
84+ var orientation = traceOut . orientation ;
85+ // N.B. grouping is done across all trace trace types that support it
86+ var posAxId = traceOut [ { v : 'x' , h : 'y' } [ orientation ] + 'axis' ] ;
87+ var groupId = getAxisGroup ( fullLayout , posAxId ) + orientation ;
88+
89+ var alignmentOpts = fullLayout . _alignmentOpts || { } ;
90+ var alignmentgroup = coerce ( 'alignmentgroup' ) ;
91+
92+ var alignmentGroups = alignmentOpts [ groupId ] ;
93+ if ( ! alignmentGroups ) alignmentGroups = alignmentOpts [ groupId ] = { } ;
94+
95+ var alignmentGroupOpts = alignmentGroups [ alignmentgroup ] ;
96+
97+ if ( alignmentGroupOpts ) {
98+ alignmentGroupOpts . traces . push ( traceOut ) ;
99+ } else {
100+ alignmentGroupOpts = alignmentGroups [ alignmentgroup ] = {
101+ traces : [ traceOut ] ,
102+ alignmentIndex : Object . keys ( alignmentGroups ) . length ,
103+ offsetGroups : { }
104+ } ;
105+ }
106+
107+ var offsetgroup = coerce ( 'offsetgroup' ) ;
108+ var offsetGroups = alignmentGroupOpts . offsetGroups ;
109+ var offsetGroupOpts = offsetGroups [ offsetgroup ] ;
110+
111+ if ( offsetgroup ) {
112+ if ( ! offsetGroupOpts ) {
113+ offsetGroupOpts = offsetGroups [ offsetgroup ] = {
114+ offsetIndex : Object . keys ( offsetGroups ) . length
115+ } ;
116+ }
117+
118+ traceOut . _offsetIndex = offsetGroupOpts . offsetIndex ;
119+ }
120+ }
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+
141+ module . exports = {
142+ supplyDefaults : supplyDefaults ,
143+ crossTraceDefaults : crossTraceDefaults ,
144+ handleGroupingDefaults : handleGroupingDefaults
81145} ;
0 commit comments