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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 literal 0 HcmV?d00001 diff --git a/test/fixtures/plugin.legend/label-textAlign/rtl-center.js b/test/fixtures/plugin.legend/label-textAlign/rtl-center.js new file mode 100644 index 000000000..dd86154bf --- /dev/null +++ b/test/fixtures/plugin.legend/label-textAlign/rtl-center.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: 'center' + } + } + } + } + }, + options: { + spriteText: true, + canvas: { + width: 256, + height: 256 + } + } +}; diff --git a/test/fixtures/plugin.legend/label-textAlign/rtl-center.png b/test/fixtures/plugin.legend/label-textAlign/rtl-center.png new file mode 100644 index 0000000000000000000000000000000000000000..10d42be4bb667cbf233c10e84e3878a9311af45e GIT binary patch literal 10853 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 literal 0 HcmV?d00001 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 zcmeHt`8$+f{Qj94V;M`PhAdg4G)RQ(%OqP7LSz@RMD~517E!XjlYN;i3E8*oDoSKu zvqWUycOpK=_5B;ZKYc!~%Vn@D&bsv)AjrWkLXYqb-f&;?ca-991QT+Nn7Mlha$-bE=WQGKtWk=42sU`5t9Y|& z9zKhB0RERxqR6eDo(q6PB*7Bc!YzYnD=BygizHU?_0TX-oQ_ z9~%f%ZgODTz2;brWattA&*&oo!5-K;di91>cdMX*GdTz>JJ^5mc0##%zbA{2L=7m< zKU5X>lK^FCq8OOa*G)M*Jfvm}o7UFQ=vXx{Fo=8o`t=!CH@D4~I>m0Y9cew|L3_VL zK5aQ=-FhR$$;sI=GE!6W)1kmYH~|^1Y^en=^Z9vu>t0Jx7tO^NB$E>*s4yz@SKsLt zt|LAW!*E@f;k?Qb6KOrCXs1{Cs;a8K_4M|hx_IHjxp4RswB4^?D3y^zKgq%t8G1^} z)pUEIKU^*Lvd_nxuX!Tn)*4ZfzJ7ksQfBpY zI<^II->tc?H^=&ubwC*nu6fE=v=1~z0GP|R0sNB1G1LIc0-BwxoT~n?8z?%abmXhJDU$b95tWEF$^a^CC#s*-18FWRZ zJ>RRUbQ=G~bmmNHmD6~AHs5C@1_U_p{9sZec3D{1mEi2WMmTjUG9;_>KQQqK+BRe%asOpS@yMU+cRz@hPpj zxp}(nH&PN|ZttY7u6~J%Y|HRF1RkY^hxX#Q*;&(>&^Q!0 zujmB!m;m2vDQ0Hok=gd7-LJ`#ZgW+7E=u14XYt?d#o0Q?vFe=b*RKZ)p^0X8k8zRY zxWPA8*Hk^>i^^m={nNimWf&O*7l`T>%gWi=^I51y>&^OrgU{StTzX95UlV&)loGYF zu#Ydl&Mw*UEI4FGTcL?%rpMIt24X!nh7AshkO@R|qW|8XAflF1Pn02&~*`qii(oAZTthwLk1mUUsiT zGSGqZWavI`eZ#LO(D1FwZ8jqLswKIA^_|;yxWSS#N>p4(frYmAMW~1_w+!ooHkuCy zw42y`L&jg~t^KO?aZ}oyX+L{`hbPz3GRzQRz9{SB;u0zD^vnMu=t{*5yQpR$l@;V?81e|gC&`Nh<2UbDxK2$@D)ZmJu4!-(Jd7YLAMK1d8F?-aEZK5GBU1U+_WJ^-qg{az=DIPYR02 z9_rm}QoZi+CW|jiZajGKeWLc7Ap(@kNJ&ZAb|g!( z%F4*#9hmcL=3a!#OBQ0%-io0|G2nbtMo&@0%VvvxyQQJx8-pJVUKfZ(zbw^P14Xy# zRz|Bf17P+$0)kOknqpI7*#y7ijqjL`Co#a}-Trb!diClR+tJaHpxt+@Aqwn&ZEK@` z{oj9#chEhTIWxn|!PR-51v05=X~*_fR#pvle!CCFG*Si-1QQ89 zzTAx`XlhTE@UK#UK&8fhqscW`N53=w?I|@ADq@h1dZ2IrSq6rFzx|Er#G{HX6qsYY zSM5Ikbn0vP!B=x3EijNDx|b>ENE=Yra}lDPR#8VKH3s7-U{I2&@9r+Dl-KXxO$}OJ zNPDd~jAmhrMPJr`%M~d{WRh{ql zQRHV)B&cJS_+4b~PvT<03xWz1;W#-t`QNW!ziu%6R1jy*QUOsh5Q9@Wn3z=S-_cvP zODH8IN!>%6RQ!OCsHFj`I2`Um-P&jBv4KLf!aNfzUo>cD8LfCUf_VCgz*=j~Ihn-J zr(eY)j@RM=s`iKT2IC*?2Mg+beO4+5%?bf0Eggs4XmP;7PE39BBt;i~qKx$~k68&4 z=gb0MS`d&VHcwr;c(FYP79(i}^X$poE)meeJU>4lcKGj~T_@ojmo_`a6+T_kWkBlF zxdZERNNsIxs`mXP6N{2x2qE`5tp-|Fv2&tKG%;=WkzCph6Y0X}WF(RPiQcpBlCE0u zasSec;mN(K9&uj^VCMsKVdeMl-yFA+p0iK?Ll!LEXK)j+L97WVC7e`|&s|+z7a1(m zh3)Ty!}&P*qdm)nw6t+fAVCZ@iJ2Fu$i09*M^22Xn$3Ii6eVr$|t)}i6kfSZTtj1+<$Mt#AVPY8}N5aEu7`r@Y__L>TlZQpt0P3 z@N4k%=RKS954_S{QP{jH6_@&4X`C|-l_pb>C9QQ{$>XZ_eZA zs3$Rfk8L`V4Ll~BUM#Bf=-eOPfxK!-#HK_2(Qw)P%+$9?9py>QOu%&wd#BXsQ@{Ju zIO{xa;LQq5+ge-y4i64`>Dry`Yn$~&0wv0qk&$Mn>FL+JfY81CfhT|d{Amwo6+as9 z>(hP7cJJQC#zwtpg1P`O$8dG@tC?xJNv~1^-temDW)R-#LX3y5Fs2CjtTKL48ub-r@s!`35>k zNl67gH3q#ZMnu$q{|QUu@pA^lf9`5&al%4dUTV{sdhF`it^ygYUg=MD!2CFr6*nU# z_D$pQ0fMODS6S~q-?MoC{{2OR@*0M&(?BCt=4YkL)YmX0k?CdrUND293Lp6O5=(;~vfmEQm9DaHO94Q!At0lYaN zz!^$W8&A*0#KefhoWb+{xTRQoNgz29!CAQ+@wWxrGKK>IJMA{laq6h8u)j*_&6!}$R2hR!D!En+Zx)IKFT6uh&|Ti$++5_Aoi&2>R;=%X zft#Vh$kLLJ)eU3gQD#6I%e)@Cr$2FzoLKr$D$qYc1tvUXnwL&Q3j{~+>G1$jePM9= z^y$>XyLpVu?c&{5eujpIKlawA(&D&X-8?;azV%p5(JPKRyp91;$;mVv0b5u_6_v9` zK0o5G#zfLD3>KR01$hN_a1-TaT?V;{^cI)ERvp}teMLn@9uXocK`MM$PJW^Czho?h^! zRBxo`(w@lZGiiAnfI~pY)|PvKB+h2ue4WTp`SV6lrO$T(z0=^`?Igy-zl()VYg=2H zDc)tb#dm)si0IfR6^zOyNqafY!7tbz6QsDvhf&192LFBG!^6!^7-#BIn`376mcSRp z8aW#csM%?+4%8J z7exD!IUgPFXLI<@y_NJFao4X#DlVcyQJa!u)(o(J*CL_#Y)ms#-OJ8Rbu~yH33*Vhb zxPtK|W0LhPJMPI+lNU;A7kzbQ^c^b)hx}@^3VW6P0Mzr*B^9~a%o8^>Tp){r;M9~kGqn~Qtfq>(9_#OF$Of^`|L)2*G{7Qe;D zVA2@$ z(~r*g{UP_U3i9|9XxD1?R2oqPkv0TkcEy0LXwMJHN4@{1phyyo^Gb5uH!|7bH?DGh z;0{BMR~+I}e5EG>S___Rbd-eyTV&1{#CYGGm9c}=x{+29qrk9H1Q>o-15@;koSdAj zZS+72*oX1M+>6w7@$m~XVpszjsQ)H?bp<}JXS$J6LqLot@yZR?Ou zQySwGoClou)_#8*u6R`Q*<1+s3kPiwDhRgoZk@8bqmt8k6Uo6|E2ENpb@d;fhEjE; zw5!zIKp+W5FUP*xH6*{TtOZdO^V+c~Uv)*`LQKb*@l-&unB*4we%7{T517!e6MZia z7G#kT--5L}%F18Gf`Worp18UY9+x1Azh0zCxL70<7COl%W(nZ&q({|heedr))w6h5 z4Jmc4$}%~z#*_SEbvMT89D*48PeW5f!_*k+Q6)^J{?(Z`XwV}zmJ>R6Gj9w!E0*Kl zQ{iW01&m^Izw_30>hcz7acX=ziC0B5@s)MojVd-Y?RTR>g1 z8W^GgCXpQSN09^hMnQ#f&*LgnA^@>sUL!&HLHK);YZU^9pe1T~Z6)r|g-5l8Kr&h@up!zqCZg4BNW?|{M`YQOjlxM^K>QQ%Q; zo%8R{wT+F9HuT*Ux4rznMX+T+slGaQx5n~Yga_5BQ`y+rATZ%H-Tf)L!z6WaeAPG~ zF@Xc3zltrtP5nFAJ?=M2w_C2hh?v-#??thS+OCOl`S!X6T3gS2M^iJt(wY<-d%5#{ zXL*EmXLUTyG0@Oq;N#rRc>2!hs@p|CI0JP&J&v(@1@3;SaHgwIJRMwMAk$CwK%luO zi~Y^ceO{GFb~ebw206}sOuj<*RwW%;7^!67mH_(?;2b%Ug2C`TBegX2&-_T}o!lNY z)AWqIIb4%_`_Jz$A@U_K$FEtJR+U0LmY0(YEMTda*DKQ}r(v2Xe>74-T_zCEr6~eN zrw}#>f(tl&&wXOi)zS=IPa9HvS0#(_yWJVg%gb8>U4eu2)U?gjOXH=Ta*H+hzdSG1 zuHfWg1r`<-=1|~vWvQKw7y8|hbZ2!}QXU!ep{x|()qCFe%`#K0e#6NBpo4{I_i&~? z$;{a%HU;BEV&%&u@#N{{r~d=wK1>pi^6U$1cb@}Lc*EZgv~;n%KHpZXgxy~gP4#4#^l7rFh&7P zWJJV_t~uSW|7ZY3aEbI%e&w%R;RmfT65yl8naLlqRnilK@c~F^2^-p$h6|m ztif2f<>}@KYub_X^}`aqnOX%!W-`pU-#~~8J1ZT8miy9=p$GWVrI{Z;ey{}w1`1YH zBlAro;XBxfh=>gS-P_wDBYytF*giy(<{^}re{ z%x|tnqhMe9l;?J0pEslfl@BUzGW3gpWVha4P5I>-yI!7QD%GS;8T#&pQHDKRFT6R5 z@Y{j}-3htw43)^V(L2!t1>b>lN5<8wS5si7syHPC-cV$>le&~P5>bIL=Wc$esj3=( zFI$7ng#3fM-hFbS+slg(0;wSck^y_{dhkJWzuTXGHjjCc7piqaso*f3uomUhLQ&mUvb0jja;ibc7h zCNs@*PGI{av;ju2xA3xxwD5l=;owyaXUt?-d*ZdcX$V+OFN-7aC5ntQPe)k=g_$Q|DMUQ@= zX#gB1F|Y0Z(;3YNKw@UHEl#jO3tmeAMO4_d;uNLvbob3OWG_1?HZG7XhhyD!eE@;k zNWSdeWtY^{)M?C+Ry_~?*nymADcAb_`~IkdSa06+CnyX4`XC866CN{x2)ji(u!jV} zRJ->|tZpts&;L?vCvG{l9pJ|*1?%@LCR*R{^J4L|2fSFyEHeJfGDy5hLkatx88}a- z^es|mW@crsexXLR(MMbcK#{f_UDhX?A&lO~Sy{7k9gQ8)APFvRKqp%x_-Coj<~hRr zMy$7@4?>6%$d%r^+~Do&tGz~kg@!1+{TQl)+oq5zIn1@UMShWJF2|+(M^Kv>4wi zz9DeFi5z(EoFGB2ZqDc85hkGFH3l8kSGjjGzP?H?J+7d>3X)^{=FhaEh;+bNl`@(U zi|t;R`1CaB_AiM?!OEHwlEnYm7N@6!6A}`>(U9N315p*lR+O{;9T8C0m!+2MfK|Ye zQ^9T4+6SGU{9f%0lWstgw|=rM0AH_fV{Ki( z3R^-+uY>S=1(hQCq97hY)I;gXd9O{3Lx$?F%hvAN@P>xycg?ieLa7}R4E9*PBU!Dj z{h-tduH4j?_JK99GVs6nIA zgGP`G9yPrkV}?`t94d zYInQDDid44USTa9|DPYc9ET#D1~Sh=afeUCFgVyeEX$c9(sS8B;>NbkE*XzlvsqpF zRafKFnJOESl^m43t&bM3t9wC*BCw!wjtnzoT)~k_gQ{n;om9~hsUd}yeu+HwpU z?KV$~8g2F&^F+8bW3piL4Na3J$e z<7E(^n3l#do}-h^UR+!(x|mm!?ggOY{kpmK`^z{K$km{T4x2V;a;b~(v<(SfviqL{ zEZJFE0Vf)ymH++8|Bu3M$}+5BK}hf*+LsL5>oG_r+GU=N;0#ADAOPA=C{4!4RTts} zKC!6aWh%lM8hNG=bPoW)0Fnq-&w~7kSE>%8I0^i9zs@LFT`{fQE1sLP^+jhUrR#$q zDbnKZ@Jr+8xzJH55usbEElOFK7-n#q%ywFzBdmEt$K2dpUiK0505`yQsTdj#Yw)&p zo>yGT>vC1midj_h9{9-*I^~b~d+mymY_7o2)2D)gToR(;K%k2SDS+0(tfOAuwLoZe1i+?9 z#!s&=zJQ>st2+&OwZA2##-Onhbe+M@_j8;L$4>|YRr)n@;#1JY1@rft=kl;@PJjLv zLka>kwtm3rjyVb^B!Wg>U>g$plVyH)lty0;Ih4oyj1mbjyhmDkdIS3P_4OI$?<-;v z1o7jbqs_D+HG=@VUL7?>^?`Jb?O!}`5nySC>>-Lk1D?Hm_pX4NjxII#+S_srv86?| zaCxNCNi0DwVfIWlW`H%+bZ}cs%h1B=>TzzY;vg4Le#P_~ z+H!o=`$oy*B(cL+ z9xdOF65F%=d#xZ>I*mHqOBzO$3^eM4uI`8BrpB;eVqWgV-h%=4hZ}7?(b3WNwB$ED zfCLI)L%n;016~PcnWOp0;6}thq{-)5G}6*?wuFuAWABBW?Dt=CN}y@k@NZ{?L{7_c zIYw`<`DW)~qDjr$)`%JF41OB;z4vmhqB6#m(H>C7@zS!0k|dty@;@XeK;A6_b&@zg z^cCVS$n2Xlak;X1_is0CFdM%GMG1V<%=Z+E(a>S=q+^qEKa60L)-7*Q%m?vTEtTJV ze|^a*%K9&F!xwKw|7`!U&`!NPWCFOS6OCFi8S$AW|1 zRi`spY%y#Ok)eRV+I(2(VWK93Y=^9JD>i;g}y_5CZ@mKL}R_WX;<8z~OTDar7nkzAagD#3F;dhoi1<@MkumP8XLo-p- zZe^iA&rULT@?{T#!0ZPb*TRx`eCTIrM@^^zZx(Ejesa7+lmiA&4%e0s(b#|=x&Zdh z;&7w&-s_XKkktC8mwiKCL`}3rb7NskWfLB>5XiB)t=!~OvMpS2uNZ^J0MAIWyTDwo z?n>rA47A?*Aj0t|DJ%0?f4=nsgocMNL-Vzl3Q`(@3j(~ty``b5FHEY6kh^%2Dj0f9 zg57d*Fr2_sQc|*Wf_)D{=-BAKFRMXaoShc9&|P%@OOTJR?|-JcbH#S-AuIpY#NitP zl~4rV%bcus7YH|oa<{}Gs@ePdALhyh{Po9ja0IE)CA1#QAQC}O4E1C3!o2mx%zq+oYr5jr===CDe0z%vFF3evU7C;qo`IEzw( z`n#F`-`?6)<^jdfw^D|{gaZ@cQif=*~LVuInlyhRZ$0-U)j5{<*alB zocQzVlXwZ^@wUW}5DK*MTZQ%gvufgju_LVQ47M7GyGTOy{CxiaJ&0Go$>)#?>3E#B zj*izkDfhWB*b36_Ib9j^5;VeNBYE=MeLAQc3JT=$>O6*$cKl^Vkz(tYRTOVG={twL z-b;svY77C68B6n@-kF{9W52+_qh@Hish(Kn-D8VfSzHJ5A;8VmOd@? z1@o8F#kx(YZZ%g>fqG>{lXnliJ}ddZM`3J{pu!WHR4d>UQJH)!^Fd)Shf)4O-p`*u zzriMOWQvr>!d@68nMM{C>HUcCm$FTF0qHH|G|NWN&oA59*`X6pP>)ol_IhtR{GrsS zdcJ|6$UYO-f8XD<7-Ne8O3LU{pi$>E4L;zfi4tY>>!c*sxP$~B836%-Be->`V3KJ< zy&8MtlTa%J+K-YR3w?}`oBl>15c!bX8?w-lzf5;9qr8Pv4zHh=zoGamty8>k0M=mbzd(nE-fA+wvOS(Nz?SXFzlN=v z<&gg#p38p58>$*K^%;X#fCt&QMjMrjkQ-1~N2z!fykXFK2G7GOeS92lj{b9ph~SJ| zG3MtdQ9{!B(iz423DW|pK7oC#N>7h~g$Ltszsbd(Fhr@qkz}gf@;?x{aOMF2nbv`f zpEDAU$2 u*3q2%9>NEX)RG}R*!q7H{r|h7Ysb0|y#P1G%}jWp6WmnNP%Ka|fAT-ug>6>= literal 0 HcmV?d00001 diff --git a/test/fixtures/plugin.legend/label-textAlign/rtl-right.js b/test/fixtures/plugin.legend/label-textAlign/rtl-right.js new file mode 100644 index 000000000..a2f342af7 --- /dev/null +++ b/test/fixtures/plugin.legend/label-textAlign/rtl-right.js @@ -0,0 +1,31 @@ +module.exports = { + config: { + type: 'pie', + data: { + labels: ['aaaa', 'bb', 'c'], + datasets: [ + { + data: [1, 2, 3] + } + ] + }, + options: { + plugins: { + legend: { + rtl: true, + position: 'right', + labels: { + textAlign: 'right' + } + } + } + } + }, + options: { + spriteText: true, + canvas: { + width: 256, + height: 256 + } + } +}; diff --git a/test/fixtures/plugin.legend/label-textAlign/rtl-right.png b/test/fixtures/plugin.legend/label-textAlign/rtl-right.png new file mode 100644 index 0000000000000000000000000000000000000000..294d61dd6fbfa83ce0ff0ebf548a778a79e16915 GIT binary patch literal 10779 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 literal 0 HcmV?d00001 diff --git a/test/specs/global.defaults.tests.js b/test/specs/global.defaults.tests.js index ddf21e787..b7fa9c8a2 100644 --- a/test/specs/global.defaults.tests.js +++ b/test/specs/global.defaults.tests.js @@ -102,6 +102,7 @@ describe('Default Configs', function() { hidden: false, index: 0, strokeStyle: '#000', + textAlign: undefined, lineWidth: 2 }, { text: 'label2', @@ -109,6 +110,7 @@ describe('Default Configs', function() { hidden: false, index: 1, strokeStyle: '#000', + textAlign: undefined, lineWidth: 2 }, { text: 'label3', @@ -116,6 +118,7 @@ describe('Default Configs', function() { hidden: false, index: 2, strokeStyle: '#000', + textAlign: undefined, lineWidth: 2 }]; expect(chart.legend.legendItems).toEqual(expected); @@ -193,6 +196,7 @@ describe('Default Configs', function() { hidden: false, index: 0, strokeStyle: '#000', + textAlign: undefined, lineWidth: 2 }, { text: 'label2', @@ -200,6 +204,7 @@ describe('Default Configs', function() { hidden: false, index: 1, strokeStyle: '#000', + textAlign: undefined, lineWidth: 2 }, { text: 'label3', @@ -207,6 +212,7 @@ describe('Default Configs', function() { hidden: false, index: 2, strokeStyle: '#000', + textAlign: undefined, lineWidth: 2 }]; expect(chart.legend.legendItems).toEqual(expected); diff --git a/test/specs/plugin.legend.tests.js b/test/specs/plugin.legend.tests.js index 096a002d6..7f0c26f60 100644 --- a/test/specs/plugin.legend.tests.js +++ b/test/specs/plugin.legend.tests.js @@ -71,6 +71,7 @@ describe('Legend block tests', function() { strokeStyle: 'rgba(0,0,0,0.1)', pointStyle: undefined, rotation: undefined, + textAlign: undefined, datasetIndex: 0 }, { text: 'dataset2', @@ -84,6 +85,7 @@ describe('Legend block tests', function() { strokeStyle: 'rgba(0,0,0,0.1)', pointStyle: undefined, rotation: undefined, + textAlign: undefined, datasetIndex: 1 }, { text: 'dataset3', @@ -97,6 +99,7 @@ describe('Legend block tests', function() { strokeStyle: 'green', pointStyle: 'crossRot', rotation: undefined, + textAlign: undefined, datasetIndex: 2 }]); }); @@ -141,6 +144,7 @@ describe('Legend block tests', function() { strokeStyle: 'rgba(0,0,0,0.1)', pointStyle: undefined, rotation: undefined, + textAlign: undefined, datasetIndex: 0 }, { text: 'dataset2', @@ -154,6 +158,7 @@ describe('Legend block tests', function() { strokeStyle: 'rgba(0,0,0,0.1)', pointStyle: undefined, rotation: undefined, + textAlign: undefined, datasetIndex: 1 }, { text: 'dataset3', @@ -167,6 +172,7 @@ describe('Legend block tests', function() { strokeStyle: 'green', pointStyle: undefined, rotation: undefined, + textAlign: undefined, datasetIndex: 2 }]); }); @@ -218,6 +224,7 @@ describe('Legend block tests', function() { strokeStyle: 'green', pointStyle: undefined, rotation: undefined, + textAlign: undefined, datasetIndex: 2 }, { text: 'dataset2', @@ -231,6 +238,7 @@ describe('Legend block tests', function() { strokeStyle: 'rgba(0,0,0,0.1)', pointStyle: undefined, rotation: undefined, + textAlign: undefined, datasetIndex: 1 }, { text: 'dataset1', @@ -244,6 +252,7 @@ describe('Legend block tests', function() { strokeStyle: 'rgba(0,0,0,0.1)', pointStyle: undefined, rotation: undefined, + textAlign: undefined, datasetIndex: 0 }]); }); @@ -300,6 +309,7 @@ describe('Legend block tests', function() { strokeStyle: 'rgba(0,0,0,0.1)', pointStyle: undefined, rotation: undefined, + textAlign: undefined, datasetIndex: 0 }, { text: 'dataset3', @@ -313,6 +323,7 @@ describe('Legend block tests', function() { strokeStyle: 'green', pointStyle: 'crossRot', rotation: undefined, + textAlign: undefined, datasetIndex: 2 }]); }); @@ -368,6 +379,7 @@ describe('Legend block tests', function() { strokeStyle: 'green', pointStyle: undefined, rotation: undefined, + textAlign: undefined, datasetIndex: 2 }, { text: 'dataset2', @@ -381,6 +393,7 @@ describe('Legend block tests', function() { strokeStyle: 'rgba(0,0,0,0.1)', pointStyle: undefined, rotation: undefined, + textAlign: undefined, datasetIndex: 1 }, { text: 'dataset1', @@ -394,6 +407,7 @@ describe('Legend block tests', function() { strokeStyle: 'rgba(0,0,0,0.1)', pointStyle: undefined, rotation: undefined, + textAlign: undefined, datasetIndex: 0 }]); }); @@ -524,6 +538,7 @@ describe('Legend block tests', function() { strokeStyle: 'red', pointStyle: undefined, rotation: undefined, + textAlign: undefined, datasetIndex: 0 }]); }); @@ -565,6 +580,7 @@ describe('Legend block tests', function() { strokeStyle: 'rgb(205, 0, 0)', pointStyle: undefined, rotation: undefined, + textAlign: undefined, datasetIndex: 0 }]); }); @@ -621,6 +637,7 @@ describe('Legend block tests', function() { strokeStyle: 'green', pointStyle: 'crossRot', rotation: 0, + textAlign: undefined, datasetIndex: 0 }, { text: 'dataset2', @@ -634,6 +651,7 @@ describe('Legend block tests', function() { strokeStyle: '#f31', pointStyle: 'crossRot', rotation: 15, + textAlign: undefined, datasetIndex: 1 }]); }); @@ -691,6 +709,7 @@ describe('Legend block tests', function() { strokeStyle: 'green', pointStyle: 'star', rotation: 0, + textAlign: undefined, datasetIndex: 0 }, { text: 'dataset2', @@ -704,6 +723,7 @@ describe('Legend block tests', function() { strokeStyle: '#f31', pointStyle: 'star', rotation: 15, + textAlign: undefined, datasetIndex: 1 }]); }); diff --git a/types/index.esm.d.ts b/types/index.esm.d.ts index 2d3f4e2cb..65b1d2b88 100644 --- a/types/index.esm.d.ts +++ b/types/index.esm.d.ts @@ -2057,6 +2057,11 @@ export interface LegendItem { * Rotation of the point in degrees (only used if usePointStyle is true) */ rotation?: number; + + /** + * Text alignment + */ + textAlign?: TextAlign; } export interface LegendElement extends Element, LayoutItem {} @@ -2076,7 +2081,7 @@ export interface LegendOptions { * Alignment of the legend. * @default 'center' */ - align: TextAlign; + align: 'start' | 'center' | 'end'; /** * Marks that this box should take the full width/height of the canvas (moving other boxes). This is unlikely to need to be changed in day-to-day use. * @default true @@ -2146,6 +2151,11 @@ export interface LegendOptions { */ pointStyle: PointStyle; + /** + * Text alignment + */ + textAlign?: TextAlign; + /** * Label style will match corresponding point style (size is based on the minimum value between boxWidth and font.size). * @default false