From 89075d22d8a748462a6d040f908976d5ea335b6b Mon Sep 17 00:00:00 2001 From: stockiNail Date: Sat, 17 Sep 2022 15:31:09 +0200 Subject: [PATCH 1/6] Add overflow option to labels configuration --- src/element.js | 61 +++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 50 insertions(+), 11 deletions(-) diff --git a/src/element.js b/src/element.js index df26557..82b5efb 100644 --- a/src/element.js +++ b/src/element.js @@ -1,6 +1,8 @@ import {Element} from 'chart.js'; import {toFont, isArray, isObject} from 'chart.js/helpers'; +const widthCache = new Map(); + /** * Helper function to get the bounds of the rect * @param {TreemapElement} rect the rect @@ -114,23 +116,59 @@ function drawCaption(ctx, rect, item) { ctx.fillText(captionsOpts.formatter || item.g, x, rect.y + padding + spacing + (font.lineHeight / 2)); } +function measureLabelSize(ctx, lines, font) { + const mapKey = lines.join() + font.string + (ctx._measureText ? '-spriting' : ''); + if (!widthCache.has(mapKey)) { + ctx.save(); + ctx.font = font.string; + const count = lines.length; + let width = 0; + for (let i = 0; i < count; i++) { + const text = lines[i]; + width = Math.max(width, ctx.measureText(text).width); + } + ctx.restore(); + const height = count * font.lineHeight; + widthCache.set(mapKey, {width, height}); + } + return widthCache.get(mapKey); +} + +function labelToDraw(ctx, rect, options, {labels, font}) { + const overflow = options.overflow; + if (overflow === 'hidden') { + const padding = options.padding; + const labelSize = measureLabelSize(ctx, labels, font); + if ((labelSize.width + padding) > rect.width || (labelSize.height + padding) > rect.height) { + return false; + } + } else if (overflow === 'visible') { + ctx.restore(); + } + return true; +} + function drawLabel(ctx, rect) { const opts = rect.options; const labelsOpts = opts.labels; - const optColor = (rect.active ? labelsOpts.hoverColor : labelsOpts.color) || labelsOpts.color; + const label = labelsOpts.formatter; + if (!label) { + return; + } + const labels = isArray(label) ? label : [label]; const optFont = (rect.active ? labelsOpts.hoverFont : labelsOpts.font) || labelsOpts.font; const font = toFont(optFont); - const lh = font.lineHeight; - const label = labelsOpts.formatter; - if (label) { - const labels = isArray(label) ? label : [label]; - const xyPoint = calculateXYLabel(opts, rect, labels, lh); - ctx.font = font.string; - ctx.textAlign = labelsOpts.align; - ctx.textBaseline = labelsOpts.position; - ctx.fillStyle = optColor; - labels.forEach((l, i) => ctx.fillText(l, xyPoint.x, xyPoint.y + i * lh)); + if (!labelToDraw(ctx, rect, labelsOpts, {labels, font})) { + return; } + const optColor = (rect.active ? labelsOpts.hoverColor : labelsOpts.color) || labelsOpts.color; + const lh = font.lineHeight; + const xyPoint = calculateXYLabel(opts, rect, labels, lh); + ctx.font = font.string; + ctx.textAlign = labelsOpts.align; + ctx.textBaseline = labelsOpts.position; + ctx.fillStyle = optColor; + labels.forEach((l, i) => ctx.fillText(l, xyPoint.x, xyPoint.y + i * lh)); } function drawDivider(ctx, rect, item) { @@ -286,6 +324,7 @@ TreemapElement.defaults = { display: false, formatter: (ctx) => ctx.raw.g ? [ctx.raw.g, ctx.raw.v] : ctx.raw.v, font: {}, + overflow: 'clip', position: 'middle', padding: 3 } From f264c2af1d108b147ee462156f7eb6ecc6cccf34 Mon Sep 17 00:00:00 2001 From: stockiNail Date: Sat, 17 Sep 2022 16:15:42 +0200 Subject: [PATCH 2/6] adds test cases --- src/element.js | 2 -- .../basic/labelsMultilineOverflowCut.js | 30 ++++++++++++++++++ .../basic/labelsMultilineOverflowCut.png | Bin 0 -> 10114 bytes .../basic/labelsMultilineOverflowHidden.js | 30 ++++++++++++++++++ .../basic/labelsMultilineOverflowHidden.png | Bin 0 -> 8301 bytes test/fixtures/basic/labelsOverflowCut.js | 30 ++++++++++++++++++ test/fixtures/basic/labelsOverflowCut.png | Bin 0 -> 11582 bytes test/fixtures/basic/labelsOverflowHidden.js | 30 ++++++++++++++++++ test/fixtures/basic/labelsOverflowHidden.png | Bin 0 -> 5493 bytes 9 files changed, 120 insertions(+), 2 deletions(-) create mode 100644 test/fixtures/basic/labelsMultilineOverflowCut.js create mode 100644 test/fixtures/basic/labelsMultilineOverflowCut.png create mode 100644 test/fixtures/basic/labelsMultilineOverflowHidden.js create mode 100644 test/fixtures/basic/labelsMultilineOverflowHidden.png create mode 100644 test/fixtures/basic/labelsOverflowCut.js create mode 100644 test/fixtures/basic/labelsOverflowCut.png create mode 100644 test/fixtures/basic/labelsOverflowHidden.js create mode 100644 test/fixtures/basic/labelsOverflowHidden.png diff --git a/src/element.js b/src/element.js index 82b5efb..5e2bc16 100644 --- a/src/element.js +++ b/src/element.js @@ -142,8 +142,6 @@ function labelToDraw(ctx, rect, options, {labels, font}) { if ((labelSize.width + padding) > rect.width || (labelSize.height + padding) > rect.height) { return false; } - } else if (overflow === 'visible') { - ctx.restore(); } return true; } diff --git a/test/fixtures/basic/labelsMultilineOverflowCut.js b/test/fixtures/basic/labelsMultilineOverflowCut.js new file mode 100644 index 0000000..ac08c41 --- /dev/null +++ b/test/fixtures/basic/labelsMultilineOverflowCut.js @@ -0,0 +1,30 @@ +export default { + config: { + type: 'treemap', + data: { + datasets: [{ + label: 'Simple treemap', + data: [6, 6, 4, 3, 2, 2, 1], + backgroundColor: 'red', + labels: { + display: true, + overflow: 'cut', + formatter: (ctx) => ('value is ' + ctx.raw.v + ',').repeat(8).split(',') + } + }] + }, + options: { + layout: { + padding: { + bottom: 10 + } + } + } + }, + options: { + canvas: { + height: 256, + width: 512 + } + } +}; diff --git a/test/fixtures/basic/labelsMultilineOverflowCut.png b/test/fixtures/basic/labelsMultilineOverflowCut.png new file mode 100644 index 0000000000000000000000000000000000000000..aa303bc97b343d2b6131b0d7e13ce8ae06169f30 GIT binary patch literal 10114 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 Q0r1D(&dIjK+As0H0P)b^tpET3 literal 0 HcmV?d00001 diff --git a/test/fixtures/basic/labelsMultilineOverflowHidden.js b/test/fixtures/basic/labelsMultilineOverflowHidden.js new file mode 100644 index 0000000..b11f381 --- /dev/null +++ b/test/fixtures/basic/labelsMultilineOverflowHidden.js @@ -0,0 +1,30 @@ +export default { + config: { + type: 'treemap', + data: { + datasets: [{ + label: 'Simple treemap', + data: [6, 6, 4, 3, 2, 2, 1], + backgroundColor: 'red', + labels: { + display: true, + overflow: 'hidden', + formatter: (ctx) => ('value is ' + ctx.raw.v + ',').repeat(6).split(',') + } + }] + }, + options: { + layout: { + padding: { + bottom: 10 + } + } + } + }, + options: { + canvas: { + height: 256, + width: 512 + } + } +}; diff --git a/test/fixtures/basic/labelsMultilineOverflowHidden.png b/test/fixtures/basic/labelsMultilineOverflowHidden.png new file mode 100644 index 0000000000000000000000000000000000000000..85f3b5a02892246f194ddd93975ebf270de3f360 GIT binary patch literal 8301 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

Am$$XPDUex-$n~-87aC5%& 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 literal 0 HcmV?d00001 diff --git a/test/fixtures/basic/labelsOverflowCut.js b/test/fixtures/basic/labelsOverflowCut.js new file mode 100644 index 0000000..8cb8542 --- /dev/null +++ b/test/fixtures/basic/labelsOverflowCut.js @@ -0,0 +1,30 @@ +export default { + config: { + type: 'treemap', + data: { + datasets: [{ + label: 'Simple treemap', + data: [6, 6, 4, 3, 2, 2, 1], + backgroundColor: 'red', + labels: { + display: true, + overflow: 'cut', + formatter: (ctx) => ('value is ' + ctx.raw.v).repeat(5) + } + }] + }, + options: { + layout: { + padding: { + bottom: 10 + } + } + } + }, + options: { + canvas: { + height: 256, + width: 512 + } + } +}; diff --git a/test/fixtures/basic/labelsOverflowCut.png b/test/fixtures/basic/labelsOverflowCut.png new file mode 100644 index 0000000000000000000000000000000000000000..607358b1860df5b1e2ddf4d881a1b12bd5f3a4c8 GIT binary patch literal 11582 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 ('value is ' + ctx.raw.v).repeat(5) + } + }] + }, + options: { + layout: { + padding: { + bottom: 10 + } + } + } + }, + options: { + canvas: { + height: 256, + width: 512 + } + } +}; diff --git a/test/fixtures/basic/labelsOverflowHidden.png b/test/fixtures/basic/labelsOverflowHidden.png new file mode 100644 index 0000000000000000000000000000000000000000..237058dd06a2f5bb63f2e2f820aa5fc4cb52e52a GIT binary patch literal 5493 zcmeAS@N?(olHy`uVBq!ia0y~yU;;83893O0)X@p&(m}l9Aa^H*b?0PWGBAkhd%8G= zRK&f#wXruPRmA0Cy^qiVWj3EXM~@s)WM0F|P%JLYJXxf`BdN)OBPc?gnLRV$u$RgQ zuUY=@w_M5d-D_pL>eAb~D$D0*f4;x_x{lMPzUIk~`~80(cRsH7e|LKMzk+i=pU(MQ z_S5~+K9$Dj%cmFLn_qk{R%v?2v;*Jed5^~{m-pWP5kEOu>%aPk+m_E~7oS_-`stPM zk9~|EUP=1$hA~{Oh~HcBC*D@+Tmtg}$7>7)5x#T67$!$ZUi@LaLSiv51KZV128%Un ze%cM5YkD&NNQU%WWMgPv#rR;sEsM1bW;?Z3eGK=ow3BAwTdfDgotL>1gtV2V>e)n- zw=f=9@QP_v;b`!TCW_IlFj`WKmXD*g0(q6DJoAIs#pgCB|J>$RUju9o{Iz_3H&=Pb z_vUbhkM$}S{{P==&mL~~H<_WP?%dBWUKh8hasIi52b3~mwgp1P zM-`3+4_X6pWF-pr|MKT7=Nt4H|GFjoF{d``YJgSgtR$*-6;oSqht#~?5xP3^IL_qT0_YFQsF$j8>YUe6#C zBE4MnfLge#=|3*bl(D+|NrJYoeFe+w7h5`QMz+@3slv`F&8k;fKA@i~s-c&2QG8|Id(NpVjj}B}+4+ zCbQJ#G58dvx=1tdtm?e@!#`>7){J;Yiyyyv8xChZ+QKyB$f=HF^Bs>$ Date: Sat, 17 Sep 2022 16:21:10 +0200 Subject: [PATCH 3/6] adds types definition --- types/index.esm.d.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/types/index.esm.d.ts b/types/index.esm.d.ts index 2976cf6..6ae775e 100644 --- a/types/index.esm.d.ts +++ b/types/index.esm.d.ts @@ -30,6 +30,7 @@ type TreemapControllerDatasetLabelsOptions = { font?: FontSpec, hoverColor?: Scriptable, hoverFont?: FontSpec, + overflow?: Scriptable padding?: number, position?: Scriptable } @@ -38,6 +39,8 @@ export type LabelPosition = 'top' | 'middle' | 'bottom'; export type LabelAlign = 'left' | 'center' | 'right'; +export type LabelOverflow = 'cut' | 'hidden'; + type TreemapControllerDatasetDividersOptions = { display?: boolean, lineCapStyle?: string, From 4909a0a74f69600bc02e23b03092e506d8af57a6 Mon Sep 17 00:00:00 2001 From: stockiNail Date: Sat, 17 Sep 2022 16:37:16 +0200 Subject: [PATCH 4/6] adds docs and samples --- docs/samples/captions.md | 17 +++++++++++++++++ docs/usage.md | 12 ++++++++++-- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/docs/samples/captions.md b/docs/samples/captions.md index 50d355a..f28db5e 100644 --- a/docs/samples/captions.md +++ b/docs/samples/captions.md @@ -63,14 +63,31 @@ const config = { weight: 'bold' }, padding: 5 + }, + labels: { + display: false, + overflow: 'hidden' } }] }, options: options }; // +function toggle(chart) { + const labels = chart.data.datasets[0].labels; + labels.display = !labels.display; + chart.update(); +} + +const actions = [ + { + name: 'Toggle labels', + handler: (chart) => toggle(chart, 'region') + } +]; module.exports = { config, + actions }; ``` diff --git a/docs/usage.md b/docs/usage.md index 3404b11..8dadf93 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -193,9 +193,10 @@ The labels options can control if and how a label, to represent the data, can be | `color` | [`Color`](https://www.chartjs.org/docs/latest/general/colors.html) | Yes | `undefined` | `display` | `boolean` | - | `false` | [`formatter`](#formatter) | `function` | Yes | -| [`font`](https://www.chartjs.org/docs/latest/general/fonts.html) | `Font` | Yes | `{}` +| [`font`](https://www.chartjs.org/docs/latest/general/fonts.html) | `Font` | Yes | `{}` | `hoverColor` | [`Color`](https://www.chartjs.org/docs/latest/general/colors.html) | Yes | `undefined` -| [`hoverFont`](https://www.chartjs.org/docs/latest/general/fonts.html) | `Font` | Yes | `{}` +| [`hoverFont`](https://www.chartjs.org/docs/latest/general/fonts.html) | `Font` | Yes | `{}` +| [`overflow`](#overflow) | `string` | Yes | `cut` | `padding` | `number` | - | `3` | [`position`](#position) | `string` | Yes | `middle` @@ -215,6 +216,13 @@ The align property specifies the text horizontal alignment used when drawing the * `left`: the text is left-aligned. * `right`: the text is right-aligned. +### Overflow + +The overflow property controls what happens to a label that is too big to fit into a rectangle. The possible values are: + +* `cut`: if the label is too big, it will be cut to stay inside the rectangle. It is the default. +* `hidden`: the label is removed altogether if the rectangle is too small for it. + ### Position The position property specifies the text vertical alignment used when drawing the label. The possible values are: From 77f12ba41aca0160e70d5a2f61b89f13c6fa0dcd Mon Sep 17 00:00:00 2001 From: stockiNail Date: Sat, 17 Sep 2022 21:44:20 +0200 Subject: [PATCH 5/6] improves check if overflow is hidden --- src/element.js | 4 +--- .../basic/labelsMultilineOverflowHidden.png | Bin 8301 -> 7490 bytes 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/src/element.js b/src/element.js index 5e2bc16..22428a9 100644 --- a/src/element.js +++ b/src/element.js @@ -139,9 +139,7 @@ function labelToDraw(ctx, rect, options, {labels, font}) { if (overflow === 'hidden') { const padding = options.padding; const labelSize = measureLabelSize(ctx, labels, font); - if ((labelSize.width + padding) > rect.width || (labelSize.height + padding) > rect.height) { - return false; - } + return !((labelSize.width + padding * 2) > rect.width || (labelSize.height + padding * 2) > rect.height); } return true; } diff --git a/test/fixtures/basic/labelsMultilineOverflowHidden.png b/test/fixtures/basic/labelsMultilineOverflowHidden.png index 85f3b5a02892246f194ddd93975ebf270de3f360..dfb9bb325102163962d486b35c05ccf630c5ac43 100644 GIT binary patch literal 7490 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 literal 8301 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

Am$$XPDUex-$n~-87aC5%& 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 From 2ef0b68b1c2a962becfc937e650373dc0a9ea785 Mon Sep 17 00:00:00 2001 From: stockiNail Date: Mon, 19 Sep 2022 10:03:37 +0200 Subject: [PATCH 6/6] apply review --- docs/samples/captions.md | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/docs/samples/captions.md b/docs/samples/captions.md index f28db5e..afd205b 100644 --- a/docs/samples/captions.md +++ b/docs/samples/captions.md @@ -73,16 +73,15 @@ const config = { options: options }; // -function toggle(chart) { - const labels = chart.data.datasets[0].labels; - labels.display = !labels.display; - chart.update(); -} const actions = [ { name: 'Toggle labels', - handler: (chart) => toggle(chart, 'region') + handler(chart) { + const labels = chart.data.datasets[0].labels; + labels.display = !labels.display; + chart.update(); + } } ];