From 97136d0cbfa245752adf0b3f6317f6333b3e2ad7 Mon Sep 17 00:00:00 2001 From: Jukka Kurkela Date: Thu, 18 Mar 2021 13:37:03 +0200 Subject: [PATCH] Add textAlign for legend labels (#8665) * Add textAlign for legend labels * Update tests --- docs/docs/configuration/legend.md | 1 + src/helpers/helpers.extras.js | 11 ++++++- src/plugins/plugin.legend.js | 30 +++++++++-------- .../plugin.legend/label-textAlign/center.js | 30 +++++++++++++++++ .../plugin.legend/label-textAlign/center.png | Bin 0 -> 10827 bytes .../plugin.legend/label-textAlign/left.js | 30 +++++++++++++++++ .../plugin.legend/label-textAlign/left.png | Bin 0 -> 10770 bytes .../plugin.legend/label-textAlign/right.js | 30 +++++++++++++++++ .../plugin.legend/label-textAlign/right.png | Bin 0 -> 10802 bytes .../label-textAlign/rtl-center.js | 31 ++++++++++++++++++ .../label-textAlign/rtl-center.png | Bin 0 -> 10853 bytes .../plugin.legend/label-textAlign/rtl-left.js | 31 ++++++++++++++++++ .../label-textAlign/rtl-left.png | Bin 0 -> 10743 bytes .../label-textAlign/rtl-right.js | 31 ++++++++++++++++++ .../label-textAlign/rtl-right.png | Bin 0 -> 10779 bytes test/specs/global.defaults.tests.js | 6 ++++ test/specs/plugin.legend.tests.js | 20 +++++++++++ types/index.esm.d.ts | 12 ++++++- 18 files changed, 248 insertions(+), 15 deletions(-) create mode 100644 test/fixtures/plugin.legend/label-textAlign/center.js create mode 100644 test/fixtures/plugin.legend/label-textAlign/center.png create mode 100644 test/fixtures/plugin.legend/label-textAlign/left.js create mode 100644 test/fixtures/plugin.legend/label-textAlign/left.png create mode 100644 test/fixtures/plugin.legend/label-textAlign/right.js create mode 100644 test/fixtures/plugin.legend/label-textAlign/right.png create mode 100644 test/fixtures/plugin.legend/label-textAlign/rtl-center.js create mode 100644 test/fixtures/plugin.legend/label-textAlign/rtl-center.png create mode 100644 test/fixtures/plugin.legend/label-textAlign/rtl-left.js create mode 100644 test/fixtures/plugin.legend/label-textAlign/rtl-left.png create mode 100644 test/fixtures/plugin.legend/label-textAlign/rtl-right.js create mode 100644 test/fixtures/plugin.legend/label-textAlign/rtl-right.png diff --git a/docs/docs/configuration/legend.md b/docs/docs/configuration/legend.md index e7c4f101e..750b7f772 100644 --- a/docs/docs/configuration/legend.md +++ b/docs/docs/configuration/legend.md @@ -62,6 +62,7 @@ Namespace: `options.plugins.legend.labels` | `filter` | `function` | `null` | Filters legend items out of the legend. Receives 2 parameters, a [Legend Item](#legend-item-interface) and the chart data. | `sort` | `function` | `null` | Sorts legend items. Receives 3 parameters, two [Legend Items](#legend-item-interface) and the chart data. | `pointStyle` | | | If specified, this style of point is used for the legend. Only used if `usePointStyle` is true. +| `textAlign` | `string` | `'center'` | Horizontal alignment of the label text. Options are: `'left'`, `'right'` or `'center'`. | `usePointStyle` | `boolean` | `false` | Label style will match corresponding point style (size is based on the minimum value between boxWidth and font.size). ## Legend Title Configuration diff --git a/src/helpers/helpers.extras.js b/src/helpers/helpers.extras.js index 703fbf208..89ffa418c 100644 --- a/src/helpers/helpers.extras.js +++ b/src/helpers/helpers.extras.js @@ -68,10 +68,19 @@ export function debounce(fn, delay) { export const _toLeftRightCenter = (align) => align === 'start' ? 'left' : align === 'end' ? 'right' : 'center'; /** - * Returns `start`, `end` or `(start + end) / 2` depending on `align` + * Returns `start`, `end` or `(start + end) / 2` depending on `align`. Defaults to `center` * @param {string} align start, end, center * @param {number} start value for start * @param {number} end value for end * @private */ export const _alignStartEnd = (align, start, end) => align === 'start' ? start : align === 'end' ? end : (start + end) / 2; + +/** + * Returns `left`, `right` or `(left + right) / 2` depending on `align`. Defaults to `left` + * @param {string} align start, end, center + * @param {number} left value for start + * @param {number} right value for end + * @private + */ +export const _textX = (align, left, right) => align === 'right' ? right : align === 'center' ? (left + right) / 2 : left; diff --git a/src/plugins/plugin.legend.js b/src/plugins/plugin.legend.js index 5cbe41215..7913d8fa2 100644 --- a/src/plugins/plugin.legend.js +++ b/src/plugins/plugin.legend.js @@ -3,11 +3,11 @@ import Element from '../core/core.element'; import layouts from '../core/core.layouts'; import {drawPoint, renderText} from '../helpers/helpers.canvas'; import { - callback as call, valueOrDefault, toFont, isObject, + callback as call, valueOrDefault, toFont, toPadding, getRtlAdapter, overrideTextDirection, restoreTextDirection, clipArea, unclipArea } from '../helpers/index'; -import {_toLeftRightCenter, _alignStartEnd} from '../helpers/helpers.extras'; +import {_toLeftRightCenter, _alignStartEnd, _textX} from '../helpers/helpers.extras'; /** * @typedef { import("../platform/platform.base").ChartEvent } ChartEvent */ @@ -244,6 +244,7 @@ export class Legend extends Element { const labelFont = toFont(labelOpts.font); const {color: fontColor, padding} = labelOpts; const fontSize = labelFont.size; + const halfFontSize = fontSize / 2; let cursor; me.drawTitle(); @@ -287,7 +288,7 @@ export class Legend extends Element { borderWidth: lineWidth }; const centerX = rtlHelper.xPlus(x, boxWidth / 2); - const centerY = y + fontSize / 2; + const centerY = y + halfFontSize; // Draw pointStyle as legend symbol drawPoint(ctx, drawOptions, centerX, centerY); @@ -306,9 +307,10 @@ export class Legend extends Element { }; const fillText = function(x, y, legendItem) { - const halfFontSize = fontSize / 2; - const xLeft = rtlHelper.xPlus(x, boxWidth + halfFontSize); - renderText(ctx, legendItem.text, xLeft, y + (itemHeight / 2), labelFont, {strikethrough: legendItem.hidden}); + renderText(ctx, legendItem.text, x, y + (itemHeight / 2), labelFont, { + strikethrough: legendItem.hidden, + textAlign: legendItem.textAlign + }); }; // Horizontal @@ -333,6 +335,7 @@ export class Legend extends Element { const lineHeight = itemHeight + padding; me.legendItems.forEach((legendItem, i) => { const textWidth = ctx.measureText(legendItem.text).width; + const textAlign = rtlHelper.textAlign(legendItem.textAlign || (legendItem.textAlign = labelOpts.textAlign)); const width = boxWidth + (fontSize / 2) + textWidth; let x = cursor.x; let y = cursor.y; @@ -358,8 +361,10 @@ export class Legend extends Element { legendHitBoxes[i].left = rtlHelper.leftForLtr(realX, legendHitBoxes[i].width); legendHitBoxes[i].top = y; + x = _textX(textAlign, x + boxWidth + halfFontSize, me.right); + // Fill the actual label - fillText(realX, y, legendItem); + fillText(rtlHelper.x(x), y, legendItem); if (isHorizontal) { cursor.x += width + padding; @@ -577,13 +582,11 @@ export default { // lineWidth : generateLabels(chart) { const datasets = chart.data.datasets; - const {labels} = chart.legend.options; - const usePointStyle = labels.usePointStyle; - const overrideStyle = labels.pointStyle; + const {labels: {usePointStyle, pointStyle, textAlign}} = chart.legend.options; return chart._getSortedDatasetMetas().map((meta) => { const style = meta.controller.getStyle(usePointStyle ? 0 : undefined); - const borderWidth = isObject(style.borderWidth) ? (valueOrDefault(style.borderWidth.top, 0) + valueOrDefault(style.borderWidth.left, 0) + valueOrDefault(style.borderWidth.bottom, 0) + valueOrDefault(style.borderWidth.right, 0)) / 4 : style.borderWidth; + const borderWidth = toPadding(style.borderWidth); return { text: datasets[meta.index].label, @@ -593,10 +596,11 @@ export default { lineDash: style.borderDash, lineDashOffset: style.borderDashOffset, lineJoin: style.borderJoinStyle, - lineWidth: borderWidth, + lineWidth: (borderWidth.width + borderWidth.height) / 4, strokeStyle: style.borderColor, - pointStyle: overrideStyle || style.pointStyle, + pointStyle: pointStyle || style.pointStyle, rotation: style.rotation, + textAlign: textAlign || style.textAlign, // Below is extra data used for toggling the datasets datasetIndex: meta.index diff --git a/test/fixtures/plugin.legend/label-textAlign/center.js b/test/fixtures/plugin.legend/label-textAlign/center.js new file mode 100644 index 000000000..e46fbfdc6 --- /dev/null +++ b/test/fixtures/plugin.legend/label-textAlign/center.js @@ -0,0 +1,30 @@ +module.exports = { + config: { + type: 'pie', + data: { + labels: ['aaaa', 'bb', 'c'], + datasets: [ + { + data: [1, 2, 3] + } + ] + }, + options: { + plugins: { + legend: { + position: 'right', + labels: { + textAlign: 'center' + } + } + } + } + }, + options: { + spriteText: true, + canvas: { + width: 256, + height: 256 + } + } +}; diff --git a/test/fixtures/plugin.legend/label-textAlign/center.png b/test/fixtures/plugin.legend/label-textAlign/center.png new file mode 100644 index 0000000000000000000000000000000000000000..e0fb8ff11ba7a19cc0da95a27cc7b08738339b07 GIT binary patch literal 10827 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 F{{fQ-n5_T+ literal 0 Hc-jL100001 diff --git a/test/fixtures/plugin.legend/label-textAlign/right.js b/test/fixtures/plugin.legend/label-textAlign/right.js new file mode 100644 index 000000000..b745f9624 --- /dev/null +++ b/test/fixtures/plugin.legend/label-textAlign/right.js @@ -0,0 +1,30 @@ +module.exports = { + config: { + type: 'pie', + data: { + labels: ['aaaa', 'bb', 'c'], + datasets: [ + { + data: [1, 2, 3] + } + ] + }, + options: { + plugins: { + legend: { + position: 'right', + labels: { + textAlign: 'right' + } + } + } + } + }, + options: { + spriteText: true, + canvas: { + width: 256, + height: 256 + } + } +}; diff --git a/test/fixtures/plugin.legend/label-textAlign/right.png b/test/fixtures/plugin.legend/label-textAlign/right.png new file mode 100644 index 0000000000000000000000000000000000000000..cf5feff64b20ea0eb2ebab0845d0ebfd398056c5 GIT binary patch literal 10802 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 literal 0 Hc-jL100001 diff --git a/test/fixtures/plugin.legend/label-textAlign/rtl-left.js b/test/fixtures/plugin.legend/label-textAlign/rtl-left.js new file mode 100644 index 000000000..96c0bcdf5 --- /dev/null +++ b/test/fixtures/plugin.legend/label-textAlign/rtl-left.js @@ -0,0 +1,31 @@ +module.exports = { + config: { + type: 'pie', + data: { + labels: ['aaaa', 'bb', 'c'], + datasets: [ + { + data: [1, 2, 3] + } + ] + }, + options: { + plugins: { + legend: { + position: 'right', + rtl: true, + labels: { + textAlign: 'left' + } + } + } + } + }, + options: { + spriteText: true, + canvas: { + width: 256, + height: 256 + } + } +}; diff --git a/test/fixtures/plugin.legend/label-textAlign/rtl-left.png b/test/fixtures/plugin.legend/label-textAlign/rtl-left.png new file mode 100644 index 0000000000000000000000000000000000000000..80789d65f036ffbc69cf5cad40488aafc7c065a0 GIT binary patch literal 10743 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