6
6
* LICENSE file in the root directory of this source tree.
7
7
*/
8
8
9
-
10
9
'use strict' ;
11
10
12
11
var Lib = require ( '../../lib' ) ;
@@ -15,9 +14,10 @@ var Registry = require('../../registry');
15
14
16
15
var handleXYDefaults = require ( '../scatter/xy_defaults' ) ;
17
16
var handleStyleDefaults = require ( '../bar/style_defaults' ) ;
17
+ var getAxisGroup = require ( '../../plots/cartesian/axis_ids' ) . getAxisGroup ;
18
18
var attributes = require ( './attributes' ) ;
19
19
20
- module . exports = function supplyDefaults ( traceIn , traceOut , defaultColor , layout ) {
20
+ function supplyDefaults ( traceIn , traceOut , defaultColor , layout ) {
21
21
function coerce ( attr , dflt ) {
22
22
return Lib . coerce ( traceIn , traceOut , attributes , attr , dflt ) ;
23
23
}
@@ -78,4 +78,68 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout
78
78
errorBarsSupplyDefaults ( traceIn , traceOut , lineColor || Color . defaultLine , { axis : 'x' , inherit : 'y' } ) ;
79
79
80
80
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
81
145
} ;
0 commit comments