From 452049eaf5297a866c029a8b20ac03cc31b40d3f Mon Sep 17 00:00:00 2001 From: Mojtaba Samimi Date: Fri, 23 Sep 2022 10:52:21 -0400 Subject: [PATCH 1/6] fix arg name - first arg is d not trace --- src/components/legend/draw.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/legend/draw.js b/src/components/legend/draw.js index 11f81d2185c..0d900564c9c 100644 --- a/src/components/legend/draw.js +++ b/src/components/legend/draw.js @@ -351,8 +351,8 @@ function _draw(gd, legendObj) { }], gd); } -function getTraceWidth(trace, legendObj, textGap) { - var legendItem = trace[0]; +function getTraceWidth(d, legendObj, textGap) { + var legendItem = d[0]; var legendWidth = legendItem.width; var traceLegendWidth = legendItem.trace.legendwidth || legendObj.entrywidth; From 42f4cde2cfb64cb24f631d1c98d5c9773e47ac14 Mon Sep 17 00:00:00 2001 From: Mojtaba Samimi Date: Fri, 23 Sep 2022 10:56:44 -0400 Subject: [PATCH 2/6] simplify and fix case of fraction when zero --- src/components/legend/draw.js | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/src/components/legend/draw.js b/src/components/legend/draw.js index 0d900564c9c..430828801ee 100644 --- a/src/components/legend/draw.js +++ b/src/components/legend/draw.js @@ -354,18 +354,13 @@ function _draw(gd, legendObj) { function getTraceWidth(d, legendObj, textGap) { var legendItem = d[0]; var legendWidth = legendItem.width; + var mode = legendObj.entrywidthmode; var traceLegendWidth = legendItem.trace.legendwidth || legendObj.entrywidth; - if(traceLegendWidth) { - if(legendObj.entrywidthmode === 'pixels') { - return traceLegendWidth + textGap; - } else { - return legendObj._maxWidth * traceLegendWidth; - } - } + if(mode === 'fraction') return legendObj._maxWidth * traceLegendWidth; - return legendWidth + textGap; + return textGap + (traceLegendWidth || legendWidth); } function clickOrDoubleClick(gd, legend, legendItem, numClicks, evt) { From cbedb420512a73a7a6195d82185ed2ad985b6fc9 Mon Sep 17 00:00:00 2001 From: Mojtaba Samimi Date: Fri, 23 Sep 2022 11:05:45 -0400 Subject: [PATCH 3/6] speed up fraction checks --- src/components/legend/draw.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/components/legend/draw.js b/src/components/legend/draw.js index 430828801ee..abbced80002 100644 --- a/src/components/legend/draw.js +++ b/src/components/legend/draw.js @@ -636,6 +636,7 @@ function computeLegendDimensions(gd, groups, traces, legendObj) { var isVertical = helpers.isVertical(legendObj); var isGrouped = helpers.isGrouped(legendObj); + var isFraction = legendObj.entrywidthmode === 'fraction'; var bw = legendObj.borderwidth; var bw2 = 2 * bw; @@ -767,7 +768,7 @@ function computeLegendDimensions(gd, groups, traces, legendObj) { var w = getTraceWidth(d, legendObj, textGap, isGrouped); var next = (oneRowLegend ? w : maxItemWidth); - if(legendObj.entrywidthmode !== 'fraction') { + if(!isFraction) { next += itemGap; } @@ -826,7 +827,7 @@ function computeLegendDimensions(gd, groups, traces, legendObj) { traceWidth = legendGroupWidths[legendgroup]; } var w = isEditable ? textGap : (toggleRectWidth || traceWidth); - if(!isVertical && legendObj.entrywidthmode !== 'fraction') { + if(!isVertical && !isFraction) { w += itemGap / 2; } Drawing.setRect(traceToggle, 0, -h / 2, w, h); From f8e3ec398aea886cd8ceae483211b2b097ca1299 Mon Sep 17 00:00:00 2001 From: Mojtaba Samimi Date: Fri, 23 Sep 2022 11:25:00 -0400 Subject: [PATCH 4/6] use object not array to extend layout in tests --- test/jasmine/tests/legend_test.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/jasmine/tests/legend_test.js b/test/jasmine/tests/legend_test.js index 2a68e6b753a..490eb5a7030 100644 --- a/test/jasmine/tests/legend_test.js +++ b/test/jasmine/tests/legend_test.js @@ -2393,7 +2393,7 @@ describe('legend with custom legendwidth', function() { }); it('should change width when legend has entrywidth', function(done) { - var extendedLayout = Lib.extendDeep([], layout); + var extendedLayout = Lib.extendDeep({}, layout); var width = 50; extendedLayout.legend.entrywidth = width; @@ -2421,7 +2421,7 @@ describe('legend with custom legendwidth', function() { }); it('should change width when legend has entrywidth and entrywidthmode is fraction', function(done) { - var extendedLayout = Lib.extendDeep([], layout); + var extendedLayout = Lib.extendDeep({}, layout); extendedLayout.legend.entrywidthmode = 'fraction'; extendedLayout.legend.entrywidth = 0.3; From fa71bbf606c29ae1cd3d2f835ac57aaef50596bd Mon Sep 17 00:00:00 2001 From: Mojtaba Samimi Date: Fri, 23 Sep 2022 11:35:59 -0400 Subject: [PATCH 5/6] update description --- src/components/legend/attributes.js | 6 +++++- test/plot-schema.json | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/components/legend/attributes.js b/src/components/legend/attributes.js index f0a94879862..3ef9b701e98 100644 --- a/src/components/legend/attributes.js +++ b/src/components/legend/attributes.js @@ -78,7 +78,11 @@ module.exports = { valType: 'number', min: 0, editType: 'legend', - description: 'Sets the width (in px or fraction) of the legend.', + description: [ + 'Sets the width (in px or fraction) of the legend.', + 'Use 0 to size the entry based on the text width,', + 'when `entrywidthmode` is set to *pixels*.' + ].join(' ') }, entrywidthmode: { valType: 'enumerated', diff --git a/test/plot-schema.json b/test/plot-schema.json index 36b678b6d30..dbe239cd99d 100644 --- a/test/plot-schema.json +++ b/test/plot-schema.json @@ -2756,7 +2756,7 @@ }, "editType": "legend", "entrywidth": { - "description": "Sets the width (in px or fraction) of the legend.", + "description": "Sets the width (in px or fraction) of the legend. Use 0 to size the entry based on the text width, when `entrywidthmode` is set to *pixels*.", "editType": "legend", "min": 0, "valType": "number" From 8a926aad5a90e91a9ca97eb40f8f4173f2aa1920 Mon Sep 17 00:00:00 2001 From: Mojtaba Samimi Date: Fri, 23 Sep 2022 11:58:05 -0400 Subject: [PATCH 6/6] draft log --- draftlogs/6324_add.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 draftlogs/6324_add.md diff --git a/draftlogs/6324_add.md b/draftlogs/6324_add.md new file mode 100644 index 00000000000..21cd51f555d --- /dev/null +++ b/draftlogs/6324_add.md @@ -0,0 +1 @@ + - Add `entrywidth` and `entrywidthmode` to legend [[#6202](https://github.com/plotly/plotly.js/pull/6202), [#6324](https://github.com/plotly/plotly.js/pull/6324)]