Skip to content

Commit 5c91b8f

Browse files
committed
Merge pull request #535 from n-riesco/legend-orientation
Implement `layout.legend.orientation` (closes #53)
2 parents 75614a5 + 313976d commit 5c91b8f

File tree

10 files changed

+656
-134
lines changed

10 files changed

+656
-134
lines changed

src/components/legend/attributes.js

+7
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,13 @@ module.exports = {
3535
font: extendFlat({}, fontAttrs, {
3636
description: 'Sets the font used to text the legend items.'
3737
}),
38+
orientation: {
39+
valType: 'enumerated',
40+
values: ['v', 'h'],
41+
dflt: 'v',
42+
role: 'info',
43+
description: 'Sets the orientation of the legend.'
44+
},
3845
traceorder: {
3946
valType: 'flaglist',
4047
flags: ['reversed', 'grouped'],

src/components/legend/defaults.js

+26-5
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,11 @@ module.exports = function legendDefaults(layoutIn, layoutOut, fullData) {
2121
containerOut = layoutOut.legend = {};
2222

2323
var visibleTraces = 0,
24-
defaultOrder = 'normal';
24+
defaultOrder = 'normal',
25+
defaultX,
26+
defaultY,
27+
defaultXAnchor,
28+
defaultYAnchor;
2529

2630
for(var i = 0; i < fullData.length; i++) {
2731
var trace = fullData[i];
@@ -58,12 +62,29 @@ module.exports = function legendDefaults(layoutIn, layoutOut, fullData) {
5862
coerce('borderwidth');
5963
Lib.coerceFont(coerce, 'font', layoutOut.font);
6064

65+
coerce('orientation');
66+
if(containerOut.orientation === 'h') {
67+
var xaxis = layoutIn.xaxis;
68+
if(xaxis && xaxis.rangeslider && xaxis.rangeslider.visible) {
69+
defaultX = 0;
70+
defaultXAnchor = 'left';
71+
defaultY = 1.1;
72+
defaultYAnchor = 'bottom';
73+
}
74+
else {
75+
defaultX = 0;
76+
defaultXAnchor = 'left';
77+
defaultY = -0.1;
78+
defaultYAnchor = 'top';
79+
}
80+
}
81+
6182
coerce('traceorder', defaultOrder);
6283
if(helpers.isGrouped(layoutOut.legend)) coerce('tracegroupgap');
6384

64-
coerce('x');
65-
coerce('xanchor');
66-
coerce('y');
67-
coerce('yanchor');
85+
coerce('x', defaultX);
86+
coerce('xanchor', defaultXAnchor);
87+
coerce('y', defaultY);
88+
coerce('yanchor', defaultYAnchor);
6889
Lib.noneOrAll(containerIn, containerOut, ['x', 'y']);
6990
};

0 commit comments

Comments
 (0)