Skip to content

Commit 75a5cb4

Browse files
committed
clean up bar cross calc - pass prefix - remove mockGd from funnel and waterfall
1 parent 4fb5a2b commit 75a5cb4

File tree

4 files changed

+55
-80
lines changed

4 files changed

+55
-80
lines changed

src/traces/bar/cross_trace_calc.js

+50-50
Original file line numberDiff line numberDiff line change
@@ -49,23 +49,23 @@ function crossTraceCalc(gd, plotinfo) {
4949
}
5050
}
5151

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);
5454
}
5555

56-
function setGroupPositions(gd, pa, sa, calcTraces) {
56+
function setGroupPositions(prefix, gd, pa, sa, calcTraces) {
5757
if(!calcTraces.length) return;
5858

59-
var barmode = gd._fullLayout.barmode;
59+
var barmode = gd._fullLayout[prefix + 'mode'];
6060
var excluded;
6161
var included;
6262
var i, calcTrace, fullTrace;
6363

64-
initBase(gd, pa, sa, calcTraces);
64+
initBase(sa, calcTraces);
6565

6666
switch(barmode) {
6767
case 'overlay':
68-
setGroupPositionsInOverlayMode(gd, pa, sa, calcTraces);
68+
setGroupPositionsInOverlayMode(prefix, gd, pa, sa, calcTraces);
6969
break;
7070

7171
case 'group':
@@ -81,10 +81,10 @@ function setGroupPositions(gd, pa, sa, calcTraces) {
8181
}
8282

8383
if(included.length) {
84-
setGroupPositionsInGroupMode(gd, pa, sa, included);
84+
setGroupPositionsInGroupMode(prefix, gd, pa, sa, included);
8585
}
8686
if(excluded.length) {
87-
setGroupPositionsInOverlayMode(gd, pa, sa, excluded);
87+
setGroupPositionsInOverlayMode(prefix, gd, pa, sa, excluded);
8888
}
8989
break;
9090

@@ -102,18 +102,18 @@ function setGroupPositions(gd, pa, sa, calcTraces) {
102102
}
103103

104104
if(included.length) {
105-
setGroupPositionsInStackOrRelativeMode(gd, pa, sa, included);
105+
setGroupPositionsInStackOrRelativeMode(prefix, gd, pa, sa, included);
106106
}
107107
if(excluded.length) {
108-
setGroupPositionsInOverlayMode(gd, pa, sa, excluded);
108+
setGroupPositionsInOverlayMode(prefix, gd, pa, sa, excluded);
109109
}
110110
break;
111111
}
112112

113113
collectExtents(calcTraces, pa);
114114
}
115115

116-
function initBase(gd, pa, sa, calcTraces) {
116+
function initBase(sa, calcTraces) {
117117
var i, j;
118118

119119
for(i = 0; i < calcTraces.length; i++) {
@@ -156,8 +156,8 @@ function initBase(gd, pa, sa, calcTraces) {
156156
}
157157
}
158158

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'];
161161

162162
// update position axis and set bar offsets and widths
163163
for(var i = 0; i < calcTraces.length; i++) {
@@ -169,62 +169,62 @@ function setGroupPositionsInOverlayMode(gd, pa, sa, calcTraces) {
169169
});
170170

171171
// set bar offsets and widths, and update position axis
172-
setOffsetAndWidth(gd, pa, sieve);
172+
setOffsetAndWidth(prefix, gd, pa, sieve);
173173

174174
// set bar bases and sizes, and update size axis
175175
//
176176
// (note that `setGroupPositionsInOverlayMode` handles the case barnorm
177177
// is defined, because this function is also invoked for traces that
178178
// can't be grouped or stacked)
179179
if(barnorm) {
180-
sieveBars(gd, sa, sieve);
181-
normalizeBars(gd, sa, sieve);
180+
sieveBars(sieve);
181+
normalizeBars(prefix, gd, sa, sieve);
182182
} else {
183-
setBaseAndTop(gd, sa, sieve);
183+
setBaseAndTop(sa, sieve);
184184
}
185185
}
186186
}
187187

188-
function setGroupPositionsInGroupMode(gd, pa, sa, calcTraces) {
188+
function setGroupPositionsInGroupMode(prefix, gd, pa, sa, calcTraces) {
189189
var fullLayout = gd._fullLayout;
190-
var barnorm = fullLayout.barnorm;
190+
var barnorm = fullLayout[prefix + 'norm'];
191191

192192
var sieve = new Sieve(calcTraces, {
193193
sepNegVal: false,
194194
overlapNoMerge: !barnorm
195195
});
196196

197197
// set bar offsets and widths, and update position axis
198-
setOffsetAndWidthInGroupMode(gd, pa, sieve);
198+
setOffsetAndWidthInGroupMode(prefix, gd, pa, sieve);
199199

200200
// relative-stack bars within the same trace that would otherwise
201201
// be hidden
202-
unhideBarsWithinTrace(gd, sa, sieve);
202+
unhideBarsWithinTrace(sieve);
203203

204204
// set bar bases and sizes, and update size axis
205205
if(barnorm) {
206-
sieveBars(gd, sa, sieve);
207-
normalizeBars(gd, sa, sieve);
206+
sieveBars(sieve);
207+
normalizeBars(prefix, gd, sa, sieve);
208208
} else {
209-
setBaseAndTop(gd, sa, sieve);
209+
setBaseAndTop(sa, sieve);
210210
}
211211
}
212212

213-
function setGroupPositionsInStackOrRelativeMode(gd, pa, sa, calcTraces) {
213+
function setGroupPositionsInStackOrRelativeMode(prefix, gd, pa, sa, calcTraces) {
214214
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'];
217217

218218
var sieve = new Sieve(calcTraces, {
219219
sepNegVal: barmode === 'relative',
220220
overlapNoMerge: !(barnorm || barmode === 'stack' || barmode === 'relative')
221221
});
222222

223223
// set bar offsets and widths, and update position axis
224-
setOffsetAndWidth(gd, pa, sieve);
224+
setOffsetAndWidth(prefix, gd, pa, sieve);
225225

226226
// set bar bases and sizes, and update size axis
227-
stackBars(gd, sa, sieve);
227+
stackBars(prefix, gd, sa, sieve);
228228

229229
// flag the outmost bar (for text display purposes)
230230
for(var i = 0; i < calcTraces.length; i++) {
@@ -242,13 +242,13 @@ function setGroupPositionsInStackOrRelativeMode(gd, pa, sa, calcTraces) {
242242

243243
// Note that marking the outmost bars has to be done
244244
// before `normalizeBars` changes `bar.b` and `bar.s`.
245-
if(barnorm) normalizeBars(gd, sa, sieve);
245+
if(barnorm) normalizeBars(prefix, gd, sa, sieve);
246246
}
247247

248-
function setOffsetAndWidth(gd, pa, sieve) {
248+
function setOffsetAndWidth(prefix, gd, pa, sieve) {
249249
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;
252252

253253
var minDiff = sieve.minDiff;
254254
var calcTraces = sieve.traces;
@@ -279,16 +279,16 @@ function setOffsetAndWidth(gd, pa, sieve) {
279279
applyAttributes(sieve);
280280

281281
// store the bar center in each calcdata item
282-
setBarCenterAndWidth(gd, pa, sieve);
282+
setBarCenterAndWidth(pa, sieve);
283283

284284
// update position axes
285-
updatePositionAxis(gd, pa, sieve);
285+
updatePositionAxis(pa, sieve);
286286
}
287287

288-
function setOffsetAndWidthInGroupMode(gd, pa, sieve) {
288+
function setOffsetAndWidthInGroupMode(prefix, gd, pa, sieve) {
289289
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;
292292
var positions = sieve.positions;
293293
var distinctPositions = sieve.distinctPositions;
294294
var minDiff = sieve.minDiff;
@@ -342,10 +342,10 @@ function setOffsetAndWidthInGroupMode(gd, pa, sieve) {
342342
applyAttributes(sieve);
343343

344344
// store the bar center in each calcdata item
345-
setBarCenterAndWidth(gd, pa, sieve);
345+
setBarCenterAndWidth(pa, sieve);
346346

347347
// update position axes
348-
updatePositionAxis(gd, pa, sieve, overlap);
348+
updatePositionAxis(pa, sieve, overlap);
349349
}
350350

351351
function applyAttributes(sieve) {
@@ -426,7 +426,7 @@ function applyAttributes(sieve) {
426426
}
427427
}
428428

429-
function setBarCenterAndWidth(gd, pa, sieve) {
429+
function setBarCenterAndWidth(pa, sieve) {
430430
var calcTraces = sieve.traces;
431431
var pLetter = getAxisLetter(pa);
432432

@@ -448,7 +448,7 @@ function setBarCenterAndWidth(gd, pa, sieve) {
448448
}
449449
}
450450

451-
function updatePositionAxis(gd, pa, sieve, allowMinDtick) {
451+
function updatePositionAxis(pa, sieve, allowMinDtick) {
452452
var calcTraces = sieve.traces;
453453
var minDiff = sieve.minDiff;
454454
var vpad = minDiff / 2;
@@ -493,7 +493,7 @@ function updatePositionAxis(gd, pa, sieve, allowMinDtick) {
493493
// store these bar bases and tops in calcdata
494494
// and make sure the size axis includes zero,
495495
// along with the bases and tops of each bar.
496-
function setBaseAndTop(gd, sa, sieve) {
496+
function setBaseAndTop(sa, sieve) {
497497
var calcTraces = sieve.traces;
498498
var sLetter = getAxisLetter(sa);
499499

@@ -524,9 +524,9 @@ function setBaseAndTop(gd, sa, sieve) {
524524
}
525525
}
526526

527-
function stackBars(gd, sa, sieve) {
527+
function stackBars(prefix, gd, sa, sieve) {
528528
var fullLayout = gd._fullLayout;
529-
var barnorm = fullLayout.barnorm;
529+
var barnorm = fullLayout[prefix + 'norm'];
530530
var sLetter = getAxisLetter(sa);
531531
var calcTraces = sieve.traces;
532532
var calcTrace;
@@ -600,7 +600,7 @@ function stackBars(gd, sa, sieve) {
600600
}
601601
}
602602

603-
function sieveBars(gd, sa, sieve) {
603+
function sieveBars(sieve) {
604604
var calcTraces = sieve.traces;
605605

606606
for(var i = 0; i < calcTraces.length; i++) {
@@ -616,7 +616,7 @@ function sieveBars(gd, sa, sieve) {
616616
}
617617
}
618618

619-
function unhideBarsWithinTrace(gd, sa, sieve) {
619+
function unhideBarsWithinTrace(sieve) {
620620
var calcTraces = sieve.traces;
621621

622622
for(var i = 0; i < calcTraces.length; i++) {
@@ -650,14 +650,14 @@ function unhideBarsWithinTrace(gd, sa, sieve) {
650650
//
651651
// normalizeBars requires that either sieveBars or stackBars has been
652652
// previously invoked.
653-
function normalizeBars(gd, sa, sieve) {
653+
function normalizeBars(prefix, gd, sa, sieve) {
654654
var fullLayout = gd._fullLayout;
655655
var calcTraces = sieve.traces;
656656
var sLetter = getAxisLetter(sa);
657-
var sTop = fullLayout.barnorm === 'fraction' ? 1 : 100;
657+
var sTop = fullLayout[prefix + 'norm'] === 'fraction' ? 1 : 100;
658658
var sTiny = sTop / 1e9; // in case of rounding error in sum
659659
var sMin = sa.l2c(sa.c2l(0));
660-
var sMax = fullLayout.barmode === 'stack' ? sTop : sMin;
660+
var sMax = fullLayout[prefix + 'mode'] === 'stack' ? sTop : sMin;
661661

662662
function needsPadding(v) {
663663
return (

src/traces/barpolar/calc.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ function crossTraceCalc(gd, polarLayout, subplotId) {
100100
// TODO clean up setGroupPositions API instead
101101
var mockGd = {_fullLayout: polarLayout};
102102

103-
setGroupPositions(mockGd, aAxis, rAxis, barPolarCd);
103+
setGroupPositions('bar', mockGd, aAxis, rAxis, barPolarCd);
104104
}
105105

106106
module.exports = {

src/traces/funnel/cross_trace_calc.js

+2-15
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
var setGroupPositions = require('../bar/cross_trace_calc').setGroupPositions;
1212

1313
module.exports = function crossTraceCalc(gd, plotinfo) {
14-
var fullLayout = gd._fullLayout;
1514
var fullData = gd._fullData;
1615
var calcdata = gd.calcdata;
1716
var xa = plotinfo.xaxis;
@@ -43,20 +42,8 @@ module.exports = function crossTraceCalc(gd, plotinfo) {
4342
}
4443
}
4544

46-
// funnel version of 'barmode', 'barnorm', 'bargap' and 'bargroupgap'
47-
var mockGd = {
48-
_fullLayout: {
49-
_axisMatchGroups: fullLayout._axisMatchGroups,
50-
_alignmentOpts: fullLayout._alignmentOpts,
51-
barmode: fullLayout.funnelmode,
52-
barnorm: fullLayout.funnelnorm,
53-
bargap: fullLayout.funnelgap,
54-
bargroupgap: fullLayout.funnelgroupgap
55-
}
56-
};
57-
58-
setGroupPositions(mockGd, xa, ya, funnelsVert);
59-
setGroupPositions(mockGd, ya, xa, funnelsHorz);
45+
setGroupPositions('funnel', gd, xa, ya, funnelsVert);
46+
setGroupPositions('funnel', gd, ya, xa, funnelsHorz);
6047

6148
for(i = 0; i < funnels.length; i++) {
6249
cd = funnels[i];

src/traces/waterfall/cross_trace_calc.js

+2-14
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
var setGroupPositions = require('../bar/cross_trace_calc').setGroupPositions;
1212

1313
module.exports = function crossTraceCalc(gd, plotinfo) {
14-
var fullLayout = gd._fullLayout;
1514
var fullData = gd._fullData;
1615
var calcdata = gd.calcdata;
1716
var xa = plotinfo.xaxis;
@@ -42,19 +41,8 @@ module.exports = function crossTraceCalc(gd, plotinfo) {
4241
}
4342
}
4443

45-
// waterfall version of 'barmode', 'bargap' and 'bargroupgap'
46-
var mockGd = {
47-
_fullLayout: {
48-
_axisMatchGroups: fullLayout._axisMatchGroups,
49-
_alignmentOpts: fullLayout._alignmentOpts,
50-
barmode: fullLayout.waterfallmode,
51-
bargap: fullLayout.waterfallgap,
52-
bargroupgap: fullLayout.waterfallgroupgap
53-
}
54-
};
55-
56-
setGroupPositions(mockGd, xa, ya, waterfallsVert);
57-
setGroupPositions(mockGd, ya, xa, waterfallsHorz);
44+
setGroupPositions('waterfall', gd, xa, ya, waterfallsVert);
45+
setGroupPositions('waterfall', gd, ya, xa, waterfallsHorz);
5846

5947
for(i = 0; i < waterfalls.length; i++) {
6048
cd = waterfalls[i];

0 commit comments

Comments
 (0)