8000 Multiple legend positioning and sizing fixes by etpinard · Pull Request #4160 · plotly/plotly.js · GitHub
[go: up one dir, main page]

Skip to content
8000

Multiple legend positioning and sizing fixes #4160

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 20 commits into from
Sep 23, 2019
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
3ab7713
rm useless legend/anchor_utils.js file
etpinard Aug 15, 2019
de369f3
improve legend x, y, xanchor, yanchor attr declarations
etpinard Aug 14, 2019
1cf347a
drop firstRender logic in Legend.draw
etpinard Aug 7, 2019
82b9769
calc max name/label length in getLegendData
etpinard Aug 7, 2019
0c497bb
add a few things to legend/constants.js
etpinard Aug 9, 2019
f12c62c
drop expandHorizontalMargin logic
etpinard Aug 9, 2019
d770138
some more linting
etpinard Aug 13, 2019
51df66d
trim toggle-rect to more-precise width
etpinard Aug 13, 2019
bf586d4
add more legend mocks (with 1.49.4 baselines)
etpinard Aug 13, 2019
488cca1
fix many legend auto-margin push and positioning edge cases
etpinard Aug 16, 2019
c33c92f
do not constrain legend (x,y) when `margin.autoexpand:false`
etpinard Aug 16, 2019
1e6862a
Lib.log when margin push are dropped
etpinard Aug 14, 2019
1f00a40
add Lib.log when legend (x,y) are constrained into graph width/height
etpinard Aug 30, 2019
2b2bd9b
add mocks showing #4132 bug
etpinard Aug 19, 2019
6b0befe
fix #4132 - fix horizontal legend dimension computations
etpinard Aug 19, 2019
6b2b63b
Merge branch 'master' into legend-horizontal-computed-dims-fix
8000 etpinard Sep 9, 2019
e92ca98
cleanup legend relayout tests
etpinard Sep 10, 2019
35b0c92
fixup variable name in legend maxWidth logic block
etpinard Sep 10, 2019
42d5e4e
end Legend.draw early when margin-redraw in-progress
etpinard Sep 10, 2019
d043151
add margin.autoexpand attr description
etpinard Sep 23, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
improve legend x, y, xanchor, yanchor attr declarations
- do not list `dflt` in schema as their value depends on
  the legend orientation (and rangeslider ;)
- improve attr descriptions
- add comment for potential v2 improvement
  • Loading branch information
etpinard committed Aug 30, 2019
commit de369f38bcd4eaf019345cd844d73e4cdba03030
26 changes: 19 additions & 7 deletions src/components/legend/attributes.js
Original file line number Diff line number Diff line change
Expand Up @@ -121,10 +121,13 @@ module.exports = {
valType: 'number',
min: -2,
max: 3,
dflt: 1.02,
role: 'style',
editType: 'legend',
description: 'Sets the x position (in normalized coordinates) of the legend.'
description: [
'Sets the x position (in normalized coordinates) of the legend.',
'Defaults to *1.02* for vertical legends and',
'defaults to *0* for horizontal legends.'
].join(' ')
},
xanchor: {
valType: 'enumerated',
Expand All @@ -135,28 +138,37 @@ module.exports = {
description: [
'Sets the legend\'s horizontal position anchor.',
'This anchor binds the `x` position to the *left*, *center*',
'or *right* of the legend.'
'or *right* of the legend.',
'Value *auto* anchors legends to the right for `x` values greater than or equal to 2/3,',
'anchors legends to the left for `x` values less than or equal to 1/3 and',
'anchors legends with respect to their center otherwise.'
].join(' ')
},
y: {
valType: 'number',
min: -2,
max: 3,
dflt: 1,
role: 'style',
editType: 'legend',
description: 'Sets the y position (in normalized coordinates) of the legend.'
description: [
'Sets the y position (in normalized coordinates) of the legend.',
'Defaults to *1* for vertical legends,',
'defaults to *-0.1* for horizontal legends on graphs w/o range sliders and',
'defaults to *1.1* for horizontal legends on graph with one or multiple range sliders.'
].join(' ')
},
yanchor: {
valType: 'enumerated',
values: ['auto', 'top', 'middle', 'bottom'],
dflt: 'auto',
role: 'info',
editType: 'legend',
description: [
'Sets the legend\'s vertical position anchor',
'This anchor binds the `y` position to the *top*, *middle*',
'or *bottom* of the legend.'
'or *bottom* of the legend.',
'Value *auto* anchors legends at their bottom for `y` values less than or equal to 1/3,',
'anchors legends to at their top for `y` values greater than or equal to 2/3 and',
'anchors legends with respect to their middle otherwise.'
].join(' ')
},
uirevision: {
Expand Down
26 changes: 15 additions & 11 deletions src/components/legend/defaults.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,6 @@ module.exports = function legendDefaults(layoutIn, layoutOut, fullData) {
var legendReallyHasATrace = false;
var defaultOrder = 'normal';

var defaultX, defaultY, defaultXAnchor, defaultYAnchor;

for(var i = 0; i < fullData.length; i++) {
var trace = fullData[i];

Expand Down Expand Up @@ -82,20 +80,26 @@ module.exports = function legendDefaults(layoutIn, layoutOut, fullData) {
coerce('borderwidth');
Lib.coerceFont(coerce, 'font', layoutOut.font);

coerce('orientation');
if(containerOut.orientation === 'h') {
var xaxis = layoutIn.xaxis;
if(Registry.getComponentMethod('rangeslider', 'isVisible')(xaxis)) {
defaultX = 0;
defaultXAnchor = 'left';
var orientation = coerce('orientation');
var defaultX, defaultY, defaultYAnchor;

if(orientation === 'h') {
defaultX = 0;

if(Registry.getComponentMethod('rangeslider', 'isVisible')(layoutIn.xaxis)) {
defaultY = 1.1;
defaultYAnchor = 'bottom';
} else {
defaultX = 0;
defaultXAnchor = 'left';
// maybe use y=1.1 / yanchor=bottom as above
// to avoid https://github.com/plotly/plotly.js/issues/1199
// in v2
defaultY = -0.1;
defaultYAnchor = 'top';
}
} else {
defaultX = 1.02;
defaultY = 1;
defaultYAnchor = 'auto';
}

coerce('traceorder', defaultOrder);
Expand All @@ -107,7 +111,7 @@ module.exports = function legendDefaults(layoutIn, layoutOut, fullData) {
coerce('itemdoubleclick');

coerce('x', defaultX);
coerce('xanchor', defaultXAnchor);
coerce('xanchor');
coerce('y', defaultY);
coerce('yanchor', defaultYAnchor);
coerce('valign');
Expand Down
0