From 68c6165a137f667dfa607b2d9db7989c803944b9 Mon Sep 17 00:00:00 2001 From: hannahker Date: Fri, 6 Jan 2023 15:05:55 -0800 Subject: [PATCH 01/59] Initial pass with hard-coded automargin params --- src/components/titles/index.js | 14 ++++++++++ src/plot_api/plot_api.js | 1 + src/plots/layout_attributes.js | 9 +++++++ src/plots/plots.js | 1 + test/image/mocks/zz-automargin-title.json | 31 +++++++++++++++++++++++ test/plot-schema.json | 7 +++++ 6 files changed, 63 insertions(+) create mode 100644 test/image/mocks/zz-automargin-title.json diff --git a/src/components/titles/index.js b/src/components/titles/index.js index 0e6b4a07eeb..687c825c4a0 100644 --- a/src/components/titles/index.js +++ b/src/components/titles/index.js @@ -77,6 +77,20 @@ function draw(gd, titleClass, options) { else if(prop.indexOf('colorbar' !== -1)) editAttr = 'colorbarTitleText'; var editable = gd._context.edits[editAttr]; + if(editAttr === 'titleText' && title.automargin === true) { + // TODO: Could there ever be more than one title? + var titleID = 'title.automargin'; + Plots.allowAutoMargin(gd, titleID); + // TODO: Remove hard-coding + Plots.autoMargin(gd, titleID, { + x: 0.5, + y: 1, + l: 0, + r: 0, + t: 50, + b: 0}); + } + if(txt === '') opacity = 0; // look for placeholder text while stripping out numbers from eg X2, Y3 // this is just for backward compatibility with the old version that had diff --git a/src/plot_api/plot_api.js b/src/plot_api/plot_api.js index 77fd6ee9ccc..9b863ed1515 100644 --- a/src/plot_api/plot_api.js +++ b/src/plot_api/plot_api.js @@ -277,6 +277,7 @@ function _doPlot(gd, data, layout, config) { subroutines.drawMarginPushers(gd); Axes.allowAutoMargin(gd); + Plots.allowAutoMargin(gd, 'title.automargin'); // TODO can this be moved elsewhere? if(fullLayout._has('pie')) { diff --git a/src/plots/layout_attributes.js b/src/plots/layout_attributes.js index 38fe31ed189..f0ea217c619 100644 --- a/src/plots/layout_attributes.js +++ b/src/plots/layout_attributes.js @@ -125,6 +125,15 @@ module.exports = { 'Padding is muted if the respective anchor value is *middle*/*center*.' ].join(' ') }), + automargin: { + valType: 'boolean', + dflt: false, + role: 'info', + editType: 'plot', + description: [ + 'Determines whether the title can automatically push the figure margins.' + ].join(' ') + }, editType: 'layoutstyle' }, uniformtext: { diff --git a/src/plots/plots.js b/src/plots/plots.js index 90cfe14eec7..9316bd2bf2b 100644 --- a/src/plots/plots.js +++ b/src/plots/plots.js @@ -1489,6 +1489,7 @@ plots.supplyLayoutGlobalDefaults = function(layoutIn, layoutOut, formatObj) { coerce('title.pad.r'); coerce('title.pad.b'); coerce('title.pad.l'); + coerce('title.automargin'); var uniformtextMode = coerce('uniformtext.mode'); if(uniformtextMode) { diff --git a/test/image/mocks/zz-automargin-title.json b/test/image/mocks/zz-automargin-title.json new file mode 100644 index 00000000000..5eedba6d6a9 --- /dev/null +++ b/test/image/mocks/zz-automargin-title.json @@ -0,0 +1,31 @@ +{ + "data": [ + { + "showlegend": false, + "type": "scatter", + "x": [ + 1, + 2, + 3 + ], + "y": [ + 4, + 5, + 6 + ] + }], + "layout": { + "margin": {"t":0, "b": 0, "l": 0, "r": 0}, + "yaxis": { + "automargin": true, + "title": {"text": "Y-axis"} + }, + "xaxis": {"automargin": true, + "title": {"text": "X-axis"} + }, + "title": { + "automargin": true, + "text": "Some text" + } + } +} diff --git a/test/plot-schema.json b/test/plot-schema.json index cbe172483ac..32370891f22 100644 --- a/test/plot-schema.json +++ b/test/plot-schema.json @@ -9425,6 +9425,13 @@ } }, "title": { + "automargin": { + "description": "Determines whether the title can automatically push the figure margins.", + "dflt": false, + "editType": "plot", + "role": "info", + "valType": "boolean" + }, "editType": "layoutstyle", "font": { "color": { From ad6eb0068842272fd67325c58b2b360e9c03889d Mon Sep 17 00:00:00 2001 From: hannahker Date: Fri, 6 Jan 2023 17:17:14 -0800 Subject: [PATCH 02/59] Remove role from schema --- src/plots/layout_attributes.js | 1 - test/plot-schema.json | 1 - 2 files changed, 2 deletions(-) diff --git a/src/plots/layout_attributes.js b/src/plots/layout_attributes.js index f0ea217c619..9de73203039 100644 --- a/src/plots/layout_attributes.js +++ b/src/plots/layout_attributes.js @@ -128,7 +128,6 @@ module.exports = { automargin: { valType: 'boolean', dflt: false, - role: 'info', editType: 'plot', description: [ 'Determines whether the title can automatically push the figure margins.' diff --git a/test/plot-schema.json b/test/plot-schema.json index 32370891f22..ee25a458667 100644 --- a/test/plot-schema.json +++ b/test/plot-schema.json @@ -9429,7 +9429,6 @@ "description": "Determines whether the title can automatically push the figure margins.", "dflt": false, "editType": "plot", - "role": "info", "valType": "boolean" }, "editType": "layoutstyle", From 45d9cbfcf58f67e9e5f19915bde7d47540474028 Mon Sep 17 00:00:00 2001 From: hannahker Date: Thu, 26 Jan 2023 09:58:19 -0800 Subject: [PATCH 03/59] Move automargin call --- src/components/titles/index.js | 13 ----- src/plot_api/subroutines.js | 60 ++++++++++++++++++++--- test/image/mocks/zz-automargin-title.json | 4 +- 3 files changed, 55 insertions(+), 22 deletions(-) diff --git a/src/components/titles/index.js b/src/components/titles/index.js index 687c825c4a0..4d79fed2a4e 100644 --- a/src/components/titles/index.js +++ b/src/components/titles/index.js @@ -77,19 +77,6 @@ function draw(gd, titleClass, options) { else if(prop.indexOf('colorbar' !== -1)) editAttr = 'colorbarTitleText'; var editable = gd._context.edits[editAttr]; - if(editAttr === 'titleText' && title.automargin === true) { - // TODO: Could there ever be more than one title? - var titleID = 'title.automargin'; - Plots.allowAutoMargin(gd, titleID); - // TODO: Remove hard-coding - Plots.autoMargin(gd, titleID, { - x: 0.5, - y: 1, - l: 0, - r: 0, - t: 50, - b: 0}); - } if(txt === '') opacity = 0; // look for placeholder text while stripping out numbers from eg X2, Y3 diff --git a/src/plot_api/subroutines.js b/src/plot_api/subroutines.js index 9ec735d48de..f9ea3704759 100644 --- a/src/plot_api/subroutines.js +++ b/src/plot_api/subroutines.js @@ -413,8 +413,59 @@ exports.drawMainTitle = function(gd) { dy: dy } }); + + applyTitleAutoMargin(gd, fullLayout, dy); + }; +function applyTitleAutoMargin(gd, fullLayout, dy){ + var title = fullLayout.title; + + if( + !title.automargin || + title.yref!=='container' //|| + //((title.y!==1 && title.yanchor!=='top') && + //(title.y!==0 && title.yanchor!=='bottom')) + ) { + console.log('invalid title layout for automargin') + return + } else { + var vPadShift = getVPadShift(title, dy) + var push = { + x: title.x, + y: 1, + l: 0, + r: 0, + t: 0, + b: 0, + pad: 0 + }; + + if(title.yref === 'paper'){ + push.t = 0; + } else { + push.t = title.font.size; + } + push.t += Math.abs(vPadShift); + console.log(push) + + var titleID = 'title.automargin'; + Plots.allowAutoMargin(gd, titleID); + Plots.autoMargin(gd, titleID, push); + } +} + +function getVPadShift(title, dy) { + var vPadShift = 0; + if(dy === '0em' || !dy) { + vPadShift = -title.pad.b; + } else if(dy === alignmentConstants.CAP_SHIFT + 'em') { + vPadShift = title.pad.t; + } + return vPadShift; + +} + function getMainTitleX(fullLayout, textAnchor) { var title = fullLayout.title; var gs = fullLayout._size; @@ -438,14 +489,7 @@ function getMainTitleX(fullLayout, textAnchor) { function getMainTitleY(fullLayout, dy) { var title = fullLayout.title; var gs = fullLayout._size; - var vPadShift = 0; - - if(dy === '0em' || !dy) { - vPadShift = -title.pad.b; - } else if(dy === alignmentConstants.CAP_SHIFT + 'em') { - vPadShift = title.pad.t; - } - + var vPadShift = getVPadShift(title, dy); if(title.y === 'auto') { return gs.t / 2; } else { diff --git a/test/image/mocks/zz-automargin-title.json b/test/image/mocks/zz-automargin-title.json index 5eedba6d6a9..6d38ae39bdf 100644 --- a/test/image/mocks/zz-automargin-title.json +++ b/test/image/mocks/zz-automargin-title.json @@ -25,7 +25,9 @@ }, "title": { "automargin": true, - "text": "Some text" + "text": "Some text", + "y": 1, + "yanchor": "top" } } } From c6e31beede2b5d87dbe76d82ad4d43bdbefd10f6 Mon Sep 17 00:00:00 2001 From: Mojtaba Samimi Date: Fri, 27 Jan 2023 10:06:52 -0500 Subject: [PATCH 04/59] lint --- src/plot_api/subroutines.js | 60 ++++++++++++++++++------------------- 1 file changed, 29 insertions(+), 31 deletions(-) diff --git a/src/plot_api/subroutines.js b/src/plot_api/subroutines.js index f9ea3704759..522ac6c385c 100644 --- a/src/plot_api/subroutines.js +++ b/src/plot_api/subroutines.js @@ -415,55 +415,53 @@ exports.drawMainTitle = function(gd) { }); applyTitleAutoMargin(gd, fullLayout, dy); - }; -function applyTitleAutoMargin(gd, fullLayout, dy){ +function applyTitleAutoMargin(gd, fullLayout, dy) { var title = fullLayout.title; if( - !title.automargin || - title.yref!=='container' //|| - //((title.y!==1 && title.yanchor!=='top') && - //(title.y!==0 && title.yanchor!=='bottom')) + !title.automargin || + title.yref !== 'container' // || + // ((title.y!==1 && title.yanchor!=='top') && + // (title.y!==0 && title.yanchor!=='bottom')) ) { console.log('invalid title layout for automargin') - return + return; } else { - var vPadShift = getVPadShift(title, dy) - var push = { - x: title.x, - y: 1, - l: 0, - r: 0, - t: 0, - b: 0, - pad: 0 - }; - - if(title.yref === 'paper'){ - push.t = 0; - } else { - push.t = title.font.size; - } - push.t += Math.abs(vPadShift); - console.log(push) - - var titleID = 'title.automargin'; - Plots.allowAutoMargin(gd, titleID); - Plots.autoMargin(gd, titleID, push); + var vPadShift = getVPadShift(title, dy); + var push = { + x: title.x, + y: 1, + l: 0, + r: 0, + t: 0, + b: 0, + pad: 0 + }; + + if(title.yref === 'paper') { + push.t = 0; + } else { + push.t = title.font.size; + } + push.t += Math.abs(vPadShift); + console.log(push) + + var titleID = 'title.automargin'; + Plots.allowAutoMargin(gd, titleID); + Plots.autoMargin(gd, titleID, push); } } function getVPadShift(title, dy) { - var vPadShift = 0; + var vPadShift = 0; if(dy === '0em' || !dy) { vPadShift = -title.pad.b; } else if(dy === alignmentConstants.CAP_SHIFT + 'em') { vPadShift = title.pad.t; } return vPadShift; - } function getMainTitleX(fullLayout, textAnchor) { From f46014fbd8297e4d717db9903a1d6daf78e2f040 Mon Sep 17 00:00:00 2001 From: Mojtaba Samimi Date: Fri, 27 Jan 2023 10:09:11 -0500 Subject: [PATCH 05/59] rename mock and generate baseline --- test/image/baselines/zzz-automargin-title.png | Bin 0 -> 28733 bytes ...gin-title.json => zzz-automargin-title.json} | 0 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 test/image/baselines/zzz-automargin-title.png rename test/image/mocks/{zz-automargin-title.json => zzz-automargin-title.json} (100%) diff --git a/test/image/baselines/zzz-automargin-title.png b/test/image/baselines/zzz-automargin-title.png new file mode 100644 index 0000000000000000000000000000000000000000..0cdd675660ac7ed8e494feae21414229e177b666 GIT binary patch literal 28733 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 literal 0 HcmV?d00001 diff --git a/test/image/mocks/zz-automargin-title.json b/test/image/mocks/zzz-automargin-title.json similarity index 100% rename from test/image/mocks/zz-automargin-title.json rename to test/image/mocks/zzz-automargin-title.json From 587dfcbe389a416e46f28ae0c27451454b1b9645 Mon Sep 17 00:00:00 2001 From: Mojtaba Samimi Date: Fri, 27 Jan 2023 10:25:02 -0500 Subject: [PATCH 06/59] update pie_automargin-margin0 baseline --- .../baselines/pie_automargin-margin0.png | Bin 24118 -> 23998 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/test/image/baselines/pie_automargin-margin0.png b/test/image/baselines/pie_automargin-margin0.png index 08b11eb675546c253fc4eb3eaadddd2588563837..53753a76ca1c379ee643d6f809580a66d3e8fe4d 100644 GIT binary patch literal 23998 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
EpM4Gd;9sGaEx6PJOfnIPJQdtG;ECpc+Y#Oa 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 Date: Fri, 27 Jan 2023 10:33:45 -0500 Subject: [PATCH 07/59] adjust pie test --- test/jasmine/tests/pie_test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/jasmine/tests/pie_test.js b/test/jasmine/tests/pie_test.js index d7f6cbfac2c..216ce26a68b 100644 --- a/test/jasmine/tests/pie_test.js +++ b/test/jasmine/tests/pie_test.js @@ -972,7 +972,7 @@ describe('Pie traces', function() { textposition: [['outside', 'outside', 'inside', 'inside', 'outside']], 'outsidetextfont.size': 12 }, { - t: '~=', l: 'shrunk', + t: 'grew', l: 'shrunk', b: 'grew', r: 'grew' })) .then(check('automargin:false', {automargin: false}, { From 61487a8bc80708aa24a29c39e1a325438742196e Mon Sep 17 00:00:00 2001 From: hannahker Date: Mon, 30 Jan 2023 15:35:45 -0800 Subject: [PATCH 08/59] Simplify automargin title to use existing functions --- src/plot_api/subroutines.js | 55 +++++++++++++++---------------------- 1 file changed, 22 insertions(+), 33 deletions(-) diff --git a/src/plot_api/subroutines.js b/src/plot_api/subroutines.js index 522ac6c385c..732e59f95fb 100644 --- a/src/plot_api/subroutines.js +++ b/src/plot_api/subroutines.js @@ -414,44 +414,33 @@ exports.drawMainTitle = function(gd) { } }); - applyTitleAutoMargin(gd, fullLayout, dy); + if(gd._fullLayout.title.automargin) { + applyTitleAutoMargin(gd, fullLayout, dy); + } }; function applyTitleAutoMargin(gd, fullLayout, dy) { var title = fullLayout.title; - - if( - !title.automargin || - title.yref !== 'container' // || - // ((title.y!==1 && title.yanchor!=='top') && - // (title.y!==0 && title.yanchor!=='bottom')) - ) { - console.log('invalid title layout for automargin') - return; - } else { - var vPadShift = getVPadShift(title, dy); - var push = { - x: title.x, - y: 1, - l: 0, - r: 0, - t: 0, - b: 0, - pad: 0 - }; - - if(title.yref === 'paper') { - push.t = 0; - } else { - push.t = title.font.size; - } - push.t += Math.abs(vPadShift); - console.log(push) - - var titleID = 'title.automargin'; - Plots.allowAutoMargin(gd, titleID); - Plots.autoMargin(gd, titleID, push); + var y = title.y === 'auto' ? (fullLayout.margin.t / 2 / fullLayout.height) : title.y; + var direction = y > 0.5 ? 't' : 'b'; + var titleID = 'title.automargin'; + var titleSize = title.font.size; + + var push = { + x: title.x, + y: direction === 't' ? 1 : 0, + t: 0, + b: 0 + }; + + push[direction] = direction === 't' ? getMainTitleY(fullLayout, dy) : fullLayout.height - getMainTitleY(fullLayout, dy); + if((direction === 't' && Lib.isTopAnchor(title)) || (direction === 'b' && Lib.isBottomAnchor(title))) { + push[direction] += titleSize; + } else if(Lib.isMiddleAnchor(title)) { + push[direction] += titleSize / 2; } + Plots.allowAutoMargin(gd, titleID); + Plots.autoMargin(gd, titleID, push); } function getVPadShift(title, dy) { From 8679e7d297811a7b63631cd67047c72a3c83a891 Mon Sep 17 00:00:00 2001 From: hannahker Date: Mon, 6 Feb 2023 15:59:24 -0800 Subject: [PATCH 09/59] Account for padding around title --- src/plot_api/subroutines.js | 47 +++++++++++++++++++++++-------------- 1 file changed, 30 insertions(+), 17 deletions(-) diff --git a/src/plot_api/subroutines.js b/src/plot_api/subroutines.js index 732e59f95fb..2b0a9c5dca4 100644 --- a/src/plot_api/subroutines.js +++ b/src/plot_api/subroutines.js @@ -5,6 +5,7 @@ var Registry = require('../registry'); var Plots = require('../plots/plots'); var Lib = require('../lib'); +var svgTextUtils = require('../lib/svg_text_utils'); var clearGlCanvases = require('../lib/clear_gl_canvases'); var Color = require('../components/color'); @@ -22,6 +23,7 @@ var doAutoRange = require('../plots/cartesian/autorange').doAutoRange; var SVG_TEXT_ANCHOR_START = 'start'; var SVG_TEXT_ANCHOR_MIDDLE = 'middle'; var SVG_TEXT_ANCHOR_END = 'end'; +var LINE_SPACING = alignmentConstants.LINE_SPACING; exports.layoutStyles = function(gd) { return Lib.syncOrAsync([Plots.doAutoMargin, lsInner], gd); @@ -401,6 +403,13 @@ exports.drawMainTitle = function(gd) { var textAnchor = getMainTitleTextAnchor(fullLayout); var dy = getMainTitleDy(fullLayout); + var y = getMainTitleY(fullLayout, dy); + + if(gd._fullLayout.title.automargin) { + applyTitleAutoMargin(gd, fullLayout, dy); + // A bit hacky to make sure top padding is properly accounted for + y += gd._fullLayout.title.pad.t; + } Titles.draw(gd, 'gtitle', { propContainer: fullLayout, @@ -408,37 +417,41 @@ exports.drawMainTitle = function(gd) { placeholder: fullLayout._dfltTitle.plot, attributes: { x: getMainTitleX(fullLayout, textAnchor), - y: getMainTitleY(fullLayout, dy), + y: y, 'text-anchor': textAnchor, dy: dy } }); - - if(gd._fullLayout.title.automargin) { - applyTitleAutoMargin(gd, fullLayout, dy); - } }; +function titleDepth(title) { + var fontSize = title.font.size; + var extraLines = (title.text.match(svgTextUtils.BR_TAG_ALL) || []).length; + return extraLines ? + fontSize * (extraLines + 1) * LINE_SPACING : + fontSize; +} + function applyTitleAutoMargin(gd, fullLayout, dy) { - var title = fullLayout.title; - var y = title.y === 'auto' ? (fullLayout.margin.t / 2 / fullLayout.height) : title.y; - var direction = y > 0.5 ? 't' : 'b'; var titleID = 'title.automargin'; - var titleSize = title.font.size; - + var title = fullLayout.title; + var direction = fullLayout.title.y > 0.5 ? 't' : 'b'; var push = { x: title.x, - y: direction === 't' ? 1 : 0, + y: title.y, // TODO: Assuming that y is either 1 or 0? t: 0, b: 0 }; - push[direction] = direction === 't' ? getMainTitleY(fullLayout, dy) : fullLayout.height - getMainTitleY(fullLayout, dy); - if((direction === 't' && Lib.isTopAnchor(title)) || (direction === 'b' && Lib.isBottomAnchor(title))) { - push[direction] += titleSize; - } else if(Lib.isMiddleAnchor(title)) { - push[direction] += titleSize / 2; - } + // TODO: This is not yet accurate with multi-line titles + // TODO: Push titleDepth depending on yanchor? + push[direction] = ( + titleDepth(title) + + getMainTitleY(fullLayout, dy) + + title.pad.t + + title.pad.b + ); + Plots.allowAutoMargin(gd, titleID); Plots.autoMargin(gd, titleID, push); } From e8e49a5bc1bfe9234f1e99cf3a004fdb72f2b98a Mon Sep 17 00:00:00 2001 From: hannahker Date: Mon, 6 Feb 2023 16:24:38 -0800 Subject: [PATCH 10/59] Adjust mock to yref=paper --- test/image/mocks/zzz-automargin-title.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/image/mocks/zzz-automargin-title.json b/test/image/mocks/zzz-automargin-title.json index 6d38ae39bdf..a8d9c492993 100644 --- a/test/image/mocks/zzz-automargin-title.json +++ b/test/image/mocks/zzz-automargin-title.json @@ -27,7 +27,8 @@ "automargin": true, "text": "Some text", "y": 1, - "yanchor": "top" + "yanchor": "top", + "container": "paper" } } } From 2b59e2c7a436ce2ca2fa33e806144cc519599f5f Mon Sep 17 00:00:00 2001 From: hannahker Date: Mon, 6 Feb 2023 18:03:29 -0800 Subject: [PATCH 11/59] Temp fix for yref=paper --- src/plot_api/subroutines.js | 4 +--- test/image/mocks/zzz-automargin-title.json | 10 ++++++---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/plot_api/subroutines.js b/src/plot_api/subroutines.js index 2b0a9c5dca4..28d1be5bc17 100644 --- a/src/plot_api/subroutines.js +++ b/src/plot_api/subroutines.js @@ -407,8 +407,6 @@ exports.drawMainTitle = function(gd) { if(gd._fullLayout.title.automargin) { applyTitleAutoMargin(gd, fullLayout, dy); - // A bit hacky to make sure top padding is properly accounted for - y += gd._fullLayout.title.pad.t; } Titles.draw(gd, 'gtitle', { @@ -447,7 +445,7 @@ function applyTitleAutoMargin(gd, fullLayout, dy) { // TODO: Push titleDepth depending on yanchor? push[direction] = ( titleDepth(title) + - getMainTitleY(fullLayout, dy) + + // getMainTitleY(fullLayout, dy) + // TODO: Why is this calculation triggering too many automargin redraws? title.pad.t + title.pad.b ); diff --git a/test/image/mocks/zzz-automargin-title.json b/test/image/mocks/zzz-automargin-title.json index a8d9c492993..50d4e3ffb71 100644 --- a/test/image/mocks/zzz-automargin-title.json +++ b/test/image/mocks/zzz-automargin-title.json @@ -25,10 +25,12 @@ }, "title": { "automargin": true, - "text": "Some text", - "y": 1, - "yanchor": "top", - "container": "paper" + "text": "A sample title", + "font": {"size": 24}, + "pad": {"t": 15}, + "yanchor": "bottom", + "yref": "paper", + "y": 1 } } } From 4bb109e749ec186f2c766d67baf5757ce667b140 Mon Sep 17 00:00:00 2001 From: hannahker Date: Thu, 16 Feb 2023 14:06:48 -0800 Subject: [PATCH 12/59] Improve handling for paper ref and setting defaults --- src/plot_api/subroutines.js | 56 +++++++++++++++++++++++++++---------- 1 file changed, 42 insertions(+), 14 deletions(-) diff --git a/src/plot_api/subroutines.js b/src/plot_api/subroutines.js index 28d1be5bc17..3820bd4b123 100644 --- a/src/plot_api/subroutines.js +++ b/src/plot_api/subroutines.js @@ -399,14 +399,16 @@ function findCounterAxisLineWidth(ax, side, counterAx, axList) { } exports.drawMainTitle = function(gd) { + var title = gd._fullLayout.title; + setDflts(title); var fullLayout = gd._fullLayout; - var textAnchor = getMainTitleTextAnchor(fullLayout); var dy = getMainTitleDy(fullLayout); var y = getMainTitleY(fullLayout, dy); + var position = fullLayout.title.y > 0.5 ? 't' : 'b'; if(gd._fullLayout.title.automargin) { - applyTitleAutoMargin(gd, fullLayout, dy); + applyTitleAutoMargin(gd, position, y); } Titles.draw(gd, 'gtitle', { @@ -422,6 +424,34 @@ exports.drawMainTitle = function(gd) { }); }; +// Is any part of the title outside of the container? +// TODO: What if yref='container'? +function isOutsideContainer(gd, title, position, y) { + var plotHeight = gd._fullLayout._size.h; + var yPosTop = Lib.isTopAnchor(title) ? y : y - titleDepth(title); // Standardize to the top of the title + var yPosRel = position === 'b' ? plotHeight - yPosTop : yPosTop; // Position relative to the top or bottom of plot + if ((Lib.isTopAnchor(title) && position === 't') || Lib.isBottomAnchor(title) && position === 'b') { + return false + } else { + if (yPosRel < titleDepth(title)) { + return true + } else { + return false + } + } +} + +// TODO: Move to setting defaults stage, rather than drawing +// title.y is 1 or 0 if automargin and paper ref +function setDflts(title) { + if(title.automargin && title.yref === 'paper') { + title.y = title.y === 0 ? title.y : 1 + } + if(title.automargin) { + title.yanchor = title.yanchor === 'auto' ? 'bottom' : title.yanchor; + } +} + function titleDepth(title) { var fontSize = title.font.size; var extraLines = (title.text.match(svgTextUtils.BR_TAG_ALL) || []).length; @@ -430,26 +460,24 @@ function titleDepth(title) { fontSize; } -function applyTitleAutoMargin(gd, fullLayout, dy) { +function applyTitleAutoMargin(gd, position, y) { var titleID = 'title.automargin'; - var title = fullLayout.title; - var direction = fullLayout.title.y > 0.5 ? 't' : 'b'; + var title = gd._fullLayout.title; var push = { x: title.x, - y: title.y, // TODO: Assuming that y is either 1 or 0? + y: position === 't' ? 1 : 0, // TODO: Assuming that y is either 1 or 0? t: 0, b: 0 }; - // TODO: This is not yet accurate with multi-line titles - // TODO: Push titleDepth depending on yanchor? - push[direction] = ( - titleDepth(title) + - // getMainTitleY(fullLayout, dy) + // TODO: Why is this calculation triggering too many automargin redraws? - title.pad.t + - title.pad.b + if (isOutsideContainer(gd, title, position, y)) { + console.log('isOutsideContainer') + push[position] = ( + titleDepth(title) + + title.pad.t + + title.pad.b ); - + } Plots.allowAutoMargin(gd, titleID); Plots.autoMargin(gd, titleID, push); } From 7ce1234a9a5f255917bf699e90d99fbf03e0829d Mon Sep 17 00:00:00 2001 From: hannahker Date: Thu, 16 Feb 2023 14:08:15 -0800 Subject: [PATCH 13/59] Fix formatting --- src/plot_api/subroutines.js | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/plot_api/subroutines.js b/src/plot_api/subroutines.js index 3820bd4b123..f4b330c1af3 100644 --- a/src/plot_api/subroutines.js +++ b/src/plot_api/subroutines.js @@ -430,13 +430,13 @@ function isOutsideContainer(gd, title, position, y) { var plotHeight = gd._fullLayout._size.h; var yPosTop = Lib.isTopAnchor(title) ? y : y - titleDepth(title); // Standardize to the top of the title var yPosRel = position === 'b' ? plotHeight - yPosTop : yPosTop; // Position relative to the top or bottom of plot - if ((Lib.isTopAnchor(title) && position === 't') || Lib.isBottomAnchor(title) && position === 'b') { - return false + if((Lib.isTopAnchor(title) && position === 't') || Lib.isBottomAnchor(title) && position === 'b') { + return false; } else { - if (yPosRel < titleDepth(title)) { - return true + if(yPosRel < titleDepth(title)) { + return true; } else { - return false + return false; } } } @@ -445,7 +445,7 @@ function isOutsideContainer(gd, title, position, y) { // title.y is 1 or 0 if automargin and paper ref function setDflts(title) { if(title.automargin && title.yref === 'paper') { - title.y = title.y === 0 ? title.y : 1 + title.y = title.y === 0 ? title.y : 1; } if(title.automargin) { title.yanchor = title.yanchor === 'auto' ? 'bottom' : title.yanchor; @@ -470,8 +470,7 @@ function applyTitleAutoMargin(gd, position, y) { b: 0 }; - if (isOutsideContainer(gd, title, position, y)) { - console.log('isOutsideContainer') + if(isOutsideContainer(gd, title, position, y)) { push[position] = ( titleDepth(title) + title.pad.t + From b2746429822e5a57836bf787b10d4e919196d07f Mon Sep 17 00:00:00 2001 From: hannahker Date: Thu, 16 Feb 2023 15:55:02 -0800 Subject: [PATCH 14/59] Add jasmine test --- test/jasmine/tests/titles_test.js | 43 +++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/test/jasmine/tests/titles_test.js b/test/jasmine/tests/titles_test.js index f967bfa0e0b..f865d0204f6 100644 --- a/test/jasmine/tests/titles_test.js +++ b/test/jasmine/tests/titles_test.js @@ -1066,6 +1066,49 @@ describe('Titles for multiple axes', function() { }); }); +fdescribe('Title automargining', function() { + 'use strict' + + var data = [{x: [1, 1, 3], y: [1, 2, 3]}]; + var layout = { + "margin": {"t":0, "b": 0, "l": 0, "r": 0}, + "title": { + "text": "Basic title", + "font": {"size": 24}, + "yref": "paper" + } + } + var gd; + + beforeEach(function() { + gd = createGraphDiv(); + }); + + afterEach(destroyGraphDiv); + + it('should avoid overlap with container for yref=paper and allow padding', function(done) { + Plotly.newPlot(gd, data, layout).then(function() { + expect(gd._fullLayout._size.t).toBe(0); + return Plotly.relayout(gd, 'title.automargin', true); + }).then(function() { + expect(gd._fullLayout.title.automargin).toBe(true); + expect(gd._fullLayout.title.y).toBe(1); + expect(gd._fullLayout.title.yanchor).toBe('bottom'); + expect(gd._fullLayout._size.t).toBe(24); + return Plotly.relayout(gd, 'title.pad.t', 10); + }).then(function() { + expect(gd._fullLayout._size.t).toBe(34); + return Plotly.relayout(gd, 'title.pad.b', 10); + }).then(function() { + expect(gd._fullLayout._size.t).toBe(44); + return Plotly.relayout(gd, 'title.yanchor', 'top'); + }).then(function() { + expect(gd._fullLayout._size.t).toBe(0); + }).then(done, done.fail); + }); + +}); + function expectTitle(expTitle) { expectTitleFn(expTitle)(); } From cc15ff65eb03226d87ec40cdf777ea79f89dd7a6 Mon Sep 17 00:00:00 2001 From: hannahker Date: Thu, 16 Feb 2023 16:09:01 -0800 Subject: [PATCH 15/59] Simplify mock --- test/image/mocks/zzz-automargin-title.json | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/test/image/mocks/zzz-automargin-title.json b/test/image/mocks/zzz-automargin-title.json index 50d4e3ffb71..b94a95469c6 100644 --- a/test/image/mocks/zzz-automargin-title.json +++ b/test/image/mocks/zzz-automargin-title.json @@ -16,21 +16,12 @@ }], "layout": { "margin": {"t":0, "b": 0, "l": 0, "r": 0}, - "yaxis": { - "automargin": true, - "title": {"text": "Y-axis"} - }, - "xaxis": {"automargin": true, - "title": {"text": "X-axis"} - }, "title": { "automargin": true, - "text": "A sample title", + "text": "Basic title", "font": {"size": 24}, - "pad": {"t": 15}, - "yanchor": "bottom", - "yref": "paper", - "y": 1 + "pad": {"t": 15, "b": 10}, + "yref": "paper" } } } From 938d52d9b69c42c3e42888d4004896612d96b48f Mon Sep 17 00:00:00 2001 From: hannahker Date: Thu, 16 Feb 2023 16:12:33 -0800 Subject: [PATCH 16/59] Fix test formatting --- test/jasmine/tests/titles_test.js | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/test/jasmine/tests/titles_test.js b/test/jasmine/tests/titles_test.js index f865d0204f6..d8b94e1d273 100644 --- a/test/jasmine/tests/titles_test.js +++ b/test/jasmine/tests/titles_test.js @@ -1066,18 +1066,18 @@ describe('Titles for multiple axes', function() { }); }); -fdescribe('Title automargining', function() { - 'use strict' +describe('Title automargining', function() { + 'use strict'; var data = [{x: [1, 1, 3], y: [1, 2, 3]}]; var layout = { - "margin": {"t":0, "b": 0, "l": 0, "r": 0}, - "title": { - "text": "Basic title", - "font": {"size": 24}, - "yref": "paper" + 'margin': {'t': 0, 'b': 0, 'l': 0, 'r': 0}, + 'title': { + 'text': 'Basic title', + 'font': {'size': 24}, + 'yref': 'paper' } - } + }; var gd; beforeEach(function() { @@ -1106,7 +1106,6 @@ fdescribe('Title automargining', function() { expect(gd._fullLayout._size.t).toBe(0); }).then(done, done.fail); }); - }); function expectTitle(expTitle) { From 75636e2585407baa65d491d55b521148cc212fbc Mon Sep 17 00:00:00 2001 From: hannahker Date: Fri, 17 Feb 2023 17:54:35 -0800 Subject: [PATCH 17/59] Add simple implementation for container behaviour --- src/plot_api/subroutines.js | 46 ++++++++++++++++--- .../mocks/zzz-automargin-title-container.json | 26 +++++++++++ .../mocks/zzz-automargin-title-paper.json | 27 +++++++++++ 3 files changed, 92 insertions(+), 7 deletions(-) create mode 100644 test/image/mocks/zzz-automargin-title-container.json create mode 100644 test/image/mocks/zzz-automargin-title-paper.json diff --git a/src/plot_api/subroutines.js b/src/plot_api/subroutines.js index f4b330c1af3..2a74d2ef548 100644 --- a/src/plot_api/subroutines.js +++ b/src/plot_api/subroutines.js @@ -424,10 +424,9 @@ exports.drawMainTitle = function(gd) { }); }; -// Is any part of the title outside of the container? -// TODO: What if yref='container'? + function isOutsideContainer(gd, title, position, y) { - var plotHeight = gd._fullLayout._size.h; + var plotHeight = title.yref === 'paper' ? gd._fullLayout._size.h : gd._fullLayout.height; var yPosTop = Lib.isTopAnchor(title) ? y : y - titleDepth(title); // Standardize to the top of the title var yPosRel = position === 'b' ? plotHeight - yPosTop : yPosTop; // Position relative to the top or bottom of plot if((Lib.isTopAnchor(title) && position === 't') || Lib.isBottomAnchor(title) && position === 'b') { @@ -441,15 +440,20 @@ function isOutsideContainer(gd, title, position, y) { } } + // TODO: Move to setting defaults stage, rather than drawing +// TODO: Too complex that defaults are different, depending on yref? // title.y is 1 or 0 if automargin and paper ref +// 'auto' is not supported for either title.y or title.yanchor when automargin=true function setDflts(title) { if(title.automargin && title.yref === 'paper') { title.y = title.y === 0 ? title.y : 1; - } - if(title.automargin) { title.yanchor = title.yanchor === 'auto' ? 'bottom' : title.yanchor; } + if(title.automargin && title.yref === 'container') { + title.y = title.y === 'auto' ? 1 : title.y; + title.yanchor = title.yanchor === 'auto' ? 'top' : title.yanchor; + } } function titleDepth(title) { @@ -460,23 +464,51 @@ function titleDepth(title) { fontSize; } +// TODO: Simplify this logic... +function containerPushVal(position, title, height, titleDepth) { + var push = 0; + if(title.yanchor === 'middle') { + push += titleDepth / 2; + } + if(position === 't') { + if(title.yanchor === 'top') { + push += titleDepth; + } + push += (height - title.y * height); + } else { + if(title.yanchor === 'bottom') { + push += titleDepth; + } + push += (height - (1 - title.y) * height); + } + return push; +} + function applyTitleAutoMargin(gd, position, y) { var titleID = 'title.automargin'; var title = gd._fullLayout.title; var push = { x: title.x, - y: position === 't' ? 1 : 0, // TODO: Assuming that y is either 1 or 0? + y: position === 't' ? 1 : 0, // TODO: Is it correct that this should either be 1 or 0? t: 0, b: 0 }; - if(isOutsideContainer(gd, title, position, y)) { + if(title.yref === 'paper' && isOutsideContainer(gd, title, position, y)) { push[position] = ( titleDepth(title) + title.pad.t + title.pad.b ); + } else if(title.yref === 'container') { + push[position] = ( + containerPushVal(position, title, gd._fullLayout.height, titleDepth(title)) + + title.pad.t + + title.pad.b + ); } + + Plots.allowAutoMargin(gd, titleID); Plots.autoMargin(gd, titleID, push); } diff --git a/test/image/mocks/zzz-automargin-title-container.json b/test/image/mocks/zzz-automargin-title-container.json new file mode 100644 index 00000000000..9bfed786f49 --- /dev/null +++ b/test/image/mocks/zzz-automargin-title-container.json @@ -0,0 +1,26 @@ +{ + "data": [ + { + "showlegend": false, + "type": "scatter", + "x": [ + 1, + 2, + 3 + ], + "y": [ + 4, + 5, + 6 + ] + }], + "layout": { + "margin": {"t":0, "b": 0, "l": 0, "r": 0}, + "title": { + "automargin": true, + "text": "Basic title", + "font": {"size": 24}, + "pad": {"t": 10, "b": 10} + } + } +} diff --git a/test/image/mocks/zzz-automargin-title-paper.json b/test/image/mocks/zzz-automargin-title-paper.json new file mode 100644 index 00000000000..b94a95469c6 --- /dev/null +++ b/test/image/mocks/zzz-automargin-title-paper.json @@ -0,0 +1,27 @@ +{ + "data": [ + { + "showlegend": false, + "type": "scatter", + "x": [ + 1, + 2, + 3 + ], + "y": [ + 4, + 5, + 6 + ] + }], + "layout": { + "margin": {"t":0, "b": 0, "l": 0, "r": 0}, + "title": { + "automargin": true, + "text": "Basic title", + "font": {"size": 24}, + "pad": {"t": 15, "b": 10}, + "yref": "paper" + } + } +} From b7e32958060d0f17aef83f87702c9be1c411162a Mon Sep 17 00:00:00 2001 From: hannahker Date: Tue, 28 Feb 2023 11:09:23 -0800 Subject: [PATCH 18/59] Apply review comments --- src/components/titles/index.js | 1 - src/plot_api/subroutines.js | 34 +++++++------------ .../mocks/zzz-automargin-title-container.json | 2 ++ .../mocks/zzz-automargin-title-paper.json | 2 ++ 4 files changed, 17 insertions(+), 22 deletions(-) diff --git a/src/components/titles/index.js b/src/components/titles/index.js index 4d79fed2a4e..0e6b4a07eeb 100644 --- a/src/components/titles/index.js +++ b/src/components/titles/index.js @@ -77,7 +77,6 @@ function draw(gd, titleClass, options) { else if(prop.indexOf('colorbar' !== -1)) editAttr = 'colorbarTitleText'; var editable = gd._context.edits[editAttr]; - if(txt === '') opacity = 0; // look for placeholder text while stripping out numbers from eg X2, Y3 // this is just for backward compatibility with the old version that had diff --git a/src/plot_api/subroutines.js b/src/plot_api/subroutines.js index 2a74d2ef548..c1c51183a8f 100644 --- a/src/plot_api/subroutines.js +++ b/src/plot_api/subroutines.js @@ -405,10 +405,9 @@ exports.drawMainTitle = function(gd) { var textAnchor = getMainTitleTextAnchor(fullLayout); var dy = getMainTitleDy(fullLayout); var y = getMainTitleY(fullLayout, dy); - var position = fullLayout.title.y > 0.5 ? 't' : 'b'; - if(gd._fullLayout.title.automargin) { - applyTitleAutoMargin(gd, position, y); + if(title.automargin) { + applyTitleAutoMargin(gd, y); } Titles.draw(gd, 'gtitle', { @@ -432,11 +431,7 @@ function isOutsideContainer(gd, title, position, y) { if((Lib.isTopAnchor(title) && position === 't') || Lib.isBottomAnchor(title) && position === 'b') { return false; } else { - if(yPosRel < titleDepth(title)) { - return true; - } else { - return false; - } + return yPosRel < titleDepth(title); } } @@ -484,12 +479,13 @@ function containerPushVal(position, title, height, titleDepth) { return push; } -function applyTitleAutoMargin(gd, position, y) { +function applyTitleAutoMargin(gd, y) { var titleID = 'title.automargin'; var title = gd._fullLayout.title; + var position = gd._fullLayout.title.y > 0.5 ? 't' : 'b'; var push = { x: title.x, - y: position === 't' ? 1 : 0, // TODO: Is it correct that this should either be 1 or 0? + y: title.y > 0.5 ? 1 : 0, // TODO: Is it correct that this should either be 1 or 0? t: 0, b: 0 }; @@ -513,16 +509,6 @@ function applyTitleAutoMargin(gd, position, y) { Plots.autoMargin(gd, titleID, push); } -function getVPadShift(title, dy) { - var vPadShift = 0; - if(dy === '0em' || !dy) { - vPadShift = -title.pad.b; - } else if(dy === alignmentConstants.CAP_SHIFT + 'em') { - vPadShift = title.pad.t; - } - return vPadShift; -} - function getMainTitleX(fullLayout, textAnchor) { var title = fullLayout.title; var gs = fullLayout._size; @@ -546,7 +532,13 @@ function getMainTitleX(fullLayout, textAnchor) { function getMainTitleY(fullLayout, dy) { var title = fullLayout.title; var gs = fullLayout._size; - var vPadShift = getVPadShift(title, dy); + var vPadShift = 0; + if(dy === '0em' || !dy) { + vPadShift = -title.pad.b; + } else if(dy === alignmentConstants.CAP_SHIFT + 'em') { + vPadShift = title.pad.t; + } + if(title.y === 'auto') { return gs.t / 2; } else { diff --git a/test/image/mocks/zzz-automargin-title-container.json b/test/image/mocks/zzz-automargin-title-container.json index 9bfed786f49..7c400ab158a 100644 --- a/test/image/mocks/zzz-automargin-title-container.json +++ b/test/image/mocks/zzz-automargin-title-container.json @@ -15,6 +15,8 @@ ] }], "layout": { + "height": 300, + "width": 400, "margin": {"t":0, "b": 0, "l": 0, "r": 0}, "title": { "automargin": true, diff --git a/test/image/mocks/zzz-automargin-title-paper.json b/test/image/mocks/zzz-automargin-title-paper.json index b94a95469c6..f747fbe2c51 100644 --- a/test/image/mocks/zzz-automargin-title-paper.json +++ b/test/image/mocks/zzz-automargin-title-paper.json @@ -15,6 +15,8 @@ ] }], "layout": { + "height": 300, + "width": 400, "margin": {"t":0, "b": 0, "l": 0, "r": 0}, "title": { "automargin": true, From 04f88254950cede009099f5fe5f3ab90bb6b3961 Mon Sep 17 00:00:00 2001 From: hannahker Date: Tue, 28 Feb 2023 13:13:33 -0800 Subject: [PATCH 19/59] Add more tests for yref=container --- test/jasmine/tests/titles_test.js | 70 ++++++++++++++++++++++++++----- 1 file changed, 60 insertions(+), 10 deletions(-) diff --git a/test/jasmine/tests/titles_test.js b/test/jasmine/tests/titles_test.js index d8b94e1d273..fc31234f507 100644 --- a/test/jasmine/tests/titles_test.js +++ b/test/jasmine/tests/titles_test.js @@ -1066,18 +1066,11 @@ describe('Titles for multiple axes', function() { }); }); -describe('Title automargining', function() { +// TODO: Add in tests for interactions with other automargined elements +fdescribe('Title automargining', function() { 'use strict'; var data = [{x: [1, 1, 3], y: [1, 2, 3]}]; - var layout = { - 'margin': {'t': 0, 'b': 0, 'l': 0, 'r': 0}, - 'title': { - 'text': 'Basic title', - 'font': {'size': 24}, - 'yref': 'paper' - } - }; var gd; beforeEach(function() { @@ -1087,25 +1080,82 @@ describe('Title automargining', function() { afterEach(destroyGraphDiv); it('should avoid overlap with container for yref=paper and allow padding', function(done) { - Plotly.newPlot(gd, data, layout).then(function() { + Plotly.newPlot(gd, data, { + 'margin': {'t': 0, 'b': 0, 'l': 0, 'r': 0}, + 'height': 300, + 'width': 400, + 'title': { + 'text': 'Basic title', + 'font': {'size': 24}, + 'yref': 'paper' + } + }).then(function() { expect(gd._fullLayout._size.t).toBe(0); + expect(gd._fullLayout._size.h).toBe(300); return Plotly.relayout(gd, 'title.automargin', true); }).then(function() { expect(gd._fullLayout.title.automargin).toBe(true); expect(gd._fullLayout.title.y).toBe(1); expect(gd._fullLayout.title.yanchor).toBe('bottom'); expect(gd._fullLayout._size.t).toBe(24); + expect(gd._fullLayout._size.h).toBe(276); return Plotly.relayout(gd, 'title.pad.t', 10); }).then(function() { expect(gd._fullLayout._size.t).toBe(34); + expect(gd._fullLayout._size.h).toBe(266); return Plotly.relayout(gd, 'title.pad.b', 10); }).then(function() { + expect(gd._fullLayout._size.h).toBe(256); expect(gd._fullLayout._size.t).toBe(44); return Plotly.relayout(gd, 'title.yanchor', 'top'); }).then(function() { expect(gd._fullLayout._size.t).toBe(0); }).then(done, done.fail); }); + + + it('should automargin and position title at the bottom of the plot if title.y=0', function(done) { + Plotly.newPlot(gd, data, { + 'margin': {'t': 0, 'b': 0, 'l': 0, 'r': 0}, + 'height': 300, + 'width': 400, + 'title': { + 'text': 'Basic title', + 'font': {'size': 24}, + 'yref': 'paper' + } + }).then(function() { + return Plotly.relayout(gd, {'title.automargin': true, 'title.y': 0}); + }).then(function() { + expect(gd._fullLayout._size.b).toBe(24); + expect(gd._fullLayout._size.h).toBe(276); + expect(gd._fullLayout.title.yanchor).toBe('top'); + }).then(done, done.fail); + }); + + it('should avoid overlap with container and plot area for yref=container and allow padding', function(done) { + Plotly.newPlot(gd, data, { + 'margin': {'t': 0, 'b': 0, 'l': 0, 'r': 0}, + 'height': 300, + 'width': 400, + 'title': { + 'text': 'Basic title', + 'font': {'size': 24}, + 'yref': 'container', + 'automargin': true + } + }).then(function() { + expect(gd._fullLayout._size.t).toBe(24); + expect(gd._fullLayout._size.h).toBe(276); + expect(gd._fullLayout.title.y).toBe(1); + expect(gd._fullLayout.title.yanchor).toBe('top'); + return Plotly.relayout(gd, 'title.y', 0.6); + }).then(function() { + expect(gd._fullLayout._size.t).toBe(144); + expect(gd._fullLayout._size.h).toBe(156); + }).then(done, done.fail); + + }); }); function expectTitle(expTitle) { From ad202d9d0e115703107555e1f60e0e5ecf91a08f Mon Sep 17 00:00:00 2001 From: hannahker Date: Tue, 28 Feb 2023 13:14:01 -0800 Subject: [PATCH 20/59] Ajust default setting --- src/plot_api/subroutines.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/plot_api/subroutines.js b/src/plot_api/subroutines.js index c1c51183a8f..c377b08aa2f 100644 --- a/src/plot_api/subroutines.js +++ b/src/plot_api/subroutines.js @@ -444,6 +444,7 @@ function setDflts(title) { if(title.automargin && title.yref === 'paper') { title.y = title.y === 0 ? title.y : 1; title.yanchor = title.yanchor === 'auto' ? 'bottom' : title.yanchor; + title.yanchor = title.y === 0 ? 'top' : title.yanchor; } if(title.automargin && title.yref === 'container') { title.y = title.y === 'auto' ? 1 : title.y; From 96116720a642f430755e0226ea53318a5beea5a4 Mon Sep 17 00:00:00 2001 From: hannahker Date: Wed, 1 Mar 2023 09:19:45 -0500 Subject: [PATCH 21/59] Remove outdated mock --- test/image/mocks/zzz-automargin-title.json | 27 ---------------------- 1 file changed, 27 deletions(-) delete mode 100644 test/image/mocks/zzz-automargin-title.json diff --git a/test/image/mocks/zzz-automargin-title.json b/test/image/mocks/zzz-automargin-title.json deleted file mode 100644 index b94a95469c6..00000000000 --- a/test/image/mocks/zzz-automargin-title.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "data": [ - { - "showlegend": false, - "type": "scatter", - "x": [ - 1, - 2, - 3 - ], - "y": [ - 4, - 5, - 6 - ] - }], - "layout": { - "margin": {"t":0, "b": 0, "l": 0, "r": 0}, - "title": { - "automargin": true, - "text": "Basic title", - "font": {"size": 24}, - "pad": {"t": 15, "b": 10}, - "yref": "paper" - } - } -} From c4d10768b44f2eb69fef8d9424e759715e65287f Mon Sep 17 00:00:00 2001 From: hannahker Date: Wed, 1 Mar 2023 09:26:24 -0500 Subject: [PATCH 22/59] Update mock baselines --- .../zzz-automargin-title-container.png | Bin 0 -> 11760 bytes .../baselines/zzz-automargin-title-paper.png | Bin 0 -> 10589 bytes test/image/baselines/zzz-automargin-title.png | Bin 28733 -> 0 bytes 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 test/image/baselines/zzz-automargin-title-container.png create mode 100644 test/image/baselines/zzz-automargin-title-paper.png delete mode 100644 test/image/baselines/zzz-automargin-title.png diff --git a/test/image/baselines/zzz-automargin-title-container.png b/test/image/baselines/zzz-automargin-title-container.png new file mode 100644 index 0000000000000000000000000000000000000000..6201c64371ecd1b2fd65b30bb50ca2ab983de0a0 GIT binary patch literal 11760 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 literal 0 HcmV?d00001 diff --git a/test/image/baselines/zzz-automargin-title-paper.png b/test/image/baselines/zzz-automargin-title-paper.png new file mode 100644 index 0000000000000000000000000000000000000000..d5f66136c9fc6d73661f529b2dc8855604dbdbaf GIT binary patch literal 10589 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 I{0;yA0e?Yo^8f$< literal 0 HcmV?d00001 diff --git a/test/image/baselines/zzz-automargin-title.png b/test/image/baselines/zzz-automargin-title.png deleted file mode 100644 index 0cdd675660ac7ed8e494feae21414229e177b666..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28733 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 From 21a9e59ee00627aca5c99aa4bda2b1a2f52a7228 Mon Sep 17 00:00:00 2001 From: hannahker Date: Wed, 1 Mar 2023 09:36:59 -0500 Subject: [PATCH 23/59] Fix syntax --- src/plot_api/subroutines.js | 2 +- test/jasmine/tests/titles_test.js | 7 +++---- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/plot_api/subroutines.js b/src/plot_api/subroutines.js index c377b08aa2f..d722a334c89 100644 --- a/src/plot_api/subroutines.js +++ b/src/plot_api/subroutines.js @@ -444,7 +444,7 @@ function setDflts(title) { if(title.automargin && title.yref === 'paper') { title.y = title.y === 0 ? title.y : 1; title.yanchor = title.yanchor === 'auto' ? 'bottom' : title.yanchor; - title.yanchor = title.y === 0 ? 'top' : title.yanchor; + title.yanchor = title.y === 0 ? 'top' : title.yanchor; } if(title.automargin && title.yref === 'container') { title.y = title.y === 'auto' ? 1 : title.y; diff --git a/test/jasmine/tests/titles_test.js b/test/jasmine/tests/titles_test.js index fc31234f507..92667c205a6 100644 --- a/test/jasmine/tests/titles_test.js +++ b/test/jasmine/tests/titles_test.js @@ -1082,7 +1082,7 @@ fdescribe('Title automargining', function() { it('should avoid overlap with container for yref=paper and allow padding', function(done) { Plotly.newPlot(gd, data, { 'margin': {'t': 0, 'b': 0, 'l': 0, 'r': 0}, - 'height': 300, + 'height': 300, 'width': 400, 'title': { 'text': 'Basic title', @@ -1117,7 +1117,7 @@ fdescribe('Title automargining', function() { it('should automargin and position title at the bottom of the plot if title.y=0', function(done) { Plotly.newPlot(gd, data, { 'margin': {'t': 0, 'b': 0, 'l': 0, 'r': 0}, - 'height': 300, + 'height': 300, 'width': 400, 'title': { 'text': 'Basic title', @@ -1136,7 +1136,7 @@ fdescribe('Title automargining', function() { it('should avoid overlap with container and plot area for yref=container and allow padding', function(done) { Plotly.newPlot(gd, data, { 'margin': {'t': 0, 'b': 0, 'l': 0, 'r': 0}, - 'height': 300, + 'height': 300, 'width': 400, 'title': { 'text': 'Basic title', @@ -1154,7 +1154,6 @@ fdescribe('Title automargining', function() { expect(gd._fullLayout._size.t).toBe(144); expect(gd._fullLayout._size.h).toBe(156); }).then(done, done.fail); - }); }); From 78cecffa385a99769cbc9d3e1dcd4f275722ad74 Mon Sep 17 00:00:00 2001 From: hannahker Date: Wed, 1 Mar 2023 09:46:52 -0500 Subject: [PATCH 24/59] Remove f from test --- test/jasmine/tests/titles_test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/jasmine/tests/titles_test.js b/test/jasmine/tests/titles_test.js index 92667c205a6..5897cea997c 100644 --- a/test/jasmine/tests/titles_test.js +++ b/test/jasmine/tests/titles_test.js @@ -1067,7 +1067,7 @@ describe('Titles for multiple axes', function() { }); // TODO: Add in tests for interactions with other automargined elements -fdescribe('Title automargining', function() { +describe('Title automargining', function() { 'use strict'; var data = [{x: [1, 1, 3], y: [1, 2, 3]}]; From fd111d51fbaacef920a68877dfebdbc8a72cfed0 Mon Sep 17 00:00:00 2001 From: hannahker Date: Mon, 6 Mar 2023 14:44:25 -0800 Subject: [PATCH 25/59] Set yanchor properly when title is at bottom --- src/plot_api/subroutines.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/plot_api/subroutines.js b/src/plot_api/subroutines.js index d722a334c89..1a49f95d7f4 100644 --- a/src/plot_api/subroutines.js +++ b/src/plot_api/subroutines.js @@ -449,6 +449,7 @@ function setDflts(title) { if(title.automargin && title.yref === 'container') { title.y = title.y === 'auto' ? 1 : title.y; title.yanchor = title.yanchor === 'auto' ? 'top' : title.yanchor; + title.yanchor = title.y < 0.5 ? 'bottom' : title.yanchor; } } From 2a47c009bbf090bc162d2fd2f696cd65c3e20065 Mon Sep 17 00:00:00 2001 From: hannahker Date: Mon, 6 Mar 2023 16:12:08 -0800 Subject: [PATCH 26/59] Make defaults setting logic more readable --- src/plot_api/subroutines.js | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/plot_api/subroutines.js b/src/plot_api/subroutines.js index 1a49f95d7f4..4c4cb101826 100644 --- a/src/plot_api/subroutines.js +++ b/src/plot_api/subroutines.js @@ -443,13 +443,23 @@ function isOutsideContainer(gd, title, position, y) { function setDflts(title) { if(title.automargin && title.yref === 'paper') { title.y = title.y === 0 ? title.y : 1; - title.yanchor = title.yanchor === 'auto' ? 'bottom' : title.yanchor; - title.yanchor = title.y === 0 ? 'top' : title.yanchor; + if(title.yanchor === 'auto') { + if(title.y === 0) { + title.yanchor = 'top' + } else { + title.yanchor = 'bottom' + } + } } if(title.automargin && title.yref === 'container') { title.y = title.y === 'auto' ? 1 : title.y; - title.yanchor = title.yanchor === 'auto' ? 'top' : title.yanchor; - title.yanchor = title.y < 0.5 ? 'bottom' : title.yanchor; + if(title.yanchor === 'auto') { + if(title.y < 0.5) { + title.yanchor = 'bottom' + } else { + title.yanchor = 'top' + } + } } } From 52b37c026dd65bac15ce29d26725bda2be71480b Mon Sep 17 00:00:00 2001 From: hannahker Date: Mon, 6 Mar 2023 17:59:40 -0800 Subject: [PATCH 27/59] Add reservedMargins logic --- src/plot_api/subroutines.js | 18 +++++++--------- src/plots/plots.js | 21 ++++++++++++------- .../mocks/zzz-automargin-title-container.json | 7 +++++-- 3 files changed, 26 insertions(+), 20 deletions(-) diff --git a/src/plot_api/subroutines.js b/src/plot_api/subroutines.js index 4c4cb101826..068cccaaf63 100644 --- a/src/plot_api/subroutines.js +++ b/src/plot_api/subroutines.js @@ -445,9 +445,9 @@ function setDflts(title) { title.y = title.y === 0 ? title.y : 1; if(title.yanchor === 'auto') { if(title.y === 0) { - title.yanchor = 'top' + title.yanchor = 'top'; } else { - title.yanchor = 'bottom' + title.yanchor = 'bottom'; } } } @@ -455,9 +455,9 @@ function setDflts(title) { title.y = title.y === 'auto' ? 1 : title.y; if(title.yanchor === 'auto') { if(title.y < 0.5) { - title.yanchor = 'bottom' + title.yanchor = 'bottom'; } else { - title.yanchor = 'top' + title.yanchor = 'top'; } } } @@ -497,7 +497,7 @@ function applyTitleAutoMargin(gd, y) { var position = gd._fullLayout.title.y > 0.5 ? 't' : 'b'; var push = { x: title.x, - y: title.y > 0.5 ? 1 : 0, // TODO: Is it correct that this should either be 1 or 0? + y: title.y, t: 0, b: 0 }; @@ -508,17 +508,15 @@ function applyTitleAutoMargin(gd, y) { title.pad.t + title.pad.b ); + Plots.allowAutoMargin(gd, titleID); + Plots.autoMargin(gd, titleID, push); } else if(title.yref === 'container') { - push[position] = ( + gd._fullLayout._reservedMargin[position] = ( containerPushVal(position, title, gd._fullLayout.height, titleDepth(title)) + title.pad.t + title.pad.b ); } - - - Plots.allowAutoMargin(gd, titleID); - Plots.autoMargin(gd, titleID, push); } function getMainTitleX(fullLayout, textAnchor) { diff --git a/src/plots/plots.js b/src/plots/plots.js index 9316bd2bf2b..753a9b3419a 100644 --- a/src/plots/plots.js +++ b/src/plots/plots.js @@ -1863,6 +1863,7 @@ function initMargins(fullLayout) { } if(!fullLayout._pushmargin) fullLayout._pushmargin = {}; if(!fullLayout._pushmarginIds) fullLayout._pushmarginIds = {}; + if(!fullLayout._reservedMargin) fullLayout._reservedMargin = {'t': 0, 'b': 0, 'l': 0, 'r': 0}; } // non-negotiable - this is the smallest height we will allow users to specify via explicit margins @@ -1980,6 +1981,7 @@ plots.doAutoMargin = function(gd) { var gs = fullLayout._size; var margin = fullLayout.margin; + var reservedMargins = fullLayout._reservedMargin; var oldMargins = Lib.extendFlat({}, gs); // adjust margins for outside components @@ -2017,14 +2019,16 @@ plots.doAutoMargin = function(gd) { var pl = pushleft.size; var fb = pushbottom.val; var pb = pushbottom.size; + var nonReservedWidth = width - reservedMargins.r - reservedMargins.h; + var nonReservedHeight = height - reservedMargins.t - reservedMargins.b; for(var k2 in pushMargin) { if(isNumeric(pl) && pushMargin[k2].r) { var fr = pushMargin[k2].r.val; var pr = pushMargin[k2].r.size; if(fr > fl) { - var newL = (pl * fr + (pr - width) * fl) / (fr - fl); - var newR = (pr * (1 - fl) + (pl - width) * (1 - fr)) / (fr - fl); + var newL = (pl * fr + (pr - nonReservedWidth) * fl) / (fr - fl); + var newR = (pr * (1 - fl) + (pl - nonReservedWidth) * (1 - fr)) / (fr - fl); if(newL + newR > ml + mr) { ml = newL; mr = newR; @@ -2036,8 +2040,8 @@ plots.doAutoMargin = function(gd) { var ft = pushMargin[k2].t.val; var pt = pushMargin[k2].t.size; if(ft > fb) { - var newB = (pb * ft + (pt - height) * fb) / (ft - fb); - var newT = (pt * (1 - fb) + (pb - height) * (1 - ft)) / (ft - fb); + var newB = (pb * ft + (pt - nonReservedHeight) * fb) / (ft - fb); + var newT = (pt * (1 - fb) + (pb - nonReservedHeight) * (1 - ft)) / (ft - fb); if(newB + newT > mb + mt) { mb = newB; mt = newT; @@ -2079,10 +2083,11 @@ plots.doAutoMargin = function(gd) { } } - gs.l = Math.round(ml); - gs.r = Math.round(mr); - gs.t = Math.round(mt); - gs.b = Math.round(mb); + + gs.l = Math.round(ml) + reservedMargins.l; + gs.r = Math.round(mr) + reservedMargins.r; + gs.t = Math.round(mt) + reservedMargins.t; + gs.b = Math.round(mb) + reservedMargins.b; gs.p = Math.round(margin.pad); gs.w = Math.round(width) - gs.l - gs.r; gs.h = Math.round(height) - gs.t - gs.b; diff --git a/test/image/mocks/zzz-automargin-title-container.json b/test/image/mocks/zzz-automargin-title-container.json index 7c400ab158a..ea6383a9b18 100644 --- a/test/image/mocks/zzz-automargin-title-container.json +++ b/test/image/mocks/zzz-automargin-title-container.json @@ -18,11 +18,14 @@ "height": 300, "width": 400, "margin": {"t":0, "b": 0, "l": 0, "r": 0}, + "xaxis": {"automargin": true, "title": {"text": "x-axis title", "standoff": 0}}, "title": { "automargin": true, "text": "Basic title", "font": {"size": 24}, - "pad": {"t": 10, "b": 10} + "pad": {"t": 0, "b": 0}, + "y": 0, + "yref": "container" } - } + } } From 4322c7ba22b4cc565054b5f8519c031e31657f90 Mon Sep 17 00:00:00 2001 From: hannahker Date: Tue, 7 Mar 2023 10:00:57 -0800 Subject: [PATCH 28/59] Revert some changes to test --- src/plots/plots.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/plots/plots.js b/src/plots/plots.js index 753a9b3419a..dfa9e712e68 100644 --- a/src/plots/plots.js +++ b/src/plots/plots.js @@ -2027,8 +2027,8 @@ plots.doAutoMargin = function(gd) { var fr = pushMargin[k2].r.val; var pr = pushMargin[k2].r.size; if(fr > fl) { - var newL = (pl * fr + (pr - nonReservedWidth) * fl) / (fr - fl); - var newR = (pr * (1 - fl) + (pl - nonReservedWidth) * (1 - fr)) / (fr - fl); + var newL = (pl * fr + (pr - width) * fl) / (fr - fl); + var newR = (pr * (1 - fl) + (pl - width) * (1 - fr)) / (fr - fl); if(newL + newR > ml + mr) { ml = newL; mr = newR; @@ -2040,8 +2040,8 @@ plots.doAutoMargin = function(gd) { var ft = pushMargin[k2].t.val; var pt = pushMargin[k2].t.size; if(ft > fb) { - var newB = (pb * ft + (pt - nonReservedHeight) * fb) / (ft - fb); - var newT = (pt * (1 - fb) + (pb - nonReservedHeight) * (1 - ft)) / (ft - fb); + var newB = (pb * ft + (pt - height) * fb) / (ft - fb); + var newT = (pt * (1 - fb) + (pb - height) * (1 - ft)) / (ft - fb); if(newB + newT > mb + mt) { mb = newB; mt = newT; @@ -2084,10 +2084,10 @@ plots.doAutoMargin = function(gd) { } - gs.l = Math.round(ml) + reservedMargins.l; - gs.r = Math.round(mr) + reservedMargins.r; - gs.t = Math.round(mt) + reservedMargins.t; - gs.b = Math.round(mb) + reservedMargins.b; + gs.l = Math.round(ml) //+ reservedMargins.l; + gs.r = Math.round(mr) //+ reservedMargins.r; + gs.t = Math.round(mt) //+ reservedMargins.t; + gs.b = Math.round(mb) //+ reservedMargins.b; gs.p = Math.round(margin.pad); gs.w = Math.round(width) - gs.l - gs.r; gs.h = Math.round(height) - gs.t - gs.b; From 73ccaf46bf4f268450a22cea80e38d7d8a1f94e0 Mon Sep 17 00:00:00 2001 From: hannahker Date: Tue, 7 Mar 2023 17:25:54 -0800 Subject: [PATCH 29/59] Fix bugs --- src/plot_api/subroutines.js | 4 +++- src/plots/plots.js | 28 +++++++++++++++++----------- 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/src/plot_api/subroutines.js b/src/plot_api/subroutines.js index 068cccaaf63..1cd03129912 100644 --- a/src/plot_api/subroutines.js +++ b/src/plot_api/subroutines.js @@ -511,11 +511,13 @@ function applyTitleAutoMargin(gd, y) { Plots.allowAutoMargin(gd, titleID); Plots.autoMargin(gd, titleID, push); } else if(title.yref === 'container') { - gd._fullLayout._reservedMargin[position] = ( + var reservedPush = {}; + reservedPush[position] = ( containerPushVal(position, title, gd._fullLayout.height, titleDepth(title)) + title.pad.t + title.pad.b ); + gd._fullLayout._reservedMargin[titleID] = reservedPush; } } diff --git a/src/plots/plots.js b/src/plots/plots.js index dfa9e712e68..28f65aa1d4d 100644 --- a/src/plots/plots.js +++ b/src/plots/plots.js @@ -1863,7 +1863,7 @@ function initMargins(fullLayout) { } if(!fullLayout._pushmargin) fullLayout._pushmargin = {}; if(!fullLayout._pushmarginIds) fullLayout._pushmarginIds = {}; - if(!fullLayout._reservedMargin) fullLayout._reservedMargin = {'t': 0, 'b': 0, 'l': 0, 'r': 0}; + if(!fullLayout._reservedMargin) fullLayout._reservedMargin = {}; } // non-negotiable - this is the smallest height we will allow users to specify via explicit margins @@ -1981,9 +1981,15 @@ plots.doAutoMargin = function(gd) { var gs = fullLayout._size; var margin = fullLayout.margin; - var reservedMargins = fullLayout._reservedMargin; + var reservedMargins = {'t': 0, 'b': 0, 'l': 0, 'r': 0}; var oldMargins = Lib.extendFlat({}, gs); + // We're assuming that each entry only pushes the margin out on one side + for(var [key, rank] of Object.entries(gd._fullLayout._reservedMargin)) { + var side = Object.keys(rank)[0] + var val = Object.values(rank)[0] + reservedMargins[side] += val + } // adjust margins for outside components // fullLayout.margin is the requested margin, // fullLayout._size has margins and plotsize after adjustment @@ -2019,7 +2025,7 @@ plots.doAutoMargin = function(gd) { var pl = pushleft.size; var fb = pushbottom.val; var pb = pushbottom.size; - var nonReservedWidth = width - reservedMargins.r - reservedMargins.h; + var nonReservedWidth = width - reservedMargins.r - reservedMargins.l; var nonReservedHeight = height - reservedMargins.t - reservedMargins.b; for(var k2 in pushMargin) { @@ -2027,8 +2033,8 @@ plots.doAutoMargin = function(gd) { var fr = pushMargin[k2].r.val; var pr = pushMargin[k2].r.size; if(fr > fl) { - var newL = (pl * fr + (pr - width) * fl) / (fr - fl); - var newR = (pr * (1 - fl) + (pl - width) * (1 - fr)) / (fr - fl); + var newL = (pl * fr + (pr - nonReservedWidth) * fl) / (fr - fl); + var newR = (pr * (1 - fl) + (pl - nonReservedWidth) * (1 - fr)) / (fr - fl); if(newL + newR > ml + mr) { ml = newL; mr = newR; @@ -2040,8 +2046,8 @@ plots.doAutoMargin = function(gd) { var ft = pushMargin[k2].t.val; var pt = pushMargin[k2].t.size; if(ft > fb) { - var newB = (pb * ft + (pt - height) * fb) / (ft - fb); - var newT = (pt * (1 - fb) + (pb - height) * (1 - ft)) / (ft - fb); + var newB = (pb * ft + (pt - nonReservedHeight) * fb) / (ft - fb); + var newT = (pt * (1 - fb) + (pb - nonReservedHeight) * (1 - ft)) / (ft - fb); if(newB + newT > mb + mt) { mb = newB; mt = newT; @@ -2084,10 +2090,10 @@ plots.doAutoMargin = function(gd) { } - gs.l = Math.round(ml) //+ reservedMargins.l; - gs.r = Math.round(mr) //+ reservedMargins.r; - gs.t = Math.round(mt) //+ reservedMargins.t; - gs.b = Math.round(mb) //+ reservedMargins.b; + gs.l = Math.round(ml) + reservedMargins.l; + gs.r = Math.round(mr) + reservedMargins.r; + gs.t = Math.round(mt) + reservedMargins.t; + gs.b = Math.round(mb) + reservedMargins.b; gs.p = Math.round(margin.pad); gs.w = Math.round(width) - gs.l - gs.r; gs.h = Math.round(height) - gs.t - gs.b; From a3462d2633261eaf80f7095c4a61efb4dbc01cdc Mon Sep 17 00:00:00 2001 From: hannahker Date: Tue, 7 Mar 2023 20:52:58 -0800 Subject: [PATCH 30/59] Fix more bugs from redraw --- src/plot_api/subroutines.js | 6 +++--- src/plots/plots.js | 9 +++++---- .../zzz-automargin-title-container.png | Bin 11760 -> 12987 bytes 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/plot_api/subroutines.js b/src/plot_api/subroutines.js index 1cd03129912..5b811af69c6 100644 --- a/src/plot_api/subroutines.js +++ b/src/plot_api/subroutines.js @@ -501,6 +501,7 @@ function applyTitleAutoMargin(gd, y) { t: 0, b: 0 }; + var reservedPush = {}; if(title.yref === 'paper' && isOutsideContainer(gd, title, position, y)) { push[position] = ( @@ -508,10 +509,7 @@ function applyTitleAutoMargin(gd, y) { title.pad.t + title.pad.b ); - Plots.allowAutoMargin(gd, titleID); - Plots.autoMargin(gd, titleID, push); } else if(title.yref === 'container') { - var reservedPush = {}; reservedPush[position] = ( containerPushVal(position, title, gd._fullLayout.height, titleDepth(title)) + title.pad.t + @@ -519,6 +517,8 @@ function applyTitleAutoMargin(gd, y) { ); gd._fullLayout._reservedMargin[titleID] = reservedPush; } + Plots.allowAutoMargin(gd, titleID); + Plots.autoMargin(gd, titleID, push); } function getMainTitleX(fullLayout, textAnchor) { diff --git a/src/plots/plots.js b/src/plots/plots.js index 28f65aa1d4d..a2e0aaa920e 100644 --- a/src/plots/plots.js +++ b/src/plots/plots.js @@ -1985,10 +1985,11 @@ plots.doAutoMargin = function(gd) { var oldMargins = Lib.extendFlat({}, gs); // We're assuming that each entry only pushes the margin out on one side - for(var [key, rank] of Object.entries(gd._fullLayout._reservedMargin)) { - var side = Object.keys(rank)[0] - var val = Object.values(rank)[0] - reservedMargins[side] += val + var margins = gd._fullLayout._reservedMargin; + for(var key in margins) { + var side = Object.keys(margins[key])[0]; + var val = Object.values(margins[key])[0]; + reservedMargins[side] += val; } // adjust margins for outside components // fullLayout.margin is the requested margin, diff --git a/test/image/baselines/zzz-automargin-title-container.png b/test/image/baselines/zzz-automargin-title-container.png index 6201c64371ecd1b2fd65b30bb50ca2ab983de0a0..52afb41cc337728f6fbe963773494f1d7e84e84b 100644 GIT binary patch literal 12987 zcmd73XHZm47d46lgD^ zg>?c0{_)}Ag5NB@nr_0vLSiY(Ub^mXu$V%Spry4PTz{7O{ui+je}8?PD^n~KG@(j4 zPq{+rsBS7|T{F-))BASKSMe&Zy%onJIqg%LXKI*rlafNiSf1;{u8~mC(wfuUPu!NS zpFaGMc-C?z|9i@Q%EjGv6<$d4e{nXn2gHK^1=g*%H>%MX87XS40w1$R; z$;;r|!TaCRqcdKIkZ#j@VCji^zYSigBBfV0^7t7=YOUThSDI4;v;QuF@8 zTN;|0tSRDd=hI2kQEvy5PG+HONHvk=-rOX5brd1|V;|(RQ8th^8S39q{`%F(m}x85jYk1=y;NgOoPYFIV9X9Jo#t*aGGCb z6&l#-ztotKsJt>qPnT)EOE&vC=jx}L%?HCLrW|KKlCHfj@j6-Be2>c;hX1eAQP}Wi z(koFEsB=rS*)s|zIKS`j>(u?wxTioSr^fIWYu@La7{^DorDN9!NV!PPzT7~ALv8(u z6xl8}8Lde2wuyczMn0yV(pY`BCN5g>r^8E6^Rc_XN6M-JP`&#(l+C%WnvQNXFE^R0 zfTE^~N02}6W-O2S%)Lt*8XsN817RJH?K3>pk>#@hz5t|&tG8a*<ViTqC^7fBHndQR8lnWe0^L=-)5G~R6 zW_s6<KIzq^K~W%%#$iS<_t+UZSh<3)zV|EAD_|K=lF@Q2589 z$1YQZX#Hhy3@ZQ6WxP_yi3v|4QsLktAuPlD@eE}Xs{$39YLwH>KR0Mhsi61K<+ku8 z^zG+z&xzqC$u^)C+0(##Zv1869O&!I1MIJ)>XeQ#&z|fmW|MOuCl7cjlH6kJBszK*?9DVJL1%2ft`XzqewQ}z$~49ejUtgGtd&D6AG?_oaKTQ*P0?qeP2t>pJipVw(X6P27)9_^8)CT8`&i6aG z+`q$`qBMxi2s{9l5JVFO9>4=VfC;{~p1V1s*_OO)@5br3wUH24Y5nw@Kb{&s`Y&0?28@!8L}hQ%GPp8nKH6<`eNHHjVbJrJo~n?-?9-N=M8Zn{aAjV2bFeHRcTMOoQPRU> z%l|V<$;#+^wSVH!nHh6A=MQKZTB9j6{)Cn;eg?^(&=S3krf~XmFfKRda?u|%k0Ei$ z9{q{KcQ=rsA`B%7?Ge}~-?&8$h%Wcf7H96%gZ&pO1iMIs{ZByq*G04SyF`5JeXVjy z_=UapFgDRm5LPq%&L3X@$Fx9DNJOwzW~Dptl3hG(e~d7*H;9(s$c4+fKzZrgYj63%7K0V@Nm!se@I~0~%1~?chO^9WpYQZM@u{ ze#-1M#HfElHXDUNhQ?*1&^kSoAd|MsIiRWTzLs-peHJ+Vw)wuoO~nU`Xi5baLO-2Om~cSp?5XMwQtdyeai(z-@TEAPz^ zpXm(jlf_xA$N@mecBhL><*Q55b+oh|C8Fr)=-8;jE2V)-Le({%Rf!lF7~tB{yxvme z8^E?dGQ?9k(Wtd{qmPJs>gq%oC_;(}m@z-UC0gytoQNokS zvtkSs3KrgHZB@`_N_-}ZK&;)uc%gM(09W)>d*O34OiA@ zS^86il&)+n-XRcD0mYn38mjn5qWk_Wq=@Ser^&QO!e2W?G{!!BOFj2q+UfaQ8fo<~ zlkx>`kiAk5*8xT(s}_3jl=47ffU(&DR557P2NzduiRX!`Pwf| zV*5)P%!~!YRxK$z;=p`E-?fn2I>(yf-xsbSw{`z|K@qua@Yf4+NaMf4#+Dx=)b}^U zmXj&a{1s2Xv)%!aS$;Pj*eIe0vLxeS_+Ed5Y*!E}###(;v#@g$^5T3kvu(L*Fn`~n z95@X{h?$R4@L3r&taZJ}VczBX#+;3pi3b^E*>L{Bh%P=v5@|9y`sd6Ot}+dG6;RMT ziUi8x+;3wbA~D@LvHw^C(mRrg5)pu7ID-DcWgrE_44BlEk@?&b?5e?3Sw_e$#sV$+ z%M)Ju$woCVbu3hJU9hLww~Gt&`I~N}gVnA;)b}hJ%$X&m2eHTLIzzR}ovjBw*=Zvi z4KhF1O!3cp?!aU8d%LTxy*Q&nn>_~^9ohkq%kd#%JVwG*c#nok8&ECqqQVLhb`*NR zfE41UBM+Mpic0%yNPTdcl8AhWKt6~+Nu>xO&cu5KiOnaf$o$#%C~0^ML%mBaH^${2 z%fTi^$Rhkh3`(b$^pqQdjV6j;4q~L;+WTOI12Q6S8hx?oKwrYXhib#DN zDUZ=!ZsM)i1jLB`(3RVY4GE}x(yo~+dcb!+jE`4VR1EEAOk;>sLpIJx8}vH1N#779 zkjQtl^l-HvH=?h{_NTXos*b!wZc7*a3rJEyz{kw;bpP|m7wpkL7Ntoc)p86`Otj`V&E98< z=YjJ&Dl(Z?ipOq*WkRp_StTEEGDj@OtD<~luG080Zh6+zJHdwW9$iIlw6Aos17Rim zZL%PRpoYtRDNhP`&j&8y&BQXNX4ax=kKE(@kNsm|@+y!nZ{X+Mox5)<;AXm`-R{a6 z5%b0%Ma4-GonSP|@DLpNQNw2aIUbH0o%=13BT)`4DCF9OeQcyd*}JM4jc#ybu#B_t zJw0K6Mf* z)!;{}*PQ$J{Y3%M;N^bJLMh*j^_<(ueON%o{2nRlFqC?)<1}`sd1DWu04Ei&7{JNW z-8m|@Nq`z4%X;q?vNC`6gFY4b@kk*&%3?oq&&E^=g`jlD!~Y1W+Oe_hgk1TNeCToxpESSE<&VkjfgR@?%pMo?3yA6>8=Sx!Y`}~Ks6rC8Tmc> zG|$;q;)kaNdmsEaXu2Lj^p+L1#2U|dR^QV_fIzbOld3;hHk66S8~X%PES&vTFMo2= zweOP5#wk$R!Lz)%W{1_0o_D1rxk;FmNbOA7F>!aq-b>hoJbXkUcmD#A6F+^(QAYFQ zXgvQrWN?m*;@=>137-uCZu%Q8^w6?7Su)Nyp@z-BA$S{3_WJLLNhejf{yz}N0Soo~ zd+1k5@vOzxsX+_K@@sD_Z1q`&y$t%>pj?`z7{pN3o&Kf*5c`OvF+6~k+lzNZnr+v@(y*H%M(9v#O4hc#%EPDooqWi=e|Fr ze`-8jT28L}CQHM8v$^M$b-#eFkdsR}Xvq>J6&2fT&rDHL z0fe>Kq`$h+`=AgbH0&c^3xvBD{AZsJR7DRa$y+MGP$geJ<`w9ul3#WESVJWAuXcJ( zcq(M#fSoulr%>zN-axKD9}wn17Unp95QogjtrKdAPYs>aZV$+$A6Z==OAmaTT3&zp zoLSe)HhFZ0+(RvF1RJlnmAEF-iqyOhzyo3E>-M?t1DA8EKC39dE;n!#g;|pkGABC| zg9%p)0rlEAUp>xS$oviS?Zmk1O*d@|cILigsxqaKuBi5!qxm3N8US@H|MhO*YxgU= zqF8I{LJUNCyGz|UR|OKq^rIL?m+HFjm71MYR}M^m!a(gpc{98=N{M@{5S zRvVF{M(q*IMIxintMt?bK%)L2jO2i%Ko++PdAD)y1=S79=0sQt=*UBLN+kSXAWX$+ zwYJl2@}&5PRQ@M$6mK=Y!65nli`W{{?Vsm5PU!3nSx}3|g2Zn8uarMFqRHi_(m+9g z{TJ~ZiHAN5{=nSX50A0_i+he3WxB@v11K|~ru~aZj?_io}ugG z*HMRa`eESaszEkuaiAi32&{x1YU}=byOb=aRycdXyFS(F$0}>4nw&>ebc?+kkZ_!~ zya-w4_eD(bi8jUIFj#j?XR)D^iu|vJ{UhUyk@LWPc>ER#LqGyt0%09*@dKwu6dwg> zYj4*91wso+Xb833Br;HU1}LQpS1}$h*YhLR#m_(i^x%+(Y{k(KY-k82gVJ;wceB~f zfUjLrMgSojv2uXnJKrH;OAdjMO$E~yY zlM9!s)?Y))vo69w`*?0C>u)eK)4~&BNX;I~p#2NXdWv~6l86pFC;T9h^54(xLF8S| zn_a1gR4uOx)4wpGc&R`gV1XL%$)EUCfaQTME4Xh9C(Sr>R_0$wJ5=L`=#$`{+P_IM z$?r)!0h^Kt!$CY8%$a`<_~rkssIwixwlMEVI1=Q<+5s4gEKzrsV3}tvR)$uj#+WhWX<%hK+*Y(^H@*Vh+$DYeykK6mP4rE+r6>492(s>f2QCMC#Cszsd&R9INp2$NkS z`SYS8w@cyS+Zm@NZauhvA9pi5Bcp}Id&(5Nl13C7E7z5Pm&&+2m}&aF>5Ac0tGF7) zX3sZ^hTF1Jv2<+ypi%4QTv~$)koa8u8ZapN9;*#_89hKGNzoS0gsNzK^ypF0gnRQ{ zj8S-Y4d|+t%0!Dy7%DUjcZ=?8-muBHBl~e|Jz<|UUpB8&#@QZhBRb;*4UGra-gWTu z5uk1Ia$)`TiQPt+;;<0$y!ILQDpKxnxX1pR=B!h&l!a8Khuz{1C%?C=us zrxst0#VHF^%0^wBp-DV%t84c@3$+P-Q&4Kzb=T7EHKlfjM5lRYT!&lz?kLB++u?SX zUmW=SfQpNk2uj~a4x0vi9U~ zuZ^Ei)NbSg_za>{Q$W~ly<1*%ds%w#3-NRVHZh-(*!k>@PkQzpMSlC%9@CGsPj{(# zPmnt;Renv%m$YZW#2a`j+Eq?d4O%|&G22@CLZLv_-!bzpdAdhg(Dn2yo57wmRI2A3 zx5t+t>Z!-h?>kKF7Z5OF>Am8G+Re|xCM|evd&6S~<>XrpXl#5g8CYk$Aoa)x4%Nq8 zgoK1kx{T7kHK)B6N>o^ke`t(M`Toc=G_N>$UX5dAty7So&Vl}{MTDvEVp+eExq0Se z_lZz+voL8p_(Ee;aIF4tf4L`988l48U)qk<-TIV&lhxJL)oHnQvz!Y9C!lIS$>fdX zOmWem@-pqejw4XLAbfEmgmnrdL&W@)4}ZkDOY()|rfKZ-iLd^gU{4whPCk)|_D%;go`RYSV7D2}WQt$2;?rY@AUF#=7z zY~boMNk8ULL{d46k9sS;(;Ypv-mB(T^djIh7v^aw-D_n|5{cZ263WAIp#zug>G;kL z&L?jT-`$*FUfxGqJRbEe{V* zl4K4hjS2laoVpY2bfNH8#FrG$xg74cl)bdFkuX?CoKe(HHo3x@@%WD~^F{RnUsK!+ zqN0jd?gsV;(C9T4Sx5{z_L4W0ZA~&A4%9|(dc-tW;Ny1t?GBI4xxGn!VLN=jjii)E z-=PtXCVz&4$=@Lt(nOE=9qzyI-S<2Q(9D|bmS=htL_l5D=2t^DmBs0QrpCIk@`_O0 z$9g}%BGmk+0%srJ?M_3_GRyQh{PD;ZV&4^Pa#~F!bLE-_KF%a#^L@hD2dwgM!UgNN zWP*tv5iy9hXQ?DlrG*PP8J0!RiSV#lCP)WwNBiwH`xN`r)3`f<6^pw|G~V)Fef@4~ z6~r6APPirefLFWFWir!Utg*;kqF|i&J?&YGZ*Gj;sYSILNvCLp8unKjX&9wueLyR4 zRFe5yBzRZ%{94U*SflitKq4`PtgDGE&$k;?i1o5nQ>K&+cVc#(LiA>E8i;-nl<3&F zeZ?la(10JLXMwYVv$-`Ht$giT_fpj2P#Jj*<6}|#)V#9Fl_r8)DeYZ;2hN-C>+dW)q1`Gwg#+-x4O#2j@EjCOS{Ik?1R3%KSvx(9 zLg8~pz{$%{_4&erLf_*xl+gYE`_d4Md1axr>kWh3$QKUksVgvJ&>Oxd;w-V$fd4i{ zT)TK@@>SiBf(R4S&wOv$y!KYxmY0HaI#v(QXkwku_d_eqZ(Tu~-Ajo4{tyculO6iS zcsdp3%`SRXFQ(&uWvUR<%`{YT?w5nzWkH{vb<(#dgFHHfYH{E(_&3Ynxq&U#S#mYC zX=`asQ&BdtIjkm&*)>&Moa~pF*;f2qEJVr?-F#>g`B2SgPSdWyJwG;}OfpX37LWA) ztlFrAw);@RMdvK9iLC`o>3IY0FZEw6qU9o24xhMB;J=cB%R0Q_&Tel!$uwdXuX7vG z7C8HP)pBjBBfulL*tea!eoIa?hr#0V>z<0$$`A+dgcX5RN-B=p=C`HMk{b!((Pa&* zADcuLS@(#MIN7S`dq~A=QnDirU*9H99vF2PX3<&8Fp=`hj3D!;!MAARH2 z0c-T+38&(B>J7`*yCI^7M%lRU2XV%3nJ8oMQ_YHnbaFZQ4H(%l#5i0S?{--9GcDMv z_RZ01xA19;!QvUWs^$yHBf^b*JX%^kM{~+;;IKyH(H~P<#H)0K*t=4^TdQO&=yD_q z{SxlFbe0viB@*R`FM&US|ezC7Y0fx@lx}JJ_U*h_ed_9;Y3A( zEZQ?zWU;NP?CSf+@qpop@_!z||G~ zx-`}yf~84YI5DT0@}vcBzL2%(N*%T7rx~LWzngzG`MmAs7<&}jNYdf7vv;H5IiaQ*%j%^)}v<)hEP0?8g3^?tMYi*7ks{H($nZkEilfrvDC_6+JJuX6*>LRpNKjynz>0=D9Ybh!g3OSgHRjU$g zby!%g+byIoN<3#36LY%yfxqMlL`&+K&8KYs{qpXvLG&(r+$Yp%G5B^BIdR|aIjoeC zw+gLrFIY-_r{%=Q!|BX3L5WE{jY{4J+F?=Z-ToWxx*l1i`{f49GIteR=5c)N38gZ% zc5Li@>reTPlk8i2=dU3z`0!mkWo)cJvoUP%rltwPhZ1YGP=AQ`WjwqnJxWYTRchOe zUGgsL2`^y&B~6#mKjl>nkXIP1X+=tw6E!`T8BX2NU!iD?#2HG$g7}d6?7AQZ`v z)uNmv)a`}`Yw;GZ-73)OA;hBE-hJzB(g%)i?Cym+CQCdLXf{<}nyI?g(3KbFow^iw z2TR*upSbnrvAuTD&N43f>o_QNu~72_1*@7DDnTb*c$M&x~$= zA>g6lihJ~^j0+Q|N@W=L#hM?HVI&Y70N%)CjB7sLC0{4SYgv7JwyS-!{?JF8EurF> z(;g_2EDfd=+=Es z;{37I4>H7xj*gD8KIt>qyS{)NMzhNkFr>S!mMxr*9WK97T6f2~S{h)AikMmqVT~Ht z-xlJy-SV|Pfd?+aQE*c}AaB2# z?`^GC){|7Ufv-={6y9OZegRUj#u2py>^Z1{$0oWun#y-G%w14#3BKfJlh93t{k`Hr zniQ+!3cVqlanGe1q9!cK10vgN@o4vcedovsdQpJ_l#s2sMg8kK^@U(sKT-l$#;rj5 zL+0SqJuDv}ZD;rRq^RS^sBuayZ<+k9>nk0wo0U$PvD^mM#$ySCqK*y>luHS9nIdS^ zU zukIdd(z{p0NR6;@`bmaQ#g)G2g zYVR`maRRKa9{{&hm7^;(6I=6zl6JsI zkXu1fhI7xm+h@LiE+@g`2x*~Fs3HuUqv4&n0=q=|6cxbIaiJQ2>r`4g;&g8^XI)f) z#ELatY0m@!Pfbjtkq|EC%=23BZ71!$_&HZf+z3))r!ehCQ(-y2bCgd)&iMN0-~?!+ z+$ry^!rJAl%YsmKd((oQUdy$dTRnMYZ#-)RT6FM5$?(Fk;A9kvtsM%;)e-^;b|Vx6 zy~VrNu{d^H3HK$pEke39&tQ!Xxt}y}HQsSMb;VTa?nl#c-U4Qs`wLQaK-5yK5Ks%a z^ftEf_K9%Y5}+SDz2UZlU#SVm%g_IK`ur}&A3Pzgsa3Urbj1S}S|8u`wb0%59$~on zvnZ39w}~n@5E09~QZx(VMo~GV%T@CNo7)T1@rIvsQ7f-0q=;K-5OrofcDBrzE$v(U zKDC*W)Elg57a$>A?rm+-lCJ=Jbw6?k?_+>bxHNpcjC>|g>GO)`Y-YT{+Q9_kNg<2s zgcQlyK5_+bI?{-?y(PE$SfKsQygz^Q=S0@THS>x_h_d-gohBaWv8>sup*8e3zKVS+ z_Ep>*N}Xgo_Q_sLBsY5@ZIRfCyDaEa0NS(-CYsW)0$?gmb0sw=VEY!BUgG?yVpM&2 zuzQRDq}`S~UE_TAmI|$?>)Yg@1E5lpMeV61-aSDZ4{bax~b zRR~u{4T=GYz$VFB-i|>jyCR==p@PoaMQnYfs$Y*4^}ZCO2rseNDz_bejHON+W%vVw zl{MwhH6a(cLg?l2$O5advVWSmmKeaNYpFh^?3N%_H@gx)TL(FRkav90X{sM zHDGkJM|$z@;e?{DBoGi7ma%uS#x3b@ZL)o!Lmy)6e-CBW8^sWUKT5$;lv9;0ylfQk F{{T#dGFt!u literal 11760 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 From 33bbbef70df2fb0048ebabc7f55d76b9ca267cde Mon Sep 17 00:00:00 2001 From: hannahker Date: Wed, 8 Mar 2023 17:06:26 -0800 Subject: [PATCH 31/59] Apply review comments --- src/plot_api/plot_api.js | 2 +- src/plot_api/subroutines.js | 18 +++++------------- src/plots/plots.js | 22 +++++++++++----------- 3 files changed, 17 insertions(+), 25 deletions(-) diff --git a/src/plot_api/plot_api.js b/src/plot_api/plot_api.js index 9b863ed1515..7088f08eb3d 100644 --- a/src/plot_api/plot_api.js +++ b/src/plot_api/plot_api.js @@ -277,7 +277,7 @@ function _doPlot(gd, data, layout, config) { subroutines.drawMarginPushers(gd); Axes.allowAutoMargin(gd); - Plots.allowAutoMargin(gd, 'title.automargin'); + if(gd._fullLayout.title.text && gd._fullLayout.title.automargin) Plots.allowAutoMargin(gd, 'title.automargin'); // TODO can this be moved elsewhere? if(fullLayout._has('pie')) { diff --git a/src/plot_api/subroutines.js b/src/plot_api/subroutines.js index 5b811af69c6..1faed81fa2d 100644 --- a/src/plot_api/subroutines.js +++ b/src/plot_api/subroutines.js @@ -406,7 +406,7 @@ exports.drawMainTitle = function(gd) { var dy = getMainTitleDy(fullLayout); var y = getMainTitleY(fullLayout, dy); - if(title.automargin) { + if(title.text && title.automargin) { applyTitleAutoMargin(gd, y); } @@ -442,23 +442,15 @@ function isOutsideContainer(gd, title, position, y) { // 'auto' is not supported for either title.y or title.yanchor when automargin=true function setDflts(title) { if(title.automargin && title.yref === 'paper') { - title.y = title.y === 0 ? title.y : 1; + title.y = title.y === 0 ? 0 : 1; if(title.yanchor === 'auto') { - if(title.y === 0) { - title.yanchor = 'top'; - } else { - title.yanchor = 'bottom'; - } + title.yanchor = title.y === 0 ? 'top' : 'bottom'; } } if(title.automargin && title.yref === 'container') { - title.y = title.y === 'auto' ? 1 : title.y; + if(title.y === 'auto') title.y = 1; if(title.yanchor === 'auto') { - if(title.y < 0.5) { - title.yanchor = 'bottom'; - } else { - title.yanchor = 'top'; - } + title.yanchor = title.y < 0.5 ? 'bottom' : 'top'; } } } diff --git a/src/plots/plots.js b/src/plots/plots.js index a2e0aaa920e..54489032829 100644 --- a/src/plots/plots.js +++ b/src/plots/plots.js @@ -1981,15 +1981,15 @@ plots.doAutoMargin = function(gd) { var gs = fullLayout._size; var margin = fullLayout.margin; - var reservedMargins = {'t': 0, 'b': 0, 'l': 0, 'r': 0}; + var reservedMargins = {t: 0, b: 0, l: 0, r: 0}; var oldMargins = Lib.extendFlat({}, gs); - // We're assuming that each entry only pushes the margin out on one side var margins = gd._fullLayout._reservedMargin; for(var key in margins) { - var side = Object.keys(margins[key])[0]; - var val = Object.values(margins[key])[0]; - reservedMargins[side] += val; + for(var side in margins[key]) { + var val = margins[key][side]; + reservedMargins[side] = Math.max(reservedMargins[side], val); + } } // adjust margins for outside components // fullLayout.margin is the requested margin, @@ -2026,16 +2026,16 @@ plots.doAutoMargin = function(gd) { var pl = pushleft.size; var fb = pushbottom.val; var pb = pushbottom.size; - var nonReservedWidth = width - reservedMargins.r - reservedMargins.l; - var nonReservedHeight = height - reservedMargins.t - reservedMargins.b; + var availableWidth = width - reservedMargins.r - reservedMargins.l; + var availableHeight = height - reservedMargins.t - reservedMargins.b; for(var k2 in pushMargin) { if(isNumeric(pl) && pushMargin[k2].r) { var fr = pushMargin[k2].r.val; var pr = pushMargin[k2].r.size; if(fr > fl) { - var newL = (pl * fr + (pr - nonReservedWidth) * fl) / (fr - fl); - var newR = (pr * (1 - fl) + (pl - nonReservedWidth) * (1 - fr)) / (fr - fl); + var newL = (pl * fr + (pr - availableWidth) * fl) / (fr - fl); + var newR = (pr * (1 - fl) + (pl - availableWidth) * (1 - fr)) / (fr - fl); if(newL + newR > ml + mr) { ml = newL; mr = newR; @@ -2047,8 +2047,8 @@ plots.doAutoMargin = function(gd) { var ft = pushMargin[k2].t.val; var pt = pushMargin[k2].t.size; if(ft > fb) { - var newB = (pb * ft + (pt - nonReservedHeight) * fb) / (ft - fb); - var newT = (pt * (1 - fb) + (pb - nonReservedHeight) * (1 - ft)) / (ft - fb); + var newB = (pb * ft + (pt - availableHeight) * fb) / (ft - fb); + var newT = (pt * (1 - fb) + (pb - availableHeight) * (1 - ft)) / (ft - fb); if(newB + newT > mb + mt) { mb = newB; mt = newT; From 9af5cbd3112d893e2a7117ef88cc9a6edb79054b Mon Sep 17 00:00:00 2001 From: hannahker Date: Wed, 8 Mar 2023 18:05:06 -0800 Subject: [PATCH 32/59] Add jasmine test for interaction with x axis --- test/jasmine/tests/titles_test.js | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/test/jasmine/tests/titles_test.js b/test/jasmine/tests/titles_test.js index 5897cea997c..8ffc5f2fe6e 100644 --- a/test/jasmine/tests/titles_test.js +++ b/test/jasmine/tests/titles_test.js @@ -1155,6 +1155,28 @@ describe('Title automargining', function() { expect(gd._fullLayout._size.h).toBe(156); }).then(done, done.fail); }); + + it('should make space for multiple container-referenced components on the same side of the plot', function(done) { + Plotly.newPlot(gd, data, { + 'margin': {'t': 0, 'b': 0, 'l': 0, 'r': 0}, + 'xaxis': { + 'automargin': true, + 'title': {'text': 'x-axis title', 'standoff': 0} + }, + 'height': 300, + 'width': 400, + 'title': { + 'text': 'Basic title', + 'font': {'size': 24}, + 'yref': 'container', + 'automargin': true, + 'y': 0 + } + }).then(function() { + expect(gd._fullLayout._size.b).toBe(51); + expect(gd._fullLayout._size.h).toBe(249); + }).then(done, done.fail); + }); }); function expectTitle(expTitle) { From 67cf8da775b01743e7e020b12805d53da39566c3 Mon Sep 17 00:00:00 2001 From: hannahker Date: Thu, 9 Mar 2023 13:07:43 -0800 Subject: [PATCH 33/59] Push pie test fix --- test/jasmine/tests/pie_test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/jasmine/tests/pie_test.js b/test/jasmine/tests/pie_test.js index f51d7f386b5..8b899a718ff 100644 --- a/test/jasmine/tests/pie_test.js +++ b/test/jasmine/tests/pie_test.js @@ -972,7 +972,7 @@ describe('Pie traces', function() { textposition: [['outside', 'outside', 'inside', 'inside', 'outside']], 'outsidetextfont.size': 12 }, { - t: 'grew', l: 'shrunk', + t: '~=', l: 'shrunk', b: 'grew', r: 'grew' })) .then(check('automargin:false', {automargin: false}, { From 16c0bcfca81cd7d6860366f4a39764a4707a3d8f Mon Sep 17 00:00:00 2001 From: hannahker Date: Thu, 9 Mar 2023 15:06:24 -0800 Subject: [PATCH 34/59] Fix scooting behaviour to account for reserved margin space --- src/components/titles/index.js | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/components/titles/index.js b/src/components/titles/index.js index 0e6b4a07eeb..b913f7351fa 100644 --- a/src/components/titles/index.js +++ b/src/components/titles/index.js @@ -167,11 +167,21 @@ function draw(gd, titleClass, options) { var pad = isNumeric(avoid.pad) ? avoid.pad : 2; var titlebb = Drawing.bBox(titleGroup.node()); + + // Need to account for reservedMargins here as well + var reservedMargins = {t: 0, b: 0, l: 0, r: 0}; + var margins = gd._fullLayout._reservedMargin; + for(var key in margins) { + for(var side in margins[key]) { + var val = margins[key][side]; + reservedMargins[side] = Math.max(reservedMargins[side], val); + } + } var paperbb = { - left: 0, - top: 0, - right: fullLayout.width, - bottom: fullLayout.height + left: 0 + reservedMargins.l, + top: 0 + reservedMargins.t, + right: fullLayout.width - reservedMargins.r, + bottom: fullLayout.height - reservedMargins.b }; var maxshift = avoid.maxShift || From 17c32447978d67ecd835ee017e091bbfeb586a1c Mon Sep 17 00:00:00 2001 From: hannahker Date: Thu, 9 Mar 2023 22:32:18 -0800 Subject: [PATCH 35/59] Check if automargin is necessary before applying --- src/plot_api/subroutines.js | 84 ++++++++++++++++++++++++------------- 1 file changed, 56 insertions(+), 28 deletions(-) diff --git a/src/plot_api/subroutines.js b/src/plot_api/subroutines.js index 1faed81fa2d..4ce54318796 100644 --- a/src/plot_api/subroutines.js +++ b/src/plot_api/subroutines.js @@ -400,14 +400,20 @@ function findCounterAxisLineWidth(ax, side, counterAx, axList) { exports.drawMainTitle = function(gd) { var title = gd._fullLayout.title; - setDflts(title); var fullLayout = gd._fullLayout; var textAnchor = getMainTitleTextAnchor(fullLayout); var dy = getMainTitleDy(fullLayout); var y = getMainTitleY(fullLayout, dy); if(title.text && title.automargin) { - applyTitleAutoMargin(gd, y); + var pushMargin = needsMarginPush(gd, title) + if(pushMargin > 0) { + setDflts(title, getDflts(title)[0], getDflts(title)[1]); + // Recalculate these since the defaults have changed + dy = getMainTitleDy(fullLayout); + y = getMainTitleY(fullLayout, dy); + applyTitleAutoMargin(gd, y, pushMargin); + } } Titles.draw(gd, 'gtitle', { @@ -436,23 +442,29 @@ function isOutsideContainer(gd, title, position, y) { } -// TODO: Move to setting defaults stage, rather than drawing -// TODO: Too complex that defaults are different, depending on yref? // title.y is 1 or 0 if automargin and paper ref // 'auto' is not supported for either title.y or title.yanchor when automargin=true -function setDflts(title) { +function getDflts(title) { + var titleY = title.y; + var titleYanchor = title.yanchor; if(title.automargin && title.yref === 'paper') { - title.y = title.y === 0 ? 0 : 1; + titleY = title.y === 0 ? 0 : 1; if(title.yanchor === 'auto') { - title.yanchor = title.y === 0 ? 'top' : 'bottom'; + titleYanchor = title.y === 0 ? 'top' : 'bottom'; } } if(title.automargin && title.yref === 'container') { - if(title.y === 'auto') title.y = 1; + if(title.y === 'auto') titleY = 1; if(title.yanchor === 'auto') { - title.yanchor = title.y < 0.5 ? 'bottom' : 'top'; + titleYanchor = title.y < 0.5 ? 'bottom' : 'top'; } } + return [titleY, titleYanchor] +} + +function setDflts(title, titleY, titleYanchor) { + title.y = titleY; + title.yanchor = titleYanchor; } function titleDepth(title) { @@ -463,30 +475,54 @@ function titleDepth(title) { fontSize; } -// TODO: Simplify this logic... -function containerPushVal(position, title, height, titleDepth) { +function containerPushVal(position, titleY, titleYanchor, height, titleDepth) { var push = 0; - if(title.yanchor === 'middle') { + if(titleYanchor === 'middle') { push += titleDepth / 2; } if(position === 't') { - if(title.yanchor === 'top') { + if(titleYanchor === 'top') { push += titleDepth; } - push += (height - title.y * height); + push += (height - titleY * height); } else { - if(title.yanchor === 'bottom') { + if(titleYanchor === 'bottom') { push += titleDepth; } - push += (height - (1 - title.y) * height); + push += (height - (1 - titleY) * height); } return push; } -function applyTitleAutoMargin(gd, y) { +function needsMarginPush(gd, title) { + var titleY = getDflts(title)[0]; + var titleYanchor = getDflts(title)[1] + var position = titleY > 0.5 ? 't' : 'b'; + var curMargin = gd._fullLayout.margin[position] + var pushMargin = 0; + if(title.yref === 'paper') { + pushMargin = ( + titleDepth(title) + + title.pad.t + + title.pad.b + ); + } else if(title.yref === 'container') { + pushMargin = ( + containerPushVal(position, titleY, titleYanchor, gd._fullLayout.height, titleDepth(title)) + + title.pad.t + + title.pad.b + ); + } + if(pushMargin > curMargin) { + return pushMargin + } + return 0 +} + +function applyTitleAutoMargin(gd, y, pushMargin) { var titleID = 'title.automargin'; var title = gd._fullLayout.title; - var position = gd._fullLayout.title.y > 0.5 ? 't' : 'b'; + var position = title.y > 0.5 ? 't' : 'b'; var push = { x: title.x, y: title.y, @@ -496,17 +532,9 @@ function applyTitleAutoMargin(gd, y) { var reservedPush = {}; if(title.yref === 'paper' && isOutsideContainer(gd, title, position, y)) { - push[position] = ( - titleDepth(title) + - title.pad.t + - title.pad.b - ); + push[position] = pushMargin; } else if(title.yref === 'container') { - reservedPush[position] = ( - containerPushVal(position, title, gd._fullLayout.height, titleDepth(title)) + - title.pad.t + - title.pad.b - ); + reservedPush[position] = pushMargin; gd._fullLayout._reservedMargin[titleID] = reservedPush; } Plots.allowAutoMargin(gd, titleID); From c014702134715665b672d23aea3defe67b3f2212 Mon Sep 17 00:00:00 2001 From: hannahker Date: Thu, 9 Mar 2023 22:53:38 -0800 Subject: [PATCH 36/59] Update tests --- .../baselines/pie_automargin-margin0.png | Bin 23998 -> 24118 bytes .../mocks/zzz-automargin-title-container.json | 2 +- test/jasmine/tests/titles_test.js | 8 ++++---- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/test/image/baselines/pie_automargin-margin0.png b/test/image/baselines/pie_automargin-margin0.png index 53753a76ca1c379ee643d6f809580a66d3e8fe4d..08b11eb675546c253fc4eb3eaadddd2588563837 100644 GIT binary patch literal 24118 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
EpM4Gd;9sGaEx6PJOfnIPJQdtG;ECpc+Y#Oa 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 Date: Thu, 9 Mar 2023 23:04:37 -0800 Subject: [PATCH 37/59] Warn when title.y is being set to 1 --- src/plot_api/subroutines.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/plot_api/subroutines.js b/src/plot_api/subroutines.js index 4ce54318796..7a048cfc590 100644 --- a/src/plot_api/subroutines.js +++ b/src/plot_api/subroutines.js @@ -463,6 +463,9 @@ function getDflts(title) { } function setDflts(title, titleY, titleYanchor) { + if(title.yref === 'paper' && title.y !== 0 && title.y !== 1) { + console.warn("title.automargin=true so resetting the supplied title.y value to 1.") + } title.y = titleY; title.yanchor = titleYanchor; } From ddaf013289dc048d27a441fc250bf93394c0eac3 Mon Sep 17 00:00:00 2001 From: hannahker Date: Thu, 9 Mar 2023 23:09:38 -0800 Subject: [PATCH 38/59] Fix syntax and another mock update --- src/plot_api/subroutines.js | 32 +++++++++--------- .../zzz-automargin-title-container.png | Bin 12987 -> 15063 bytes 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/plot_api/subroutines.js b/src/plot_api/subroutines.js index 7a048cfc590..babcc486176 100644 --- a/src/plot_api/subroutines.js +++ b/src/plot_api/subroutines.js @@ -406,14 +406,14 @@ exports.drawMainTitle = function(gd) { var y = getMainTitleY(fullLayout, dy); if(title.text && title.automargin) { - var pushMargin = needsMarginPush(gd, title) + var pushMargin = needsMarginPush(gd, title); if(pushMargin > 0) { setDflts(title, getDflts(title)[0], getDflts(title)[1]); // Recalculate these since the defaults have changed dy = getMainTitleDy(fullLayout); y = getMainTitleY(fullLayout, dy); applyTitleAutoMargin(gd, y, pushMargin); - } + } } Titles.draw(gd, 'gtitle', { @@ -445,12 +445,12 @@ function isOutsideContainer(gd, title, position, y) { // title.y is 1 or 0 if automargin and paper ref // 'auto' is not supported for either title.y or title.yanchor when automargin=true function getDflts(title) { - var titleY = title.y; - var titleYanchor = title.yanchor; + var titleY = title.y; + var titleYanchor = title.yanchor; if(title.automargin && title.yref === 'paper') { titleY = title.y === 0 ? 0 : 1; if(title.yanchor === 'auto') { - titleYanchor = title.y === 0 ? 'top' : 'bottom'; + titleYanchor = title.y === 0 ? 'top' : 'bottom'; } } if(title.automargin && title.yref === 'container') { @@ -459,15 +459,15 @@ function getDflts(title) { titleYanchor = title.y < 0.5 ? 'bottom' : 'top'; } } - return [titleY, titleYanchor] + return [titleY, titleYanchor]; } function setDflts(title, titleY, titleYanchor) { if(title.yref === 'paper' && title.y !== 0 && title.y !== 1) { - console.warn("title.automargin=true so resetting the supplied title.y value to 1.") - } - title.y = titleY; - title.yanchor = titleYanchor; + console.warn('title.automargin=true so resetting the supplied title.y value to 1.'); + } + title.y = titleY; + title.yanchor = titleYanchor; } function titleDepth(title) { @@ -499,9 +499,9 @@ function containerPushVal(position, titleY, titleYanchor, height, titleDepth) { function needsMarginPush(gd, title) { var titleY = getDflts(title)[0]; - var titleYanchor = getDflts(title)[1] + var titleYanchor = getDflts(title)[1]; var position = titleY > 0.5 ? 't' : 'b'; - var curMargin = gd._fullLayout.margin[position] + var curMargin = gd._fullLayout.margin[position]; var pushMargin = 0; if(title.yref === 'paper') { pushMargin = ( @@ -509,7 +509,7 @@ function needsMarginPush(gd, title) { title.pad.t + title.pad.b ); - } else if(title.yref === 'container') { + } else if(title.yref === 'container') { pushMargin = ( containerPushVal(position, titleY, titleYanchor, gd._fullLayout.height, titleDepth(title)) + title.pad.t + @@ -517,9 +517,9 @@ function needsMarginPush(gd, title) { ); } if(pushMargin > curMargin) { - return pushMargin + return pushMargin; } - return 0 + return 0; } function applyTitleAutoMargin(gd, y, pushMargin) { @@ -535,7 +535,7 @@ function applyTitleAutoMargin(gd, y, pushMargin) { var reservedPush = {}; if(title.yref === 'paper' && isOutsideContainer(gd, title, position, y)) { - push[position] = pushMargin; + push[position] = pushMargin; } else if(title.yref === 'container') { reservedPush[position] = pushMargin; gd._fullLayout._reservedMargin[titleID] = reservedPush; diff --git a/test/image/baselines/zzz-automargin-title-container.png b/test/image/baselines/zzz-automargin-title-container.png index 52afb41cc337728f6fbe963773494f1d7e84e84b..a00c3e15169ce9861215e1f00d3b833541b3f16b 100644 GIT binary patch literal 15063 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 F{{T#dGFt!u From de7ca4858cd407b20a67e052db67bfb39f3a3be7 Mon Sep 17 00:00:00 2001 From: hannahker Date: Fri, 10 Mar 2023 09:33:31 -0800 Subject: [PATCH 39/59] Apply review comments --- src/components/titles/index.js | 6 +++--- src/plot_api/subroutines.js | 10 +++++----- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/components/titles/index.js b/src/components/titles/index.js index b913f7351fa..41b5c85b9b8 100644 --- a/src/components/titles/index.js +++ b/src/components/titles/index.js @@ -168,7 +168,7 @@ function draw(gd, titleClass, options) { var titlebb = Drawing.bBox(titleGroup.node()); - // Need to account for reservedMargins here as well + // Account for reservedMargins var reservedMargins = {t: 0, b: 0, l: 0, r: 0}; var margins = gd._fullLayout._reservedMargin; for(var key in margins) { @@ -178,8 +178,8 @@ function draw(gd, titleClass, options) { } } var paperbb = { - left: 0 + reservedMargins.l, - top: 0 + reservedMargins.t, + left: reservedMargins.l, + top: reservedMargins.t, right: fullLayout.width - reservedMargins.r, bottom: fullLayout.height - reservedMargins.b }; diff --git a/src/plot_api/subroutines.js b/src/plot_api/subroutines.js index babcc486176..b30de2aff50 100644 --- a/src/plot_api/subroutines.js +++ b/src/plot_api/subroutines.js @@ -432,12 +432,12 @@ exports.drawMainTitle = function(gd) { function isOutsideContainer(gd, title, position, y) { var plotHeight = title.yref === 'paper' ? gd._fullLayout._size.h : gd._fullLayout.height; - var yPosTop = Lib.isTopAnchor(title) ? y : y - titleDepth(title); // Standardize to the top of the title + var yPosTop = Lib.isTopAnchor(title) ? y : y - getTitleDepth(title); // Standardize to the top of the title var yPosRel = position === 'b' ? plotHeight - yPosTop : yPosTop; // Position relative to the top or bottom of plot if((Lib.isTopAnchor(title) && position === 't') || Lib.isBottomAnchor(title) && position === 'b') { return false; } else { - return yPosRel < titleDepth(title); + return yPosRel < getTitleDepth(title); } } @@ -470,7 +470,7 @@ function setDflts(title, titleY, titleYanchor) { title.yanchor = titleYanchor; } -function titleDepth(title) { +function getTitleDepth(title) { var fontSize = title.font.size; var extraLines = (title.text.match(svgTextUtils.BR_TAG_ALL) || []).length; return extraLines ? @@ -505,13 +505,13 @@ function needsMarginPush(gd, title) { var pushMargin = 0; if(title.yref === 'paper') { pushMargin = ( - titleDepth(title) + + getTitleDepth(title) + title.pad.t + title.pad.b ); } else if(title.yref === 'container') { pushMargin = ( - containerPushVal(position, titleY, titleYanchor, gd._fullLayout.height, titleDepth(title)) + + containerPushVal(position, titleY, titleYanchor, gd._fullLayout.height, getTitleDepth(title)) + title.pad.t + title.pad.b ); From e77126c2efec72e605e6e8eea9192a79844843ea Mon Sep 17 00:00:00 2001 From: hannahker Date: Fri, 10 Mar 2023 10:15:05 -0800 Subject: [PATCH 40/59] Calc bb for title --- src/plot_api/subroutines.js | 57 ++++++++++++++++++------------------- 1 file changed, 28 insertions(+), 29 deletions(-) diff --git a/src/plot_api/subroutines.js b/src/plot_api/subroutines.js index b30de2aff50..15ccae25408 100644 --- a/src/plot_api/subroutines.js +++ b/src/plot_api/subroutines.js @@ -405,39 +405,45 @@ exports.drawMainTitle = function(gd) { var dy = getMainTitleDy(fullLayout); var y = getMainTitleY(fullLayout, dy); + // Draw title without positioning to get size + Titles.draw(gd, 'gtitle', { + propContainer: fullLayout, + propName: 'title.text', + placeholder: fullLayout._dfltTitle.plot, + }); + + var titleObj = d3.selectAll('.gtitle') + if(title.text && title.automargin) { - var pushMargin = needsMarginPush(gd, title); + var titleHeight = Drawing.bBox(titleObj.node()).height; + var pushMargin = needsMarginPush(gd, title, titleHeight); if(pushMargin > 0) { setDflts(title, getDflts(title)[0], getDflts(title)[1]); // Recalculate these since the defaults have changed dy = getMainTitleDy(fullLayout); y = getMainTitleY(fullLayout, dy); - applyTitleAutoMargin(gd, y, pushMargin); + applyTitleAutoMargin(gd, y, pushMargin, titleHeight); } } - - Titles.draw(gd, 'gtitle', { - propContainer: fullLayout, - propName: 'title.text', - placeholder: fullLayout._dfltTitle.plot, - attributes: { - x: getMainTitleX(fullLayout, textAnchor), - y: y, - 'text-anchor': textAnchor, - dy: dy - } - }); + + // Position the title once we know where it needs to be + titleObj.attr({ + x: getMainTitleX(fullLayout, textAnchor), + y: y, + 'text-anchor': textAnchor, + dy: dy + }) }; -function isOutsideContainer(gd, title, position, y) { +function isOutsideContainer(gd, title, position, y, titleHeight) { var plotHeight = title.yref === 'paper' ? gd._fullLayout._size.h : gd._fullLayout.height; - var yPosTop = Lib.isTopAnchor(title) ? y : y - getTitleDepth(title); // Standardize to the top of the title + var yPosTop = Lib.isTopAnchor(title) ? y : y - titleHeight; // Standardize to the top of the title var yPosRel = position === 'b' ? plotHeight - yPosTop : yPosTop; // Position relative to the top or bottom of plot if((Lib.isTopAnchor(title) && position === 't') || Lib.isBottomAnchor(title) && position === 'b') { return false; } else { - return yPosRel < getTitleDepth(title); + return yPosRel < titleHeight; } } @@ -470,13 +476,6 @@ function setDflts(title, titleY, titleYanchor) { title.yanchor = titleYanchor; } -function getTitleDepth(title) { - var fontSize = title.font.size; - var extraLines = (title.text.match(svgTextUtils.BR_TAG_ALL) || []).length; - return extraLines ? - fontSize * (extraLines + 1) * LINE_SPACING : - fontSize; -} function containerPushVal(position, titleY, titleYanchor, height, titleDepth) { var push = 0; @@ -497,7 +496,7 @@ function containerPushVal(position, titleY, titleYanchor, height, titleDepth) { return push; } -function needsMarginPush(gd, title) { +function needsMarginPush(gd, title, titleHeight) { var titleY = getDflts(title)[0]; var titleYanchor = getDflts(title)[1]; var position = titleY > 0.5 ? 't' : 'b'; @@ -505,13 +504,13 @@ function needsMarginPush(gd, title) { var pushMargin = 0; if(title.yref === 'paper') { pushMargin = ( - getTitleDepth(title) + + titleHeight + title.pad.t + title.pad.b ); } else if(title.yref === 'container') { pushMargin = ( - containerPushVal(position, titleY, titleYanchor, gd._fullLayout.height, getTitleDepth(title)) + + containerPushVal(position, titleY, titleYanchor, gd._fullLayout.height, titleHeight) + title.pad.t + title.pad.b ); @@ -522,7 +521,7 @@ function needsMarginPush(gd, title) { return 0; } -function applyTitleAutoMargin(gd, y, pushMargin) { +function applyTitleAutoMargin(gd, y, pushMargin, titleHeight) { var titleID = 'title.automargin'; var title = gd._fullLayout.title; var position = title.y > 0.5 ? 't' : 'b'; @@ -534,7 +533,7 @@ function applyTitleAutoMargin(gd, y, pushMargin) { }; var reservedPush = {}; - if(title.yref === 'paper' && isOutsideContainer(gd, title, position, y)) { + if(title.yref === 'paper' && isOutsideContainer(gd, title, position, y, titleHeight)) { push[position] = pushMargin; } else if(title.yref === 'container') { reservedPush[position] = pushMargin; From 26ca553c5fa91f3a9070825e7568b4572d49c8d2 Mon Sep 17 00:00:00 2001 From: hannahker Date: Fri, 10 Mar 2023 11:26:06 -0800 Subject: [PATCH 41/59] Fix warning log --- src/plot_api/subroutines.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/plot_api/subroutines.js b/src/plot_api/subroutines.js index b30de2aff50..3808d01664a 100644 --- a/src/plot_api/subroutines.js +++ b/src/plot_api/subroutines.js @@ -3,6 +3,7 @@ var d3 = require('@plotly/d3'); var Registry = require('../registry'); var Plots = require('../plots/plots'); +var Loggers = require('../lib/loggers'); var Lib = require('../lib'); var svgTextUtils = require('../lib/svg_text_utils'); @@ -463,8 +464,8 @@ function getDflts(title) { } function setDflts(title, titleY, titleYanchor) { - if(title.yref === 'paper' && title.y !== 0 && title.y !== 1) { - console.warn('title.automargin=true so resetting the supplied title.y value to 1.'); + if(title.yref === 'paper' && title.y !== 0 && title.y !== 1 && title.y !== 'auto') { + Loggers.warn('title.automargin=true so resetting the supplied title.y value to 1.'); } title.y = titleY; title.yanchor = titleYanchor; From e5e8a2a4b4cf4e34a83a01600067ca0e88016f2b Mon Sep 17 00:00:00 2001 From: hannahker Date: Fri, 10 Mar 2023 11:30:57 -0800 Subject: [PATCH 42/59] Update parameter description --- src/plots/layout_attributes.js | 9 ++++++++- test/plot-schema.json | 2 +- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/plots/layout_attributes.js b/src/plots/layout_attributes.js index 9de73203039..a0cb4e412d3 100644 --- a/src/plots/layout_attributes.js +++ b/src/plots/layout_attributes.js @@ -130,7 +130,14 @@ module.exports = { dflt: false, editType: 'plot', description: [ - 'Determines whether the title can automatically push the figure margins.' + 'Determines whether the title can automatically push the figure margins.', + 'If `yref=\'paper\'` then the margin will expand to ensure that the title doesn\’t', + 'overlap with the edges of the container. If `yref=\'container\'` then the margins', + 'will ensure that the title doesn\’t overlap with the plot area, tick labels,', + 'and axis titles. If `automargin=true` and the margins need to be expanded,', + 'then y will be set to a default 1 and yanchor will be set to an appropriate', + 'default to ensure that minimal margin space is needed. Note that when `yref=\'paper\'`,', + 'only 1 or 0 are allowed y values. Invalid values will be reset to the default 1.' ].join(' ') }, editType: 'layoutstyle' diff --git a/test/plot-schema.json b/test/plot-schema.json index 90643e9aa3b..2f939d87b38 100644 --- a/test/plot-schema.json +++ b/test/plot-schema.json @@ -9426,7 +9426,7 @@ }, "title": { "automargin": { - "description": "Determines whether the title can automatically push the figure margins.", + "description": "Determines whether the title can automatically push the figure margins. If `yref='paper'` then the margin will expand to ensure that the title doesn’t overlap with the edges of the container. If `yref='container'` then the margins will ensure that the title doesn’t overlap with the plot area, tick labels, and axis titles. If `automargin=true` and the margins need to be expanded, then y will be set to a default 1 and yanchor will be set to an appropriate default to ensure that minimal margin space is needed. Note that when `yref='paper'`, only 1 or 0 are allowed y values. Invalid values will be reset to the default 1.", "dflt": false, "editType": "plot", "valType": "boolean" From d70fb46a23b442ca16f0fbaf0e224104670a2406 Mon Sep 17 00:00:00 2001 From: hannahker Date: Fri, 10 Mar 2023 11:44:37 -0800 Subject: [PATCH 43/59] Reposition properly --- src/plot_api/subroutines.js | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/plot_api/subroutines.js b/src/plot_api/subroutines.js index 15ccae25408..ae48f1f08f7 100644 --- a/src/plot_api/subroutines.js +++ b/src/plot_api/subroutines.js @@ -404,6 +404,7 @@ exports.drawMainTitle = function(gd) { var textAnchor = getMainTitleTextAnchor(fullLayout); var dy = getMainTitleDy(fullLayout); var y = getMainTitleY(fullLayout, dy); + var x = getMainTitleX(fullLayout, textAnchor); // Draw title without positioning to get size Titles.draw(gd, 'gtitle', { @@ -412,10 +413,10 @@ exports.drawMainTitle = function(gd) { placeholder: fullLayout._dfltTitle.plot, }); - var titleObj = d3.selectAll('.gtitle') + var titleObj = d3.selectAll('.gtitle'); if(title.text && title.automargin) { - var titleHeight = Drawing.bBox(titleObj.node()).height; + var titleHeight = Drawing.bBox(titleObj.node()).height; var pushMargin = needsMarginPush(gd, title, titleHeight); if(pushMargin > 0) { setDflts(title, getDflts(title)[0], getDflts(title)[1]); @@ -425,14 +426,14 @@ exports.drawMainTitle = function(gd) { applyTitleAutoMargin(gd, y, pushMargin, titleHeight); } } - + // Position the title once we know where it needs to be titleObj.attr({ - x: getMainTitleX(fullLayout, textAnchor), + x: x, y: y, 'text-anchor': textAnchor, dy: dy - }) + }).call(svgTextUtils.positionText, x, y); }; From 352340660a5fa2ee73b57a760baf260e04d173f4 Mon Sep 17 00:00:00 2001 From: hannahker Date: Fri, 10 Mar 2023 12:09:18 -0800 Subject: [PATCH 44/59] Only reposition title if necessary --- src/plot_api/subroutines.js | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/src/plot_api/subroutines.js b/src/plot_api/subroutines.js index ae48f1f08f7..b6cc317ec6d 100644 --- a/src/plot_api/subroutines.js +++ b/src/plot_api/subroutines.js @@ -411,11 +411,18 @@ exports.drawMainTitle = function(gd) { propContainer: fullLayout, propName: 'title.text', placeholder: fullLayout._dfltTitle.plot, + attributes: ({ + x: x, + y: y, + 'text-anchor': textAnchor, + dy: dy + }) }); - var titleObj = d3.selectAll('.gtitle'); + if(title.text && title.automargin) { + var titleObj = d3.selectAll('.gtitle'); var titleHeight = Drawing.bBox(titleObj.node()).height; var pushMargin = needsMarginPush(gd, title, titleHeight); if(pushMargin > 0) { @@ -424,16 +431,18 @@ exports.drawMainTitle = function(gd) { dy = getMainTitleDy(fullLayout); y = getMainTitleY(fullLayout, dy); applyTitleAutoMargin(gd, y, pushMargin, titleHeight); + + // Position the title once we know where it needs to be + titleObj.attr({ + x: x, + y: y, + 'text-anchor': textAnchor, + dy: dy + }).call(svgTextUtils.positionText, x, y); } } - // Position the title once we know where it needs to be - titleObj.attr({ - x: x, - y: y, - 'text-anchor': textAnchor, - dy: dy - }).call(svgTextUtils.positionText, x, y); + }; From 90bd37472575abeff679729dae26b3e19bcad096 Mon Sep 17 00:00:00 2001 From: hannahker Date: Fri, 10 Mar 2023 12:11:48 -0800 Subject: [PATCH 45/59] Fix syntax --- test/jasmine/tests/titles_test.js | 68 +++++++++++++++---------------- 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/test/jasmine/tests/titles_test.js b/test/jasmine/tests/titles_test.js index c153ff95a9a..3a7bbd4ef23 100644 --- a/test/jasmine/tests/titles_test.js +++ b/test/jasmine/tests/titles_test.js @@ -1081,13 +1081,13 @@ describe('Title automargining', function() { it('should avoid overlap with container for yref=paper and allow padding', function(done) { Plotly.newPlot(gd, data, { - 'margin': {'t': 0, 'b': 0, 'l': 0, 'r': 0}, - 'height': 300, - 'width': 400, - 'title': { - 'text': 'Basic title', - 'font': {'size': 24}, - 'yref': 'paper' + margin: {t: 0, b: 0, l: 0, r: 0}, + height: 300, + width: 400, + title: { + text: 'Basic title', + font: {size: 24}, + yref: 'paper' } }).then(function() { expect(gd._fullLayout._size.t).toBe(0); @@ -1116,13 +1116,13 @@ describe('Title automargining', function() { it('should automargin and position title at the bottom of the plot if title.y=0', function(done) { Plotly.newPlot(gd, data, { - 'margin': {'t': 0, 'b': 0, 'l': 0, 'r': 0}, - 'height': 300, - 'width': 400, - 'title': { - 'text': 'Basic title', - 'font': {'size': 24}, - 'yref': 'paper' + margin: {t: 0, b: 0, l: 0, r: 0}, + height: 300, + width: 400, + title: { + text: 'Basic title', + font: {size: 24}, + yref: 'paper' } }).then(function() { return Plotly.relayout(gd, {'title.automargin': true, 'title.y': 0}); @@ -1135,14 +1135,14 @@ describe('Title automargining', function() { it('should avoid overlap with container and plot area for yref=container and allow padding', function(done) { Plotly.newPlot(gd, data, { - 'margin': {'t': 0, 'b': 0, 'l': 0, 'r': 0}, - 'height': 300, - 'width': 400, - 'title': { - 'text': 'Basic title', - 'font': {'size': 24}, - 'yref': 'container', - 'automargin': true + margin: {t: 0, b: 0, l: 0, r: 0}, + height: 300, + width: 400, + title: { + text: 'Basic title', + font: {size: 24}, + yref: 'container', + automargin: true } }).then(function() { expect(gd._fullLayout._size.t).toBe(24); @@ -1158,19 +1158,19 @@ describe('Title automargining', function() { it('should make space for multiple container-referenced components on the same side of the plot', function(done) { Plotly.newPlot(gd, data, { - 'margin': {'t': 0, 'b': 0, 'l': 0, 'r': 0}, - 'xaxis': { - 'automargin': true, - 'title': {'text': 'x-axis title'} + margin: {t: 0, b: 0, l: 0, r: 0}, + xaxis: { + automargin: true, + title: {text: 'x-axis title'} }, - 'height': 300, - 'width': 400, - 'title': { - 'text': 'Basic title', - 'font': {'size': 24}, - 'yref': 'container', - 'automargin': true, - 'y': 0 + height: 300, + width: 400, + title: { + text: 'Basic title', + font: {size: 24}, + yref: 'container', + automargin: true, + y: 0 } }).then(function() { expect(gd._fullLayout._size.b).toBeCloseTo(55, -1); From 158791f1884084092226b0de4a41c8a9f0c6722a Mon Sep 17 00:00:00 2001 From: hannahker Date: Fri, 10 Mar 2023 14:24:07 -0800 Subject: [PATCH 46/59] Fix tests --- src/plot_api/subroutines.js | 5 ---- .../zzz-automargin-title-container.png | Bin 15063 -> 13736 bytes .../baselines/zzz-automargin-title-paper.png | Bin 10589 -> 12384 bytes test/jasmine/tests/titles_test.js | 28 +++++++++--------- 4 files changed, 14 insertions(+), 19 deletions(-) diff --git a/src/plot_api/subroutines.js b/src/plot_api/subroutines.js index b6cc317ec6d..2eab14752b4 100644 --- a/src/plot_api/subroutines.js +++ b/src/plot_api/subroutines.js @@ -23,7 +23,6 @@ var doAutoRange = require('../plots/cartesian/autorange').doAutoRange; var SVG_TEXT_ANCHOR_START = 'start'; var SVG_TEXT_ANCHOR_MIDDLE = 'middle'; var SVG_TEXT_ANCHOR_END = 'end'; -var LINE_SPACING = alignmentConstants.LINE_SPACING; exports.layoutStyles = function(gd) { return Lib.syncOrAsync([Plots.doAutoMargin, lsInner], gd); @@ -419,8 +418,6 @@ exports.drawMainTitle = function(gd) { }) }); - - if(title.text && title.automargin) { var titleObj = d3.selectAll('.gtitle'); var titleHeight = Drawing.bBox(titleObj.node()).height; @@ -441,8 +438,6 @@ exports.drawMainTitle = function(gd) { }).call(svgTextUtils.positionText, x, y); } } - - }; diff --git a/test/image/baselines/zzz-automargin-title-container.png b/test/image/baselines/zzz-automargin-title-container.png index a00c3e15169ce9861215e1f00d3b833541b3f16b..686d3a8338f02b875fc620814621f20d03fe2f79 100644 GIT binary patch literal 13736 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 V_u&u)_#aqUvbU5Z3nh$w{||=Twxs|7 literal 15063 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�U-pW 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 O;K@iTNaTy%_4prEW^@Ap literal 10589 zcmc(Fc{r4B^uDH%K^SWa8A}NvB`O(H5h`TQmJr$3vJM(5TbQVX$|sRN_AUF8Y!%s( zZR|^ku`e^0@qI>oTIT!L@A_WX?~fMm`#$G6?>XnW?{n@~@KrS>2D$@uR8&+9D#{9) zR8+gL;LlOm9&iO;F#3Ut3PGi!a8BFfI{pRiV;+l`2Niv-6R5y@_Y@#12zt0OEbahg zFHA%LVs>0oWI#h7+T(;#P=KGia)Z;!oY~n3HHrv=YdqG0I|=4MVUg64sAGKIQAuAX z%3aGN8O!>;C)*8uQh)sG>hk;i_vx9-AW|DOyad?BG6VmY~uXX=-6j`Ahn zV{L~vsUE^Gj8Hf%P+#_rXJ~Bv0$)6tA?>^FvG$$@dBb}uTWQ36 zjNZ=LI=jh_w2<$)V7WHPF3&ImMx2TctACeiReBIrh)|1 z-hTSPn*C#SFl+joH-|fy>~Z;Bt4oviT{#w&o5mU%rY5Vc(U3>gMRwhJpOA~Mn5Zw1 zMugeX)-mmfu- ztJO{o-c!TzV?SP2yb%mC5=_-qdIF=1>G7IO&tGViEikN9ACT!syE?htDO#V8uE^W9 zdrx)9T%Y$0Lk3Fi%!J^l!e}FxV7ZkZ*Iv46zvYoA_3k|DuXcevZk?q4*L{f=vI`9- z@bo4G2;`CWgXXui2<+S7$Xjx>iR=;aM>g(xwkYoFVpigQbiih^Jv~<)J;bVOXoyQk z72~?%9Ev~rZcLg8VB5GECi?j5oN4PL zHoEU2Ry|(JEe27LV8Xt88AHz0Z6hFu{$J;XX|C z%pZm1i7MV;o2k{w%z~EJN{*Wkea+&LKE?LE#osQ59bmswyms7=w0^^^Pd!ndT#l-~ zYpg02n;SC$xO2#JGpxhq(?d0(yEV{jxc+?ivPol4>iO?+j@{JzjNlJ-^!4|n#hVPW z%@k*w)Yk)feLV`!`YpuuLl@5avdrKL9GyZ_?#!iCG0LW0#vHwtg~0yX-#(w+zcKAz z5N8yB+#&>DI2bA z>3m1$L2z-TwHe+k-38*k#+X8@gI?o&3!gSKeekyUT9a~g5k9A09LGyHp3#OZa2W~~ z+Ou$`S2e-C6k`3Qc<=#N!y)Y{?jZW1soW;%3Kv;Wu=oJp^?~Jxu}ysGLSybb+m3E_ zJtI?^gB}PaVJN@AT@?QXm8+uQG!SGa+LN=^Z;=@KGwIeV%0O_L9F&N|W%tFI&d%QT z8I$eL9uAik_wcXZw^=(a)FTjawpF}z_Je;yF-wpM15xI7#nKWuherwh$1Xd*IG8pqWXIbyCenC%?D+uBz0NZ%yvUe#q@ZFW zoyh&b?~Q~XvHn%e;sca;*`nrJy$Q)I+QirM*w|O+Im4Tcma_wu%fJ-Z0jr|P%Y1WJ(_Q&DZCBlwrz)BCR+oXPvDhLaD-922Tqn=X-fW^_H*QZ>1$ zW6q{(j8VK~D(6Odm3pN3u8I$H#K?@N8PK8r=8d@Giq{&Shs((#j8R4$#Pt-#)%rr{x1FP9`!| zd|Luh6npm2ce(3Uz>4I$aJr;OYVw__XR}!YFqNu zH$4*uhsrP>S?Pv4OD@TfI#Bc-@x_mCDg8CH)M2uTO0(ehpCa zlod~ps=TlEtlySo9Ws*Y@~QkEjO|#bn|gt=0%mwl~}(=2nNlkf6_+tWQ;iUv`&Z zS*3rZXM9KJSn`M-U(MMr4jZ8^7{n25&rJu4MFoLu8kG1#d>-IuxYAfi>boc5-g`%H zRy;6%cEhIHQU2Y_#~X>$KDp?%d_9DyUWQaf?A$(TS!ByMk$+!DAkTPYzP>XtEeH48 z+v(^>9IiWI*EOp($c31HG?EJL&xyVzZLB%+cJv22&#k`xPmzfiaS`Yc4UR#3CH@uE16kNA=s5s#4N&M8FG{V~Ua?~%hs-Lc@ zV13%Xg8sXc5f$>$Ou@t+Ms7~2ON&Xe7{VB7F~1Y3BSRzPx7onENvOlUGoE0)XL5*W6yDTDpbrrj zh)$w^D}*65t>2t+l_XWi)SG|A@>K><_q`M}kvO_9tA4UYiI*YcqLH#VbM&K?5A(_0 zXO@}k4X^0lMKO_ECz`GPZu?9KY&DOdh<0x^j_?pF2<`o_u%F!~#%V9P%e;#^0!Wcf zTH2r7Jnn*iko?(;z5>v3wX+jOZY_b~x~;oAhwZ0fEM2vsq=zVVaexh@l;iNAPek`} zTm35l-o@#{9K>-P z(lW1zFery9)XU6Gz!VJ6LlZ_rQF&ZD@iR z-~XK>!)t`0Z*DWC9rhDHWbm_Pf!%&Qc_mAksljMetnkHfsd5xF!6IzSr3aby!{+i{ z3C4s(jex0+TWTTb_aUG!9pzW|5q0|dMiq2zwxDZD;XD3fGCj6Tr@Y|yEfC50fzlTx zyj4eASZ8&oedF%C5nFQPW@Hwo!jrF0vaL4jMdS_cp5*6AGuv2QI*tK_XJ}!Oq@%5^ zu=C?Mn=#xtK7M5xvOrMU^7CztLMZdQ2o>!00_pIkSbDu;Qp&_Y$TSn=N-`ZIF*7@KIE}zM1G%r{hKhXP{Yc^dF%5u7u00CM3xhiSF z=k===@fQpJy-N-A2)pXW4ZHTow9=jpH@t6GUb3~b%PVu^;wJVeO$sR?k~*?FSl~e% za$7qN67xqI9DIk^OXmCh462^mwr=kBVNYwX$& zS(_6GO)olhYxnB6PU^a_Tx%Mpf{cT=6%jRaUwXPhA-ilOs|_nU#IZ>pScjtLNT_iUvHX+uPM*sovYq zc<}VGnOc~jM1o!BT~ywZ61lh&y~}Y1E^c21LIVtSeJ4{g-h6KKnYkv557N*z*6$4M zf+={f|5p3T9q2J}ecKZbe(f9?=o8ll$9*1jS_p*|nC=d-z2J|^tNZ=5<&8~73}2TX zqb^zcWKqfF)|K6EsruqZ-9xSeDR2N7`BQfHPJ=YlW*_{+S?e1y1cy zl@j8Rz!i5YNJ~5U)LQBz!f*yt#ep1M@0i5%(!YpRK6zl`{QS5zlc-bpSx0BM@^yu- z>$@;klMx_txguD%Fs3h4)xlL$Ty-9T$7pSeF3ID_O~C7;Zu7KnQBcioyXExUvz20|n2iS==cMh$&%4Tr4X*ex9#bd24n( z%4cLS9>Z1p3*>D#uN8}T&Vlm;Bb~XyO}T{;RFjeNDmPS9obsv+wWh=WauuqXL2*^a z0dw09?J+)n&g~mO89USqHzjXj9?T*OA#pFDmM7;y)SYP)wT7!!4NArdKKOgVRe7?V z^%JnfX!@(uRe)pe!vXzpLsTwNyq*r7pf$yodVJVKX^Oy z6v8Oi6I5$6MY=AtE5{z-6;T#|Q-5Q#0N5l+=09PGiXnvq39&fHz*LooL%YmBEz8l;Afctrbo*Z=5S9?rE{+~8}{oCvexpb&tI99KhqoinC8Q3(k_>haooN$ zuO`FKBfFO{&VuXiFyb=lb1B+%or+SwNM95JYME+ZfYz=PhRed*tiVo*|djS)pgYOC~bi6f(N z#SRP7Ywgd8%WGr0P+k`+pLAnM3;8%Ho3Z(gX4;LL;&6GTMLbR~pN9SPCIhn=0|Nul zvFc<_F`GD;2EQ+7uNO-jC#>p!&o8Q+ zhIndt4JKHm#0^l95u;F5P*NKxK+_)E|De}2kSAe(&|^2yozW;nKmpWIokJweed!<^ z>yH~x3Ttd9i+`BKA<4U_4^=2RTD*=vSYbtmq z23MBMJ6CQW$-{n`o*8n3$FyRO^cO8^0UJiyBj$Ip@byq$*4alyW)-K;|{ z?_-9Klj+ScCT4)%ZXIIc#`^fz+ubOb-#hf1P9x z`14}S_1%C?+gY={Pb^j^c1{bZ`X-W zxg$JI}%tE}v8+x8x1K zG0ZQYqmICJw!tX`l?Mn7v@kVSB2jJIu@Hf@>}*8~2~MTh>S+mT$ZngA0NB}tw34}R zR0P|%Ls7q7J%a7Cp?p>l+vh-e6@hix0j6IT%EYiPlorYkVO=PF078I^J%wFoy2Ku? zpAfABO-PDOAWsdJzj4H`C}`8)oQ{0AoMafEpJXddE$gy~ykNK7Mw@@x#{?h#M1>rG z{|e=|+oQ*;OXOU(%PrvBg`%ltvnJJi@HtVnILYA$Htug5$ZV?ZjOa z#wPBx2EP(_1RD92q6GC*P_1ngC0Io#7)Ft~+-sP`B8tp$00yGm>pV2_3B_J9>Ii+x zu=mmmhEneJ8kN)Yms`e?(doT*D`#^Xr0x1Fd0*rur}tzX`ug`;wuStn%x=#Dxv%19 zqwDn*6%{T2&Xn+X)7*nu9qsnhY@`?gC0x-AkL{h4I&`Mfyv4Pb2eDfkma6TzLjLFf% zLnC>>xuhM(TTb9@VSF|xm4V8mK^@ftc{5b7I0Fd|cfi#KlEP9FE-W%6AGE8RUI`!H zBlrp6HUhN`a!Jv%VGqQlhnGE<$^Cy8v+PPPc@XijO__S+N2*^}b@ijOCA=?gr4e|= zvkRIahah(;U`SRbuy_qu#l?HnWR$MNV+2>Vb-GW_>^Hx~d$QXmRWx7#?U)eA`$Fsm zXs-{_Y?qRt5iPwvz~>KhVz))1nn(V1n&iVe^&HP-hX`l1)kq^1z$hc;W)IaonmyF6 z1b+Ao=9 zP?h{b*B@?j+CSlmZ^0klgR$}}1Fx{d4->`rT%*(QZG>5J^=Iv>kqZF~QNa%!-kId{ zBnG=xRi!6i65S@F>iv1AinUB!ow-jqSiLn60Fnh=9}L6xP^2wnXGkF#+d9^|;(9FH zh;j?|y>AYurle(kjo{RA0YsLtVNC7?w*yjb2j;*y=e6ABh@?q>uY*!%cfY(Wt_b5X zFmdr=R{jL@-b+r^&!_b{lx>Hrc;$0CV+~!T|1k+OcIr75=Qittp)t%Ag2*VORc}0rglXm@z2+nl9nJKlKQpaNJTw^qxeX^%y~^ zh%pC2Czr4OCvCiB$FQ{$u4;fj@}E^V@<{QMAe;PAbO5l990p?x8Ot4$1+az6Lbsnw z(I})@EF&(^S)qyN*&X+E@_6%4Av(q0I5pYNJxMQS*5z+E$#Osy)EQ^^U zU@S@iv&=a%`SD{535R{33(^bzpj;if#UzTL<@G0%h9bgwPIdj13TsdfrG-S8VEF%H z0f7berT+X>gE+C7@DUvTkYF%m0r(ez1cy2f)d}Ci-2MhIc1uPWsCEKer`bY(xjtI= zFqu&$lrW3B!xw(Kpa&vo^fM-p<4|6?luo!XE1#wel@=pJIGWNoFD=Aq`*zaE6v3=) zgl3gjbA%-tQTiEdh!_PRxRv4G9yWrgoZoTpSA=XZg8x!D$DM?Vq}(q2JVNF73V{iV zmk09-*juK35|TWlN<+A z>wjJ7MadyZ7RB7$aV1seLoyW=EhqVR0e&mme8?v+%HXF%^mFoCEPF_48|D+mH{ux& zNWLelHMNZC>g&km?~Dkzn9q06;KuAGYmTcacetijm7=>gk@?ksL&lBp(vekuY$WqC zClGkh=FA_TiW$13^jZO_D>nAP&*7%4M~EXcdtt_-PghE6&tBvy-?zrM*H3X>)qA0T zSYxJe6Y|}qXn@l)_$A8KHJ4a{^jTHlRZDo6mv>D|E9zT&`)4a{@Eum;FnsfYhOu!N zivMVTicCRwn)kj=xu(p$n(n;K9p!gEAf>IFFwEiSAG11P2t#$pz%*ra&^Pizb4%`$ z!mY`=EX`&x)`T1~IB?)VT1G~=$$J>V?HghCVU<$1zEXJ3s;`d#CnhKyT6jN6?lAak zl&fCsDCm{U*d_q5arboiJ34-LTaeaTHaDmmaWvm{+VDnP zTx|NbMmG5`7>52(fDNT5Ou4{B@`tos_VT(7h0TuE*EZyt=68j8`O>OCJHw-sfcpNB zqRmxTf}P_Ln?NWGs15vYh84my7ys=5m*J{8y&iSM_wsVz%g4S4vj%p_g!gy2{VS3F zY5$+TimLnlrjFi7BXd9(~nHe;o?9=`Btvr0`5 z&v+*XdGzEMY)iWP$*Y%IOTcL3(#-fMA`r!|)D1+>Ew!DjjdNLhmDdJ7VqDhc1l-~y zOP0d`Ic(k1_u>m<65vWxh5w=*xEPSUMh#uOB*U04A506S0!+1oV*vOPL%D^n3|H|7 z9HCyyIIs%lW?9Q3&Y#6%H6mJreH}}d+kG$tLz5*6{X@Sz!92NY<~{X9WuxN>ZybTiw%(<3nPLP=L9qq{J^8#0^EoCj)18D{Gb53so=Yg zMN-IzH}uXZB0wPiLpxZaLhEQ7A*Rie2l0!y^Isc3%}74ku6@$=3P^8=SOhpQ4qOa{Ou)Kxyc3kbeScHo6DT>IlU zxU$SZB-t^^=3z^ax+OeWK_jaM%*r(7Dq!|IrM;apA6YP6s|aAF(NTSbtIlu9FTUOJ zgrXXbih(H8F#PszG5bDlEa-JM;KsVR9HsX(L;==yZvJgmoIY8`q@O`I9`tawc<nos@N!dPEkWcSE5`&sO$7$}9B8kuZJ(L_r$zV)<(-B??NW0-ws>9@3m4;QC; zn#d9YSt1EFx2Xdq*Xlx@Fj~(Jh75k{98=dQyx*tzGmk#$HzK{;IAu5GS6VdduabvZ zuI=vi8Z^guW7X(!$(-Ni_O6M7hDo;5rq{}P=RfUE;1*fX7ZVfH)zDyGCw~iESW3#t zIlk(|A{Jdwy*ZG2n)7)&Zx#5|6}zh;%?y`s|A?-73>m&U6DaF5AWSoDsYmL7c7@-R z^jP@*Mc3Ha{^ZG%`aM2GPS{$gShDBeMNJJK_u*+1zDcYBP#D-@^-jZIVhwQB5J^ I{0;yA0e?Yo^8f$< diff --git a/test/jasmine/tests/titles_test.js b/test/jasmine/tests/titles_test.js index 9e8736de308..5bbcc5aa16c 100644 --- a/test/jasmine/tests/titles_test.js +++ b/test/jasmine/tests/titles_test.js @@ -1097,16 +1097,16 @@ describe('Title automargining', function() { expect(gd._fullLayout.title.automargin).toBe(true); expect(gd._fullLayout.title.y).toBe(1); expect(gd._fullLayout.title.yanchor).toBe('bottom'); - expect(gd._fullLayout._size.t).toBe(24); - expect(gd._fullLayout._size.h).toBe(276); + expect(gd._fullLayout._size.t).toBeCloseTo(33, -1); + expect(gd._fullLayout._size.h).toBeCloseTo(267, -1); return Plotly.relayout(gd, 'title.pad.t', 10); }).then(function() { - expect(gd._fullLayout._size.t).toBe(34); - expect(gd._fullLayout._size.h).toBe(266); + expect(gd._fullLayout._size.t).toBeCloseTo(43, -1); + expect(gd._fullLayout._size.h).toBeCloseTo(257, -1); return Plotly.relayout(gd, 'title.pad.b', 10); }).then(function() { - expect(gd._fullLayout._size.h).toBe(256); - expect(gd._fullLayout._size.t).toBe(44); + expect(gd._fullLayout._size.h).toBeCloseTo(247, -1); + expect(gd._fullLayout._size.t).toBeCloseTo(53, -1); return Plotly.relayout(gd, 'title.yanchor', 'top'); }).then(function() { expect(gd._fullLayout._size.t).toBe(0); @@ -1127,8 +1127,8 @@ describe('Title automargining', function() { }).then(function() { return Plotly.relayout(gd, {'title.automargin': true, 'title.y': 0}); }).then(function() { - expect(gd._fullLayout._size.b).toBe(24); - expect(gd._fullLayout._size.h).toBe(276); + expect(gd._fullLayout._size.b).toBeCloseTo(33, -1); + expect(gd._fullLayout._size.h).toBeCloseTo(267, -1); expect(gd._fullLayout.title.yanchor).toBe('top'); }).then(done, done.fail); }); @@ -1145,14 +1145,14 @@ describe('Title automargining', function() { 'automargin': true } }).then(function() { - expect(gd._fullLayout._size.t).toBe(24); - expect(gd._fullLayout._size.h).toBe(276); + expect(gd._fullLayout._size.t).toBeCloseTo(33, -1); + expect(gd._fullLayout._size.h).toBeCloseTo(267, -1); expect(gd._fullLayout.title.y).toBe(1); expect(gd._fullLayout.title.yanchor).toBe('top'); return Plotly.relayout(gd, 'title.y', 0.6); }).then(function() { - expect(gd._fullLayout._size.t).toBe(144); - expect(gd._fullLayout._size.h).toBe(156); + expect(gd._fullLayout._size.t).toBeCloseTo(153, -1); + expect(gd._fullLayout._size.h).toBeCloseTo(147, -1); }).then(done, done.fail); }); @@ -1173,8 +1173,8 @@ describe('Title automargining', function() { 'y': 0 } }).then(function() { - expect(gd._fullLayout._size.b).toBeCloseTo(55, -1); - expect(gd._fullLayout._size.h).toBeCloseTo(245, -1); + expect(gd._fullLayout._size.b).toBeCloseTo(64, -1); + expect(gd._fullLayout._size.h).toBeCloseTo(236, -1); }).then(done, done.fail); }); }); From 087c1627a3dbee9f1d5d749ed4b78035da89f8fc Mon Sep 17 00:00:00 2001 From: hannahker Date: Mon, 13 Mar 2023 08:30:44 -0700 Subject: [PATCH 47/59] Adjust tests to match rendering in CI --- test/jasmine/tests/titles_test.js | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/test/jasmine/tests/titles_test.js b/test/jasmine/tests/titles_test.js index 7af4aa35e5a..75ac84a30b8 100644 --- a/test/jasmine/tests/titles_test.js +++ b/test/jasmine/tests/titles_test.js @@ -1097,16 +1097,16 @@ describe('Title automargining', function() { expect(gd._fullLayout.title.automargin).toBe(true); expect(gd._fullLayout.title.y).toBe(1); expect(gd._fullLayout.title.yanchor).toBe('bottom'); - expect(gd._fullLayout._size.t).toBeCloseTo(33, -1); - expect(gd._fullLayout._size.h).toBeCloseTo(267, -1); + expect(gd._fullLayout._size.t).toBeCloseTo(27, -1); + expect(gd._fullLayout._size.h).toBeCloseTo(273, -1); return Plotly.relayout(gd, 'title.pad.t', 10); }).then(function() { - expect(gd._fullLayout._size.t).toBeCloseTo(43, -1); - expect(gd._fullLayout._size.h).toBeCloseTo(257, -1); + expect(gd._fullLayout._size.t).toBeCloseTo(37, -1); + expect(gd._fullLayout._size.h).toBeCloseTo(263, -1); return Plotly.relayout(gd, 'title.pad.b', 10); }).then(function() { - expect(gd._fullLayout._size.h).toBeCloseTo(247, -1); - expect(gd._fullLayout._size.t).toBeCloseTo(53, -1); + expect(gd._fullLayout._size.h).toBeCloseTo(253, -1); + expect(gd._fullLayout._size.t).toBeCloseTo(47, -1); return Plotly.relayout(gd, 'title.yanchor', 'top'); }).then(function() { expect(gd._fullLayout._size.t).toBe(0); @@ -1127,8 +1127,8 @@ describe('Title automargining', function() { }).then(function() { return Plotly.relayout(gd, {'title.automargin': true, 'title.y': 0}); }).then(function() { - expect(gd._fullLayout._size.b).toBeCloseTo(33, -1); - expect(gd._fullLayout._size.h).toBeCloseTo(267, -1); + expect(gd._fullLayout._size.b).toBeCloseTo(27, -1); + expect(gd._fullLayout._size.h).toBeCloseTo(273, -1); expect(gd._fullLayout.title.yanchor).toBe('top'); }).then(done, done.fail); }); @@ -1145,14 +1145,14 @@ describe('Title automargining', function() { automargin: true } }).then(function() { - expect(gd._fullLayout._size.t).toBeCloseTo(33, -1); - expect(gd._fullLayout._size.h).toBeCloseTo(267, -1); + expect(gd._fullLayout._size.t).toBeCloseTo(27, -1); + expect(gd._fullLayout._size.h).toBeCloseTo(273, -1); expect(gd._fullLayout.title.y).toBe(1); expect(gd._fullLayout.title.yanchor).toBe('top'); return Plotly.relayout(gd, 'title.y', 0.6); }).then(function() { - expect(gd._fullLayout._size.t).toBeCloseTo(153, -1); - expect(gd._fullLayout._size.h).toBeCloseTo(147, -1); + expect(gd._fullLayout._size.t).toBeCloseTo(147, -1); + expect(gd._fullLayout._size.h).toBeCloseTo(153, -1); }).then(done, done.fail); }); @@ -1173,8 +1173,8 @@ describe('Title automargining', function() { y: 0 } }).then(function() { - expect(gd._fullLayout._size.b).toBeCloseTo(64, -1); - expect(gd._fullLayout._size.h).toBeCloseTo(236, -1); + expect(gd._fullLayout._size.b).toBeCloseTo(57, -1); + expect(gd._fullLayout._size.h).toBeCloseTo(243, -1); }).then(done, done.fail); }); }); From c4d75d4bb0d5c7a79001bd6031c7b408116f326b Mon Sep 17 00:00:00 2001 From: hannahker Date: Mon, 13 Mar 2023 13:18:37 -0700 Subject: [PATCH 48/59] Update mocks --- ...zzz-automargin-title-container-bottom.json | 30 +++++++++++++++++++ .../mocks/zzz-automargin-title-container.json | 1 - .../zzz-automargin-title-paper-bottom.json | 29 ++++++++++++++++++ .../mocks/zzz-automargin-title-paper.json | 1 - 4 files changed, 59 insertions(+), 2 deletions(-) create mode 100644 test/image/mocks/zzz-automargin-title-container-bottom.json create mode 100644 test/image/mocks/zzz-automargin-title-paper-bottom.json diff --git a/test/image/mocks/zzz-automargin-title-container-bottom.json b/test/image/mocks/zzz-automargin-title-container-bottom.json new file mode 100644 index 00000000000..0b20535b9b2 --- /dev/null +++ b/test/image/mocks/zzz-automargin-title-container-bottom.json @@ -0,0 +1,30 @@ +{ + "data": [ + { + "showlegend": false, + "type": "scatter", + "x": [ + 1, + 2, + 3 + ], + "y": [ + 4, + 5, + 6 + ] + }], + "layout": { + "height": 300, + "width": 400, + "margin": {"t":0, "b": 0, "l": 0, "r": 0}, + "xaxis": {"automargin": true, "title": {"text": "x-axis title"}}, + "title": { + "automargin": true, + "text": "Basic title", + "pad": {"t": 0, "b": 0}, + "y": 0, + "yref": "container" + } + } +} diff --git a/test/image/mocks/zzz-automargin-title-container.json b/test/image/mocks/zzz-automargin-title-container.json index 29b43997b72..0b20535b9b2 100644 --- a/test/image/mocks/zzz-automargin-title-container.json +++ b/test/image/mocks/zzz-automargin-title-container.json @@ -22,7 +22,6 @@ "title": { "automargin": true, "text": "Basic title", - "font": {"size": 24}, "pad": {"t": 0, "b": 0}, "y": 0, "yref": "container" diff --git a/test/image/mocks/zzz-automargin-title-paper-bottom.json b/test/image/mocks/zzz-automargin-title-paper-bottom.json new file mode 100644 index 00000000000..c1a246f127c --- /dev/null +++ b/test/image/mocks/zzz-automargin-title-paper-bottom.json @@ -0,0 +1,29 @@ +{ + "data": [ + { + "showlegend": false, + "type": "scatter", + "x": [ + 1, + 2, + 3 + ], + "y": [ + 4, + 5, + 6 + ] + }], + "layout": { + "height": 300, + "width": 400, + "margin": {"t":0, "b": 0, "l": 0, "r": 0}, + "title": { + "automargin": true, + "text": "Basic title", + "pad": {"t": 15, "b": 10}, + "yref": "paper", + "y": 0 + } + } +} diff --git a/test/image/mocks/zzz-automargin-title-paper.json b/test/image/mocks/zzz-automargin-title-paper.json index f747fbe2c51..7627cd1e845 100644 --- a/test/image/mocks/zzz-automargin-title-paper.json +++ b/test/image/mocks/zzz-automargin-title-paper.json @@ -21,7 +21,6 @@ "title": { "automargin": true, "text": "Basic title", - "font": {"size": 24}, "pad": {"t": 15, "b": 10}, "yref": "paper" } From a2578365fdf2f00c6a7e036e6ef62fb115922e44 Mon Sep 17 00:00:00 2001 From: hannahker Date: Mon, 13 Mar 2023 13:21:33 -0700 Subject: [PATCH 49/59] Add review comment --- src/plot_api/subroutines.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plot_api/subroutines.js b/src/plot_api/subroutines.js index ec720689f2e..239a3f8e121 100644 --- a/src/plot_api/subroutines.js +++ b/src/plot_api/subroutines.js @@ -497,7 +497,7 @@ function containerPushVal(position, titleY, titleYanchor, height, titleDepth) { if(titleYanchor === 'bottom') { push += titleDepth; } - push += (height - (1 - titleY) * height); + push += titleY * height; } return push; } From 662628eb1abfd5fbf7e8aac97bd433f4adf8d19e Mon Sep 17 00:00:00 2001 From: hannahker Date: Mon, 13 Mar 2023 13:34:25 -0700 Subject: [PATCH 50/59] Update mock baselines --- .../zzz-automargin-title-container-bottom.png | Bin 0 -> 13118 bytes .../zzz-automargin-title-container.png | Bin 13736 -> 13118 bytes .../zzz-automargin-title-paper-bottom.png | Bin 0 -> 13589 bytes .../baselines/zzz-automargin-title-paper.png | Bin 12384 -> 12750 bytes 4 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 test/image/baselines/zzz-automargin-title-container-bottom.png create mode 100644 test/image/baselines/zzz-automargin-title-paper-bottom.png diff --git a/test/image/baselines/zzz-automargin-title-container-bottom.png b/test/image/baselines/zzz-automargin-title-container-bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..76b960643825791da5bbc16549f691069408020c GIT binary patch literal 13118 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 V_u&u)_#aqUvbU5Z3nh$w{||=Twxs|7 diff --git a/test/image/baselines/zzz-automargin-title-paper-bottom.png b/test/image/baselines/zzz-automargin-title-paper-bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..ac2d74b5296ac34e1cb374ccd1455d7ac9162e6c GIT binary patch literal 13589 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 literal 12384 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�U-pW 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 O;K@iTNaTy%_4prEW^@Ap From e4b5f2916c60aeb5c5b61c56b866222fc66d4e4f Mon Sep 17 00:00:00 2001 From: hannahker Date: Mon, 13 Mar 2023 14:53:09 -0700 Subject: [PATCH 51/59] Adjust titles on mocks --- test/image/mocks/zzz-automargin-title-container-bottom.json | 4 ++-- test/image/mocks/zzz-automargin-title-container.json | 3 +-- test/image/mocks/zzz-automargin-title-paper-bottom.json | 2 +- test/image/mocks/zzz-automargin-title-paper.json | 4 ++-- 4 files changed, 6 insertions(+), 7 deletions(-) diff --git a/test/image/mocks/zzz-automargin-title-container-bottom.json b/test/image/mocks/zzz-automargin-title-container-bottom.json index 0b20535b9b2..638cc8e2268 100644 --- a/test/image/mocks/zzz-automargin-title-container-bottom.json +++ b/test/image/mocks/zzz-automargin-title-container-bottom.json @@ -21,8 +21,8 @@ "xaxis": {"automargin": true, "title": {"text": "x-axis title"}}, "title": { "automargin": true, - "text": "Basic title", - "pad": {"t": 0, "b": 0}, + "text": "Container | pad | y=0", + "pad": {"t": 15, "b": 10}, "y": 0, "yref": "container" } diff --git a/test/image/mocks/zzz-automargin-title-container.json b/test/image/mocks/zzz-automargin-title-container.json index 0b20535b9b2..c6f8cee49da 100644 --- a/test/image/mocks/zzz-automargin-title-container.json +++ b/test/image/mocks/zzz-automargin-title-container.json @@ -21,9 +21,8 @@ "xaxis": {"automargin": true, "title": {"text": "x-axis title"}}, "title": { "automargin": true, - "text": "Basic title", + "text": "Container | no-pad | y=1", "pad": {"t": 0, "b": 0}, - "y": 0, "yref": "container" } } diff --git a/test/image/mocks/zzz-automargin-title-paper-bottom.json b/test/image/mocks/zzz-automargin-title-paper-bottom.json index c1a246f127c..70c6a260b17 100644 --- a/test/image/mocks/zzz-automargin-title-paper-bottom.json +++ b/test/image/mocks/zzz-automargin-title-paper-bottom.json @@ -20,7 +20,7 @@ "margin": {"t":0, "b": 0, "l": 0, "r": 0}, "title": { "automargin": true, - "text": "Basic title", + "text": "Paper | pad | y=0", "pad": {"t": 15, "b": 10}, "yref": "paper", "y": 0 diff --git a/test/image/mocks/zzz-automargin-title-paper.json b/test/image/mocks/zzz-automargin-title-paper.json index 7627cd1e845..e029e208068 100644 --- a/test/image/mocks/zzz-automargin-title-paper.json +++ b/test/image/mocks/zzz-automargin-title-paper.json @@ -20,8 +20,8 @@ "margin": {"t":0, "b": 0, "l": 0, "r": 0}, "title": { "automargin": true, - "text": "Basic title", - "pad": {"t": 15, "b": 10}, + "text": "Paper | no-pad | y=1", + "pad": {"t": 0, "b": 0}, "yref": "paper" } } From 3dcaab8389c2f270cb803df41e36a55712ae8bfc Mon Sep 17 00:00:00 2001 From: hannahker Date: Mon, 13 Mar 2023 15:10:05 -0700 Subject: [PATCH 52/59] Update baselines --- .../zzz-automargin-title-container-bottom.png | Bin 13118 -> 14012 bytes .../zzz-automargin-title-container.png | Bin 13118 -> 14206 bytes .../zzz-automargin-title-paper-bottom.png | Bin 13589 -> 14104 bytes .../baselines/zzz-automargin-title-paper.png | Bin 12750 -> 13974 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/test/image/baselines/zzz-automargin-title-container-bottom.png b/test/image/baselines/zzz-automargin-title-container-bottom.png index 76b960643825791da5bbc16549f691069408020c..a222ede8a1a52baa70ce28a6926b19d5b43b02ee 100644 GIT binary patch literal 14012 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

d#Q(uW^Q?e)S`VAN1M$1yVLQs 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 literal 13118 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 bVysJNPjD+LKLCI6h9fVnER`ei_k;fdVWuTI literal 13589 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 ANdN!< literal 12750 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 From 2a0011a7dd1275bbed2a7d41f1da440400df8df0 Mon Sep 17 00:00:00 2001 From: hannahker Date: Mon, 13 Mar 2023 21:39:59 -0700 Subject: [PATCH 53/59] Add milti-line title --- .../zzz-automargin-title-paper-multiline.json | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 test/image/mocks/zzz-automargin-title-paper-multiline.json diff --git a/test/image/mocks/zzz-automargin-title-paper-multiline.json b/test/image/mocks/zzz-automargin-title-paper-multiline.json new file mode 100644 index 00000000000..c97f1c810f1 --- /dev/null +++ b/test/image/mocks/zzz-automargin-title-paper-multiline.json @@ -0,0 +1,28 @@ +{ + "data": [ + { + "showlegend": false, + "type": "scatter", + "x": [ + 1, + 2, + 3 + ], + "y": [ + 4, + 5, + 6 + ] + }], + "layout": { + "height": 300, + "width": 400, + "margin": {"t":0, "b": 0, "l": 0, "r": 0}, + "title": { + "automargin": true, + "text": "Paper
Multi-line", + "pad": {"t": 0, "b": 0}, + "yref": "paper" + } + } +} From a8185f4db01a58c1d215f81a4d24dcf9492d209a Mon Sep 17 00:00:00 2001 From: hannahker Date: Mon, 13 Mar 2023 22:27:46 -0700 Subject: [PATCH 54/59] Update baselines --- src/plot_api/subroutines.js | 4 ++-- .../zzz-automargin-title-paper-multiline.png | Bin 0 -> 11027 bytes 2 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 test/image/baselines/zzz-automargin-title-paper-multiline.png diff --git a/src/plot_api/subroutines.js b/src/plot_api/subroutines.js index 239a3f8e121..12ab222a811 100644 --- a/src/plot_api/subroutines.js +++ b/src/plot_api/subroutines.js @@ -415,7 +415,7 @@ exports.drawMainTitle = function(gd) { x: x, y: y, 'text-anchor': textAnchor, - dy: dy + dy: 0.5 }) }); @@ -435,7 +435,7 @@ exports.drawMainTitle = function(gd) { x: x, y: y, 'text-anchor': textAnchor, - dy: dy + dy: 0.5 }).call(svgTextUtils.positionText, x, y); } } diff --git a/test/image/baselines/zzz-automargin-title-paper-multiline.png b/test/image/baselines/zzz-automargin-title-paper-multiline.png new file mode 100644 index 0000000000000000000000000000000000000000..a83a9e493b5c1b5af645d8e65b1b70a8af2d8c68 GIT binary patch literal 11027 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 literal 0 HcmV?d00001 From 0c0e47e48c0b3111459fdaeb82e1477d9ec501f0 Mon Sep 17 00:00:00 2001 From: hannahker Date: Tue, 14 Mar 2023 00:02:29 -0700 Subject: [PATCH 55/59] Revert dy change --- src/plot_api/subroutines.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/plot_api/subroutines.js b/src/plot_api/subroutines.js index 12ab222a811..239a3f8e121 100644 --- a/src/plot_api/subroutines.js +++ b/src/plot_api/subroutines.js @@ -415,7 +415,7 @@ exports.drawMainTitle = function(gd) { x: x, y: y, 'text-anchor': textAnchor, - dy: 0.5 + dy: dy }) }); @@ -435,7 +435,7 @@ exports.drawMainTitle = function(gd) { x: x, y: y, 'text-anchor': textAnchor, - dy: 0.5 + dy: dy }).call(svgTextUtils.positionText, x, y); } } From 7f89c73eb6ebf3ac6cf00d5b5a88130207efca3b Mon Sep 17 00:00:00 2001 From: Mojtaba Samimi Date: Fri, 10 Mar 2023 18:48:39 -0500 Subject: [PATCH 56/59] move smart default for title.y and title.yanchor to supply defaults --- src/plot_api/subroutines.js | 42 +++---------------------------------- src/plots/plots.js | 37 ++++++++++++++++++++++++++------ 2 files changed, 34 insertions(+), 45 deletions(-) diff --git a/src/plot_api/subroutines.js b/src/plot_api/subroutines.js index 239a3f8e121..2932806c5db 100644 --- a/src/plot_api/subroutines.js +++ b/src/plot_api/subroutines.js @@ -3,7 +3,6 @@ var d3 = require('@plotly/d3'); var Registry = require('../registry'); var Plots = require('../plots/plots'); -var Loggers = require('../lib/loggers'); var Lib = require('../lib'); var svgTextUtils = require('../lib/svg_text_utils'); @@ -406,7 +405,6 @@ exports.drawMainTitle = function(gd) { var y = getMainTitleY(fullLayout, dy); var x = getMainTitleX(fullLayout, textAnchor); - // Draw title without positioning to get size Titles.draw(gd, 'gtitle', { propContainer: fullLayout, propName: 'title.text', @@ -424,13 +422,9 @@ exports.drawMainTitle = function(gd) { var titleHeight = Drawing.bBox(titleObj.node()).height; var pushMargin = needsMarginPush(gd, title, titleHeight); if(pushMargin > 0) { - setDflts(title, getDflts(title)[0], getDflts(title)[1]); - // Recalculate these since the defaults have changed - dy = getMainTitleDy(fullLayout); - y = getMainTitleY(fullLayout, dy); applyTitleAutoMargin(gd, y, pushMargin, titleHeight); - // Position the title once we know where it needs to be + // Re-position the title once we know where it needs to be titleObj.attr({ x: x, y: y, @@ -453,36 +447,6 @@ function isOutsideContainer(gd, title, position, y, titleHeight) { } } - -// title.y is 1 or 0 if automargin and paper ref -// 'auto' is not supported for either title.y or title.yanchor when automargin=true -function getDflts(title) { - var titleY = title.y; - var titleYanchor = title.yanchor; - if(title.automargin && title.yref === 'paper') { - titleY = title.y === 0 ? 0 : 1; - if(title.yanchor === 'auto') { - titleYanchor = title.y === 0 ? 'top' : 'bottom'; - } - } - if(title.automargin && title.yref === 'container') { - if(title.y === 'auto') titleY = 1; - if(title.yanchor === 'auto') { - titleYanchor = title.y < 0.5 ? 'bottom' : 'top'; - } - } - return [titleY, titleYanchor]; -} - -function setDflts(title, titleY, titleYanchor) { - if(title.yref === 'paper' && title.y !== 0 && title.y !== 1 && title.y !== 'auto') { - Loggers.warn('title.automargin=true so resetting the supplied title.y value to 1.'); - } - title.y = titleY; - title.yanchor = titleYanchor; -} - - function containerPushVal(position, titleY, titleYanchor, height, titleDepth) { var push = 0; if(titleYanchor === 'middle') { @@ -503,8 +467,8 @@ function containerPushVal(position, titleY, titleYanchor, height, titleDepth) { } function needsMarginPush(gd, title, titleHeight) { - var titleY = getDflts(title)[0]; - var titleYanchor = getDflts(title)[1]; + var titleY = title.y; + var titleYanchor = title.yanchor; var position = titleY > 0.5 ? 't' : 'b'; var curMargin = gd._fullLayout.margin[position]; var pushMargin = 0; diff --git a/src/plots/plots.js b/src/plots/plots.js index 32d78ed0c0e..385df065112 100644 --- a/src/plots/plots.js +++ b/src/plots/plots.js @@ -1480,16 +1480,41 @@ plots.supplyLayoutGlobalDefaults = function(layoutIn, layoutOut, formatObj) { coerce('title.text', layoutOut._dfltTitle.plot); coerce('title.xref'); - coerce('title.yref'); - coerce('title.x'); - coerce('title.y'); - coerce('title.xanchor'); - coerce('title.yanchor'); + var titleYref = coerce('title.yref'); coerce('title.pad.t'); coerce('title.pad.r'); coerce('title.pad.b'); coerce('title.pad.l'); - coerce('title.automargin'); + var titleAutomargin = coerce('title.automargin'); + + coerce('title.x'); + coerce('title.xanchor'); + coerce('title.y'); + coerce('title.yanchor'); + + if(titleAutomargin) { + // when automargin=true + // title.y is 1 or 0 if paper ref + // 'auto' is not supported for either title.y or title.yanchor + + // TODO: mention this smart default in the title.y and title.yanchor descriptions + + if(titleYref === 'paper') { + if(layoutOut.title.y !== 0) layoutOut.title.y = 1; + + if(layoutOut.title.yanchor === 'auto') { + layoutOut.title.yanchor = layoutOut.title.y === 0 ? 'top' : 'bottom'; + } + } + + if(titleYref === 'container') { + if(layoutOut.title.y === 'auto') layoutOut.title.y = 1; + + if(layoutOut.title.yanchor === 'auto') { + layoutOut.title.yanchor = layoutOut.title.y < 0.5 ? 'bottom' : 'top'; + } + } + } var uniformtextMode = coerce('uniformtext.mode'); if(uniformtextMode) { From 132c57b806dc922df6f7d0ba5c802b5459a027ad Mon Sep 17 00:00:00 2001 From: hannahker Date: Tue, 14 Mar 2023 17:15:19 -0700 Subject: [PATCH 57/59] Adjust dy to fix offset --- src/plot_api/subroutines.js | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/plot_api/subroutines.js b/src/plot_api/subroutines.js index 2932806c5db..1386e1e8ab1 100644 --- a/src/plot_api/subroutines.js +++ b/src/plot_api/subroutines.js @@ -423,13 +423,12 @@ exports.drawMainTitle = function(gd) { var pushMargin = needsMarginPush(gd, title, titleHeight); if(pushMargin > 0) { applyTitleAutoMargin(gd, y, pushMargin, titleHeight); - // Re-position the title once we know where it needs to be titleObj.attr({ x: x, y: y, 'text-anchor': textAnchor, - dy: dy + dy: getMainTitleDyAdj(title.yanchor) }).call(svgTextUtils.positionText, x, y); } } @@ -556,6 +555,16 @@ function getMainTitleY(fullLayout, dy) { } } +function getMainTitleDyAdj(yanchor) { + if(yanchor === 'top') { + return alignmentConstants.CAP_SHIFT + 0.3 + 'em'; + } else if(yanchor === 'bottom') { + return '-0.3em'; + } else { + return alignmentConstants.MID_SHIFT + 'em'; + } +} + function getMainTitleTextAnchor(fullLayout) { var title = fullLayout.title; From 7d4e35293bb6c3f4c45f4b421068a80324c747a1 Mon Sep 17 00:00:00 2001 From: Mojtaba Samimi Date: Tue, 14 Mar 2023 20:25:03 -0400 Subject: [PATCH 58/59] baseline update --- .../zzz-automargin-title-container-bottom.png | Bin 14012 -> 14006 bytes .../zzz-automargin-title-container.png | Bin 14206 -> 14221 bytes .../zzz-automargin-title-paper-bottom.png | Bin 14104 -> 14134 bytes .../baselines/zzz-automargin-title-paper.png | Bin 13974 -> 13986 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/test/image/baselines/zzz-automargin-title-container-bottom.png b/test/image/baselines/zzz-automargin-title-container-bottom.png index a222ede8a1a52baa70ce28a6926b19d5b43b02ee..7e78abf8fb1f79729e518183cd7d8118643efa07 100644 GIT binary patch delta 2730 zcmV;b3RU&IZMJQ&FdzYOvoRpk3x7p&dLMuMvCNn;L)NZcD>*qiQm0NG$;il%GtWFz zx_0dvNl4Xwa&vR#^2;xm8*aEkPB`HN)nnNPA2MW!+;PVpa{Tef+wQ8?e&ooJQczGJ z4?XlyrN@{uWs1z5J6Fbx8B=Lnw;O!;;fM0hJMYMkKmI87>(`fo0|&~v=YO6n@$vC) zAByp+hyVprMc_3Kd*HwUdHCUn<%=)AkpBJq8(Gw>SyO)c=_mQ-n{VXQQ%{vHUAkx- zS|EXoFTPkNPo8WYALsqZBag@h7hE8%TD7v?UvmcvBr>|wr%#u$W5>#sS6(T{9e12; z*swvKd+s?IG-!~yS>RSZ2!Bu@)gzDQQ@s50%kuWyZ<~v8r%s(>`pIyY`|PvN%6sp< z7t`ZvAB+OACtO@yEa#nfp1ENeI&^3#z(*f_Bu_s1r2OL_|B$+M>)HqA9-bpWfp{(@ zk)05F0Jzu<7%)JF4kX^fW8R2~W_1Cg@?_N3b$Rnk1-@fJ#-+vim$j{F=!w&eP zpEGBUeEH>cI?<84H`5s=ZIsM90u9B zbEmxY(o3>n!2)x|MSm3FRfd*E`P=3si&Tj@4x?EUVH7e zO21cVux{NtBM#h9v}w~Ov`=1Mo(vv5*l_RDr%zb1*vQ)iC=hSwC+xGs#r@uU@0Dks zd8X8bv%CPf_}~Iwqecz6^wLY^h$D`W?CflFVa3Jow%cwibzwj3u*1y74Ht9>;NSoL zx4i!P>*iw9vVUbu!G!@mkGI}>%lu$VOiVOw3kwU)g$}a8g$d%q1ql~&3~?MvAh;0W zm=|4ik!inp@nX6E{`-v_a3R75VO(>~HIkg1Y<`dVp7-B>U*^r5C$GHniur7gkZ{+# zdi81(uW{qX=AwQDfva;m5>#mbVjT*`F<$ufN(MKPZjvYJ7?YG|^I@Aj< zydVu5Hk1w>Iv5$^Tyc?pt z)mLAYCQX`@du&Jn=R9iED0AMJBtPezbEIFtenyPW2KnP+{=47(&Q*aR{-jBh%n!aF z5HdDAkO2XrM};2XmMvQNvAtXn36$u1)==a@sU#a7cA3t7}ELkFd``h2l@9)0*ZZiZ2A(h;4(ZfX< zGQ@_vY78gg_coiYKrl3g&sB26MIZcdu79}uE^mV{!2X_l?vWlndYDOP413{1j9yB~ z4MRYwsj03DWcTjfW(f0^TW&G)7ufE)>n)V@ zSe@A?pL}Be$erH9p?1db3ht0`aVWb%9M0rtc^7u4Jp_WgVBAq+tEdNpC%|w=`+wbc z-J1dc#3+-7^> zvK7eu`SZ)2D{y)eXPtGH8S;bZF=w-F+cwig#@-}A zfp{}7)@OxD*7MIl-}D?RdrT7J)R>$Ow+B*ka@$5A5D?~AZ~?@fC*~X=5Ikm#o<(In zkZ=Too(yDBo)|Fng?R`^AmzoY479C4@a_X-T5`jM7;&5)$b%0)Xy!(6r+T4U@PQcunmBQy8MAgaXCmJD z!?)>yU_JxA1I%wYt#pjPV*(j>?3mX;Zvf-$7|y~l5Tt^64csYXvk}OO6)Vg<1MWPX@pH^M zULkY%a)mk8*nkjkbe|5%weEcf*uIwt5&XDX@>dG>p+hRb0FAop~Vj#iN)i+7+S&v zJs#u5M7x$i(1XH_0D2O5S`1YTY&T54KmPdRp>toqe!Y<>IE)xE!ZsY+dz1hL;?cxJ zdRn-6;xSvyi9jS6E60T#cf^=4aGnCf90cx&ahHjU86J1Vvw!)x2s^_SHUh!6~=ZNoJBBchPuE6}^UvCegzg!oqQJVZ~#`7#hQ4!k7<1 z5A4DVFEkfgY_aNrpeF%_=-uHnm-ikB-VedWbm`Kif(I8cM1{E|TyP;=M<5U`dRG`0 z!~78*D!_X__1B49fQ0*T?B4zFysljt~a^y(lo+yG#xjT;G6M1TU}cY_2DLBLiZ=+U8P=anrI zfuI-Z%u|(p5zs52i|64D0u+ch^1!q3D1o2|1jAPN!GFt^s1$%;M1& delta 2665 zcmV-v3YPV@ZM znP;9UUAuOTBC^h|xw*M=`Q?|(4L95%C!BDC&OsuKI%LQYx#NyIC#2x&;kiueDTFHdGciI_&D!J9(hDAxZnb5)vA^C{+c^bAd%6XK7G239XnR8yz)vp z?zrP*!-fs=+;h*#ph1Jo%>uXTL4SY(sUCSWpW@}0UzWGue%oA(J9X+5(@%!G+-IMC zR^EH>y_glZwVma@;^UMv)(4j*^0Y3WZBYE=4C*>di_=nW3Th~4?_wXD6 z3dD0MiR^^X1Hi>@z<>cVeE9H6gY4S1%LwP|ufLYPd-uwbM;-PhnOL}^`=`H->4}UPn88>d+LE<>$j5FlgYp*r!A+^sx|J)2^ zBqb$DyLRnl*sx)8)KN#7{hj07dFP$dvu989JM4>p|Mk~jW#-J8vSY^%Y0#j7IY%73 z9cb$=-)Pd)XNeE!RrOm{$GqsGi%k2)ix_q_l9`!a9dJbC4nSIlQ~ zgoL}^)vH&Vc#Ru3HWzJ-%^zyB6$p-dGlr?VK?VM zAS(<(Vh#$jbvDTD&wu{2nY+M09q#2Z!#UzR_}OQl$pa5OV7?P+X=$aJ;ut5Ne6n0| z#T8+Hx7pCU1b-+H@8-tp%y8kt81ujW^)GV~J=BJ~THH6;$t5>jSn-343buFOeb-#v!WqJvHf@>_9qz0lnTmQK=vg3ULPA35(70%#w}rVL z=eQ6bJ`e8Du@w~+$z_*aX2#yHzyA7=Kp>9^6DCNrW`E7XW@{^ufBy5IhO2WfIMAn` zerhiEufF=KG-=YL++#xuIOkELMw#=*B>6e#oFo1E^)q60Hpm|r^WXjMcdiNq@h451 zWPb4dfRM4_feZ)`Ju377w`|!`Av@fVpbh3fMvopXvu4ebxVX4d?Q!FhnVD%GnBeAr z0u+ep*or*s;BIR7zF(ig3xJqug zsNt^qFMs)qwLmbT4m{P^**WXTfw+u#0Xet-Afcbg$N2&v?T ziykh@kRdkQRbw~_zqi?J1%ja|e6ErkF8bhybAQF%cX=Cx0rvOYbC2}s(ZftSW7rE9 zV)RlClrXyx6r$7 zDG=}G#_G&I`Q#JxNAC0<4z)9eS8#`ni$mEB;&3KE%e$~U?I94{1>=qqTSYw(JOPF~ z+JEo9`_2r(V7LZPUH$UQFO>=ePh>eg2hALB*LJ$v@Z6Hh#0&Ii39oPSgI?%mCKhBJf(26)uCq9H5{XI^#HRaW0` zHufd~3dEavu|6wIvYvnb`KISk*<+Fzr^e)TxIK`PliM}|fq*c_f(sz-JTd10f#5M? z^eigtfrKLv^kg85^2C6lFU&(Y0x2(EWuR>Zf_EPv(~=u5#E9ecKpuSXK{GdkJAeIS zjyc8*<2k()M-lj%=C{j?b-sA&7(gAdFQ(8P%o&6u^b zITP{DAHGcw1oIi_9bkUL8TVeZW`B*D;Kr~~=gyr&$H9CBE=+C+1ic$f+#}|p=6*1Q z6$^o&$AjJxdOOaBUI3Unb08SbI{oz1OHCv@Jq|}8=%rwO>5qT>qmi()LHxK;fOs?n zg5%%@1U)7Q1W&R#!<06EDwr%U+ta{<4frk~_lF;TxJ@{=^(X-f#G{Fc3}W9TUj7W5>J(dIK0|$8Z*gfglykYv4{9n~gwLtXN^@8F1(6 zjGtr90Ye~ovIiGI41wUWVF(OEH*N?77gT%}+#zH99=#nrnT0t7$nnGzPmE~~1R})~ zV;G`o+O(-GTei$R+<=QIhJU26VGaYm67)bYU$t`ON;AxdUI%(qm;=Fv3oU-|NGu-j z#n2Ka=IP05EhP$3o9Ng#?TlZ z6UKZ9dSDk`c%iw_VvAJ|1U(5bMDGrtxxDv4@O}s`rc0MD6+F0rAu7xz;erd{Is$=k z(YwO180L@gPyyca!GG@|d@X^X{0)XeTeN5qdI%ws?;~C=#rflVh&!(kYU8wnhW z00qMD2MMqTB6xQLb1-;8(RrD)>|5mgqL4sY0u%_p6O(5)I3j=oi3l5aA^{R00TTE> X)zB~l5=(Ng00000NkvXXu0mjf(a0&` diff --git a/test/image/baselines/zzz-automargin-title-container.png b/test/image/baselines/zzz-automargin-title-container.png index a267bff37dd6488d7a01e3daf8e0da5fc607031d..94d999b0004adeff5039bdb7869ed46881b351bc 100644 GIT binary patch literal 14221 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

d#Q(uW^Q?e)S`VAN1M$1yVLQs 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 diff --git a/test/image/baselines/zzz-automargin-title-paper-bottom.png b/test/image/baselines/zzz-automargin-title-paper-bottom.png index d0251f5a42475d68da0adf04fa487f558eeed2f7..b7599df766551fc614f1af0f6a70cbfe8adc6eb8 100644 GIT binary patch literal 14134 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 literal 14104 zcmd5@bzD?iw1#nzQ4|J=QF170=Awl3&?O)xg2WY-21)4{X^<2FrIb_b&hYdGo8B@j4~X?0a<%_Cqwr9O%*J`g%xpJ{w|G)MmDXtX&i zt^U`{0u!>whE+1p=?@;HOQgMEQOH)9!DIc>@#!?_Hr1&MCP&jpzmx+ zAoJX?-{gc5Vj9xnU^xM%Vc8daQz9w|rH_;N|9Yc($NGqs{FF_q$MIRIbW_xmRk!+I zDyhYf&<50!Qp-}5c!8HSKeGNq%-B+|!GZ;;o74i~>O}5C>)jJ6(=#)*(RLH4qM911 zpuj+z-5TQX&uT4Y8ltGF&=zM1FE1~fiG;+1l`3LY&au{hjvHKqy>Yj?r`_|{#WJj5 zB@XM%FJ*;{4V2)T`ubcK;Yn?>s;a8fM0^vcymD8rQp$`vViuDoCrx^ZmQCyzAItAf zcozDf{>U{5-}P-HN)B7In3?oXCTLQPe}2}Fi$i;0vO01sn2Td#Yk%{ebpGr?5NnXt zZhOVO0jK&IBs^e6;Ec8uOp2WM(6Kh53qrLMEXJ0i)Roty`_iJQ5RzR5YgI(C+&QS0 zvYG1>qKhBo-~l6Yk_h0}yJrvmI=fPSLsM}@pZ%GGtD@%X97~d^Vphq?^@pMPd!H^0 z3l3!W3kvG*z~TjnWJAUiP)D!ChEKmyHAVK!u4Cbnr6&QlwP5yMuF#pezmlA zl^rI<*L4__HB^I71!*~ZS81}p-1nJw_fU|3nAYpKk>M|!s;+)Qj}C6XF z=Tn15OU^>tiI+D$U{dQRy$&;=Wo2zEP=7#MBAAah|TyC2n^Xy6!JE z*TK?#2X}j5tnZ<*siqaWjGl&FG+zx|SZ^>ITykJZb2PcjMh6dI)g2Hz4~b|IIP{Te za}4u7r~Ayc*K&zZsbuXg-pPDypZ)429;RWS^7oY6jae8!kzqQYg{N`dMssiM^Ea1k zt>q_P=;f{Xs?ouFcY4;^!T(5)(lz<*W38!|yj%HclMf#xv=D2EUzE9<8SR%t_JH^ko@ZMzXxr_hL z-EmPu3R5{Q)p_UJ)^iURymC7Cy)5tqtE;sZ@h5lyth?dVX-vcTIV{XDVXPyBjg>?b z%6F@7auv&o@(ZbR%F-8zBh~IOFmeIc$zibv0aeq{&z8}WCv9}-#h~qdgezzv5#_i@ zfI<-*;ets?`h6Z6oE{A;LQa7W9?v^dQmkxV$>lT=LX#Orm-gTRvuANYe1&LWX4#5g z1dY}ji#nmUzU(KMR_$p=ML%UESS^`^%gNc4E_^`3d*j6c#4#u#br}u9wdAq}M4rEQ zFiSueKf-S>!qvMY&PPHGF(saz-?|3;s|EZ!D0fb7pyJZggKdxDE<5Mm2w9o+WbKii zK=MBrj0}%l(ZVL-+!Z(dDvH={nHI*j>F(>~i5P&oxN`cUP~Z(wtT$R9L-bpDg~6u1 z(S{}07YHh-7oQVPjee4{{kBL4{{~|a!U219h|f3iIy547dmFu9s4FCM{PhU<{?Yrg z`&YpCHrPG<2DN>Y8Erdw1T9@G7wHs>Pj|{hNxf&af0Jnu-WUPvQ zYen5(ZIFvK&zdTL5OW2GJ5myj%-X5qDxK_YxXxmiBTk6C1VZ@hfk zw0}U&VMyc~bJm7^Ut+r|xz9C_Z7_>eAMmuxr?5*AAi8$b5}5K$B#D=788P$%D34e; zB`1OSU!YFG_|HjzlBSIE@Es5-BbV}G=1n})Wt zzDwFx?>-VvO&7M{kG^vc2RPy$3slWIQ-Z8O3P| zyb1v37D5nKT57OgiStLp(*R}m3O2Gs?3Q$(Ph@x#}wT1DhUZ!2EZ>P z2sXl^&_#0l)$bVc?{vD>=xLSJ2)5CC+JELGrR2)RkCN`aV-HKkdsaHd0AkVtyE6%J zId$pfiS#qi^FK58K5`Vdht=T8n>DHf&rJajy3N6SdS2<2E&csku9bbPHSS7y9=_va z5mSV;KUz2HRrD22utC7%O+A_D<@LwyyFD8uDrZLT%FglgB)p2ePl} z9Qkx72%tdheOpfZ1dopG%@LeABbO%_cNP@`h^h4i~$F2)Go!UB) zfheSvj_A81i2P^X5g$U1Q6wU%_?5De#X)QS_k9l1#A>25PP5#*Y08ZQ*xQaw% znXzt!oXDTCEiEmPQd4uT5hsS; zR9Bbe=H@1)3_hiCj$gvkl5=a%!vXNqXdLi+5RKiltm+uCj*FOam5-@!_5=lX#A!mu zSGEF}5@K1HM_zpVsKAX`6hrSn@J8R6H{AEFvZ&JXyXWp+e!6+%FFs?~VyS?BlbBL4 zADOze12q=85c?TI?(SDn3J+_El#E$C;l6m)8`iq@N;r3}<7KaDiwKq%aI|e(lRO6jHAKm|k_b0Y< zpC^U9Y3-3ygw?>9h-gn>8ZOd8xZ7d|2{)Hp&*|hp57d<`K?>5|v!9cj;FJkUs=T z@3^7K(xY=Hzyo(Bkx~FHwI8V%qk34r=rSh7CA^GgcvC8lynkw-Oau!nM?}j-8<{rN zWoEDWOb!cyE<(?q&=+$F!2?3W%K-%u@gN?g0B`#Sfu}aH(i!|MEVGu#*#jSJ>bPEE z2cRs^Z}=M!!LU3JOBs7)0W7Fb@`553Z+r+J@0Y*fBKne~O<&5>Kcj;azp8rn+d?u- z-!;a2KUsg~UTcojrIXgiCfZwBj;`p^?k^!Js%+49=yi1GC>DmF|Q7^M` z(cgUZ>nIwjBlV8Z3vDqJyjurIb|@fKr3zf2zCLF=u66(LjBF5^>w1^kJSDzKS1B_o zw%6#IWSjcqHh#maZVD~S+hOF?HIN(AEFdMJmhP0z_Ku7lgCx` zxSQ^$hjT@?xn_HH&v9yEi(p?AoxQ7!tTvht^wxa1W>2xjM30sl1j(%;0>-}J(UMs- zQcz-jT@tyzDeVSYQ@+|Ej&R8g_OAF)bcEZDHVxiK!ttO%`NKLExW1t~NLQ2EcMKW} zE9z#pR4q@!<%tMqa=P60vpl=xfh47SNX?r4VS z;rgr_Ps*zQjwm|4>iB!2Tpto*#6A4N^0a*Ow)c~{l4~Z#y_a|3Uv05~8etW!=B@m`|)&z=%Qi+HAT3K6DSi8MGGbkZNIIQydaY*^iW*eD>qMiRT96 z#71}<=>A;*3rqaLd;gJ_--sJ>B7@B?IxjtGnr5tDU${yz-OyFS;PY)Uu*jQzrFR8xIfD4+1*3P zjvqXFqVwyEC!_kPKY_*!R84&%W$Y$VXC7y*efB_x-$-jksh9{4eS+{`5q*4auo}MV zxWmT%2n(v?P90;x2qN>dJZKV*+omI`CB^sT*V}xF`hiH-7#(p$pu;#daX!C{toDNp zIokahg#a5gq(H)hzn|grMxS}GJbeouaCID|+0${*#GV?mGnk>MHDlstgm9@$e!8Bp z{e8|0+k4PEg9hpn^Y@4sz_H0c9h++X^`oPy`p}e2)z+z0r4D@QWuS9p6})=g%YXxL zJHwp%97aP+YsZ1v&_Qev`R2_Vz`QJZpL}lFW>gjpZHjz?PbVbE3yu`_<>0Dq~OsR27W@cs$*kAP&D?*smIQcE{ zx57yH#AaftTZoKU;hvwDu+)ZuihFf2kp!b5W|6iLbp>_X2(uX0?BfIFKBMX(CKlgh z@%ZuMsHmvaM2Xh|DmZ#KTDiwO@lbOd&!s7YH2O!jX)+r>lyur12-Or5Nij+wqGy%h zkz5=gt^y-LA8R~GBdGV1T(r-g`&ki?p(SlY$<_V`mzR=>ZV&y>rF3$$A3YzHN|9REjR z-%uI)O;f>p;&PMdW3eMnf#Uvx`bnr^LT*GfJb+lCI}C$<^>#%H&@Z>AZP)eFGP*}Q zqmwUZ+O(}VVmTB=;=sJ$-|ztE3L_mf(#YhA7&)M4&FY*;_{h{cP>%LNYC44cYU%vX z8OG5V5n|3yn2*W9YEJWxSc0Xmgq<0oh8%Nv8EhI6Zk|*4mm6i*r_jYjXOdS5v#ls_ zAl!95(?G)2w5|Ipj;y=lyv_m}9e+8&98yb3)bWwJKEQwKzJmNSXA*q1_3t@;^A}(> z@QY3O;>hUs3uZ9P`RdVrZ)EtmU7PfBJnxqMx@`!SeA$8CTS(|3Ko(WC?oe;gD_s71 z8p5scF{NG{$$zmTzf312=QL^KWx>Mh1hjmbj6MB)zi3Vgfd0_%`VC3sK{@WUn}>_d zj_M&yZc*>jEI)DVR|pF&@ipYEpaB}=9zG~UKgHu^@zcd}`!$&&8gAox+xI|~=D!O| zOS{T zcX=|LLdy*e`aI@tV(QYi{c~99;RxL_%mGmaGDIbyWVZXK$6mE$Q2V!K%@SQTPYD{; z?*A(2!H-6UGFX!SP`N?vL1Dq8X@D#J?#-YnopRI-Mo$a-dwDk)dd6uX?euvL|6q`1 z^x=9;h_0*4ph6rsf8T%+{r@$>GnHV}P?K}4!p7@*xvRw867z3TOrbU>N_-es03I0u z+&on1*4i1gky(xjslGD=FUvBc4Unhq9dx+@iU4nx(O`cP4Mhakb>L8(|2h<~vjJAo48L)j z%4=zt1Wn~AL=qBSUT?E(JPV0PJCb~{g}ek%GwEgLT(VCk(~Uy13wPX>W+w2QV#EtZf8Z>@VxV}nQ}c4m)Km7gc(j% zV4UcGjVqP^KgF3)urG0BzxMEujENPypdM@LYBmGq@t}gkEQSivEdap16EsxEHo6oM z_-K7}|6LF!=WHv+*g;uh*n@TSNbm-YI&IcmbekVoS?W3G`0^ zBoGwnJ_8qdY$F!=Qj!%YHa$yNR{1L{T&|p|3Hjfi2)na_>EzkydhmCI+q9(!%ftZg zErUOAP~mSH&69@7KAo1S^N9mo^q0WPrW5~)nCNpbM56&v)T1q2!ir|tfI8$Md$Lxc zoaQxN9#C;4uxbTXRMw*{XF3#}S{R8)vB31qZ@lDl!s`c z7z_gqZA2O1^oL^N(c|@WkV<5YTXS9@Q%e#PA_%D^epH;t3XSNo%X7i~g~-|>ry*|?S{dfze^-dhHGq#U z{x^ufk;ye~u}8h-OS(@bnkz>LaL6dqH4WJ6{$E=Q*^ZMpHrkRk-F!`ym&$Rye{TvX z#H8XRjh2JdSZ$yGQ29PiI5NNu-NrLT>~|#|mv{hp6>^3W$F4pY#Vzs#y_w z&8q^m<#HixmBrq^N45uxp?!JBcb8;91?yzUf5Mb9pap^8Bg&P+W=5R%BUC{XLi}Wc>>nPj@(^0 zfz@zu+to`RN-&dvt;u_}0j~jI3X%lHdRm0K(Aa*J3X#Ee9%2)8r_<(_k;a&sy1Mqv z{=5IukLR|{EgC_r9f^-e1g&D>%Y~ttx#3KQf)*DhrO+drajem2JJT$1}{@l}8^d>^r%}p3;NXOm6 z+iSbX(Q;EuZowc^)&DBZ*T;z^8Da&B(WUZK!tPqW!?b9RN`w9nU*ehHSB7s9aM9tO z5RT7KRA}9eiiu?@{3sQbbl?lKJfdtq2ImPEMQ%DjPSkm%axe2x9 z65a&PV7kOJ0!7%Y|E+dkrY8PFY0To>oXp1IbnF~QWc{y>PeV&Rn?_}cpqFbb{hK86 zlI{uBvC#q&nYH{oFna~Qz&2UAUiIQW*u>UoEgX>7h%UBb@tmNm|8~d z7!hap**q-r=H?X$9lzR;%KD*{U(gtU?9s^Ws9y4Oq}=;WiP};s&&D6?6MEK259;7Q zX4RC}+ZC}QHbi>)VQY3*wf~3CZ@jLF0G)mxgx|X%mAkSvRXZnZ+L*qfxSqv@gG1hl zJqr*}ngga!iPHN3Us$fMxS;=KNnve@UBqsnrt6E%=DQADpntUb2v<;4x?~TC7Twio zq6cV>l*^ytzr??x{_y__+q@3L*qLEEkstah!{si(0ezcRtKb2qcZLR$_Y5wyc)E)% zO&9N4g&q%~R27o9#;Aal<%ZQ4er$QT%mn?`qpXb%pl)|fV3FpK@#u&W!D=oEN}i>I zOU820LNPaFj9<_}4Poj|w4Ze&cHgv@%d0c==${7y*%1>HwY&|J3U25IpvURPIq0O- zC=Eo3YmBttDlc;ui8WbA=sM#48|sb(G0yJo-xyDVWY4=m1*(yg_BN~WNVu%c0Q}6c z$FcAgBxO)O^F!>ZqIYf;+3VUR%;1OBm?npeU#!uh%K_g|@$t$_jhXZ89e0?p~S$78BM z=97MgAkSHU+g^jFcEBkX3LrX#g&MWr!Q@HY7Dzo!+}S)}jD79$08sy1KYj#*XEL+8 zZ)jwlw(qE%2Y)?#>A_9LuwP^HATaSn;Qfng9Ff-vlbItS2nbr5eYZr^0m%d$k7|$V zaupJOIlq~f026C$l#T~A^o!oQO$T3Trn*-Jga$MBBSi?b)kna3(-v5NI7#`jgO;n& zU=#kAt!uM2|F`XPd|JVP66e-m|vI2zg999838dPgnge2QV#19e{ zRjx*EyK+UMo(M*D2<4w1(vIB$5;GO*t*j){DDVl8rMc^yjx=iWP#|HTejl25cz-A< zbONC#@aNF`+8sv}pI)3xeoebp(_!}K@Z2{3o#hoOV3HA-mK`5#@!15zt2PxD{#1Sv zC*?_!yVVlEqnH7#<`#Cy4^$!ET<_8xfFo0mcdota?>QmpmLpRwj+9~17CQ-q`_?1j zex@Fc?C$OVl=sh>`q>FkWtXwM>30rwbgf}d6I$vtBCb( zQX7EiaxFckPZi(4;nGq>D09WjS?$bY&=w43rr62q(U~aI_k}O%x86R&SIvl$>gDjU z!Kz*$wvO*5A$2^w1Hc4O%*_5V0;saz2>yd2gPo9}yRv^i6LYR@;k^tL=>GsNkD3Hy zY$NsG>3WSGIaVY-f9&fS0nF#mTiEd(OC)7kE)wqjjDzMR<_6UG^#!OQJgWACFjKf= zP}|Gr#q}r+R^3N_sqLL08rF0zlt=)NSvd2fFCzJ!9~u4RM^R~%xIl;LW&9C0#GF8T zt;~PxLvG2UwlE7LZFFAx;Pb^qJCFDr)-uLp%P8MK1nf)HINi>(L=w$B$ux>gk+Yij zdjKX+mt1+EhS9ObBjA`$Su+i_4P@vrh2cLA^C*R;2#{Qw0%x?kbgqACCieR8kLJuU zi>37{21Qb*PMzX;;mWoo)R?4O9`lhchm8D_tzPq9V6Op&Z8Qx^HcXM@ZNV`l}MrX-2Moo=q>g3PI_<+oF6O4{{*-j zLhlARgwWy3L_-$~zd4$60d{w|-PmuA1|W3*Z*Mf?f@v5Q zw}<24!f`OsjL2ot@aQt68z0OI2j+z~fuWJlhaRfnV!sUlO^B4Pf{i#52lO=*5JQN7 z!!)VL-fCx5LV^;J@FLnI=c0s|@1T2PTwGR;)&B05lKx$Baa@tD(MRAUCvD%sgxG=h zs(S-*P~3p)f{4qIFJf}CJ!RT`l1OwD+3z^$9^q1)+~cq`EUoj#5N~g1@ZdTsdS|m< zOnGp3oIlR3u}@^9uXA!?qWOs=gUmy?NTu8vkL6K$m!(<+tC*O<5|yAmi^x(9NmO|F z_sy{&*qydSk=3_Jdk?LO$H+f6H~XM1QsYA zzSq0S!*drx$!GCwzQ45dJ>~@2%2a0tJ7#0Li@@vZITj8M#(fD&ek-aiH&F*v7?nWe zMWv^oS%?K!;6Aa2`zf@00o&_yib-3|##H`H^x?Pb zLth$H%=F}D@L7IEBl$Y6Yidf%hEhHM`c=netxGG8tYId%Qkjg5Z1s~Q5!NKjp!a3Y zE0Z~;^U10yGPvPN5c8g#w7k4aOk;lEmPYEk!dj(+$$NL9Je7&>&2!6Tb`yke*PW>! z3V<I?HxSegy~2IK?U*CnQEPK7v5~`w|>LJ!=GIznXkrrSt0O?-WFAE z)}lHhnG|2xO|%k9t=WXbuf$GJYSFP&ZJD& z7;~pE(QT7Q4$QaPpNauJLh&!DIR{AbK2Ook;`b`=)wz3~LQ=-(ooPSxKhV87Y|yfM z$G=4ow*uk0J3^ba@5G>DtIIz`zrEmj;5tJa6m37%!BiWrr5P*Y`ffxD39pa%2nE9& zhnep7KoaIff>uL8;3uhjWlMf8yAxdE7Tu?;&)yrV_N^&MO%!pZIIW?kmi%>hyQh-R zUYO7<5obfrZNYVrB!U|{94V9wCRqKq-+SRkJ$@{Gu+`@I!l2S4Dn9;dhDuWU0@w*N zjV55Vo~`eY-P4+3`UqC3Kia^|_PMDW3z? z0gs(I`-Sq2b8TDSQ6d96g;q-H8OoXr{;!`fzn^v5m(bAAc)es<*q`q6poI$8jTfMp^(+x%KFDJPeC5MZq}G;T*TX z1Wpx+(IF2^2(7#G)%|cf$;p+Z17Y9;rP;SkC%`ZzX(y&)m8mg|n=G!B!nuyuab%J& zhi=g=02|#(gzjAhg>RE$>W7&0ibSjW75enpy2uPCgxlYZfyZ&yi@p*SK*AHPYZQ@- zv2OE8;~r-F2f`HTAQx{rw8|)h4n|_C?)H_9!Oc2;li4qCcx;BHhSOwjToi7b#J*$7 zc6fmbI!g`-Kv065y2#H9?S$K`;xPS`POkR==+tEIj-LVF;WmX>B_e?Bb7dG<{`MfRDGDbo5LTX%vH7 zFuHQGIM_R_`u4_F<-ux(*h?~VeC^cxIRh<#ftAF_6lMV%SNz$G4JYp=?E&g2x07{t7_3R3b+kv*^Q~I9sO} zx+>wVyC*O0r zdD)yMvN_(lfg?Bk+vmD|b>YGQyVi5V4m~-Z9ZvJb69LRyOP4NuLE}KGL_VdW&CJXu z7l%G%u2*GcEF%PSU-f++-`JS~^@YQIT0KdPfaoMN&#a4WEvry5hO5fR^I&JN3+1+t z*IH}2eb0(D*Gf}8FKr`=YPeX5i=GR$JK$JvQb@j{Nu4*jpsY$lM& zTzHM+EZT_jSPGU=GHQ*NudS^OCGf#(nP@PW=MWp%d>LZ*Vd9ce^Z8-(p+3HXCEbu5 zz0%AKX?@ucyZ7EK6jr-;-rcSz9OkV)inwPH=*<|mgQ40BTRnV^;_hSY2Bx3gJ4r9? z4-Y#ME}}NxBSgcfT*e-2QBb$yZS5>n8nl4Y8A?!+&iz`wrsx^+c86vOP7T6Xdz2-$qq5S)}-W)l1nkp z8OjMysRTc=yIb`YsjkheOH@2ZJJD6Ad%U!@^!E3*6%!&d9zzw)#LSH| zl^4hPC!vel5-LB(1v|bqe@hP+O(LWg4>!o-pH-gaB?q}%>(Y7Os+@eb>q8H0n& zk`Ii~YVIx5h}x>F+WWht#7+l(5nLRtOcUwFTpaTiqr-xHa4)nq5swR`*n_lt&1v(L zSLvP2;0S})HNH#lQ3f8~29lUXbtvlPCu?>TN~<91JqgTH+m0XM7{XIvvw>)nzl8zy z=Kyx!^nw!bxOE|Q?uXCTBgN-;rJGeQ$Xr;A`Af`KSIi|uOLmMI9Qj?G2`gS~ah~kV z2s_6s#=Ceh(IST+r>z$lw!4=Z(AuxdL2m)T=sV3{OmLd&#=Y&c!7utaYZ<(XZuDJ4 z_E}aNPWG2NhF|hDU5=Z8@WS=S<0dGrabsnLcnf{ikh}9?eheRrOqv<$A!~?~Gn+4c zlahL=Jc9mPznEiB|;dlmbcbgx>Ww*rflh_SeiLqi9-$Tg-96v0Xu;qM+?FUdnLxzZzYd|>$1^J3;pVbaH1%6GXJ8724gM%~XQp`E^PhT*tO zrNu=3{WK20+MrceW8n2I?{nuoi*5T;hRmHMS>YZf!&VpdKYF)~Z95}nE?9RITagrb z=u;#bOnj8Q?JSoah2FFiAmTXZaXP=`G&|8L!e;*=h;XG*bZJdaE|KqEO9%-m;L!ok z*Y5wlUv1pDn7ba`_v$mc2&Y9wdFZva9zk%D+a^U(x6fH9V%Y8h~ptZK1?8-q*8f!4o( zLkW{R=Y?jRa=F3>9lp98a@wZ{KJvUyS7rN4y{OD(qvqGTJJ#dP#I*#VDMH=3&;x@2 zh7SQBa9_YqVXyT;oH@}o70F=R1UUErLrcqHuNNV>uo?pGI^GAMTkygGXI^mFBo40; zz;^wHOF6{YnhymZAlHb`VXw;om@Y{~+k}AoB9Y(&u~$$y_WC;>1Rj9MduR>?%?2(m z_<*C~b9jvcsaF<$SC;`x7+~N7^cg)P_Sy;5(qUhY5ejj@E6`rxuLp3*=&;xC|Me>S bVysJNPjD+LKLCI6h9fVnER`ei_k;fdVWuTI diff --git a/test/image/baselines/zzz-automargin-title-paper.png b/test/image/baselines/zzz-automargin-title-paper.png index 94bc1b42a0ab0fcdf4c2e20e2c965ca582c998cd..5a9e78bdd84507605d2e80ded72f6f0ccf25ad88 100644 GIT binary patch literal 13986 zcmdseWmuHk_x3Ohf*>%GN)8QDg0#daT_Rlq64D_p%_zzMk|H3fq_iTTARvf>0Z2 zZ6{;h#%Ab-i@SB;eE)LFX4~?@&i1Fz7cXRZC$(?xTDPqu8b@v>Jqv~rKtJes1RSXp z-}Fr4;MZVg80N=i7!DHr+?0dCT|3EZKhv&%eWU)QZpxEJUe@Bx+#o&r7L4Eo`gYC$$!Y;wJHq0c-@5s z{%ZZZUk~y4&?|S3A8&AsD(oL_4MWeEo+&I9nfuHXvq9Zr>{2W5KG~MDvf?4(v&4$9 z7^*LuA~^#Oi%LB0pomx+W86=Y-rsCDZubB6RbXqNuP#@*A(~dS4eOro8-rBxC$bu@ z3lQ?0(b;PAu9M~B;#w&*+a-hx%$XT_;Ge?CHGjfZ%#sl>?tFc2Y4_#vC7~N1DLnb` z@bJogSM3LCy!jWsoCYg%z6!b`w=>@cj1op#1>*j!e97 zx5gq@id_OC;vPIG_T)FImJ8bI%CLQVkJw{t#m;`Xu6AH@VdQOL&qdD}ih$KZvmB1} zTerRDhLp{=Iuobrw&w~HU4-BxmeOwH1jJ_rLzb48r|b83`70dz<4WrHe3Q?c!vjXi zGoE^Ve%Vav22t~#Koz=L~lQo~7$c8=z$FfpYzZ>}yKdG@ywe9mN z3VC5$Z(g&HEha9GY}Iib1WII)PMqIAYjT>mE_PA<;eJrvqqY=Ljc<-VBeV?>{B=rF zzAINpM^X&U&6#$8*~nz=?QVD7KYO8QY-InvsBWE)so(F4CT*Jf%~qEwMVYNwVVY6j zCs(l>Cqz7^uFecrl_oDub>>9qVZhl0X*R!UPK}Md6iUjNtH|IJQdU+r^(2&`Z0()s ze${ZGvFr5r+L}0m;UaEsZo3b0Y%^URCPW#tpC4V&-Tm-@L)*)%GVbkdJfiOXfUW5~ zkSoegd*A)$xhlZ51qLm7>rTF# z3aGhlzZ~?(PoM1e_jYIc@q-9|(n zB(0)fW`9#-^+SqF<<8BN^@etnjgjBfbqjb7wIC5D?c*C}d_pg~}EPrf1Fet1XbRPEO5dPq*A5l~w|I`$BJI zGbo+U>gA?&i(TLdzl~G>K zyPke~bULn}>s&>e^zhYc&)HmQO-1Jo{@N8Xsr{Yh9=%EYrK)dUw5`d)s^4rk9@tuy zYk8_zf2;PKIq}N6m1fmWTCk#FUuHP?7heZq$olrA%>FB*&7j>`Gad7%b^ zk}5wmHuV{ZR55v38`>KapAvgAS{nD$_T>0?#qWWb z4btE&*oHh>S~2aJAPw5MGg|0}Xx#oWHr~Oe8crS9e>-m=N!@D2s!B0-^*lT*A?eYq zEXsPV_|*O{^%Rkrd)^aE(Lpj z1SHqHjo8rcsEu%&ZH6b8{h-y*^;y{RADft_X25vNbSr=3nJv&C4wL6bCdgZLljqZ( zCeUzMbf=U4nP?Vh_)VzvngN~U?+TA;tyTZ50`w*uBJeB|Gg5lKx7b*py8&)tzBF}@ zdau0w@)#G3_2=D}H%D&M^azmuY+?}%q-xqJaN2(7`q%?mbd zPp8vb2tr&kC0pN#4h~S&X)bwdZCD!)w$?J;BZH4n6WmfMd;;G8!eY0UmATzN;Opws%h;&A^}6-i`TP#NXu%C(dj|TY6qTJ+&ZSegc&Z{N5lp3nYz!Op7(5Kavt6uB|{>2jb3Iv^@V!@Vo zNsYB^6qi);F~c)ef{^tFm$&pXf!CDpw1?r1S~pN6(E9##B*G+haStlm>!V_QJOig% zMM(msyf>F7>?LO1Gq$e@V-_49?c`F_=QowwEg6gN+#@S(7Oib*B)z*yE*vygYtx=S zBeT4&ajU#Bqr@kS1GBKW(3+gr&D;*(Q23~AJlUS1&mt74*BOJ}(AB5nj~2V-XZ^N4 z{nkL3qRC*DOCICS5BwP??m*teoCdYwTVvoTBM3sw3azIX3cGg}(()?y_SWkQJ$-yN zRZx)T7QORaJ5-YjqVlaJLG zO29|@oHtujW%d@MRnB_`kcPMtM);C>dfk=xuZb?ZuoOZXxuQrbHG8ohZJ2UTgxq*Nj%#sz+VPPCwNN*>(X5{WI%(mg`y)!ZoV#x?HSk_bI8?)5+`0l6R!ChtBQ=OQQ?!G;?iXTNq6HWysJAYT215>Tc7h6KxF&TE|I5-y(DCEU>|GKCyE{<iO|Q1bHfGb7?b&jmO*I83kLHlLnEpkl;au1eA|Ahf)xnOTtJc#Y35>=bXeL{RXc zub|$*;a(@vC@s(q7@GU$+Td9F<>9OWZPj z;8jn(ulIvXWiRgO_){{tz{b{Xv{ec|re*0a+G_JMs?0yKlmydKiG;^a5FLF=V@3~; zbz(v=f1*D6RJcw8!8~}GKrVs*=u-!OPXf8hyGSgL+0mzc8#73(BM}qQu;_(^OsHDc`RFwBI=q__J;2=-ERxR+DI zihI=$0@q8|?J4+gZK%d4#ASQtVMa$spY?|8hA&1hBH%drOLe86{C#jNAF1N_-*~A| zaJ%%>@ZzW8Csia5yE*q#Tmz=M&Sre6?n2+Vk&}dOOP5jw9qlbYnY~kg^SibTnbN@6 znEmS=8joMUzP8KEWcJozh5UyZ%eYK_e*RX(b~&?#S-?bM%Jg{u5)EQ+^9OP!H9hm; zsoZDfqxYQz)XYCDy{AavF;g?2o~W^yy_EdIi#o05)}xZt^|LYk;pu4$hP4;R`=f7K z(dE|)oem^7f!RNd`*Wz7q4W7KCWM@NyavkGL(YAzU)B|Jw-VVMP9JM3U9zsI51)Hk z_aHsZL=z8wx`8Go6Z}n^gLD{8pRe|g>MWx6`ZDcK%_S~?VL0>s!Q9zY<&!vCOPt)? zSqZ$x)x(f$#okMP{_(5YK?uW0PlT7Ii^-CKQ}&EAvYk4Cj^Y*}-I9PK%HE~`Y{ zB)@6yCjakT8RwY`^-N*?|JRU#nA-40&gBEx0sx`28cX~)Q@ zU`5BbJJnx4pYES|rD#Hgu*fLo?}J_flnp2%nxDq5;%Y=9zn~FO?so6K4zlX~ekYw zqiXHR;B9((Q5?AI{WeBgkmLd2$p9S~7k3|z!_`gBX7bAC_3X=>FQnw9qs{iRo4YIt zN_+P2HBWF_G4`{8$>YEsE;4z+z?ssySsC^9W3CPwRRQ zCt1}B6S4{+RVM|4e;owB)C_NFAbsqdR3a{toE$FXX)Bs6mYovL*6|9BlCblAMg_j8 z1ATEA(MZ~CQ`)aw_+2vljT^;DeAL=Z3_F|#VlzKShlwhL)vNe6Q z@}mjTh|z?{%~b$)XrVk>y@US9uiHsZyKbb(n%1dp>uUO}4JMb?#Dq)}k}@CyP=UDagWx#{2AVk+c}zQ-e$ z0zf+D@lG`jh^r42*AHN$WP2i;xwRY=tYCdXJ|z&A8&Bjl>EU7U1V(+(IclJ+6V^rP zW+^e_VAoHzbu;`svcl>pwi}c}Hcn3{<>S89<%BbLoDF{ZKn#)jAQ#`^5~@rc>Osk@ zF(A2YRRXb5i3x?V??Z-4gq#dWRqQjxaWq*#J+i3rCx8vs5JF2{LhY!`4SC*O`TTR8 z;uHyb{Ojs zMO7%mjJJ?jImor;Ii=OmGo~tIHg>N( z&Qd_5qMmKquz=_FLC-TF3dvH+E#-T>dNC@WeC(iBUn~4OkuAB9;0U<5qnMS|2)=Yb z`DQyBb<$pl;6P{g5ZO|a z#da>7l`ObLll6t-s-BGKY!x1S(YQHF(u{yr<+^4G2}bTD&&M85La^V2y6R{u=OM+! zb8nk)u+iVsEj=idXwfgHJBZ1iQ?2rT>g>6A=9O`kve|H=c{4GqfTEKZ^t^$sq)5}lpMLirkf@D$ zjg+`dTKiHKVD{TZLl!^H?>2&x)c-EINIg_uTS8a4?qD&r>~Zaqc7Fln>`7!qk2%1D zYzP)R2*8#N81mXpR@DC;;l3!e7|gY8;4*hO)PsF@+V<+O{{|J2U?BiZJ zc5i*JYLQ1zln|NULx;Ta&EWw@s|=3T#RLM-SF?oEk6P#RaTgr^y=s*R2H;l^*LgB| zxAn(-Lc6)?b@%_hsvf1%yNUC>U!OG-qQ^Po*Ty*HPf3 zo$PMRC>Lwn$Uu&XfB5jOFuhBp;Kam4e0;pz$&)9wY8E_A_7Hu*N?XN`2!!vDo~I)z zbT|`X3Ri54?+7UT{>1zHzHRs7D+lAQ9sYGKvWCo1K`eW=lJ& zaCNj01}J}GQKxep6X+xvi<7)LIXUrhakqnlFZ&DJWkak5-4M8&lgNJz21}3lriCUG z7`kg&7~*Hyb~P)K)XXoT$ciJ>)xnWmKx9TA@U;6qc;{dOM=Y&w?NJmk4e*3rzF!-T zy7~cfjV+!g!Vt`U7&K~b6X4`AKf4dAX2_G?)2Zt=%@%w0cI|cz95Fh-CwglQsdNW> ztr&)R*{Dbt+@h^VCm)xDe4H;^(^31X4|G~2_F^5e6EQ|eu4OWa6w_h~Lt-z~9fO2L zZ%=E_(=7eaa(g@`q>cY?XFSYTwuvs_D)zsZMRhDsaK?SuWRkdcEm!0xXWS!}vL5$n zZfXKn-?|P*9E_aor_fo@LDfUizm_NX;nL4tODW|6G|SXynbksz2h?5Z4MC?~UG5M8 zUHb(S($C+Uo>x@@s&bKkTP607Yd-A@8QUI?KjGyL&; zR|@OTB=v+-MGX zjV7z}v@FW`WN$qne4mc^<1XhB1pqLzq-1&7SwC5%D3tQ3jaavW1K=?`l#VM8&>Ihj zj!=Z_DV=aB=(Gv?wP;6;%U$mmlEMD5EByvP(pm%z_46AhPN3Y*(>sO z7M}l-E*Fn>%>W1MWX#@``TBb8am%(KR87dmhZL*&Y8mKD0QQNZAD+VkxDN6l$;n~; zaJg6uNM-p*@WA6O%R^i4(#=#7gT-Dbf-s-xMFId{9!Oan9k#DJDm0?KE1Qyu8zxZY zNBc0HRvngkWfY0MlAP2Smowb}Nonm`))-1-($3V18f=iW2q4uEUwd-`5Wlhwfxk9t ziu}|3AI_8>krf5`{k3Q^UySEGUC!A;A{`j>KKmx_TffeYhDRlEq$gP@ z+M}}x2t{>LJwQKF>&H)*n}&Q(WMSK2WV@q7f-BmPb1HF}m9PRyng zWCDz_6N1S2d<@T0B0D7P)uQW0vB!N3;1b}WkP~ns1$by;(tfR1z_w>+e%g0;6v`&^ zuu_9Rq+W1z3_pz}Rthx50~D@~3u+ce6&`$(;=`f*lH><*@rH2yFu~5u!$)9E93pcS z2k{<$1~mez`?(-|>@lA47(g!%%?xu%A}b)gDCNmcqUo0N+l2gdTo#WRk^@8;{(SL& zsQ_ThPD`|Y54RfmimFg`VE0=RcnZ?>^83Gz zQ=}4YNr1*CLlJFun&*Ep_8o5+ zs+Y&jP`waGJwyXKlgYKoL>b(|5_$5KiQT|62G?Wy&z}3t3P?G~RMN2n%=*I-qwfv_ z|2_H|g?FLzh6c|SXzj>1kb!Yn{P7UY{d-9($RBaizm>GXWfW!N+w$vg8MtB3ojzF^ z#ZwEhAG5Q+?YA1Q5kdw7pu_3KfOKU{leObgF5@7}gL3u#b+DPEa-AWA3e1EJ0s!&1 z_Hx4{WgN)KgNz0u<_J8mhN4NRGxC(VFYCc9oYzIpN%eIfCm2)$U3Z|rkXudJ5?+jN z*EV3%BqK^2#(Y*3CA;>RxBvnpB9=diJ*5LN+#kz$2gtd^kLRVL@lfjeTPPyLK$IM1 z>l1QJk>4a|E0EoArJPP|L(7%_KP_Id2lJA zr~jaAId@EfCTrM9oMee|+HWa-#gke81t}s2^}L_+4e;>ehAq^OyQ~ByRP0}%U8Dg~ zTyYt>(1=gnmyW9$pUMw7s(z`dC3qMyw#f&-L2p;+V~^p^g0SVwO#4!t>;|5ZS~oCJ?+T8${fZ}z;@!qA%iySF3f@!&WhgT?g#`E6%_yS6{8BRt-h zAn$AQ?=n*@kD?i(6ca+w!3pHZ|AygXh@ON&!LK+~3Vk1yghc5ly};zQE}6QTBM z5LG|DQRh~EMqj-wqka>J?k7V+7D%NP|EzvEJnWv{ z3Se;^7nXadfJ65i5WOS+rTgAtOZQZWMWZ?vBfXpmSdA1$sy!eEieeg%7xibY2hKG>ewJ{i3;rNAF~WlOVHPD5Qt_*!3j*_1VWORq zDP~|h@a4v9-?#Rv9d;F$4}d{*044{Fv0+M(bCAOhajI-~2h@{JzOi0;@6AHG5HRTQN=}uBFO>m<5J5F@+}Gh@WJ$w%>osVV zkLPRw1pwJkq!`QdYF1)qAop&9Dh|Bk_VYGo=)e!NYL^G}jYn~enPWKunyi-6J&&xTXH0BhnQiHpff>|WbQi+C!@bn@Di3hGSYX zo58C=Qy0LMO(6&e9xECQC+vX7cM#-Dpr?@))k`2clU9hoR!sv&B-i#VTrPG6FnB5H z+>A=V3c$!^hzyw4CoiKSKlE(`r0~S_trujP^emP~ zT@p7;*lcXwCKIBAz`QA+X_XDHx1tCe1U9DgNekd$AX#GGk2~ztsgpyknI8}MS`4l+f9(e^pwYLme9%_e zq0?pO4N3{WlCJ&Q@~r%5Wdr23ox!w_H4$VBY|_-v-=c#0@~deR?(l5T=zUk#Qj-A3 z2Tt55SPr}!+)l0T{rp8!yt4f!L*W@tNxgzI08w{3#KE-2iozYBs0oCk5r_OeS`?xp zf7N!!SHNt5NBoiv3sU6LeKgI3(#7p44#=daH?PQ?Ha1{0{TBTp7CqmHDFF$cC27@GZUNf$@RR}4z=@A^(2&Iao2P;tF~F+mOl;vnP$ zLLMoNS*^f8W{TV7lHfJYE+f?;sI`*}-vrI|Jw9DttU$NK^!C`nASu z_rav^9ncqt2YZz7_Ya;b)eF&Vz|tg4jhumyqwT#Dm)xWY&wO8U8AW5>t3~)HnSG0( zWL`EKaFT~i=H`-Szdv~Zs1gdy*AJp|7kwE&!p?1@57 z{_=mG6aQBwgAU+eRp|&+>RwOr*!TG9BC}?1uiU$W2I;#q~sO3EfAvwDM2D`%#ho9 zst}m6Tvq{{n-Ts3kR0@;Us9W(iJddF@Dhrop?~NU{Q1d`rG@g`|5f6WKvgdr1^>@` zyx@l3qt=?E*mpTb!Ul8}Sd%Gz=Y1QL4;+bQHDQL*1(Z8fnO;yH0F? zDa0($_Co9dxN9c5sBMi@-K?la%bb~(Bd>PR1iVA#B>-}Ne~0I2GV%vg(JpjPnoYl} z?+o3^QUZYe>CZ7#* zUc3o?l^Wts0;gMExlcA~98wEv0+1c5wyYDnLpHDcvwCl>X5Q0xpaPM^v6;c>OZ5EmXh zLX!{q@CN{6`dB?VyJ-FD{}kd@%t+w#jdO9^cApUXaN`yX6+K?%6+Kd(=S z_^!TvH)+=yj&!={p+FDV(=$n;x{I2ewLJOUMg0?XUz z%tp%9k4UBNmdpVd829RTbIYPMSt9m{r8!@rwe|1W0!Hci49uB30AD!p2_5U9O&@K_ z<#QqEb->xxaT|&AWn0ILNZIZDP$NX7(i0*^@27k#Mj>mmQ;YF2Vq@0c+yqU0`C?}C z-TiJ4%`3p{-7_1Q1vzyTU%}{IUlEKz8vA~{|I5@p`eiieF5nT6yHE&gY6^j=(+@;*_m{RGPMez%5j51n+5tO;rcER)P`UH$7A-p2Wa2P67F&!f)&%L zCh-dKP%}eZpy2@T5HN;6FHoU3`A0+Om;lH-oZ)7A%IHR1LRr}Anjd8$M9T|vB#!9? zfPKbVsb;-D>;GxDfQn2Heq9F^FR-f@4DyY(e@g$h+nY-D#YH;BSJV<7iUI*}*}8R2 z;S8h-4oUoGB;Zv2v-nfb6TQi0)_-uu`DD4<0&ijIVrdyZfgF|S5!HpPUr(JhT;wKk zp%UbyF2(CYX79|aegbfjsdU7NDdyhUSD@hj{PNBtlG0cP^or227Yb{cuDF60zNd7( zPXIP~%*UY^SAqmN;vV+2e}+X)eK7{7;jxdmT%i%cpZh+AAQ)~@l!~!(aOC{i)O@z^ zre2)x7i55IUEhVK%*S_phJ6bY<8{A)5dlDbukD0$fEok9)xHgSPLUxPr~kQU)NA-} zP{?G$(Hs-M^bhg@0Z8xDz#Gu!-G2F=XOViZXyM|G#7bSc(svu38uy}#9$^vvpbHGn z^Tz2MsR1;smkt0zGbHttsFg0ZSPItB@TBL}$-gKF@LPcEX|-7}11x0V75UnC1s0ql zcRii~)8DDB8N@@3Mw!VPTOvA7*}}HyJ>U8C{=nSxXnNtbFB!D zc^PbD2?)rE>;XL=;4TQ?037wmI#Q?WC?4}Q_PQpZ$Zf23$CGXhGo>>dUR|n zRE~3!k)VI|F!6p=u?7>@mbH^mqdhF%%padLSpnF4ynOkY5dGT4cKu}(bJ*z0dAKXl zrv^YcaBVdm;TSobPYne~EV1qX42SOz!sKZ4to$hNqaCx{%9$ZHb+|RUVgig%uoG~G zlgoFUxM8s%G|@BaVBQ{R0I;9$Pg*O{`vW(2x^UZen{$Awd@0fhoie4XUGBRio^U*0Te6{hlVBSo`hzYN3~yOf*k|iwWB*k9}aMQJP2BN z<|ERHOQLv>=(zgJ=&{St7w`P}VhHvxJ9uMcqbRo4b}0Ci;Sw}&wxY#50>Le#|C|r! z)9OI}Gq_rFpsr_)Ayx8eY~@u1Ah1$*E=Yk<^V$-)-+44rIMAcskoPX`Kvc{b2ULbG zMOY#jC723ALySWg4#Jo^vX+EQZ6P+9Y&en}E=TTG(^+mV#hD+5@78y>gq%Q*;Me}g zW6-ZdLi*N3U#ZHj$>PI%gUV57b}g15d0(1jNgG!Kx6Q^4ISitUG{&VHNdf7J9W*YRZMsHB%6 z9;tc)T-iCW@CEKtI@Bo;g}4`93A_~*7Z>+5NI`;kYg_sttqd57jai$M^Yhlg-OEby zKv;UwD%naUH5abkuLSv+wl=@9Fqap13CHm^KOc%wI**~EZ3Ilk3OfTqw^Hp z7sPVJUH1p9@*KE)N5yNT6t6Fg`|jO4BfO=IJB*!G`oEsKzUlM6l6Av-mGa_g8LFQt zDfSjHv>nGKbz#e&?JS$&F|JSD?uu`+7)yhc}6@#xoDSp%XjQnFBEcDRKF-YXt18icU3+HNVgZGb_{fW-x=#OEG%6WmstKm5hjxh` z>i&(%ZMKy)%vgNCNTi!Y&X^wqypIsU469IqE)X0foh{~ka%ZQOin8*PrY1Q9P<=1&x8u0lSCQ9DP_tmijaAprwT`g3<(KI z<|#u7ndf)khU)n~&u^{YdjEOX(poug_ul*3*YNp#u8ZGgH3c#fdJ-56My8}Fs|kY< zgn)m%$iv{1nX>U37z_%w#p@#~h>ini;6Jv%RI*VdapoI6)#^=uG7`(eAA?#SVX-h>DY4Em~J8+wST zVSC&qwfikK0TMw6M|#1KUS22RDBqKIUyyrG!mEW~a5VTD@`WKrkPO0b0u+n@<%PLL z20aZ!in79RqBV~L_uh*}86Se4hQWi77<5p+`AO($7S@qbQbz*+MpcmaF$; zT4OIL_>iAS6texCzO&UkxE+~`U%xTh$_V%Kz*Q`LHWKvQc2`zXN(kpvmqyob@sQ4X zv4qUsJ6_d7! z-mTg&QC3z?9NhdSg7S6Pd0%tk3X<)jseHCcJZ5!>^U^bnj1PIrR7YBtV^dpOT8VA< zr|qo`zq0Qi6Atyee$QF#%Jb+F>mJrTdYzn} z62=Z>w}y9H%C8K#VFQ<@#a@AJRV_{?1yeEihO0{`xvl(6x!w{TIyjp)dwo0wMYlR~*J`^{}u- z9g_ac6|d-DlLM9Iy1305tfyAP+lCj>(aH)zj0y4Ei)j&YacUIeiyAUVyl@p2g zN<-KX1w~)@H0es`#6kvBTeMKX@{b-ZPB`sgQJaL(_t{m^wdZ7rk!prZC0Y+K7rzYh z5Nc{@ND)ymX}3wNYMmMUxYmI+A>Fxn$=O-B|4xVMVhh%zgR1dd+r=b_K<6J{+Q0rV z+gXoVA8QdY@_5y{b8cD1Y(1=GfZuaXMdjf6jM5?&ct7=6F&)20?DU5BycYwp?lJ<%rqbNeBgA9Cy^}*vDi~(XZAz-s z6&|^XU;E~&9vV-VZ|$*^WtQQjU(C+Vz6hN7O}((>YBj}V|J}i^)2MCq+lE(Ho2b|& zO;`KY=!Yzu-oMvuJG)AsY3mmdkOU%K2JOsm5u8JWyO*8dF2;hJ<5b+PjZa?FI-@Q% ze@AJ_=II-?cr2H=+p>0ix{SzXl&Py7jAi&DeE8=IF0OJMmbIbJQ)unvE^6Im4vQs+}$D`<51+_$Mx|zU;M0i0uf^ z@q&Endt&~QkIeAy23y2@n}ciWifDH=$Y*SS1YG-ChBdQ&lb^dVralGImS;94ELi>- zxB9G(8F)gH8~;WDT|ptC#$-~Md~Z04?_OqLkGH(Kvm3P`#mSIce$QV^AS|vA(qEjO z#+uIyQV)LUEyL#Byr*}1XLCYw>ZzWo#=^`dcQ`ijVu|4O56|e~E+D+S($;wBJW8wE zsPW4sc^TZK_<8LpqP#W{(>RY|O2zJ6ldhIRyenC({wuh-fw#PP!W&?|MOw**VM~v- z@u)7`A!7CVd)}p>I zn3V2xy2gof=4uyNN3EnjRIS%EG$)3mklkY%+~jVY@Wx9i}0ZgD!e%vgYc#P%QEqb8%y8yWYA9cqa_``J&7J54#cc-yzek} zFUqkUW?=W^e1wg3>hEK)U=Q<0rAD-T1j_aXW(zkY&s*JieKj}8Ke% zZ#Fd^8WuwccaUj&Vb6kcbiKBrI78wc?=rV3QN{XRM1}TH+xG?4Cp)?8NN=<9aS_LD z;QBn(oh#xfyv?s#Q;*!Y(jzfUk}E^!@8h}UlQ65#Tuud~6|C|JNt9JTBs!`tRUpV< zD18#e^lo0TBiE$7^L+P`I547Q^AI-+USsffGvAG`0r8UBo`I3qXh-@Auc@qqHSz{f zqgH1%;lqw&9z}}xikk)>ITT^gkg0RhF{@H6lCop!SM(Q;4oz`*sHCn(_-1uOy$O3G&@(B@Q7-i2s`-4QPa7`YM$Y2(z4^rGTw7~z zI=|7mX^B;p%1!s?86Vu^RSf#DnRqC*Z@ACEn|Apk%&OJ}B3=1rs$2{SDQQ=&t6fRs|CuVexlw8OZh?85gq@S!x<4Z?IhifJ z#G=Gv)AFK3yn3elhwf|m3a^3>DKPw5V;P-ly~nf3PiH?G$)%L|@7%QTT(_G}EB@K3 zr=!Ep5mIE;rWruXHy7Y-Xtb;(uzlQcTTXiWp`0Yawt*SGX62D_m*Bwln=*R3a+e~ z+*$9FQ+^Vh^gL<(V`c3pu2uzQrt$Id#HzEzxL330;W}QJtL?xAfJ02UuemW5eg4)_ zZ}KivQ9ez$_($&dbcK!2x*Ev3^MlX6Pyv@cx4S!s`nyKM+|hA#FGsJ@+(;HUpGDMi ztS5#ly373+0Zw$3;hd2ax-e(&QitcoJ?GEzx!drIS1u*Z-b*&?_h({|4B5=!cA|ZN zsTpN(w1u1yxE*kT<+a1)Q6GydU?;e_^%(lk6<=sM9-9#7)>(!DKdT>$20q=p>%EGj z?mYZNHtnhR7snzW)(w97{*faz^6G|-qHDRl$YTt>9Ca@b23@$d_hPbze#h(xrhC_k zXsDwyXc|0I8Cp(+n_mb*K;ibck9W32DbP2YiDLppm|v>sNZshoJkLij8FKSSKTGyw z4BC9yzw#*vq_|zXg?x1nj(Cxlkp(YKntZa}oNYSu^y1eNwIk)nQHoz0Eo={gxE$P# zz_FwF7Xi^L^$Hqno25Fp1MaQ&^ z*k);mLJ6x9z`2@XSy+xzN6Id*{~d7BbsB6%-QTj9JxSz3FVRQJi+K=&Wc2r`7@Fb3 zFxl38@W3q?t0#B9E481|I?C7R0n;E8xYsk_UPW{Xe|^P|o)V8bgc==nk2sgesd{`s z>s{ESF&Y&sD6S6@ll>{^!Ow^qiU!B-nN%SxEq6YnTn&Nm{R^A{UXOtvx~2g?>{S6_ zisdCvcBNM0g3WJJR?i3JE(jd?FA!OuWU%!?&}{)f zcduj(;Ym^yg@vYN_sNI8N}<5LVxOF!0Y5$rU1lXZWa5y*R05rI1{alwsKnh%X3?Ue zIud-VZ7ZIuVsbYyxms$yg@+p5=D_El12+CJ2nkkzQ z*C-6$G;SM)DW!=^oN^%$Gu2Iyrw=c3{rDubk~`t~H-v0pBMU0XL(Xp^PR%PgtYD#^|Mg z**H}#?htAssL48vi>hpq1yzO+$BP5oU4fiUkl6bWDn64|?o+9bqoJV3mAXSHCn_Jz zollEb_`udOcDF{^7#g-9=%n+O1T)4(6{%4E*{=}h4T@lmmnuI6uF)APa|~o~gOaT? zEk;#7s}tAH!{)8ZmeYDSO|Gh6lm>T?#0fhAvB7Qv4IE098wI>=?zKCQ|5Zg-Bg2c; zgJT4~Vtz7cF&o!>TCh89Xm?t~S8FdcSTBEdr|~-G&-z@DH_*L(BNn3&2qND+AT|(< z>M@0!1iqUoZ>;QlvaM<<9c)V-%F%=fLVV6c*2N_}B5>N7nI41!I9}gpUE!@UTP2bzkt{@lUo@rs8W^ zW}y7{n##zlZ3UV%a#WC&!}6EE!_rFBWU z3jF)H-?h zMaohrwCUmiyd=dT7jj-Hs#kjW(pDKNZuTYFXMGc#E#3BIZTA*ug>&=sQ``_6FuZo^ z)G00&7Tn0lNU}3!htt|owrpyM1w0}vvTqRWmDHvfUS~`FK#F;sELnJ2o87fZdsN` z`Pyq2yk-Sy|1J{1y+6r=FGeKkwdK0z@`Ps7#K=Sw00-ay=55IK-`T_Aa#@yjkF2DV zs?8KV2zz?-hlEh6+1u_h2n|t1HcUCv0SLog>!$f4Kto|E2;}>}_iCvF>VqiuK8^-L zXTkmF({&HRnGDM22P{>ey0NrIOHiEuB^>2)faH5gFr7+_@OGslXHYsL_jzM|7-scp z-x>qSV5iy3Wfrt z2qA6?vETe|LQR+RiUGniMR3%GVx?sEp6$a2HM@>Fl2?^N7i7Db>1()K)Wk$k9^v){ zi{3Kk0Bo;OI!710MJ|w=_rNlfa=2Tt5v?w0(a>|*@)VQ2q(wm>G4bC1a|l;ew1RSL zN2d+}4@@9S&+Ta(gW3TydR7ybGF1(+X01xL5S?C%j*2BWC>2o4oprdC$@^9wRFJ|| zfj~VZ zsYC#U6sih=dy_kBYcFBnr;`nHpl&KG&rM>QF=~dB76A~*k$*<70V<#crI5(raFh_- z?!{~GG}z`HB;Fry5C7TxMwjiNkXYWe&s;1b!WB6 zM`MX%h!J>PpsE18fPgzv59H=@tUpH7|Ei&>S5QO*540JpJC9v|QnrwS^-lablYBX- zQ}gpJ8z7^A%NEIgoLm-8n3N%gNF=^0e(f)ZZGrdvPkeJS?bqz^>s!1^)Pe2~tdiUu7U}?-BS8 z5)5PK%qc_Rc4nIYxO00F$itgQ7hebHQa42mi*vVfy5*{B0RK)2`s3fnlpz1!#q=N? zB%CK+rU&fnoxuyQu7b2osbM}JG6=#VAo+-oq@=bz^VUmGAejR1!J;Y%(4N2?}@K$ zpTg{_1pec^T@c0vuX!+X)@kTZM8_#cKmpJ2@XwLcRX`S7)h^j}u_IaShs2uWFcFYK z#en#o!=z8Z&uiX}OU)(GC-60>{F=3Bto2`cL>HY^%AD%*eFe4CXUFA#b!14p=b>;q z6i2*Ie*0B|7G&jzZR3EG0-OSB zE+I~oo$h2WC?0{iDrh}b$O6Tpr7|5oKM_F$U2^yA-BKZc~y-w>8`Xwo@_Kt}x|3u$~ z30wwpmHpWRn_eP~zyBTC;_hq}I8uEj#9bmD&<92y5Ls4$QCoevOn9)B=d=U)L-BVO zKPXT%$f&$%Q)uQ`x0HZsa5^AmIa@fQYsBua-?_Xjc=-h419@KL1Pn&20nGxi4w=0w zX+1>#f&Rv4zaeWW%rh_kMoY(plA9HLH+-r+qf zR+bQW-mJ5#_E@ejrLWxrr0VTr0z7S;n30rY{9sC=qW%dykFuo8%93EF8Rz{Avh2Vd z{P2S@;lJqZ!|q}aDhJ! z0X2U8-MJ%LBtV-5U`xOTz>QmKaQs{j$^m)H7GT5Os$1tm3W%yt+fQu`HV28sCIfNn z`o;kvI0_Q>X6%S@UlPXLPXHmW91`+~t6FHHGOf2C!}rL_Zrp2T9Yat_4BjgB!qgU@gT8g6pDAw!ON;iMJs3ZPub-0I_UVFcCbg1OH=K**zk zguG?LRsvsjJC|;M)~P)~j)4s04M3jL8(PFj#EZ%q$nz`!ut=W&%zV*7H&Bekzq#}M z?>r#*MgZ}Ni&YP3ce!&yyWb>!F(rU!RPAgoeWA%?PE;@(P}%Hz2&iD~jYY54Qhs`5 zo$x6I9%(QF(KCRA7X+RX*7L?p|J(p%f0`@{qIV>_iJ|Y-Az+XmPd&)M`&Se4mCyKq z?O$Np$7!GHsxyLI$-u0|b+?m$-u|vt9@WTM`RzcZ>GWg_8_?a-yaK3R5I+)GCm?3T zAdN0PbKaB~?(pQau&_5qV)`5r`gRbFLg*YetPP-i4l+VKQNCe06y$9N^17iRxT9CuY1-1^8gSMFMOgWgrM-A!!<-> z;65tWhNc)o^e;defpn8T!9)crztmDVL|gW4W+?}PY||j`3i&_#iJs2o~BfdL@9J!R!+N; zP}sYpo1Fr$<-(l^0k{mN{C(s~R>;(q!tu)d#-HfrMj+N~^Z+16_Aj@bkjdOr4Efj& z2#mcjr}1Y!4ywJY-6qB!Fm2FFdBqO;DOBE==&-!`4PgUx-pqyEPmbqd0urqX=TEwR z+AaClV2Q1%(m*yEIqu7=dhw8-pxNk(RU!mSfO=!Na6NQ{|MaKzVI_$|n5crcoZmk126bLpBDnQQyiwm-YciH=6Rz;d7uw40Y6kw7zrSU+5*XW1z zY4LlcDv|t5iOql(ydnNuZk<&GiYAbUM2O&;v2^3Ay)8S#^R8K6RjuI*00`B{%w4DQ(*I<5~#dUGKvaU@$TFk%B z9w@eDV8u{&UrI%-UqT*(?Q9UQ5XpwTi<(_mtYR$gDMGW9Cde0$pl1 z@Z?+2l*&<}H2OBcw(MCTL<6C1P|;!_!K-GFW3X_?+oDN>4b+efTV<8eo?pa(m)aln z!~*jMB6hX&f)Nn)s=xL-DTx68>~9c&NPxdoo4Qx;i#)<8H}lv4k`CAfP;U&KyPY(S zdZiZu^-(Rl#MT_tI=a1LA6yK?FyQuvW*|Cwxe8qE=Q`DwoWA{uB*OWeAGBJ$E4+ z0%I>OaMZp6fk#IGc?Pg5u?0!it~d6>hePWDhzD5A-bg475OjK)0|P(=%a1!-aY4w# zQw)-Iwe$$BftdFWq&a=28ADF`wx%gyeYK{ZUUDt{Wzq8{z)94a-ZeUlK~C<1b*F;p ztYmqKWdFBWs*}{;B~?K;gbH-A4$_D&nmNMs<%=%B?;Q37S?ryI$bxR3BQ>A3rF(Vj zH6>8^KbXd-r_h}?&|nLHoD$j=Ge~@=(-v7rDcs9oj<8^OnnWW2cs-x9@a;($yo?`>zle2XT}N%oD&5Sa&qh3ZZptz8qFd zFM&$y@AseikBr#cGu(Z*z!&TZwQc|)S%Kz8tRO^tj%w+LezV=&o<0i9aLHs%m?rLG zS}Rb90j4{-{n~(c8QjCN!FhwDCsCZ8Kd=ueeedfEy#DqS#6lfsX$7bxz$Z_ZS=HN7 z`}GC@`2z}qLIeW`97%rX>Tk&*15ydLK+k+7X?B8mW7cGw8WU-E!Z7xpLmrPmB&+26q;aV4g^p zS&I^YTt*5K!Jsd4tnam>R7S@TDVu~u+@5||+21Jte$gu*lb;?lRh|LbS-8(28o}6K^Q5 z8K9p&eH!tMYbE>$9=$_KY54yAdoFHn;`kxK`Ek&mE3oimt8dU~oxAhqu0DNQv*r4U|HU;#ldlXw?i@? z$bxjk)~hb_skh4|8(iq$a|u{&9k4D@T#xy#Q}qcPCzB5aIryK;YQ*k#Wv>vTOYOT} z&;~MF^S~&foDSvG{j=Ktn%-A;Ab@a!R3S7U^kPd_-Z6t?{yiK~)|9!RC$cagdTHVF zEQ?34KM*LLZ9U(#46}}=|RY@>e@bD z{f)+A-W=%GLJbGdQu@;aIu%(r0|!<3%N%HW{vHO=D;ASvY}?N=%e7D)`BLUsSh^*R z{(AYd0dn7dP{YU{x(sHCaxJ+~0LX6ZQoQk$%>$L^CIt)%au92omQ?lH$b)mh+ z;W^o1^j9uhH<~@zZUN?~V`c)+09Nq6-5(mZ{>1=fHUDmk_9XsUc8{Oc8f>KX*FH@W z#E#!JwWk0^ySb0BA+P$LE(V&J47v%s62xw%VeE1&qC|{5HXZGiMhBj|U3B=*H~y3K zS*4y-UX2tD6MMize(_l5>=6JaA<^|c3{pmjL*zSx#GW%8bOQCm5Gu%PBb-)?rE3T#n zxc`eV$9$8aTg2k|*VAa^Znu5>DF~FqWtc3HkM1l7bw`+pL=h!9a<~R2zHCo*KjL(Cg2>nhv)*~BIQ-rSn=m4`3_(rQK zJ;nW9>iH3gIMM$_9Q<$aM<*vQv7i*b*kQdXLGvI;w{8!ANTEwLx=iPHrx}2hF0V!H z7tm1)nB7GNAZ`kyU+aTGJ%YCSRFp57qEikuxpCt?(3bY4BQUvf?i3t#B2F_l#vF8n z0qnU7iZ0J55I1N1;;ZgGzr8oVk->M~A5gRnXEpMou;Y*heZK}eI;3}kM^|rCH|mDQbi;8Nr>GKsEJ9! zu=aZH9#g`TsNQtO9OOUwbl{ak30_ZpF^@$;|ot744)8^l~OOwJ3FoW%B0>g?m zm`Nr{Cag~3W}Dz?|GJs+L;rL2nna-gHuh!dGIi5_E~rPKrz@^P<12ge6a=VQLTCa3&?#@=?KBZ`Au?I}BUSBuj)sI8Ys$2xmRfB=-XJMXa1HVmc@ z>wsJu14c4-lS6$rU7|SI!;Y9gDJJxX zHAr!=0EX<=$Mvm^d0KBI1mDh*RtfPnWbv2%PICxn{muXgVf&V*#A)lykA>k=(vx4{ zR~xfRNKE_1Lbunq5+K2Du+^gC)7rvB7czL~O1t{Y#KZ>=s?jCZl)VYD>rEco1%-v0 zTQ)sZ^RiS=_|5Q_z~o)$8z)=8Uzw?3R8ckyv+cGjv)-C%QbNAEezU1~B$vQ~lPciR z+PBo`$=WDB_H_z8m3CH(^3XaBA*0`S@K;4Mavd4B7?r-Mn`P+C7>V3T^TAG~+3<7K zA^<{mJ8=boM1F|m%3mc>DZ?CV$`hVRd$%KcrG4tQ4pmOvrpqNW8@wqRjM(IH5$!u2 zJrAnBaAQl;b>pLh^7oKS&rP)E#3^vLgmB8g1`=(HF~?L5432}p5zugVui(u%2F5cQ zg~9aL|NUI(fspk-fbjp_pz8m>4TYi_cMdId1yWrhJ;Dn9-VCNBrzV>#edWRb0Z6Ol ANdN!< From ad7c6f094a08a522c683b7f967f43f48f1e54c20 Mon Sep 17 00:00:00 2001 From: hannahker Date: Wed, 15 Mar 2023 09:25:42 -0700 Subject: [PATCH 59/59] Add draftlog --- draftlogs/6428_add.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 draftlogs/6428_add.md diff --git a/draftlogs/6428_add.md b/draftlogs/6428_add.md new file mode 100644 index 00000000000..be70d5535e2 --- /dev/null +++ b/draftlogs/6428_add.md @@ -0,0 +1 @@ + - Add `title.automargin` to enable automatic margining for both container and paper referenced titles [[#6428](https://github.com/plotly/plotly.js/pull/6428)], with thanks to [Gamma Technologies](https://www.gtisoft.com/) for sponsoring the related development.