Skip to content

Commit 1c1ca3a

Browse files
committed
rm alignmentgroup/offsetgroup from bar/box/violin when mode!=group
1 parent a853521 commit 1c1ca3a

File tree

5 files changed

+88
-9
lines changed

5 files changed

+88
-9
lines changed

src/traces/bar/layout_defaults.js

+17-4
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
* LICENSE file in the root directory of this source tree.
77
*/
88

9-
109
'use strict';
1110

1211
var Registry = require('../../registry');
@@ -15,8 +14,9 @@ var Lib = require('../../lib');
1514

1615
var layoutAttributes = require('./layout_attributes');
1716

18-
1917
module.exports = function(layoutIn, layoutOut, fullData) {
18+
var i, trace;
19+
2020
function coerce(attr, dflt) {
2121
return Lib.coerce(layoutIn, layoutOut, layoutAttributes, attr, dflt);
2222
}
@@ -25,9 +25,10 @@ module.exports = function(layoutIn, layoutOut, fullData) {
2525
var shouldBeGapless = false;
2626
var gappedAnyway = false;
2727
var usedSubplots = {};
28+
var tracesWithGroupAttrs = [];
2829

29-
for(var i = 0; i < fullData.length; i++) {
30-
var trace = fullData[i];
30+
for(i = 0; i < fullData.length; i++) {
31+
trace = fullData[i];
3132
if(Registry.traceIs(trace, 'bar') && trace.visible) hasBars = true;
3233
else continue;
3334

@@ -44,6 +45,10 @@ module.exports = function(layoutIn, layoutOut, fullData) {
4445
trace[trace.orientation === 'v' ? 'xaxis' : 'yaxis']);
4546
if(pa.type !== 'category') shouldBeGapless = true;
4647
}
48+
49+
if(trace.alignmentgroup || trace.offsetgroup) {
50+
tracesWithGroupAttrs.push(trace);
51+
}
4752
}
4853

4954
if(!hasBars) return;
@@ -53,4 +58,12 @@ module.exports = function(layoutIn, layoutOut, fullData) {
5358

5459
coerce('bargap', (shouldBeGapless && !gappedAnyway) ? 0 : 0.2);
5560
coerce('bargroupgap');
61+
62+
if(mode !== 'group') {
63+
for(i = 0; i < tracesWithGroupAttrs.length; i++) {
64+
trace = tracesWithGroupAttrs[i];
65+
delete trace.alignmentgroup;
66+
delete trace.offsetgroup;
67+
}
68+
}
5669
};

src/traces/box/layout_defaults.js

+22-5
Original file line numberDiff line numberDiff line change
@@ -13,19 +13,36 @@ var Lib = require('../../lib');
1313
var layoutAttributes = require('./layout_attributes');
1414

1515
function _supply(layoutIn, layoutOut, fullData, coerce, traceType) {
16-
var hasTraceType;
16+
var i, trace;
17+
1718
var category = traceType + 'Layout';
18-
for(var i = 0; i < fullData.length; i++) {
19-
if(Registry.traceIs(fullData[i], category)) {
19+
var hasTraceType = false;
20+
var tracesWithGroupAttrs = [];
21+
22+
for(i = 0; i < fullData.length; i++) {
23+
trace = fullData[i];
24+
25+
if(Registry.traceIs(trace, category)) {
2026
hasTraceType = true;
21-
break;
27+
28+
if(trace.alignmentgroup || trace.offsetgroup) {
29+
tracesWithGroupAttrs.push(trace);
30+
}
2231
}
2332
}
2433
if(!hasTraceType) return;
2534

26-
coerce(traceType + 'mode');
35+
var mode = coerce(traceType + 'mode');
2736
coerce(traceType + 'gap');
2837
coerce(traceType + 'groupgap');
38+
39+
if(mode !== 'group') {
40+
for(i = 0; i < tracesWithGroupAttrs.length; i++) {
41+
trace = tracesWithGroupAttrs[i];
42+
delete trace.alignmentgroup;
43+
delete trace.offsetgroup;
44+
}
45+
}
2946
}
3047

3148
function supplyLayoutDefaults(layoutIn, layoutOut, fullData) {

test/jasmine/tests/bar_test.js

+16
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,22 @@ describe('Bar.supplyDefaults', function() {
210210
expect(traceOut.xcalendar).toBe('coptic');
211211
expect(traceOut.ycalendar).toBe('ethiopian');
212212
});
213+
214+
it('should not include alignementgroup/offsetgroup when barmode is not *group*', function() {
215+
var gd = {
216+
data: [{type: 'bar', y: [1], alignmentgroup: 'a', offsetgroup: '1'}],
217+
layout: {barmode: 'group'}
218+
};
219+
220+
supplyAllDefaults(gd);
221+
expect(gd._fullData[0].alignmentgroup).toBe('a', 'alignementgroup');
222+
expect(gd._fullData[0].offsetgroup).toBe('1', 'offsetgroup');
223+
224+
gd.layout.barmode = 'stack';
225+
supplyAllDefaults(gd);
226+
expect(gd._fullData[0].alignmentgroup).toBe(undefined, 'alignementgroup');
227+
expect(gd._fullData[0].offsetgroup).toBe(undefined, 'offsetgroup');
228+
});
213229
});
214230

215231
describe('bar calc / crossTraceCalc (formerly known as setPositions)', function() {

test/jasmine/tests/box_test.js

+17
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ var createGraphDiv = require('../assets/create_graph_div');
88
var destroyGraphDiv = require('../assets/destroy_graph_div');
99
var failTest = require('../assets/fail_test');
1010
var mouseEvent = require('../assets/mouse_event');
11+
var supplyAllDefaults = require('../assets/supply_defaults');
1112

1213
var customAssertions = require('../assets/custom_assertions');
1314
var assertHoverLabelContent = customAssertions.assertHoverLabelContent;
@@ -150,6 +151,22 @@ describe('Test boxes supplyDefaults', function() {
150151
expect(traceOut.marker).toBeDefined();
151152
expect(traceOut.text).toBeDefined();
152153
});
154+
155+
it('should not include alignementgroup/offsetgroup when boxmode is not *group*', function() {
156+
var gd = {
157+
data: [{type: 'box', y: [1], alignmentgroup: 'a', offsetgroup: '1'}],
158+
layout: {boxmode: 'group'}
159+
};
160+
161+
supplyAllDefaults(gd);
162+
expect(gd._fullData[0].alignmentgroup).toBe('a', 'alignementgroup');
163+
expect(gd._fullData[0].offsetgroup).toBe('1', 'offsetgroup');
164+
165+
gd.layout.boxmode = 'overlay';
166+
supplyAllDefaults(gd);
167+
expect(gd._fullData[0].alignmentgroup).toBe(undefined, 'alignementgroup');
168+
expect(gd._fullData[0].offsetgroup).toBe(undefined, 'offsetgroup');
169+
});
153170
});
154171

155172
describe('Test box hover:', function() {

test/jasmine/tests/violin_test.js

+16
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,22 @@ describe('Test violin defaults', function() {
159159
expect(traceOut.scalemode).toBe('width');
160160
expect(traceOut.scalegroup).toBe('');
161161
});
162+
163+
it('should not include alignementgroup/offsetgroup when violinmode is not *group*', function() {
164+
var gd = {
165+
data: [{type: 'violin', y: [1], alignmentgroup: 'a', offsetgroup: '1'}],
166+
layout: {violinmode: 'group'}
167+
};
168+
169+
supplyAllDefaults(gd);
170+
expect(gd._fullData[0].alignmentgroup).toBe('a', 'alignementgroup');
171+
expect(gd._fullData[0].offsetgroup).toBe('1', 'offsetgroup');
172+
173+
gd.layout.violinmode = 'overlay';
174+
supplyAllDefaults(gd);
175+
expect(gd._fullData[0].alignmentgroup).toBe(undefined, 'alignementgroup');
176+
expect(gd._fullData[0].offsetgroup).toBe(undefined, 'offsetgroup');
177+
});
162178
});
163179

164180
describe('Test violin calc:', function() {

0 commit comments

Comments
 (0)