@@ -49,23 +49,23 @@ function crossTraceCalc(gd, plotinfo) {
49
49
}
50
50
}
51
51
52
- setGroupPositions ( gd , xa , ya , calcTracesVertical ) ;
53
- setGroupPositions ( gd , ya , xa , calcTracesHorizontal ) ;
52
+ setGroupPositions ( 'bar' , gd , xa , ya , calcTracesVertical ) ;
53
+ setGroupPositions ( 'bar' , gd , ya , xa , calcTracesHorizontal ) ;
54
54
}
55
55
56
- function setGroupPositions ( gd , pa , sa , calcTraces ) {
56
+ function setGroupPositions ( prefix , gd , pa , sa , calcTraces ) {
57
57
if ( ! calcTraces . length ) return ;
58
58
59
- var barmode = gd . _fullLayout . barmode ;
59
+ var barmode = gd . _fullLayout [ prefix + 'mode' ] ;
60
60
var excluded ;
61
61
var included ;
62
62
var i , calcTrace , fullTrace ;
63
63
64
- initBase ( gd , pa , sa , calcTraces ) ;
64
+ initBase ( sa , calcTraces ) ;
65
65
66
66
switch ( barmode ) {
67
67
case 'overlay' :
68
- setGroupPositionsInOverlayMode ( gd , pa , sa , calcTraces ) ;
68
+ setGroupPositionsInOverlayMode ( prefix , gd , pa , sa , calcTraces ) ;
69
69
break ;
70
70
71
71
case 'group' :
@@ -81,10 +81,10 @@ function setGroupPositions(gd, pa, sa, calcTraces) {
81
81
}
82
82
83
83
if ( included . length ) {
84
- setGroupPositionsInGroupMode ( gd , pa , sa , included ) ;
84
+ setGroupPositionsInGroupMode ( prefix , gd , pa , sa , included ) ;
85
85
}
86
86
if ( excluded . length ) {
87
- setGroupPositionsInOverlayMode ( gd , pa , sa , excluded ) ;
87
+ setGroupPositionsInOverlayMode ( prefix , gd , pa , sa , excluded ) ;
88
88
}
89
89
break ;
90
90
@@ -102,18 +102,18 @@ function setGroupPositions(gd, pa, sa, calcTraces) {
102
102
}
103
103
104
104
if ( included . length ) {
105
- setGroupPositionsInStackOrRelativeMode ( gd , pa , sa , included ) ;
105
+ setGroupPositionsInStackOrRelativeMode ( prefix , gd , pa , sa , included ) ;
106
106
}
107
107
if ( excluded . length ) {
108
- setGroupPositionsInOverlayMode ( gd , pa , sa , excluded ) ;
108
+ setGroupPositionsInOverlayMode ( prefix , gd , pa , sa , excluded ) ;
109
109
}
110
110
break ;
111
111
}
112
112
113
113
collectExtents ( calcTraces , pa ) ;
114
114
}
115
115
116
- function initBase ( gd , pa , sa , calcTraces ) {
116
+ function initBase ( sa , calcTraces ) {
117
117
var i , j ;
118
118
119
119
for ( i = 0 ; i < calcTraces . length ; i ++ ) {
@@ -156,8 +156,8 @@ function initBase(gd, pa, sa, calcTraces) {
156
156
}
157
157
}
158
158
159
- function setGroupPositionsInOverlayMode ( gd , pa , sa , calcTraces ) {
160
- var barnorm = gd . _fullLayout . barnorm ;
159
+ function setGroupPositionsInOverlayMode ( prefix , gd , pa , sa , calcTraces ) {
160
+ var barnorm = gd . _fullLayout [ prefix + 'norm' ] ;
161
161
162
162
// update position axis and set bar offsets and widths
163
163
for ( var i = 0 ; i < calcTraces . length ; i ++ ) {
@@ -169,62 +169,62 @@ function setGroupPositionsInOverlayMode(gd, pa, sa, calcTraces) {
169
169
} ) ;
170
170
171
171
// set bar offsets and widths, and update position axis
172
- setOffsetAndWidth ( gd , pa , sieve ) ;
172
+ setOffsetAndWidth ( prefix , gd , pa , sieve ) ;
173
173
174
174
// set bar bases and sizes, and update size axis
175
175
//
176
176
// (note that `setGroupPositionsInOverlayMode` handles the case barnorm
177
177
// is defined, because this function is also invoked for traces that
178
178
// can't be grouped or stacked)
179
179
if ( barnorm ) {
180
- sieveBars ( gd , sa , sieve ) ;
181
- normalizeBars ( gd , sa , sieve ) ;
180
+ sieveBars ( sieve ) ;
181
+ normalizeBars ( prefix , gd , sa , sieve ) ;
182
182
} else {
183
- setBaseAndTop ( gd , sa , sieve ) ;
183
+ setBaseAndTop ( sa , sieve ) ;
184
184
}
185
185
}
186
186
}
187
187
188
- function setGroupPositionsInGroupMode ( gd , pa , sa , calcTraces ) {
188
+ function setGroupPositionsInGroupMode ( prefix , gd , pa , sa , calcTraces ) {
189
189
var fullLayout = gd . _fullLayout ;
190
- var barnorm = fullLayout . barnorm ;
190
+ var barnorm = fullLayout [ prefix + 'norm' ] ;
191
191
192
192
var sieve = new Sieve ( calcTraces , {
193
193
sepNegVal : false ,
194
194
overlapNoMerge : ! barnorm
195
195
} ) ;
196
196
197
197
// set bar offsets and widths, and update position axis
198
- setOffsetAndWidthInGroupMode ( gd , pa , sieve ) ;
198
+ setOffsetAndWidthInGroupMode ( prefix , gd , pa , sieve ) ;
199
199
200
200
// relative-stack bars within the same trace that would otherwise
201
201
// be hidden
202
- unhideBarsWithinTrace ( gd , sa , sieve ) ;
202
+ unhideBarsWithinTrace ( sieve ) ;
203
203
204
204
// set bar bases and sizes, and update size axis
205
205
if ( barnorm ) {
206
- sieveBars ( gd , sa , sieve ) ;
207
- normalizeBars ( gd , sa , sieve ) ;
206
+ sieveBars ( sieve ) ;
207
+ normalizeBars ( prefix , gd , sa , sieve ) ;
208
208
} else {
209
- setBaseAndTop ( gd , sa , sieve ) ;
209
+ setBaseAndTop ( sa , sieve ) ;
210
210
}
211
211
}
212
212
213
- function setGroupPositionsInStackOrRelativeMode ( gd , pa , sa , calcTraces ) {
213
+ function setGroupPositionsInStackOrRelativeMode ( prefix , gd , pa , sa , calcTraces ) {
214
214
var fullLayout = gd . _fullLayout ;
215
- var barmode = fullLayout . barmode ;
216
- var barnorm = fullLayout . barnorm ;
215
+ var barmode = fullLayout [ prefix + 'mode' ] ;
216
+ var barnorm = fullLayout [ prefix + 'norm' ] ;
217
217
218
218
var sieve = new Sieve ( calcTraces , {
219
219
sepNegVal : barmode === 'relative' ,
220
220
overlapNoMerge : ! ( barnorm || barmode === 'stack' || barmode === 'relative' )
221
221
} ) ;
222
222
223
223
// set bar offsets and widths, and update position axis
224
- setOffsetAndWidth ( gd , pa , sieve ) ;
224
+ setOffsetAndWidth ( prefix , gd , pa , sieve ) ;
225
225
226
226
// set bar bases and sizes, and update size axis
227
- stackBars ( gd , sa , sieve ) ;
227
+ stackBars ( prefix , gd , sa , sieve ) ;
228
228
229
229
// flag the outmost bar (for text display purposes)
230
230
for ( var i = 0 ; i < calcTraces . length ; i ++ ) {
@@ -242,13 +242,13 @@ function setGroupPositionsInStackOrRelativeMode(gd, pa, sa, calcTraces) {
242
242
243
243
// Note that marking the outmost bars has to be done
244
244
// before `normalizeBars` changes `bar.b` and `bar.s`.
245
- if ( barnorm ) normalizeBars ( gd , sa , sieve ) ;
245
+ if ( barnorm ) normalizeBars ( prefix , gd , sa , sieve ) ;
246
246
}
247
247
248
- function setOffsetAndWidth ( gd , pa , sieve ) {
248
+ function setOffsetAndWidth ( prefix , gd , pa , sieve ) {
249
249
var fullLayout = gd . _fullLayout ;
250
- var bargap = fullLayout . bargap ;
251
- var bargroupgap = fullLayout . bargroupgap || 0 ;
250
+ var bargap = fullLayout [ prefix + 'gap' ] ;
251
+ var bargroupgap = fullLayout [ prefix + 'groupgap' ] || 0 ;
252
252
253
253
var minDiff = sieve . minDiff ;
254
254
var calcTraces = sieve . traces ;
@@ -279,16 +279,16 @@ function setOffsetAndWidth(gd, pa, sieve) {
279
279
applyAttributes ( sieve ) ;
280
280
281
281
// store the bar center in each calcdata item
282
- setBarCenterAndWidth ( gd , pa , sieve ) ;
282
+ setBarCenterAndWidth ( pa , sieve ) ;
283
283
284
284
// update position axes
285
- updatePositionAxis ( gd , pa , sieve ) ;
285
+ updatePositionAxis ( pa , sieve ) ;
286
286
}
287
287
288
- function setOffsetAndWidthInGroupMode ( gd , pa , sieve ) {
288
+ function setOffsetAndWidthInGroupMode ( prefix , gd , pa , sieve ) {
289
289
var fullLayout = gd . _fullLayout ;
290
- var bargap = fullLayout . bargap ;
291
- var bargroupgap = fullLayout . bargroupgap || 0 ;
290
+ var bargap = fullLayout [ prefix + 'gap' ] ;
291
+ var bargroupgap = fullLayout [ prefix + 'groupgap' ] || 0 ;
292
292
var positions = sieve . positions ;
293
293
var distinctPositions = sieve . distinctPositions ;
294
294
var minDiff = sieve . minDiff ;
@@ -342,10 +342,10 @@ function setOffsetAndWidthInGroupMode(gd, pa, sieve) {
342
342
applyAttributes ( sieve ) ;
343
343
344
344
// store the bar center in each calcdata item
345
- setBarCenterAndWidth ( gd , pa , sieve ) ;
345
+ setBarCenterAndWidth ( pa , sieve ) ;
346
346
347
347
// update position axes
348
- updatePositionAxis ( gd , pa , sieve , overlap ) ;
348
+ updatePositionAxis ( pa , sieve , overlap ) ;
349
349
}
350
350
351
351
function applyAttributes ( sieve ) {
@@ -426,7 +426,7 @@ function applyAttributes(sieve) {
426
426
}
427
427
}
428
428
429
- function setBarCenterAndWidth ( gd , pa , sieve ) {
429
+ function setBarCenterAndWidth ( pa , sieve ) {
430
430
var calcTraces = sieve . traces ;
431
431
var pLetter = getAxisLetter ( pa ) ;
432
432
@@ -448,7 +448,7 @@ function setBarCenterAndWidth(gd, pa, sieve) {
448
448
}
449
449
}
450
450
451
- function updatePositionAxis ( gd , pa , sieve , allowMinDtick ) {
451
+ function updatePositionAxis ( pa , sieve , allowMinDtick ) {
452
452
var calcTraces = sieve . traces ;
453
453
var minDiff = sieve . minDiff ;
454
454
var vpad = minDiff / 2 ;
@@ -493,7 +493,7 @@ function updatePositionAxis(gd, pa, sieve, allowMinDtick) {
493
493
// store these bar bases and tops in calcdata
494
494
// and make sure the size axis includes zero,
495
495
// along with the bases and tops of each bar.
496
- function setBaseAndTop ( gd , sa , sieve ) {
496
+ function setBaseAndTop ( sa , sieve ) {
497
497
var calcTraces = sieve . traces ;
498
498
var sLetter = getAxisLetter ( sa ) ;
499
499
@@ -524,9 +524,9 @@ function setBaseAndTop(gd, sa, sieve) {
524
524
}
525
525
}
526
526
527
- function stackBars ( gd , sa , sieve ) {
527
+ function stackBars ( prefix , gd , sa , sieve ) {
528
528
var fullLayout = gd . _fullLayout ;
529
- var barnorm = fullLayout . barnorm ;
529
+ var barnorm = fullLayout [ prefix + 'norm' ] ;
530
530
var sLetter = getAxisLetter ( sa ) ;
531
531
var calcTraces = sieve . traces ;
532
532
var calcTrace ;
@@ -600,7 +600,7 @@ function stackBars(gd, sa, sieve) {
600
600
}
601
601
}
602
602
603
- function sieveBars ( gd , sa , sieve ) {
603
+ function sieveBars ( sieve ) {
604
604
var calcTraces = sieve . traces ;
605
605
606
606
for ( var i = 0 ; i < calcTraces . length ; i ++ ) {
@@ -616,7 +616,7 @@ function sieveBars(gd, sa, sieve) {
616
616
}
617
617
}
618
618
619
- function unhideBarsWithinTrace ( gd , sa , sieve ) {
619
+ function unhideBarsWithinTrace ( sieve ) {
620
620
var calcTraces = sieve . traces ;
621
621
622
622
for ( var i = 0 ; i < calcTraces . length ; i ++ ) {
@@ -650,14 +650,14 @@ function unhideBarsWithinTrace(gd, sa, sieve) {
650
650
//
651
651
// normalizeBars requires that either sieveBars or stackBars has been
652
652
// previously invoked.
653
- function normalizeBars ( gd , sa , sieve ) {
653
+ function normalizeBars ( prefix , gd , sa , sieve ) {
654
654
var fullLayout = gd . _fullLayout ;
655
655
var calcTraces = sieve . traces ;
656
656
var sLetter = getAxisLetter ( sa ) ;
657
- var sTop = fullLayout . barnorm === 'fraction' ? 1 : 100 ;
657
+ var sTop = fullLayout [ prefix + 'norm' ] === 'fraction' ? 1 : 100 ;
658
658
var sTiny = sTop / 1e9 ; // in case of rounding error in sum
659
659
var sMin = sa . l2c ( sa . c2l ( 0 ) ) ;
660
- var sMax = fullLayout . barmode === 'stack' ? sTop : sMin ;
660
+ var sMax = fullLayout [ prefix + 'mode' ] === 'stack' ? sTop : sMin ;
661
661
662
662
function needsPadding ( v ) {
663
663
return (
0 commit comments