From 282c85827a70bc80c1619299f95f0959b492505c Mon Sep 17 00:00:00 2001 From: Jukka Kurkela Date: Thu, 18 Mar 2021 13:12:43 +0200 Subject: [PATCH] Re-enable oversized boxes (#8662) --- src/core/core.layouts.js | 30 ++++++------- .../plugin.legend/maxWidth/infinity.js | 42 ++++++++++++++++++ .../plugin.legend/maxWidth/infinity.png | Bin 0 -> 3179 bytes .../plugin.legend/maxWidth/undefined.js | 41 +++++++++++++++++ .../plugin.legend/maxWidth/undefined.png | Bin 0 -> 2648 bytes test/fixtures/plugin.legend/maxWidth/value.js | 42 ++++++++++++++++++ .../fixtures/plugin.legend/maxWidth/value.png | Bin 0 -> 3063 bytes 7 files changed, 138 insertions(+), 17 deletions(-) create mode 100644 test/fixtures/plugin.legend/maxWidth/infinity.js create mode 100644 test/fixtures/plugin.legend/maxWidth/infinity.png create mode 100644 test/fixtures/plugin.legend/maxWidth/undefined.js create mode 100644 test/fixtures/plugin.legend/maxWidth/undefined.png create mode 100644 test/fixtures/plugin.legend/maxWidth/value.js create mode 100644 test/fixtures/plugin.legend/maxWidth/value.png diff --git a/src/core/core.layouts.js b/src/core/core.layouts.js index 006521251..5b8ef42e5 100644 --- a/src/core/core.layouts.js +++ b/src/core/core.layouts.js @@ -101,7 +101,7 @@ function updateDims(chartArea, params, layout) { // this layout was already counted for, lets first reduce old size chartArea[layout.pos] -= layout.size; } - layout.size = layout.horizontal ? Math.min(layout.height, box.height) : Math.min(layout.width, box.width); + layout.size = layout.horizontal ? box.height : box.width; chartArea[layout.pos] += layout.size; if (box.getPadding) { @@ -110,13 +110,10 @@ function updateDims(chartArea, params, layout) { const newWidth = Math.max(0, params.outerWidth - getCombinedMax(maxPadding, chartArea, 'left', 'right')); const newHeight = Math.max(0, params.outerHeight - getCombinedMax(maxPadding, chartArea, 'top', 'bottom')); - const widthChanged = newWidth !== chartArea.w; const heightChanged = newHeight !== chartArea.h; - if (widthChanged || heightChanged) { - chartArea.w = newWidth; - chartArea.h = newHeight; - } + chartArea.w = newWidth; + chartArea.h = newHeight; // return booleans on the changes per direction return layout.horizontal @@ -158,7 +155,7 @@ function fitBoxes(boxes, chartArea, params) { const refitBoxes = []; let i, ilen, layout, box, refit, changed; - for (i = 0, ilen = boxes.length; i < ilen; ++i) { + for (i = 0, ilen = boxes.length, refit = 0; i < ilen; ++i) { layout = boxes[i]; box = layout.box; @@ -168,21 +165,20 @@ function fitBoxes(boxes, chartArea, params) { getMargins(layout.horizontal, chartArea) ); const {same, other} = updateDims(chartArea, params, layout); - if (same && refitBoxes.length) { - // Dimensions changed and there were non full width boxes before this - // -> we have to refit those - refit = true; - } - if (other) { - // Chart area changed in the opposite direction - changed = true; - } + + // Dimensions changed and there were non full width boxes before this + // -> we have to refit those + refit |= same && refitBoxes.length; + + // Chart area changed in the opposite direction + changed = changed || other; + if (!box.fullSize) { // fullSize boxes don't need to be re-fitted in any case refitBoxes.push(layout); } } - return refit ? fitBoxes(refitBoxes, chartArea, params) || changed : changed; + return refit && fitBoxes(refitBoxes, chartArea, params) || changed; } function placeBoxes(boxes, chartArea, params) { diff --git a/test/fixtures/plugin.legend/maxWidth/infinity.js b/test/fixtures/plugin.legend/maxWidth/infinity.js new file mode 100644 index 000000000..315b5a648 --- /dev/null +++ b/test/fixtures/plugin.legend/maxWidth/infinity.js @@ -0,0 +1,42 @@ +module.exports = { + config: { + type: 'line', + data: { + labels: ['Red', 'Blue', 'Yellow', 'Green', 'Purple', 'Orange'], + datasets: [ + { + label: '# of Votes', + data: [12, 19, 3, 5, 2, 3], + borderWidth: 1 + }, + { + label: '# of Points', + data: [7, 11, 5, 8, 3, 7], + borderWidth: 1 + } + ] + }, + options: { + scales: { + x: {display: false}, + y: {display: false} + }, + plugins: { + title: false, + tooltip: false, + filler: false, + legend: { + position: 'left', + maxWidth: Infinity + } + } + } + }, + options: { + spriteText: true, + canvas: { + width: 150, + height: 75 + } + } +}; diff --git a/test/fixtures/plugin.legend/maxWidth/infinity.png b/test/fixtures/plugin.legend/maxWidth/infinity.png new file mode 100644 index 0000000000000000000000000000000000000000..9a0a9a28938e92535a75602b7506a7794b641a22 GIT binary patch literal 3179 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 Rlf3`{002ovPDHLkV1jsM4nqI{ literal 0 Hc-jL100001 diff --git a/test/fixtures/plugin.legend/maxWidth/undefined.js b/test/fixtures/plugin.legend/maxWidth/undefined.js new file mode 100644 index 000000000..bd488b190 --- /dev/null +++ b/test/fixtures/plugin.legend/maxWidth/undefined.js @@ -0,0 +1,41 @@ +module.exports = { + config: { + type: 'line', + data: { + labels: ['Red', 'Blue', 'Yellow', 'Green', 'Purple', 'Orange'], + datasets: [ + { + label: '# of Votes', + data: [12, 19, 3, 5, 2, 3], + borderWidth: 1 + }, + { + label: '# of Points', + data: [7, 11, 5, 8, 3, 7], + borderWidth: 1 + } + ] + }, + options: { + scales: { + x: {display: false}, + y: {display: false} + }, + plugins: { + title: false, + tooltip: false, + filler: false, + legend: { + position: 'left', + } + } + } + }, + options: { + spriteText: true, + canvas: { + width: 150, + height: 75 + } + } +}; diff --git a/test/fixtures/plugin.legend/maxWidth/undefined.png b/test/fixtures/plugin.legend/maxWidth/undefined.png new file mode 100644 index 0000000000000000000000000000000000000000..858ff0e3f52858e8fb36e6f3f60accb1aa759d11 GIT binary patch literal 2648 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