From 050d45e5d4db61e425755f66a9b5e9aac8af6132 Mon Sep 17 00:00:00 2001 From: stockiNail Date: Mon, 2 Jan 2023 09:41:21 +0100 Subject: [PATCH 01/37] Enable centered label drawing for doughnut controllers --- src/annotation.js | 3 + src/helpers/helpers.options.js | 15 +++- src/innerLabel.js | 142 +++++++++++++++++++++++++++++++++ 3 files changed, 159 insertions(+), 1 deletion(-) create mode 100644 src/innerLabel.js diff --git a/src/annotation.js b/src/annotation.js index cccccb353..07035609e 100644 --- a/src/annotation.js +++ b/src/annotation.js @@ -6,6 +6,7 @@ import {updateElements, resolveType} from './elements'; import {annotationTypes} from './types'; import {requireVersion} from './helpers'; import {version} from '../package.json'; +import innerLabel from './innerLabel'; const chartStates = new Map(); @@ -14,6 +15,8 @@ export default { version, + innerLabel, + beforeRegister() { requireVersion('chart.js', '3.7', Chart.version); }, diff --git a/src/helpers/helpers.options.js b/src/helpers/helpers.options.js index b800d02e0..333a5ad72 100644 --- a/src/helpers/helpers.options.js +++ b/src/helpers/helpers.options.js @@ -1,4 +1,4 @@ -import {isObject, valueOrDefault, defined} from 'chart.js/helpers'; +import {isObject, isArray, toFont, valueOrDefault, defined} from 'chart.js/helpers'; import {clamp} from './helpers.core'; const isPercentString = (s) => typeof s === 'string' && s.endsWith('%'); @@ -78,6 +78,19 @@ export function toPosition(value) { }; } +export function toFonts(options, fitRatio) { + const optFont = options.font; + let fonts = isArray(optFont) ? optFont.map(f => toFont(f)) : [toFont(optFont)]; + if (fitRatio < 1) { + fonts = fonts.map(function(f) { + f.size = Math.floor(f.size * fitRatio); + f.lineHeight = undefined; + return toFont(f); + }); + } + return fonts; +} + /** * @param {AnnotationPointCoordinates} options * @returns {boolean} diff --git a/src/innerLabel.js b/src/innerLabel.js new file mode 100644 index 000000000..c09e34a6f --- /dev/null +++ b/src/innerLabel.js @@ -0,0 +1,142 @@ +import {DoughnutController} from 'chart.js'; +import {drawLabel, measureLabelSize, toFonts, setShadowStyle, isImageOrCanvas} from './helpers'; +import {version} from '../package.json'; + +const chartStates = new Map(); + +function isVisible(options) { + return options.display && options.content; +} + +function isDrawable(options, caller, state) { + return isVisible(options) && options.drawTime === caller && state.drawable; +} + +function getController(chart) { + for (let i = 0; i < chart.data.datasets.length; i++) { + const controller = chart.getDatasetMeta(i).controller; + if (controller instanceof DoughnutController) { + return controller; + } + } +} + +function update(chart, options) { + if (!isVisible(options)) { + return; + } + const state = chartStates.get(chart); + const controller = getController(chart); + state.drawable = !!controller; + if (!controller) { + return; + } + const {ctx, chartArea} = chart; + const innerRadius = controller.innerRadius; + // state.fonts = toFonts(options); + let size = measureLabelSize(ctx, options); + const hypotenuse = Math.sqrt(Math.pow(size.width, 2) + Math.pow(size.height, 2)); + const innerDiameter = innerRadius * 2; + const fitRatio = innerDiameter / hypotenuse; + if (fitRatio < 1) { + if (isImageOrCanvas(options.content)) { + size.width *= fitRatio; + size.height *= fitRatio; + } else { + state.fonts = toFonts(options, fitRatio); + size = measureLabelSize(ctx, options, state.fonts); + } + } + const centerX = (chartArea.left + chartArea.right) / 2 + controller.offsetX; + const centerY = (chartArea.top + chartArea.bottom) / 2 + controller.offsetY; + state.rect = { + x: centerX - size.width / 2 + options.xAdjust, + y: centerY - size.height / 2 + options.yAdjust, + ...size + }; +} + +function draw(chart, caller, options) { + const state = chartStates.get(chart); + if (!isDrawable(options, caller, state)) { + return; + } + const {fonts, rect} = state; + const {ctx} = chart; + ctx.save(); + setShadowStyle(ctx, options); + drawLabel(ctx, rect, options, fonts); + ctx.restore(); +} + +export default { + id: 'innerlabel', + + version, + + beforeInit(chart) { + chartStates.set(chart, { + drawable: true, + fonts: undefined, + rect: undefined + }); + }, + + afterUpdate(chart, _args, options) { + update(chart, options); + }, + + beforeDatasetsDraw(chart, _args, options) { + draw(chart, 'beforeDatasetsDraw', options); + }, + + afterDatasetsDraw(chart, _args, options) { + draw(chart, 'afterDatasetsDraw', options); + }, + + beforeDraw(chart, _args, options) { + draw(chart, 'beforeDraw', options); + }, + + afterDraw(chart, _args, options) { + draw(chart, 'afterDraw', options); + }, + + afterDestroy(chart) { + chartStates.delete(chart); + }, + + defaults: { + color: 'black', + content: null, + drawTime: 'beforeDatasetsDraw', + display: true, + font: { + family: undefined, + lineHeight: undefined, + size: undefined, + style: undefined, + weight: undefined + }, + height: undefined, + shadowBlur: 0, + shadowColor: 'transparent', + shadowOffsetX: 0, + shadowOffsetY: 0, + textAlign: 'center', + textStrokeColor: undefined, + textStrokeWidth: 0, + width: undefined, + xAdjust: 0, + yAdjust: 0 + }, + + descriptors: { + _indexable: false, + _scriptable: true, + _fallback: true + }, + + additionalOptionScopes: [''] + +}; From bffc4525e5d47f6a406cecef657a5062daf16563 Mon Sep 17 00:00:00 2001 From: stockiNail Date: Mon, 2 Jan 2023 16:29:21 +0100 Subject: [PATCH 02/37] InnerLabel uses the label annotation --- src/elements.js | 8 +- src/helpers/helpers.canvas.js | 92 ++++++++++++----- src/innerLabel.js | 186 +++++++++++++++++----------------- src/types/label.js | 18 +++- 4 files changed, 179 insertions(+), 125 deletions(-) diff --git a/src/elements.js b/src/elements.js index 5d296f7ab..652695820 100644 --- a/src/elements.js +++ b/src/elements.js @@ -1,11 +1,14 @@ import {Animations} from 'chart.js'; -import {isObject, defined} from 'chart.js/helpers'; +import {isObject, isArray, defined} from 'chart.js/helpers'; import {hooks} from './events'; import {annotationTypes} from './types'; const directUpdater = { update: Object.assign }; +// https://github.com/chartjs/chartjs-plugin-annotation/pull/801 +// font can be set as object or array, the only exception +const inspect = (prop, value, optDefs) => isObject(optDefs) && (prop !== 'font' || !isArray(value)); /** * @typedef { import("chart.js").Chart } Chart @@ -123,7 +126,7 @@ function resolveObj(resolver, defs) { for (const prop of Object.keys(defs)) { const optDefs = defs[prop]; const value = resolver[prop]; - result[prop] = isObject(optDefs) ? resolveObj(value, optDefs) : value; + result[prop] = inspect(prop, value, optDefs) ? resolveObj(value, optDefs) : value; } return result; } @@ -148,3 +151,4 @@ function resyncElements(elements, annotations) { } return elements; } + diff --git a/src/helpers/helpers.canvas.js b/src/helpers/helpers.canvas.js index 5d81d9ede..ab6436146 100644 --- a/src/helpers/helpers.canvas.js +++ b/src/helpers/helpers.canvas.js @@ -1,8 +1,12 @@ -import {addRoundedRectPath, isArray, toFont, toTRBLCorners, toRadians} from 'chart.js/helpers'; +import {addRoundedRectPath, isArray, toTRBLCorners, toRadians} from 'chart.js/helpers'; import {clampAll} from './helpers.core'; -import {calculateTextAlignment, getSize} from './helpers.options'; +import {calculateTextAlignment, getSize, toFonts} from './helpers.options'; const widthCache = new Map(); +const fontsKey = (fonts) => fonts.reduce(function(prev, item) { + prev += item.string; + return prev; +}, ''); /** * @typedef { import('chart.js').Point } Point @@ -69,30 +73,25 @@ export function setShadowStyle(ctx, options) { * @param {CoreLabelOptions} options * @returns {{width: number, height: number}} */ -export function measureLabelSize(ctx, options) { +export function measureLabelSize(ctx, options, fitRatio) { const content = options.content; if (isImageOrCanvas(content)) { - return { + const size = { width: getSize(content.width, options.width), height: getSize(content.height, options.height) }; + if (fitRatio < 1) { + size.width = Math.floor(size.width * fitRatio); + size.height = Math.floor(size.height * fitRatio); + } + return size; } - const font = toFont(options.font); const strokeWidth = options.textStrokeWidth; const lines = isArray(content) ? content : [content]; - const mapKey = lines.join() + font.string + strokeWidth + (ctx._measureText ? '-spriting' : ''); + const fonts = toFonts(options, fitRatio); + const mapKey = lines.join() + fontsKey(fonts) + strokeWidth + (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 + strokeWidth); - } - ctx.restore(); - const height = count * font.lineHeight + strokeWidth; - widthCache.set(mapKey, {width, height}); + widthCache.set(mapKey, calculateLabelSize(ctx, lines, fonts, strokeWidth)); } return widthCache.get(mapKey); } @@ -127,26 +126,25 @@ export function drawBox(ctx, rect, options) { * @param {{x: number, y: number, width: number, height: number}} rect * @param {CoreLabelOptions} options */ -export function drawLabel(ctx, rect, options) { +export function drawLabel(ctx, rect, options, fitRatio) { const content = options.content; if (isImageOrCanvas(content)) { ctx.drawImage(content, rect.x, rect.y, rect.width, rect.height); return; } const labels = isArray(content) ? content : [content]; - const font = toFont(options.font); - const lh = font.lineHeight; + const fonts = toFonts(options, fitRatio); + const optColor = options.color; + const colors = isArray(optColor) ? optColor : [optColor]; const x = calculateTextAlignment(rect, options); - const y = rect.y + (lh / 2) + options.textStrokeWidth / 2; + const y = rect.y + options.textStrokeWidth / 2; ctx.save(); - ctx.font = font.string; ctx.textBaseline = 'middle'; ctx.textAlign = options.textAlign; if (setTextStrokeStyle(ctx, options)) { - labels.forEach((l, i) => ctx.strokeText(l, x, y + (i * lh))); + applyLabelDecoration(ctx, {x, y}, labels, fonts); } - ctx.fillStyle = options.color; - labels.forEach((l, i) => ctx.fillText(l, x, y + (i * lh))); + applyLabelContent(ctx, {x, y}, labels, {fonts, colors}); ctx.restore(); } @@ -160,3 +158,47 @@ function setTextStrokeStyle(ctx, options) { return true; } } + +function calculateLabelSize(ctx, lines, fonts, strokeWidth) { + ctx.save(); + const count = lines.length; + let width = 0; + let height = strokeWidth; + for (let i = 0; i < count; i++) { + const font = fonts[Math.min(i, fonts.length - 1)]; + ctx.font = font.string; + const text = lines[i]; + width = Math.max(width, ctx.measureText(text).width + strokeWidth); + height += font.lineHeight; + } + ctx.restore(); + return {width, height}; +} + +function applyLabelDecoration(ctx, {x, y}, labels, fonts) { + ctx.beginPath(); + let lhs = 0; + labels.forEach(function(l, i) { + const f = fonts[Math.min(i, fonts.length - 1)]; + const lh = f.lineHeight; + ctx.font = f.string; + ctx.strokeText(l, x, y + lh / 2 + lhs); + lhs += lh; + }); + ctx.stroke(); +} + +function applyLabelContent(ctx, {x, y}, labels, {fonts, colors}) { + let lhs = 0; + labels.forEach(function(l, i) { + const c = colors[Math.min(i, colors.length - 1)]; + const f = fonts[Math.min(i, fonts.length - 1)]; + const lh = f.lineHeight; + ctx.beginPath(); + ctx.font = f.string; + ctx.fillStyle = c; + ctx.fillText(l, x, y + lh / 2 + lhs); + lhs += lh; + ctx.fill(); + }); +} diff --git a/src/innerLabel.js b/src/innerLabel.js index c09e34a6f..c2c960975 100644 --- a/src/innerLabel.js +++ b/src/innerLabel.js @@ -1,89 +1,49 @@ -import {DoughnutController} from 'chart.js'; -import {drawLabel, measureLabelSize, toFonts, setShadowStyle, isImageOrCanvas} from './helpers'; +import {Chart, DoughnutController} from 'chart.js'; +import {clipArea, unclipArea} from 'chart.js/helpers'; +import {LabelAnnotation} from './types'; +import {updateElements} from './elements'; import {version} from '../package.json'; const chartStates = new Map(); -function isVisible(options) { - return options.display && options.content; -} - -function isDrawable(options, caller, state) { - return isVisible(options) && options.drawTime === caller && state.drawable; -} - -function getController(chart) { - for (let i = 0; i < chart.data.datasets.length; i++) { - const controller = chart.getDatasetMeta(i).controller; - if (controller instanceof DoughnutController) { - return controller; - } - } -} - -function update(chart, options) { - if (!isVisible(options)) { - return; - } - const state = chartStates.get(chart); - const controller = getController(chart); - state.drawable = !!controller; - if (!controller) { - return; - } - const {ctx, chartArea} = chart; - const innerRadius = controller.innerRadius; - // state.fonts = toFonts(options); - let size = measureLabelSize(ctx, options); - const hypotenuse = Math.sqrt(Math.pow(size.width, 2) + Math.pow(size.height, 2)); - const innerDiameter = innerRadius * 2; - const fitRatio = innerDiameter / hypotenuse; - if (fitRatio < 1) { - if (isImageOrCanvas(options.content)) { - size.width *= fitRatio; - size.height *= fitRatio; - } else { - state.fonts = toFonts(options, fitRatio); - size = measureLabelSize(ctx, options, state.fonts); - } - } - const centerX = (chartArea.left + chartArea.right) / 2 + controller.offsetX; - const centerY = (chartArea.top + chartArea.bottom) / 2 + controller.offsetY; - state.rect = { - x: centerX - size.width / 2 + options.xAdjust, - y: centerY - size.height / 2 + options.yAdjust, - ...size - }; -} - -function draw(chart, caller, options) { - const state = chartStates.get(chart); - if (!isDrawable(options, caller, state)) { - return; - } - const {fonts, rect} = state; - const {ctx} = chart; - ctx.save(); - setShadowStyle(ctx, options); - drawLabel(ctx, rect, options, fonts); - ctx.restore(); -} - export default { id: 'innerlabel', version, + start() { + Chart.register(LabelAnnotation); + }, + beforeInit(chart) { chartStates.set(chart, { - drawable: true, - fonts: undefined, - rect: undefined + controller: undefined, + annotations: [], + elements: [], + visibleElements: [], + listeners: {}, + listened: false, + moveListened: false, + hovered: [] }); }, - afterUpdate(chart, _args, options) { - update(chart, options); + beforeUpdate(chart, args, options) { + const state = chartStates.get(chart); + const controller = state.controller = getController(chart); + if (!controller) { + return; + } + options.type = 'label'; + options.center = getControllerCenter(chart, controller); + state.annotations = [options]; + }, + + afterUpdate(chart, args, options) { + const state = chartStates.get(chart); + updateElements(chart, state, options, args.mode); + fit(chart, state, options); + state.visibleElements = state.elements.filter(el => !el.skip && el.options.display); }, beforeDatasetsDraw(chart, _args, options) { @@ -107,36 +67,72 @@ export default { }, defaults: { - color: 'black', - content: null, - drawTime: 'beforeDatasetsDraw', - display: true, - font: { - family: undefined, - lineHeight: undefined, - size: undefined, - style: undefined, - weight: undefined + animations: { + numbers: { + properties: ['x', 'y', 'x2', 'y2', 'width', 'height', 'centerX', 'centerY', 'pointX', 'pointY'], + type: 'number' + }, }, - height: undefined, - shadowBlur: 0, - shadowColor: 'transparent', - shadowOffsetX: 0, - shadowOffsetY: 0, - textAlign: 'center', - textStrokeColor: undefined, - textStrokeWidth: 0, - width: undefined, - xAdjust: 0, - yAdjust: 0 + clip: true, + drawTime: 'afterDatasetsDraw', + ...LabelAnnotation.defaults }, descriptors: { _indexable: false, _scriptable: true, - _fallback: true }, - additionalOptionScopes: [''] + additionalOptionScopes: [`elements.${LabelAnnotation.id}`, ''] }; + +function getController(chart) { + for (let i = 0; i < chart.data.datasets.length; i++) { + const controller = chart.getDatasetMeta(i).controller; + if (controller instanceof DoughnutController) { + return controller; + } + } +} + +function getControllerCenter({chartArea}, controller) { + return { + x: (chartArea.left + chartArea.right) / 2 + controller.offsetX, + y: (chartArea.top + chartArea.bottom) / 2 + controller.offsetY + }; +} + +function fit(chart, state, options, mode) { + const {controller, elements} = state; + if (!controller || !elements.length) { + return; + } + const element = elements[0]; + const innerRadius = controller.innerRadius; + const hypotenuse = Math.sqrt(Math.pow(element.width, 2) + Math.pow(element.height, 2)); + const innerDiameter = innerRadius * 2; + const fitRatio = element._fitRatio = innerDiameter / hypotenuse; + if (fitRatio < 1) { + updateElements(chart, state, options, mode); + } +} + +function draw(chart, caller, options) { + const state = chartStates.get(chart); + const clip = options.clip; + const {ctx, chartArea} = chart; + const {visibleElements} = state; + + if (clip) { + clipArea(ctx, chartArea); + } + + for (const element of visibleElements) { + element.draw(chart.ctx, chartArea); + } + + if (clip) { + unclipArea(ctx); + } +} diff --git a/src/types/label.js b/src/types/label.js index 8c6c6c1d8..80d74e7a6 100644 --- a/src/types/label.js +++ b/src/types/label.js @@ -6,6 +6,11 @@ const positions = ['left', 'bottom', 'top', 'right']; export default class LabelAnnotation extends Element { + constructor() { + super(); + this._fitRatio = undefined; + } + inRange(mouseX, mouseY, axis, useFinalPosition) { const {x, y} = rotated({x: mouseX, y: mouseY}, this.getCenterPoint(useFinalPosition), toRadians(-this.rotation)); return inBoxRange({x, y}, this.getProps(['x', 'y', 'x2', 'y2'], useFinalPosition), axis, this.options.borderWidth); @@ -25,20 +30,23 @@ export default class LabelAnnotation extends Element { translate(ctx, this.getCenterPoint(), this.rotation); drawCallout(ctx, this); drawBox(ctx, this, options); - drawLabel(ctx, getLabelSize(this), options); + drawLabel(ctx, getLabelSize(this), options, this._fitRatio); ctx.restore(); } resolveElementProperties(chart, options) { let point; - if (!isBoundToPoint(options)) { + if (isInnerLabel(options)) { + point = options.center; + } else if (!isBoundToPoint(options)) { const {centerX, centerY} = resolveBoxProperties(chart, options); point = {x: centerX, y: centerY}; } else { point = getChartPoint(chart, options); } + const padding = toPadding(options.padding); - const labelSize = measureLabelSize(chart.ctx, options); + const labelSize = measureLabelSize(chart.ctx, options, this._fitRatio); const boxSize = measureRect(point, labelSize, options, padding); return { pointX: point.x, @@ -268,3 +276,7 @@ function isPointInRange(element, callout, position) { } return element.inRange(x, y); } + +function isInnerLabel(options) { + return options.center && defined(options.center.x) && defined(options.center.y); +} From 00fa4eee6e71e603546b781bf5e1ae1027068e70 Mon Sep 17 00:00:00 2001 From: stockiNail Date: Mon, 2 Jan 2023 16:53:17 +0100 Subject: [PATCH 03/37] moves code in afterUpdate hook --- src/innerLabel.js | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/innerLabel.js b/src/innerLabel.js index c2c960975..1b77ee947 100644 --- a/src/innerLabel.js +++ b/src/innerLabel.js @@ -28,7 +28,7 @@ export default { }); }, - beforeUpdate(chart, args, options) { + afterUpdate(chart, args, options) { const state = chartStates.get(chart); const controller = state.controller = getController(chart); if (!controller) { @@ -37,10 +37,6 @@ export default { options.type = 'label'; options.center = getControllerCenter(chart, controller); state.annotations = [options]; - }, - - afterUpdate(chart, args, options) { - const state = chartStates.get(chart); updateElements(chart, state, options, args.mode); fit(chart, state, options); state.visibleElements = state.elements.filter(el => !el.skip && el.options.display); From 93e48161ee7cc8bfb977e983e06c187e291c13c9 Mon Sep 17 00:00:00 2001 From: stockiNail Date: Mon, 2 Jan 2023 19:15:26 +0100 Subject: [PATCH 04/37] adds listeners to events --- src/innerLabel.js | 15 ++++++++++----- src/types/label.js | 5 +++++ 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/innerLabel.js b/src/innerLabel.js index 1b77ee947..28ec90d93 100644 --- a/src/innerLabel.js +++ b/src/innerLabel.js @@ -1,5 +1,6 @@ import {Chart, DoughnutController} from 'chart.js'; import {clipArea, unclipArea} from 'chart.js/helpers'; +import {handleEvent, updateListeners} from './events'; import {LabelAnnotation} from './types'; import {updateElements} from './elements'; import {version} from '../package.json'; @@ -37,6 +38,7 @@ export default { options.type = 'label'; options.center = getControllerCenter(chart, controller); state.annotations = [options]; + updateListeners(chart, state, options); updateElements(chart, state, options, args.mode); fit(chart, state, options); state.visibleElements = state.elements.filter(el => !el.skip && el.options.display); @@ -58,6 +60,13 @@ export default { draw(chart, 'afterDraw', options); }, + beforeEvent(chart, args, options) { + const state = chartStates.get(chart); + if (handleEvent(state, args.event, options)) { + args.changed = true; + } + }, + afterDestroy(chart) { chartStates.delete(chart); }, @@ -70,15 +79,11 @@ export default { }, }, clip: true, + click: undefined, drawTime: 'afterDatasetsDraw', ...LabelAnnotation.defaults }, - descriptors: { - _indexable: false, - _scriptable: true, - }, - additionalOptionScopes: [`elements.${LabelAnnotation.id}`, ''] }; diff --git a/src/types/label.js b/src/types/label.js index 80d74e7a6..c83f9743b 100644 --- a/src/types/label.js +++ b/src/types/label.js @@ -1,6 +1,7 @@ import {Element} from 'chart.js'; import {drawBox, drawLabel, measureLabelSize, getChartPoint, toPosition, setBorderStyle, getSize, inBoxRange, isBoundToPoint, resolveBoxProperties, getRelativePosition, translate, rotated, getElementCenterPoint} from '../helpers'; import {toPadding, toRadians, distanceBetweenPoints, defined} from 'chart.js/helpers'; +import {hooks} from '../events'; const positions = ['left', 'bottom', 'top', 'right']; @@ -121,6 +122,10 @@ LabelAnnotation.defaultRoutes = { borderColor: 'color' }; +LabelAnnotation.descriptors = { + _scriptable: (prop) => !hooks.includes(prop), +}; + function measureRect(point, size, options, padding) { const width = size.width + padding.width + options.borderWidth; const height = size.height + padding.height + options.borderWidth; From a2001f1aa6360c09f85dfecaddca1ff8243b4ddd Mon Sep 17 00:00:00 2001 From: stockiNail Date: Mon, 2 Jan 2023 19:23:19 +0100 Subject: [PATCH 05/37] changes context type for innerlabel --- src/elements.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/elements.js b/src/elements.js index 652695820..f0fdd0670 100644 --- a/src/elements.js +++ b/src/elements.js @@ -135,7 +135,7 @@ function getContext(chart, element, annotation) { return element.$context || (element.$context = Object.assign(Object.create(chart.getContext()), { element, id: annotation.id, - type: 'annotation' + type: annotation.center ? 'innerlabel' : 'annotation' })); } From 5fb097d1a4116ff0eff512045dbde2c702b5a569 Mon Sep 17 00:00:00 2001 From: stockiNail Date: Tue, 3 Jan 2023 01:57:17 +0100 Subject: [PATCH 06/37] moves to a specific element for doughnut inner label --- src/annotation.js | 11 ++-- src/innerLabel.js | 66 ++++++---------------- src/types/doughnutLabel.js | 112 +++++++++++++++++++++++++++++++++++++ src/types/index.js | 10 +++- src/types/label.js | 39 ++++++------- 5 files changed, 160 insertions(+), 78 deletions(-) create mode 100644 src/types/doughnutLabel.js diff --git a/src/annotation.js b/src/annotation.js index 07035609e..dabf36154 100644 --- a/src/annotation.js +++ b/src/annotation.js @@ -3,12 +3,13 @@ import {clipArea, unclipArea, isObject, isArray} from 'chart.js/helpers'; import {handleEvent, hooks, updateListeners} from './events'; import {adjustScaleRange, verifyScaleOptions} from './scale'; import {updateElements, resolveType} from './elements'; -import {annotationTypes} from './types'; +import {annotationTypes, filterTypes} from './types'; import {requireVersion} from './helpers'; import {version} from '../package.json'; import innerLabel from './innerLabel'; const chartStates = new Map(); +const registrableTypes = Object.values(annotationTypes).filter(filterTypes); export default { id: 'annotation', @@ -22,11 +23,11 @@ export default { }, afterRegister() { - Chart.register(annotationTypes); + Chart.register(registrableTypes); }, afterUnregister() { - Chart.unregister(annotationTypes); + Chart.unregister(registrableTypes); }, beforeInit(chart) { @@ -49,13 +50,13 @@ export default { if (isObject(annotationOptions)) { Object.keys(annotationOptions).forEach(key => { const value = annotationOptions[key]; - if (isObject(value)) { + if (isObject(value) && filterTypes(value)) { value.id = key; annotations.push(value); } }); } else if (isArray(annotationOptions)) { - annotations.push(...annotationOptions); + annotations.push(...annotationOptions.filter(filterTypes)); } verifyScaleOptions(annotations, chart.scales); }, diff --git a/src/innerLabel.js b/src/innerLabel.js index 28ec90d93..536cf72c1 100644 --- a/src/innerLabel.js +++ b/src/innerLabel.js @@ -1,7 +1,6 @@ -import {Chart, DoughnutController} from 'chart.js'; import {clipArea, unclipArea} from 'chart.js/helpers'; import {handleEvent, updateListeners} from './events'; -import {LabelAnnotation} from './types'; +import {DoughnutLabelAnnotation} from './types'; import {updateElements} from './elements'; import {version} from '../package.json'; @@ -12,13 +11,8 @@ export default { version, - start() { - Chart.register(LabelAnnotation); - }, - beforeInit(chart) { chartStates.set(chart, { - controller: undefined, annotations: [], elements: [], visibleElements: [], @@ -29,18 +23,16 @@ export default { }); }, - afterUpdate(chart, args, options) { + beforeUpdate(chart, args, options) { const state = chartStates.get(chart); - const controller = state.controller = getController(chart); - if (!controller) { - return; - } - options.type = 'label'; - options.center = getControllerCenter(chart, controller); + options.type = 'doughnutLabel'; state.annotations = [options]; + }, + + afterUpdate(chart, args, options) { + const state = chartStates.get(chart); updateListeners(chart, state, options); updateElements(chart, state, options, args.mode); - fit(chart, state, options); state.visibleElements = state.elements.filter(el => !el.skip && el.options.display); }, @@ -79,46 +71,18 @@ export default { }, }, clip: true, - click: undefined, drawTime: 'afterDatasetsDraw', - ...LabelAnnotation.defaults + interaction: { + mode: undefined, + axis: undefined, + intersect: undefined + } }, - additionalOptionScopes: [`elements.${LabelAnnotation.id}`, ''] + additionalOptionScopes: [`elements.${DoughnutLabelAnnotation.id}`, ''] }; -function getController(chart) { - for (let i = 0; i < chart.data.datasets.length; i++) { - const controller = chart.getDatasetMeta(i).controller; - if (controller instanceof DoughnutController) { - return controller; - } - } -} - -function getControllerCenter({chartArea}, controller) { - return { - x: (chartArea.left + chartArea.right) / 2 + controller.offsetX, - y: (chartArea.top + chartArea.bottom) / 2 + controller.offsetY - }; -} - -function fit(chart, state, options, mode) { - const {controller, elements} = state; - if (!controller || !elements.length) { - return; - } - const element = elements[0]; - const innerRadius = controller.innerRadius; - const hypotenuse = Math.sqrt(Math.pow(element.width, 2) + Math.pow(element.height, 2)); - const innerDiameter = innerRadius * 2; - const fitRatio = element._fitRatio = innerDiameter / hypotenuse; - if (fitRatio < 1) { - updateElements(chart, state, options, mode); - } -} - function draw(chart, caller, options) { const state = chartStates.get(chart); const clip = options.clip; @@ -130,7 +94,9 @@ function draw(chart, caller, options) { } for (const element of visibleElements) { - element.draw(chart.ctx, chartArea); + if (element.options.drawTime === caller) { + element.draw(chart.ctx, chartArea); + } } if (clip) { diff --git a/src/types/doughnutLabel.js b/src/types/doughnutLabel.js new file mode 100644 index 000000000..7be41115e --- /dev/null +++ b/src/types/doughnutLabel.js @@ -0,0 +1,112 @@ +import LabelAnnotation from './label'; +import {DoughnutController} from 'chart.js'; +import {toPadding} from 'chart.js/helpers'; +import {drawBox, drawLabel, measureLabelSize, translate} from '../helpers'; +import {hooks} from '../events'; + +export default class DoughnutLabelAnnotation extends LabelAnnotation { + + draw(ctx) { + const options = this.options; + if (!options.display || !options.content) { + return; + } + ctx.save(); + translate(ctx, this.getCenterPoint(), this.rotation); + drawBox(ctx, this, options); + drawLabel(ctx, this._getLabelSize(), options, this.fitRatio); + ctx.restore(); + } + + resolveElementProperties(chart, options) { + const controller = getController(chart); + if (!controller) { + return; + } + const point = getControllerCenter(chart, controller); + let labelSize = measureLabelSize(chart.ctx, options); + const padding = toPadding(options.padding); + const fitRatio = getFitRatio(chart, options, labelSize, padding, controller); + if (fitRatio < 1) { + labelSize = measureLabelSize(chart.ctx, options, fitRatio); + } + const boxSize = super._measureRect(point, labelSize, options, padding); + return { + pointX: point.x, + pointY: point.y, + ...boxSize, + fitRatio, + rotation: options.rotation + }; + } +} + +DoughnutLabelAnnotation.id = 'doughnutLabelAnnotation'; + +DoughnutLabelAnnotation.defaults = { + backgroundColor: 'transparent', + backgroundShadowColor: 'transparent', + borderCapStyle: 'butt', + borderDash: [], + borderDashOffset: 0, + borderJoinStyle: 'miter', + borderRadius: 0, + borderShadowColor: 'transparent', + borderWidth: 0, + color: 'black', + content: null, + display: true, + font: { + family: undefined, + lineHeight: undefined, + size: undefined, + style: undefined, + weight: undefined + }, + height: undefined, + padding: 6, + position: 'center', + rotation: 0, + shadowBlur: 0, + shadowOffsetX: 0, + shadowOffsetY: 0, + textAlign: 'center', + textStrokeColor: undefined, + textStrokeWidth: 0, + width: undefined, + xAdjust: 0, + yAdjust: 0 +}; + +DoughnutLabelAnnotation.defaultRoutes = { + borderColor: 'color' +}; + +DoughnutLabelAnnotation.descriptors = { + _scriptable: (prop) => !hooks.includes(prop), +}; + +function getController(chart) { + for (let i = 0; i < chart.data.datasets.length; i++) { + const controller = chart.getDatasetMeta(i).controller; + if (controller instanceof DoughnutController) { + return controller; + } + } +} + +function getControllerCenter({chartArea}, controller) { + return { + x: (chartArea.left + chartArea.right) / 2 + controller.offsetX, + y: (chartArea.top + chartArea.bottom) / 2 + controller.offsetY + }; +} + +function getFitRatio(chart, options, {width, height}, padding, controller) { + const w = width + padding.width + options.borderWidth; + const h = height + padding.height + options.borderWidth; + const innerRadius = controller.innerRadius; + const hypotenuse = Math.sqrt(Math.pow(w, 2) + Math.pow(h, 2)); + const innerDiameter = innerRadius * 2; + return innerDiameter / hypotenuse; +} diff --git a/src/types/index.js b/src/types/index.js index e7879da25..ce306e511 100644 --- a/src/types/index.js +++ b/src/types/index.js @@ -1,13 +1,18 @@ import {defaults} from 'chart.js'; +import {isObject} from 'chart.js/helpers'; import BoxAnnotation from './box'; +import DoughnutLabelAnnotation from './doughnutLabel'; import LineAnnotation from './line'; import EllipseAnnotation from './ellipse'; import LabelAnnotation from './label'; import PointAnnotation from './point'; import PolygonAnnotation from './polygon'; +export const filterTypes = key => (isObject(key) ? key.type : key) !== 'doughnutLabel'; + export const annotationTypes = { box: BoxAnnotation, + doughnutLabel: DoughnutLabelAnnotation, ellipse: EllipseAnnotation, label: LabelAnnotation, line: LineAnnotation, @@ -17,9 +22,10 @@ export const annotationTypes = { export { BoxAnnotation, - LineAnnotation, + DoughnutLabelAnnotation, EllipseAnnotation, LabelAnnotation, + LineAnnotation, PointAnnotation, PolygonAnnotation }; @@ -32,7 +38,7 @@ export { * - element defaults (defaults.elements.lineAnnotation) * - annotation plugin defaults (defaults.plugins.annotation, this is what we are registering here) */ -Object.keys(annotationTypes).forEach(key => { +Object.keys(annotationTypes).filter(filterTypes).forEach(key => { defaults.describe(`elements.${annotationTypes[key].id}`, { _fallback: 'plugins.annotation.common' }); diff --git a/src/types/label.js b/src/types/label.js index c83f9743b..49438d82a 100644 --- a/src/types/label.js +++ b/src/types/label.js @@ -1,17 +1,11 @@ import {Element} from 'chart.js'; import {drawBox, drawLabel, measureLabelSize, getChartPoint, toPosition, setBorderStyle, getSize, inBoxRange, isBoundToPoint, resolveBoxProperties, getRelativePosition, translate, rotated, getElementCenterPoint} from '../helpers'; import {toPadding, toRadians, distanceBetweenPoints, defined} from 'chart.js/helpers'; -import {hooks} from '../events'; const positions = ['left', 'bottom', 'top', 'right']; export default class LabelAnnotation extends Element { - constructor() { - super(); - this._fitRatio = undefined; - } - inRange(mouseX, mouseY, axis, useFinalPosition) { const {x, y} = rotated({x: mouseX, y: mouseY}, this.getCenterPoint(useFinalPosition), toRadians(-this.rotation)); return inBoxRange({x, y}, this.getProps(['x', 'y', 'x2', 'y2'], useFinalPosition), axis, this.options.borderWidth); @@ -31,24 +25,21 @@ export default class LabelAnnotation extends Element { translate(ctx, this.getCenterPoint(), this.rotation); drawCallout(ctx, this); drawBox(ctx, this, options); - drawLabel(ctx, getLabelSize(this), options, this._fitRatio); + drawLabel(ctx, this._getLabelSize(), options); ctx.restore(); } resolveElementProperties(chart, options) { let point; - if (isInnerLabel(options)) { - point = options.center; - } else if (!isBoundToPoint(options)) { + if (!isBoundToPoint(options)) { const {centerX, centerY} = resolveBoxProperties(chart, options); point = {x: centerX, y: centerY}; } else { point = getChartPoint(chart, options); } - const padding = toPadding(options.padding); - const labelSize = measureLabelSize(chart.ctx, options, this._fitRatio); - const boxSize = measureRect(point, labelSize, options, padding); + const labelSize = measureLabelSize(chart.ctx, options); + const boxSize = this._measureRect(point, labelSize, options, padding); return { pointX: point.x, pointY: point.y, @@ -56,6 +47,20 @@ export default class LabelAnnotation extends Element { rotation: options.rotation }; } + + /** + * @protected + */ + _measureRect(point, labelSize, options, padding) { + return measureRect(point, labelSize, options, padding); + } + + /** + * @protected + */ + _getLabelSize() { + return getLabelSize(this); + } } LabelAnnotation.id = 'labelAnnotation'; @@ -122,10 +127,6 @@ LabelAnnotation.defaultRoutes = { borderColor: 'color' }; -LabelAnnotation.descriptors = { - _scriptable: (prop) => !hooks.includes(prop), -}; - function measureRect(point, size, options, padding) { const width = size.width + padding.width + options.borderWidth; const height = size.height + padding.height + options.borderWidth; @@ -281,7 +282,3 @@ function isPointInRange(element, callout, position) { } return element.inRange(x, y); } - -function isInnerLabel(options) { - return options.center && defined(options.center.x) && defined(options.center.y); -} From 0fa5b9e8399757a097b26f4c583e73de6321fe61 Mon Sep 17 00:00:00 2001 From: stockiNail Date: Tue, 3 Jan 2023 02:05:04 +0100 Subject: [PATCH 07/37] removes specific context type for innerlabel --- src/elements.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/elements.js b/src/elements.js index f0fdd0670..652695820 100644 --- a/src/elements.js +++ b/src/elements.js @@ -135,7 +135,7 @@ function getContext(chart, element, annotation) { return element.$context || (element.$context = Object.assign(Object.create(chart.getContext()), { element, id: annotation.id, - type: annotation.center ? 'innerlabel' : 'annotation' + type: 'annotation' })); } From 6cbbf43a5c3ca4c4b51fd321bb3f3eb8dd037921 Mon Sep 17 00:00:00 2001 From: stockiNail Date: Tue, 3 Jan 2023 02:13:57 +0100 Subject: [PATCH 08/37] fixes returned properties when there is not any doughnut controller --- src/types/doughnutLabel.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/types/doughnutLabel.js b/src/types/doughnutLabel.js index 7be41115e..7d856152c 100644 --- a/src/types/doughnutLabel.js +++ b/src/types/doughnutLabel.js @@ -21,7 +21,7 @@ export default class DoughnutLabelAnnotation extends LabelAnnotation { resolveElementProperties(chart, options) { const controller = getController(chart); if (!controller) { - return; + return {}; } const point = getControllerCenter(chart, controller); let labelSize = measureLabelSize(chart.ctx, options); From b215785ab8b58fba6df5e7e768e05e3944e72bd7 Mon Sep 17 00:00:00 2001 From: stockiNail Date: Tue, 3 Jan 2023 10:44:08 +0100 Subject: [PATCH 09/37] removes inner label plugin and all managed by annotaiton one --- src/annotation.js | 19 +++---- src/innerLabel.js | 105 ------------------------------------- src/types/doughnutLabel.js | 5 -- src/types/index.js | 5 +- 4 files changed, 9 insertions(+), 125 deletions(-) delete mode 100644 src/innerLabel.js diff --git a/src/annotation.js b/src/annotation.js index dabf36154..f2601585a 100644 --- a/src/annotation.js +++ b/src/annotation.js @@ -3,31 +3,28 @@ import {clipArea, unclipArea, isObject, isArray} from 'chart.js/helpers'; import {handleEvent, hooks, updateListeners} from './events'; import {adjustScaleRange, verifyScaleOptions} from './scale'; import {updateElements, resolveType} from './elements'; -import {annotationTypes, filterTypes} from './types'; +import {annotationTypes} from './types'; import {requireVersion} from './helpers'; import {version} from '../package.json'; -import innerLabel from './innerLabel'; const chartStates = new Map(); -const registrableTypes = Object.values(annotationTypes).filter(filterTypes); +const isNotDoughnutLabel = key => (isObject(key) ? key.type : key) !== 'doughnutLabel'; export default { id: 'annotation', version, - innerLabel, - beforeRegister() { requireVersion('chart.js', '3.7', Chart.version); }, afterRegister() { - Chart.register(registrableTypes); + Chart.register(annotationTypes); }, afterUnregister() { - Chart.unregister(registrableTypes); + Chart.unregister(annotationTypes); }, beforeInit(chart) { @@ -50,20 +47,20 @@ export default { if (isObject(annotationOptions)) { Object.keys(annotationOptions).forEach(key => { const value = annotationOptions[key]; - if (isObject(value) && filterTypes(value)) { + if (isObject(value)) { value.id = key; annotations.push(value); } }); } else if (isArray(annotationOptions)) { - annotations.push(...annotationOptions.filter(filterTypes)); + annotations.push(...annotationOptions); } - verifyScaleOptions(annotations, chart.scales); + verifyScaleOptions(annotations.filter(isNotDoughnutLabel), chart.scales); }, afterDataLimits(chart, args) { const state = chartStates.get(chart); - adjustScaleRange(chart, args.scale, state.annotations.filter(a => a.display && a.adjustScaleRange)); + adjustScaleRange(chart, args.scale, state.annotations.filter(isNotDoughnutLabel).filter(a => a.display && a.adjustScaleRange)); }, afterUpdate(chart, args, options) { diff --git a/src/innerLabel.js b/src/innerLabel.js deleted file mode 100644 index 536cf72c1..000000000 --- a/src/innerLabel.js +++ /dev/null @@ -1,105 +0,0 @@ -import {clipArea, unclipArea} from 'chart.js/helpers'; -import {handleEvent, updateListeners} from './events'; -import {DoughnutLabelAnnotation} from './types'; -import {updateElements} from './elements'; -import {version} from '../package.json'; - -const chartStates = new Map(); - -export default { - id: 'innerlabel', - - version, - - beforeInit(chart) { - chartStates.set(chart, { - annotations: [], - elements: [], - visibleElements: [], - listeners: {}, - listened: false, - moveListened: false, - hovered: [] - }); - }, - - beforeUpdate(chart, args, options) { - const state = chartStates.get(chart); - options.type = 'doughnutLabel'; - state.annotations = [options]; - }, - - afterUpdate(chart, args, options) { - const state = chartStates.get(chart); - updateListeners(chart, state, options); - updateElements(chart, state, options, args.mode); - state.visibleElements = state.elements.filter(el => !el.skip && el.options.display); - }, - - beforeDatasetsDraw(chart, _args, options) { - draw(chart, 'beforeDatasetsDraw', options); - }, - - afterDatasetsDraw(chart, _args, options) { - draw(chart, 'afterDatasetsDraw', options); - }, - - beforeDraw(chart, _args, options) { - draw(chart, 'beforeDraw', options); - }, - - afterDraw(chart, _args, options) { - draw(chart, 'afterDraw', options); - }, - - beforeEvent(chart, args, options) { - const state = chartStates.get(chart); - if (handleEvent(state, args.event, options)) { - args.changed = true; - } - }, - - afterDestroy(chart) { - chartStates.delete(chart); - }, - - defaults: { - animations: { - numbers: { - properties: ['x', 'y', 'x2', 'y2', 'width', 'height', 'centerX', 'centerY', 'pointX', 'pointY'], - type: 'number' - }, - }, - clip: true, - drawTime: 'afterDatasetsDraw', - interaction: { - mode: undefined, - axis: undefined, - intersect: undefined - } - }, - - additionalOptionScopes: [`elements.${DoughnutLabelAnnotation.id}`, ''] - -}; - -function draw(chart, caller, options) { - const state = chartStates.get(chart); - const clip = options.clip; - const {ctx, chartArea} = chart; - const {visibleElements} = state; - - if (clip) { - clipArea(ctx, chartArea); - } - - for (const element of visibleElements) { - if (element.options.drawTime === caller) { - element.draw(chart.ctx, chartArea); - } - } - - if (clip) { - unclipArea(ctx); - } -} diff --git a/src/types/doughnutLabel.js b/src/types/doughnutLabel.js index 7d856152c..f97facfd6 100644 --- a/src/types/doughnutLabel.js +++ b/src/types/doughnutLabel.js @@ -2,7 +2,6 @@ import LabelAnnotation from './label'; import {DoughnutController} from 'chart.js'; import {toPadding} from 'chart.js/helpers'; import {drawBox, drawLabel, measureLabelSize, translate} from '../helpers'; -import {hooks} from '../events'; export default class DoughnutLabelAnnotation extends LabelAnnotation { @@ -82,10 +81,6 @@ DoughnutLabelAnnotation.defaultRoutes = { borderColor: 'color' }; -DoughnutLabelAnnotation.descriptors = { - _scriptable: (prop) => !hooks.includes(prop), -}; - function getController(chart) { for (let i = 0; i < chart.data.datasets.length; i++) { const controller = chart.getDatasetMeta(i).controller; diff --git a/src/types/index.js b/src/types/index.js index ce306e511..e4f126902 100644 --- a/src/types/index.js +++ b/src/types/index.js @@ -1,5 +1,4 @@ import {defaults} from 'chart.js'; -import {isObject} from 'chart.js/helpers'; import BoxAnnotation from './box'; import DoughnutLabelAnnotation from './doughnutLabel'; import LineAnnotation from './line'; @@ -8,8 +7,6 @@ import LabelAnnotation from './label'; import PointAnnotation from './point'; import PolygonAnnotation from './polygon'; -export const filterTypes = key => (isObject(key) ? key.type : key) !== 'doughnutLabel'; - export const annotationTypes = { box: BoxAnnotation, doughnutLabel: DoughnutLabelAnnotation, @@ -38,7 +35,7 @@ export { * - element defaults (defaults.elements.lineAnnotation) * - annotation plugin defaults (defaults.plugins.annotation, this is what we are registering here) */ -Object.keys(annotationTypes).filter(filterTypes).forEach(key => { +Object.keys(annotationTypes).forEach(key => { defaults.describe(`elements.${annotationTypes[key].id}`, { _fallback: 'plugins.annotation.common' }); From 33be0fe4e9082c1c9845fd0811a389e23f3ffc77 Mon Sep 17 00:00:00 2001 From: stockiNail Date: Tue, 3 Jan 2023 12:40:57 +0100 Subject: [PATCH 10/37] adds js doc and fix some CC issues --- src/helpers/helpers.canvas.js | 6 ++++-- src/helpers/helpers.options.js | 15 ++++++++++++++- src/types/doughnutLabel.js | 9 +++++---- 3 files changed, 23 insertions(+), 7 deletions(-) diff --git a/src/helpers/helpers.canvas.js b/src/helpers/helpers.canvas.js index ab6436146..228860741 100644 --- a/src/helpers/helpers.canvas.js +++ b/src/helpers/helpers.canvas.js @@ -1,6 +1,6 @@ import {addRoundedRectPath, isArray, toTRBLCorners, toRadians} from 'chart.js/helpers'; import {clampAll} from './helpers.core'; -import {calculateTextAlignment, getSize, toFonts} from './helpers.options'; +import {calculateTextAlignment, getSize, toFonts, shouldFit} from './helpers.options'; const widthCache = new Map(); const fontsKey = (fonts) => fonts.reduce(function(prev, item) { @@ -71,6 +71,7 @@ export function setShadowStyle(ctx, options) { /** * @param {CanvasRenderingContext2D} ctx * @param {CoreLabelOptions} options + * @param {number} fitRatio * @returns {{width: number, height: number}} */ export function measureLabelSize(ctx, options, fitRatio) { @@ -80,7 +81,7 @@ export function measureLabelSize(ctx, options, fitRatio) { width: getSize(content.width, options.width), height: getSize(content.height, options.height) }; - if (fitRatio < 1) { + if (shouldFit(options, fitRatio)) { size.width = Math.floor(size.width * fitRatio); size.height = Math.floor(size.height * fitRatio); } @@ -125,6 +126,7 @@ export function drawBox(ctx, rect, options) { * @param {CanvasRenderingContext2D} ctx * @param {{x: number, y: number, width: number, height: number}} rect * @param {CoreLabelOptions} options + * @param {number} fitRatio */ export function drawLabel(ctx, rect, options, fitRatio) { const content = options.content; diff --git a/src/helpers/helpers.options.js b/src/helpers/helpers.options.js index 333a5ad72..9058c0891 100644 --- a/src/helpers/helpers.options.js +++ b/src/helpers/helpers.options.js @@ -5,6 +5,7 @@ const isPercentString = (s) => typeof s === 'string' && s.endsWith('%'); const toPercent = (s) => clamp(parseFloat(s) / 100, 0, 1); /** + * @typedef { import('chart.js').FontSpec } FontSpec * @typedef { import('../../types/options').AnnotationPointCoordinates } AnnotationPointCoordinates * @typedef { import('../../types/label').CoreLabelOptions } CoreLabelOptions * @typedef { import('../../types/label').LabelPositionObject } LabelPositionObject @@ -78,10 +79,22 @@ export function toPosition(value) { }; } +/** + * @param {CoreLabelOptions} options + * @param {number} fitRatio + * @returns {boolean} + */ +export const shouldFit = (options, fitRatio) => options && options.autoFit && fitRatio < 1; + +/** + * @param {CoreLabelOptions} options + * @param {number} fitRatio + * @returns {FontSpec[]} + */ export function toFonts(options, fitRatio) { const optFont = options.font; let fonts = isArray(optFont) ? optFont.map(f => toFont(f)) : [toFont(optFont)]; - if (fitRatio < 1) { + if (shouldFit(options, fitRatio)) { fonts = fonts.map(function(f) { f.size = Math.floor(f.size * fitRatio); f.lineHeight = undefined; diff --git a/src/types/doughnutLabel.js b/src/types/doughnutLabel.js index f97facfd6..3649117c1 100644 --- a/src/types/doughnutLabel.js +++ b/src/types/doughnutLabel.js @@ -1,7 +1,7 @@ import LabelAnnotation from './label'; import {DoughnutController} from 'chart.js'; import {toPadding} from 'chart.js/helpers'; -import {drawBox, drawLabel, measureLabelSize, translate} from '../helpers'; +import {drawBox, drawLabel, measureLabelSize, translate, shouldFit} from '../helpers'; export default class DoughnutLabelAnnotation extends LabelAnnotation { @@ -25,8 +25,8 @@ export default class DoughnutLabelAnnotation extends LabelAnnotation { const point = getControllerCenter(chart, controller); let labelSize = measureLabelSize(chart.ctx, options); const padding = toPadding(options.padding); - const fitRatio = getFitRatio(chart, options, labelSize, padding, controller); - if (fitRatio < 1) { + const fitRatio = getFitRatio(controller, options, padding, labelSize); + if (shouldFit(options, fitRatio)) { labelSize = measureLabelSize(chart.ctx, options, fitRatio); } const boxSize = super._measureRect(point, labelSize, options, padding); @@ -43,6 +43,7 @@ export default class DoughnutLabelAnnotation extends LabelAnnotation { DoughnutLabelAnnotation.id = 'doughnutLabelAnnotation'; DoughnutLabelAnnotation.defaults = { + autoFit: true, backgroundColor: 'transparent', backgroundShadowColor: 'transparent', borderCapStyle: 'butt', @@ -97,7 +98,7 @@ function getControllerCenter({chartArea}, controller) { }; } -function getFitRatio(chart, options, {width, height}, padding, controller) { +function getFitRatio(controller, options, padding, {width, height}) { const w = width + padding.width + options.borderWidth; const h = height + padding.height + options.borderWidth; const innerRadius = controller.innerRadius; From 408de06745c10cf4786c8bd3a03c3ad4189331e6 Mon Sep 17 00:00:00 2001 From: stockiNail Date: Tue, 3 Jan 2023 14:37:10 +0100 Subject: [PATCH 11/37] improves controller retriever --- src/types/doughnutLabel.js | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/types/doughnutLabel.js b/src/types/doughnutLabel.js index 3649117c1..11e0ec40c 100644 --- a/src/types/doughnutLabel.js +++ b/src/types/doughnutLabel.js @@ -83,11 +83,22 @@ DoughnutLabelAnnotation.defaultRoutes = { }; function getController(chart) { - for (let i = 0; i < chart.data.datasets.length; i++) { - const controller = chart.getDatasetMeta(i).controller; - if (controller instanceof DoughnutController) { + return chart.getSortedVisibleDatasetMetas().reduce(function(result, value) { + const controller = value.controller; + if (controller instanceof DoughnutController && + isControllerVisible(chart, value.data.length) && + (!result || controller.innerRadius < result.innerRadius)) { return controller; } + return result; + }, undefined); +} + +function isControllerVisible(chart, elementsCount) { + for (let i = 0; i < elementsCount; i++) { + if (chart.getDataVisibility(i)) { + return true; + } } } From 5181eb7140e62be7d45737299a89b449d2e2b466 Mon Sep 17 00:00:00 2001 From: stockiNail Date: Wed, 4 Jan 2023 09:47:26 +0100 Subject: [PATCH 12/37] creates helpers.callout --- src/helpers/helpers.callout.js | 137 +++++++++++++++++++++++++++++++++ src/helpers/index.js | 1 + src/types/doughnutLabel.js | 51 +++++++----- src/types/label.js | 127 +----------------------------- 4 files changed, 173 insertions(+), 143 deletions(-) create mode 100644 src/helpers/helpers.callout.js diff --git a/src/helpers/helpers.callout.js b/src/helpers/helpers.callout.js new file mode 100644 index 000000000..b51ea9e25 --- /dev/null +++ b/src/helpers/helpers.callout.js @@ -0,0 +1,137 @@ +import {setBorderStyle} from './helpers.canvas'; +import {rotated} from './helpers.geometric'; +import {getSize} from './helpers.options'; +import {toRadians, distanceBetweenPoints} from 'chart.js/helpers'; + +const positions = ['left', 'bottom', 'top', 'right']; + +/** + * @typedef { import('../../types/element').AnnotationElement } AnnotationElement + */ + +/** + * Drawa the callout component for labels. + * @param {CanvasRenderingContext2D} ctx - chart canvas context + * @param {AnnotationElement} element - the label element + */ +export function drawCallout(ctx, element) { + const {pointX, pointY, options} = element; + const callout = options.callout; + const calloutPosition = callout && callout.display && resolveCalloutPosition(element, callout); + if (!calloutPosition || isPointInRange(element, callout, calloutPosition)) { + return; + } + + ctx.save(); + ctx.beginPath(); + const stroke = setBorderStyle(ctx, callout); + if (!stroke) { + return ctx.restore(); + } + const {separatorStart, separatorEnd} = getCalloutSeparatorCoord(element, calloutPosition); + const {sideStart, sideEnd} = getCalloutSideCoord(element, calloutPosition, separatorStart); + if (callout.margin > 0 || options.borderWidth === 0) { + ctx.moveTo(separatorStart.x, separatorStart.y); + ctx.lineTo(separatorEnd.x, separatorEnd.y); + } + ctx.moveTo(sideStart.x, sideStart.y); + ctx.lineTo(sideEnd.x, sideEnd.y); + const rotatedPoint = rotated({x: pointX, y: pointY}, element.getCenterPoint(), toRadians(-element.rotation)); + ctx.lineTo(rotatedPoint.x, rotatedPoint.y); + ctx.stroke(); + ctx.restore(); +} + +function getCalloutSeparatorCoord(element, position) { + const {x, y, x2, y2} = element; + const adjust = getCalloutSeparatorAdjust(element, position); + let separatorStart, separatorEnd; + if (position === 'left' || position === 'right') { + separatorStart = {x: x + adjust, y}; + separatorEnd = {x: separatorStart.x, y: y2}; + } else { + // position 'top' or 'bottom' + separatorStart = {x, y: y + adjust}; + separatorEnd = {x: x2, y: separatorStart.y}; + } + return {separatorStart, separatorEnd}; +} + +function getCalloutSeparatorAdjust(element, position) { + const {width, height, options} = element; + const adjust = options.callout.margin + options.borderWidth / 2; + if (position === 'right') { + return width + adjust; + } else if (position === 'bottom') { + return height + adjust; + } + return -adjust; +} + +function getCalloutSideCoord(element, position, separatorStart) { + const {y, width, height, options} = element; + const start = options.callout.start; + const side = getCalloutSideAdjust(position, options.callout); + let sideStart, sideEnd; + if (position === 'left' || position === 'right') { + sideStart = {x: separatorStart.x, y: y + getSize(height, start)}; + sideEnd = {x: sideStart.x + side, y: sideStart.y}; + } else { + // position 'top' or 'bottom' + sideStart = {x: separatorStart.x + getSize(width, start), y: separatorStart.y}; + sideEnd = {x: sideStart.x, y: sideStart.y + side}; + } + return {sideStart, sideEnd}; +} + +function getCalloutSideAdjust(position, options) { + const side = options.side; + if (position === 'left' || position === 'top') { + return -side; + } + return side; +} + +function resolveCalloutPosition(element, options) { + const position = options.position; + if (positions.includes(position)) { + return position; + } + return resolveCalloutAutoPosition(element, options); +} + +function resolveCalloutAutoPosition(element, options) { + const {x, y, x2, y2, width, height, pointX, pointY, centerX, centerY, rotation} = element; + const center = {x: centerX, y: centerY}; + const start = options.start; + const xAdjust = getSize(width, start); + const yAdjust = getSize(height, start); + const xPoints = [x, x + xAdjust, x + xAdjust, x2]; + const yPoints = [y + yAdjust, y2, y, y2]; + const result = []; + for (let index = 0; index < 4; index++) { + const rotatedPoint = rotated({x: xPoints[index], y: yPoints[index]}, center, toRadians(rotation)); + result.push({ + position: positions[index], + distance: distanceBetweenPoints(rotatedPoint, {x: pointX, y: pointY}) + }); + } + return result.sort((a, b) => a.distance - b.distance)[0].position; +} + +function isPointInRange(element, callout, position) { + const {pointX, pointY} = element; + const margin = callout.margin; + let x = pointX; + let y = pointY; + if (position === 'left') { + x += margin; + } else if (position === 'right') { + x -= margin; + } else if (position === 'top') { + y += margin; + } else if (position === 'bottom') { + y -= margin; + } + return element.inRange(x, y); +} diff --git a/src/helpers/index.js b/src/helpers/index.js index 62a3fe021..4f6af79a6 100644 --- a/src/helpers/index.js +++ b/src/helpers/index.js @@ -1,3 +1,4 @@ +export * from './helpers.callout'; export * from './helpers.canvas'; export * from './helpers.chart'; export * from './helpers.core'; diff --git a/src/types/doughnutLabel.js b/src/types/doughnutLabel.js index 11e0ec40c..55449e298 100644 --- a/src/types/doughnutLabel.js +++ b/src/types/doughnutLabel.js @@ -18,18 +18,18 @@ export default class DoughnutLabelAnnotation extends LabelAnnotation { } resolveElementProperties(chart, options) { - const controller = getController(chart); + const controller = getController(chart, options); if (!controller) { return {}; } - const point = getControllerCenter(chart, controller); + const {point, radius} = getControllerCenter(chart, controller); let labelSize = measureLabelSize(chart.ctx, options); const padding = toPadding(options.padding); - const fitRatio = getFitRatio(controller, options, padding, labelSize); + const fitRatio = getFitRatio(chart, {borderWidth: options.borderWidth, padding}, labelSize, radius); if (shouldFit(options, fitRatio)) { labelSize = measureLabelSize(chart.ctx, options, fitRatio); } - const boxSize = super._measureRect(point, labelSize, options, padding); + const boxSize = this._measureRect(point, labelSize, options, padding); return { pointX: point.x, pointY: point.y, @@ -44,6 +44,7 @@ DoughnutLabelAnnotation.id = 'doughnutLabelAnnotation'; DoughnutLabelAnnotation.defaults = { autoFit: true, + autoHide: true, backgroundColor: 'transparent', backgroundShadowColor: 'transparent', borderCapStyle: 'butt', @@ -64,7 +65,7 @@ DoughnutLabelAnnotation.defaults = { weight: undefined }, height: undefined, - padding: 6, + padding: 0, position: 'center', rotation: 0, shadowBlur: 0, @@ -82,11 +83,11 @@ DoughnutLabelAnnotation.defaultRoutes = { borderColor: 'color' }; -function getController(chart) { +function getController(chart, options) { return chart.getSortedVisibleDatasetMetas().reduce(function(result, value) { const controller = value.controller; if (controller instanceof DoughnutController && - isControllerVisible(chart, value.data.length) && + isControllerVisible(chart, options, value.data.length) && (!result || controller.innerRadius < result.innerRadius)) { return controller; } @@ -94,7 +95,10 @@ function getController(chart) { }, undefined); } -function isControllerVisible(chart, elementsCount) { +function isControllerVisible(chart, options, elementsCount) { + if (!options.autoHide) { + return true; + } for (let i = 0; i < elementsCount; i++) { if (chart.getDataVisibility(i)) { return true; @@ -102,18 +106,29 @@ function isControllerVisible(chart, elementsCount) { } } -function getControllerCenter({chartArea}, controller) { +function getControllerCenter({chartArea}, {innerRadius, offsetX, offsetY}) { + const {left, top, right, bottom} = chartArea; + const x = (left + right) / 2 + offsetX; + const y = (top + bottom) / 2 + offsetY; + const square = { + left: Math.max(x - innerRadius, left), + right: Math.min(x + innerRadius, right), + top: Math.max(y - innerRadius, top), + bottom: Math.min(y + innerRadius, bottom) + }; + const point = { + x: (square.left + square.right) / 2, + y: (square.top + square.bottom) / 2 + }; return { - x: (chartArea.left + chartArea.right) / 2 + controller.offsetX, - y: (chartArea.top + chartArea.bottom) / 2 + controller.offsetY + point, + radius: Math.min(innerRadius, Math.min(square.right - square.left, square.bottom - square.top) / 2) }; } -function getFitRatio(controller, options, padding, {width, height}) { - const w = width + padding.width + options.borderWidth; - const h = height + padding.height + options.borderWidth; - const innerRadius = controller.innerRadius; - const hypotenuse = Math.sqrt(Math.pow(w, 2) + Math.pow(h, 2)); - const innerDiameter = innerRadius * 2; - return innerDiameter / hypotenuse; +function getFitRatio(chart, {borderWidth, padding}, {width, height}, radius) { + const w = width + padding.width + borderWidth; + const h = height + padding.height + borderWidth; + const hypo = Math.sqrt(Math.pow(w, 2) + Math.pow(h, 2)); + return (radius * 2) / hypo; } diff --git a/src/types/label.js b/src/types/label.js index 49438d82a..c79a70fc5 100644 --- a/src/types/label.js +++ b/src/types/label.js @@ -1,8 +1,6 @@ import {Element} from 'chart.js'; -import {drawBox, drawLabel, measureLabelSize, getChartPoint, toPosition, setBorderStyle, getSize, inBoxRange, isBoundToPoint, resolveBoxProperties, getRelativePosition, translate, rotated, getElementCenterPoint} from '../helpers'; -import {toPadding, toRadians, distanceBetweenPoints, defined} from 'chart.js/helpers'; - -const positions = ['left', 'bottom', 'top', 'right']; +import {drawBox, drawCallout, drawLabel, measureLabelSize, getChartPoint, toPosition, inBoxRange, isBoundToPoint, resolveBoxProperties, getRelativePosition, translate, rotated, getElementCenterPoint} from '../helpers'; +import {toPadding, toRadians, defined} from 'chart.js/helpers'; export default class LabelAnnotation extends Element { @@ -150,110 +148,6 @@ function calculatePosition(start, size, adjust = 0, position) { return start - getRelativePosition(size, position) + adjust; } -function drawCallout(ctx, element) { - const {pointX, pointY, options} = element; - const callout = options.callout; - const calloutPosition = callout && callout.display && resolveCalloutPosition(element, callout); - if (!calloutPosition || isPointInRange(element, callout, calloutPosition)) { - return; - } - - ctx.save(); - ctx.beginPath(); - const stroke = setBorderStyle(ctx, callout); - if (!stroke) { - return ctx.restore(); - } - const {separatorStart, separatorEnd} = getCalloutSeparatorCoord(element, calloutPosition); - const {sideStart, sideEnd} = getCalloutSideCoord(element, calloutPosition, separatorStart); - if (callout.margin > 0 || options.borderWidth === 0) { - ctx.moveTo(separatorStart.x, separatorStart.y); - ctx.lineTo(separatorEnd.x, separatorEnd.y); - } - ctx.moveTo(sideStart.x, sideStart.y); - ctx.lineTo(sideEnd.x, sideEnd.y); - const rotatedPoint = rotated({x: pointX, y: pointY}, element.getCenterPoint(), toRadians(-element.rotation)); - ctx.lineTo(rotatedPoint.x, rotatedPoint.y); - ctx.stroke(); - ctx.restore(); -} - -function getCalloutSeparatorCoord(element, position) { - const {x, y, x2, y2} = element; - const adjust = getCalloutSeparatorAdjust(element, position); - let separatorStart, separatorEnd; - if (position === 'left' || position === 'right') { - separatorStart = {x: x + adjust, y}; - separatorEnd = {x: separatorStart.x, y: y2}; - } else { - // position 'top' or 'bottom' - separatorStart = {x, y: y + adjust}; - separatorEnd = {x: x2, y: separatorStart.y}; - } - return {separatorStart, separatorEnd}; -} - -function getCalloutSeparatorAdjust(element, position) { - const {width, height, options} = element; - const adjust = options.callout.margin + options.borderWidth / 2; - if (position === 'right') { - return width + adjust; - } else if (position === 'bottom') { - return height + adjust; - } - return -adjust; -} - -function getCalloutSideCoord(element, position, separatorStart) { - const {y, width, height, options} = element; - const start = options.callout.start; - const side = getCalloutSideAdjust(position, options.callout); - let sideStart, sideEnd; - if (position === 'left' || position === 'right') { - sideStart = {x: separatorStart.x, y: y + getSize(height, start)}; - sideEnd = {x: sideStart.x + side, y: sideStart.y}; - } else { - // position 'top' or 'bottom' - sideStart = {x: separatorStart.x + getSize(width, start), y: separatorStart.y}; - sideEnd = {x: sideStart.x, y: sideStart.y + side}; - } - return {sideStart, sideEnd}; -} - -function getCalloutSideAdjust(position, options) { - const side = options.side; - if (position === 'left' || position === 'top') { - return -side; - } - return side; -} - -function resolveCalloutPosition(element, options) { - const position = options.position; - if (positions.includes(position)) { - return position; - } - return resolveCalloutAutoPosition(element, options); -} - -function resolveCalloutAutoPosition(element, options) { - const {x, y, x2, y2, width, height, pointX, pointY, centerX, centerY, rotation} = element; - const center = {x: centerX, y: centerY}; - const start = options.start; - const xAdjust = getSize(width, start); - const yAdjust = getSize(height, start); - const xPoints = [x, x + xAdjust, x + xAdjust, x2]; - const yPoints = [y + yAdjust, y2, y, y2]; - const result = []; - for (let index = 0; index < 4; index++) { - const rotatedPoint = rotated({x: xPoints[index], y: yPoints[index]}, center, toRadians(rotation)); - result.push({ - position: positions[index], - distance: distanceBetweenPoints(rotatedPoint, {x: pointX, y: pointY}) - }); - } - return result.sort((a, b) => a.distance - b.distance)[0].position; -} function getLabelSize({x, y, width, height, options}) { const hBorderWidth = options.borderWidth / 2; @@ -265,20 +159,3 @@ function getLabelSize({x, y, width, height, options}) { height: height - padding.top - padding.bottom - options.borderWidth }; } - -function isPointInRange(element, callout, position) { - const {pointX, pointY} = element; - const margin = callout.margin; - let x = pointX; - let y = pointY; - if (position === 'left') { - x += margin; - } else if (position === 'right') { - x -= margin; - } else if (position === 'top') { - y += margin; - } else if (position === 'bottom') { - y -= margin; - } - return element.inRange(x, y); -} From 2699fb6aa7e5ef0f138e2569f776865ad12df36a Mon Sep 17 00:00:00 2001 From: stockiNail Date: Wed, 4 Jan 2023 11:54:55 +0100 Subject: [PATCH 13/37] fixes visibility check on elements --- src/types/doughnutLabel.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/types/doughnutLabel.js b/src/types/doughnutLabel.js index 55449e298..673f47ecb 100644 --- a/src/types/doughnutLabel.js +++ b/src/types/doughnutLabel.js @@ -87,7 +87,7 @@ function getController(chart, options) { return chart.getSortedVisibleDatasetMetas().reduce(function(result, value) { const controller = value.controller; if (controller instanceof DoughnutController && - isControllerVisible(chart, options, value.data.length) && + isControllerVisible(chart, options, value.data) && (!result || controller.innerRadius < result.innerRadius)) { return controller; } @@ -95,12 +95,12 @@ function getController(chart, options) { }, undefined); } -function isControllerVisible(chart, options, elementsCount) { +function isControllerVisible(chart, options, elements) { if (!options.autoHide) { return true; } - for (let i = 0; i < elementsCount; i++) { - if (chart.getDataVisibility(i)) { + for (let i = 0; i < elements.length; i++) { + if (!elements[i].hidden && chart.getDataVisibility(i)) { return true; } } From a6a76cc8aa3f4f80aadd0533cfbaaa76a464e0c3 Mon Sep 17 00:00:00 2001 From: stockiNail Date: Wed, 4 Jan 2023 12:21:55 +0100 Subject: [PATCH 14/37] test cases --- test/fixtures/doughnutLabel/autoHide.js | 41 ++++++++++ test/fixtures/doughnutLabel/autoHide.png | Bin 0 -> 4371 bytes test/fixtures/doughnutLabel/basic.js | 32 ++++++++ test/fixtures/doughnutLabel/basic.png | Bin 0 -> 21554 bytes test/fixtures/doughnutLabel/border.js | 38 +++++++++ test/fixtures/doughnutLabel/border.png | Bin 0 -> 22314 bytes test/fixtures/doughnutLabel/canvas.js | 32 ++++++++ test/fixtures/doughnutLabel/canvas.png | Bin 0 -> 22599 bytes .../doughnutLabel/contentMultiline.js | 32 ++++++++ .../doughnutLabel/contentMultiline.png | Bin 0 -> 23368 bytes .../doughnutLabel/contentMultilineColors.js | 34 +++++++++ .../doughnutLabel/contentMultilineColors.png | Bin 0 -> 24209 bytes .../doughnutLabel/contentMultilineFonts.js | 33 ++++++++ .../doughnutLabel/contentMultilineFonts.png | Bin 0 -> 24016 bytes test/fixtures/doughnutLabel/drawTime.js | 35 +++++++++ test/fixtures/doughnutLabel/drawTime.png | Bin 0 -> 17866 bytes test/fixtures/doughnutLabel/noAutoHide.js | 42 ++++++++++ test/fixtures/doughnutLabel/noAutoHide.png | Bin 0 -> 6538 bytes test/fixtures/doughnutLabel/noDoughnut.js | 45 +++++++++++ test/fixtures/doughnutLabel/noDoughnut.png | Bin 0 -> 8261 bytes test/fixtures/doughnutLabel/noFit.js | 33 ++++++++ test/fixtures/doughnutLabel/noFit.png | Bin 0 -> 23942 bytes test/fixtures/doughnutLabel/noFitCanvas.js | 33 ++++++++ test/fixtures/doughnutLabel/noFitCanvas.png | Bin 0 -> 22965 bytes test/fixtures/doughnutLabel/rotatedChart.js | 35 +++++++++ test/fixtures/doughnutLabel/rotatedChart.png | Bin 0 -> 27236 bytes test/fixtures/doughnutLabel/rotation.js | 33 ++++++++ test/fixtures/doughnutLabel/rotation.png | Bin 0 -> 25355 bytes test/specs/doughnutLabel.spec.js | 72 ++++++++++++++++++ 29 files changed, 570 insertions(+) create mode 100644 test/fixtures/doughnutLabel/autoHide.js create mode 100644 test/fixtures/doughnutLabel/autoHide.png create mode 100644 test/fixtures/doughnutLabel/basic.js create mode 100644 test/fixtures/doughnutLabel/basic.png create mode 100644 test/fixtures/doughnutLabel/border.js create mode 100644 test/fixtures/doughnutLabel/border.png create mode 100644 test/fixtures/doughnutLabel/canvas.js create mode 100644 test/fixtures/doughnutLabel/canvas.png create mode 100644 test/fixtures/doughnutLabel/contentMultiline.js create mode 100644 test/fixtures/doughnutLabel/contentMultiline.png create mode 100644 test/fixtures/doughnutLabel/contentMultilineColors.js create mode 100644 test/fixtures/doughnutLabel/contentMultilineColors.png create mode 100644 test/fixtures/doughnutLabel/contentMultilineFonts.js create mode 100644 test/fixtures/doughnutLabel/contentMultilineFonts.png create mode 100644 test/fixtures/doughnutLabel/drawTime.js create mode 100644 test/fixtures/doughnutLabel/drawTime.png create mode 100644 test/fixtures/doughnutLabel/noAutoHide.js create mode 100644 test/fixtures/doughnutLabel/noAutoHide.png create mode 100644 test/fixtures/doughnutLabel/noDoughnut.js create mode 100644 test/fixtures/doughnutLabel/noDoughnut.png create mode 100644 test/fixtures/doughnutLabel/noFit.js create mode 100644 test/fixtures/doughnutLabel/noFit.png create mode 100644 test/fixtures/doughnutLabel/noFitCanvas.js create mode 100644 test/fixtures/doughnutLabel/noFitCanvas.png create mode 100644 test/fixtures/doughnutLabel/rotatedChart.js create mode 100644 test/fixtures/doughnutLabel/rotatedChart.png create mode 100644 test/fixtures/doughnutLabel/rotation.js create mode 100644 test/fixtures/doughnutLabel/rotation.png create mode 100644 test/specs/doughnutLabel.spec.js diff --git a/test/fixtures/doughnutLabel/autoHide.js b/test/fixtures/doughnutLabel/autoHide.js new file mode 100644 index 000000000..f0a162551 --- /dev/null +++ b/test/fixtures/doughnutLabel/autoHide.js @@ -0,0 +1,41 @@ +module.exports = { + tolerance: 0.0055, + config: { + type: 'doughnut', + data: { + labels: ['Data1', 'Data2', 'Data3', 'Data4'], + datasets: [{ + data: [102, 200, 80, 55], + }], + }, + options: { + events: [], + plugins: { + annotation: { + annotations: [ + { + type: 'doughnutLabel', + content: ['Must not be', 'visible'], + }, + ] + } + } + } + }, + options: { + spriteText: true, + canvas: { + height: 256, + width: 512 + }, + run: (chart) => { + return new Promise(resolve => { + chart.hide(0, 0); + chart.hide(0, 1); + chart.hide(0, 2); + chart.hide(0, 3); + resolve(); + }); + } + } +}; diff --git a/test/fixtures/doughnutLabel/autoHide.png b/test/fixtures/doughnutLabel/autoHide.png new file mode 100644 index 0000000000000000000000000000000000000000..24dcd4cfe7f5eaa65b6d769528caa46bdac944f9 GIT binary patch literal 4371 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 literal 0 HcmV?d00001 diff --git a/test/fixtures/doughnutLabel/border.js b/test/fixtures/doughnutLabel/border.js new file mode 100644 index 000000000..70158e912 --- /dev/null +++ b/test/fixtures/doughnutLabel/border.js @@ -0,0 +1,38 @@ +function content(ctx, opts) { + return window.stringifyObject({dash: opts.borderDash, width: opts.borderWidth, radius: opts.borderRadius}); +} + +module.exports = { + tolerance: 0.0055, + config: { + type: 'doughnut', + data: { + labels: ['Data1', 'Data2', 'Data3', 'Data4'], + datasets: [{ + data: [102, 200, 80, 55], + }], + }, + options: { + events: [], + plugins: { + legend: false, + annotation: { + annotations: [ + { + type: 'doughnutLabel', + borderColor: 'red', + borderWidth: 1, + content + }, + ] + } + } + } + }, + options: { + canvas: { + height: 256, + width: 512 + } + } +}; diff --git a/test/fixtures/doughnutLabel/border.png b/test/fixtures/doughnutLabel/border.png new file mode 100644 index 0000000000000000000000000000000000000000..2fd45eb2ceb8554d4b9dff470ebda934f837677f GIT binary patch literal 22314 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 -(R|1n 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�PZa_O}uC7pKVz5XqD{ zl~B^c_E0kKKi`3SQl`ajOZ@{$q6LqE?V`T{@VHc}m*}EG4E`T6H$i{F2AGVhDjdf2 z7@_}S=}0(1>+BY*8tM@xIn;~fqKdQrd+COSb}g6B_O|K-9fn&s+I(B}y7_sjLGpRY zp6{CX$1TCiH*IqXZ9`>KPK*$sY~~d;Qqzuc8h$7fb(v%+Qc;md|MtB~pZbd~_aCoD z62NbF6;CVUR@$ZC>8=#emio`zkBfzq0@4({{}=ln$Xm1g5BQzKwJx>bavI3>6gOOe z6Y_6KNr{*Unl>s#_kZ8T={WdBq3?5G`cPy6riD_5D9}hxeh@?iXp;>QS~vCxcY;Gg zlsnK*rQDew#^H)ty-3w>OqlOqRP&49jEujv7rz7$r0;Z5H5@B=SKe=*yl%!DlJ^rx z)Xyj$#F8BBDFkJ4vqL&Q^R7f`-rbWyu3k_W9W+D1ocuprR8f!j;huRq&_d)1y##Up zbEx{mCw3*Ggd)oB8v`9y`ThmvbGhN?Pj$mqLH&0t7$uf5=myHI6?6YS^fQxtJz$3! z+9LI&K2ji3-tOv3*gj9%Z|voPX01Wmn0M^H6iN$G{Gnf)Lbd7pmvI+T_nSXF?`J|t zJ?!CuvV~;svs8^0vCt2VB+E7n3AfxN{ zjo>L@fycc$@_!_sGW#Fxt*xyOK*Gl5#}0(5i&@x~NE0F`9pa_Ioz^v9w5XI`g}nB`n5Vzwld|lkm{l=NQPl0l}9}0 z6hyx(Y2XPyX9eo;!}bTC?-;sI$^DNcqgnWXuI~zCGNrBKRd8U7<(r-mw?TIvkQV{3 z!^IDO{j=k2AVo|5Ksq?05zD9k@ zp8>iIph=rSy?|!&fAsZXwlRG0LXjJ=jhx$*jm&;QaUqX~{-c(F&Zn$QlYSuEi_?X& zK(d0VeFoU@5*8XpyQ;nbwQ=efU{(8s6IOhayZ0AZ6MV^lAFvB#`tBg0ZCiie?gC$- zw%l%b{T^4Mjw#Y5p@?MkV-@hx5bMi20b!{MAc4`+;YqNg@xU7RA)-lT;zDLOY8iPT zAT3awabt1Yy1$&kTBQ`Iplu0;TlLzfp?qn%;=tM%3eJ5EtjpOd{!K{->WIU?AMbVC zm-?;zUR>$v=s3DAAyH0&i9$)#Rc|c0o~eK!YS;_HatA9$E09(m(3yp6ixUs$iADz^nCAZ&P$9A&7VgKLg zl&o+1a)=7NOUx;rj^R;I#xrOp^k+0*yB2YG1iPfX(e|FXAArCfQqTKmO_i3-YCHfG zd;ZYPt(?_1RUH+bs}W9jp9Z*2n!vfNMhSzjKEle#=-$v&>IH_}1TFve~w0JKs&^*B#f(Kk^KnE_dLV!Q69szqX+GJ$g!Tou<0_|YA(b)+c zJDGHlbws6ivXlj6dF6X`1P7ECl+p1Gv0+jp<9F13D;|k0#;3!9HIJSvJW9 zfUS!Juq>foDrHppAAb)B5f3P`d@3$f-G4Zfc#tT=b^0zGS8qr+1`hd|K{%t3Vu6jK zx&M(>4#4E{w7{;^i7rbj+OYbPo$YtSV|~1R?l`UJI4M4UKM%-3)hDi@i`3>7pZB~Y zAaO0dAB;eJ6w%MuyVpW$TuX2;1psL+E#YxL%I$sjliV$9T5!hNA>u$Oj)8vU0Czq+ zaOW2yH^)IX>hfu)NPhy1^lWmyGG_|ynS6phiZ&u7#^GhuU_C-=+u$OaO zR(QlcNH!~g_Mrf@55Jn57YLSODZtS$o?q8598bKg3Iqs_vbGk>)ZoMs>S=Ch7=N@Q2d3v;j7UK`SUX(>kZbPP?BLh0 zUz+`q2lEtN zv10>?1GTBC@bTB^tS5V#hV`B=%JK_qZ6AW&aET$49f*w zu^oL#SPsY&D&Vs`E3zb+hYx-LA7i=T?D3>E5V`#90coqIW#pu)BvJ)G+bat2(?q$* z{pCTj==S-Qx}4wyJ5n5DRr0~Yjn9E?q-~auvhd9xT8wx#4sI%;d&c}P5H5E!V_3tRyiy}`l3q0~R;qVcg$Y2mTI z|5*pvIyq2#clm}Fur=Od&{6{X2$e($zkEgQ^NUHl}-Gn_su&dffhIvgMzXR2UtLdd*r-GpyFJV?4g8BIP zdJBL6Gyj|)ayvgeeFb)M&xtVyp^HCCH-CG)O2BwSK_2#9_RQi3@d3&%uC5+(tREa* z{G7hOy~qXlD4)84rEkX5$CG{k+9O2PN6Hp11k^U_qsbR?m8nSxzqbMmM_d?W9(|VY zh<2o~C`dU}`ky5@x(p317#yfnc0j(A$K;2o7Zw3~?Ej}$w*gmUnLQCI`^y(c*BX=V zHTRSBk%L4TDK4&O-M}2gUN;wSyl;fa4#9vbKc|~BFfu_4n+Q>-E3(-V1JyzK?h5R2 z7Y>K#m6UY1aB(TEuC7QV|7O;3JOkiU0H>5!NN!^bh$ezKzHsLO+=3l*bv}69@xTcf z&31t4++b!5)*L1WJ}_!v3D1Y2hid8iBARXORR6T$qC59pp&=lzNtyz0(kTe7f~!eX z%i}G^4urTEV4HU)5N4=D#Ip_p1Zziryi?wnoS8rJn8xQ({o_S z&HcvhYX?^|b?5pVi>scn9{T7|mjOUk2v!ZpNbRE2Thu0`@l^wd&mEAI)%lgpis`2v ziVV=11dIPD6L?vH|3%0CpVHmSTIzUYh(Pg__&(=iN`}2?A&5wQ;aS=u$85o7F`o?8 zlVH=*(#|wM%TQY%tI~NTl4`{YnzpC4z5OZ*+CW6H-XF>&?jg8WwLc)iO`!CB27rx= zoPuJ>V3vw8fUx1|0W1M0{?PV;R;9)|ClWzy6sCby*W9}V{S5(;-}d0agY#?iEAf6f zx5EuhWV8_d|Jq^cMbB=Wu_+e_8CQ<~u5>W23Cf;hB?dkxZ&jcNnnmZ^Lfm&S_7v)Q zM!;`uF>eICxYOl-@OM--q*H$X3)9h@x^o zz$pE&6#x8Mkn;Z}<|t6yli*8Frx2PB@ij&m`U9M^5Bfgo`R{$Z_a*dQdgMoZi`tV3Q`kdXLVuFD*H_&I4eWSHTyrd@+l8ilh6tIYo2FbD2f9 zDGYXxL#9CuB>AOqNW7QSIcL3{k!qNk<`nowi9i${@*`^AdBP6p`ZA-3FZnu&x<2ZV z`}^W3UEXVZ4Ro=)1{Jn(Z;OQHojHKlq#59L^{08+fac}{-ex3$fTW93oW5#-S834N zeg}$CW;a1riq+ntxC?#)$vUu2$q2~H*Qaj9Tbi)i4wb>~G*VFL%NaEu!z|ALN<9Fq z$lahnHrIGz|5gIZUQA{wARMmG=N~7w5wzArV*am3I6>i60kGgNM))ZW-WpR?$2;0N zF@)`>VzA&xZ!c+_CFl*YlWcyAbEFjAaR8dIxkD2D($Z2oAZgD30uorDZ`m~~YajR% z6j(sdy?_N?Cu^wu|F>b#LFFtf8VOoDBfu?vBjvF{n3Rj2o6Tf=%pI?@NGUk*w1^H^ zb%qdboCfkS+A-c^`hDQarW0^O^3Y;B*ElxF0q7bEs5vXg@J4%n%)poMDMMYix( zf6x6u`5Y($V^S4(>+C>3O_^T+1bUVNyx*dCaHiGqtF!1URJ^^I(C?0JynxmJKSf-5 zJe2+0y=N>#WEqi27($i^Q51toQX%`6{K%fA)y|MDOP1^uB}7DO8nTT-h){%VBNWLa zm3@1!`+0xw=k zAKjh-@e*N`z#ons=*Me-s|c9rxq($K$+N9S*g&y9NWy9#PeI8 zt2eBQ`gK?!vj$JzzE;gm(>zfQFunkWK=Nboj1}Iaua6E;>nnBV0g!c@l^CCTbfZCw zM74hFPWhMvr^D}FQREK?=b^W0f$xq3Zt~D{>PQu5%UZZ@(g>dGWiUxCvOp<_UQ5fplz|r0~cX4YhM+Kg|R29NkD6J!| zm-}yrPPsnIMH@VDR{q!0@;N-@9-2 zb#PCv`M$^S)fi`K>Csl5wm9+>3r&5Y?o&DRPqknmm3h@$Y$!Yc_TIxDJ^4*(fLrra za^zkkxZ|0JR9Ty4z_7*VohzhZyIv*K%SRME?#7Yt)O4f`U{oe_rTr`8p^c?bIUd}2 zX}(`NZ+Np+&|CR{f<0|OS7+&tRMYnacLps~kYU8(u?7;p9j0HzfPnQ3U<1-?N3A=; zXs9-p3R~>7si~=I^xH)$)6h)#NJ&Og7v3YEE`O&=GE|~Hb}HjV(zqj{EYrFFcuO9j z_lph=UrW&?c?!}ArYWtKYy8p`s>#{eYU%`nwy^=|wD4Po;Kt&G+Ew_bNZucX*e{ah zlcZ6l{4m6hc&8bx;b)-zo`%Vx-C(}fZD)Ybp5Jb$%@TEKTl#i0$**FP# zA`5anl`oJ^3&RO2yH*lsr62<7A~u>+xB)%fJ1VbkHou)*_F}Wn`EOFmMw^{;`X@SG zP~-JzNCwBeV5i zC=yTM5AB!s(HS1?D+7Bh#X%M<6q!i@BsIvRPs3*+J z1)lYtE~9**i}j$AI^EnGNq_H$8)F+l>`t?|Oc~Pzj7UNf6|et5qqO>CxWzc64!|OR5cdJ~vH5){ zl&b%l<7)4?zE*?}q9TZl8x*e>EL`$L&UV=W&}Pb5lv^L1b)~?j5~;}q&$WR;h$_@y z2J%YGlf>`~*alQvI}kzH{=^vnvPn~a*C$Xu83L#eihgtft4|MQ1P@yx?y1>Rm5!Ll zLs2n`X$kmWN8zM4NR%z*)FWM(AWo5=(4ZOimzaD%)l$G%W?&DiKRQhDpmGrfPz`%t zf7X+&X&ty*)_gvjvjdbOKFYphLgZxn@v>4a3`C>@!XPr(OPa#^?B))3xGCWtx`tZ) zLdqzGjU<{ZBDQ3dZ@?q-e(xZUs1m+}0mVxUU zKr$!ro(q6puU-EPDR*Hkx(_G9M2=V+s^$Y@5*vLNVO^rf^W!!S2P@EYd@4Ju zBgbiqeQHtB@De~Yeo1i;O%57lIXQirH)d^-N{yR zxocbS@e$)@ESa==R!=VzHTq7py6tF?UcRYNE4hCGi-ua=P+L6-K$w+AI3orc_mxIq z+qVD-Y}AhX+N!(m!vbfudlVcCwi)mHb#9d-wgx0kOJ=fwKoZ&&OjTM{eCiy*kaP3z ze(3Htw0`c;LPL#|wM%+WTDEoVL8NQu{2{ld4Hel}4p;xkpnGriZA*oP!^dZGS@^M? zBV4ra$Oncb7}C8;29JCC4v?AB5wtR^7e96jYi!Cv$b&E~0I}e{;2wEHSI`W55U!N` z2-@GpSa6J8h>|4YS*In%#ZOoR@m0e+EaN#E%V=I^*}D$GewHMX877D&UzmGV)J(=8 z3ZYmr5y>36X|-LQ9FymWmnM9Gk%8V7vppHsZ*K5wU2C{kK}WLF3yK-g zdGDr6k#p|M%w3x!t2}0`Ljz4R!rX688)(Hv`RW~^SC*$t?1gY zt6sy$&x99vEAD>`+=K}(PqHL-y3Ym;Wvu@76B zPr`B5(ro^$oRsC{HO@)Dif}j^jDq2F3nnK!ZP}#0A78l!QGFMbH4T`(lnO3xE)X91 zxAiyR(jOK;({+clAWnK2Xs0w0ZJ9 zILv_Kh|dHHf&sSI4%Qwg@}D4KjKckx5kB35A{#Osd^Yx~>{U%T1l&+f_O|cTj{Xw? zH`LXXZ#8g6P{(d9E=9!n)9N32w?4cQ`zjp3QPz6<1a0w-7_@6S-q3 z4Qp5JGZDcprn|rL*nzW|jlkv=4cGe1j=M}d7>ucZhgx$vK*50Kv^N?COL8bp2QVWI50l+*2Q-|WpndI9K zSGba2Z`^h*>rYKVYpJ5$`i&&Kl%Ix(s;ch-1Zy}$hdNgeP1Q70$&i+3`pEZCNXC>wPp6`l7qTVE4&fi)m1zNWKei!`EH!_HS=1!7sSkqR3HjC) z)i7ZlInF@>*f;1@w&kUzf2a_4DFxKyfX=q&=QnqiPa`j&`_+M zM2j^S(w=;A3LHdE|M;vIFb7#&{@N1f0+ZN_cXm}cumb<}ZW~DPzpj8nhv z<1bZK-vvc=TJ15BqRG!|sv69G_1n$VHnhck6&4||M-jfhzu=-S)j8jlKW`uT?B{6* z{UkD;`Ml$`47-J{TdiU%>1RF8iWvWyJnnN$wS8;xMBepwe-P~ZAE0NSR3hH)Y>d>N z_`JNl{B>&Ta$PLRljQ=)IJ*tbpAR1D?Om*SB;{hO|LJSjoOVp$ZcKREWh^h3Jwra$ zFUWP0JIT1gshh<}789$$@=00vvSLmQZ6 z^OOJVoa&q%-5$`6IbCsDpkWu!lVI!>q%TCcin*9b)L)YzS0J5OAKUlaO6-###>U3J zy?OJdJS~m)x6*fG(XgeZr9S|WEN(Z^iw`6gk7@`N`WDS@c_UYLi4K|+XnzRuo8*S4 zTU^gQs-cB7*5{>3A`OUwu2$sC-#wO3EM>P}*473(g1;NbaoAMjhM8H*=g*&~o0^*R z6!_!)>OsfWo7(J_#vCHbD0xF#SZ1M}(N2WMjEwI&M~`69JJddqi`|ucgcyfQPP z&{B{_sCu&ANQ`cQ=EB0l^^~mdnThf7%JTB^iBZ}QV~X5_15X@S2@GaK3a=IwZw+g+ z1gw95!a_P5OeiO}NOo zBr3N72)4P*tgJiGD3dlrcAjvBJDcQQBi=qq&QV@v6P;1oD?wv4NJ0b=NtSztEsS;! z?70j+Otd}Z_x}X9mG>ybZ{Tn^Uz3tP`3av@gL-3IYiqT=9MQPfwYBoEsMOG@KWld# zWUKWBXjG(OulA;8#ePe92_rf5Iny859~THGr=}=!r8KG)N)#=B{1a=FzSO4NC3JCs zXXuJbmY(>nN4+zbC|K7kSI*tf%WK@TE0S6H{M?_7t%bFqh7gNmc2w!hzpe}!u7&o+ z-j$W)d4fZiUPr!)I0%+b8 z*F~XFsL|2UI5ikv41f7D=IQ2ElP}eAfq&XD7DM+%8Zr5OwW^U^L)r5u_;OkMj$u>~ z_c{iv&2@OkLBcfhNp+uIuW|pZqI9SEbp65`C8ix#=}XO3Wg`<4qWxvh=4yg8E=lpl z={_{dmx|JrxaXg3P@Jdc75m)s=ebLl@;>+X7rJHhUGennH#OU>tg33#UuWk{n_Ohf z&dydobpdM{$@TaCjrWF@pI)|4c#T`n#0Cpk2TXK?X=DZtG8PhYz8c^!{BUqI5k8;F>hayJ8NCUn=hf7PKVpyp-?2^bx7mSe) z;kSkl6@!!`o411BdL=&Mf8C*pxT-zC3mu=oI-H2uT6fS=O2UXQYzOnq W#qp#4;f)vse$JdSAU)Hz5C0#S&%y5i literal 0 HcmV?d00001 diff --git a/test/fixtures/doughnutLabel/contentMultilineColors.js b/test/fixtures/doughnutLabel/contentMultilineColors.js new file mode 100644 index 000000000..9d4872689 --- /dev/null +++ b/test/fixtures/doughnutLabel/contentMultilineColors.js @@ -0,0 +1,34 @@ +module.exports = { + tolerance: 0.0055, + config: { + type: 'doughnut', + data: { + labels: ['Data1', 'Data2', 'Data3', 'Data4'], + datasets: [{ + data: [102, 200, 80, 55], + }], + }, + options: { + events: [], + plugins: { + legend: false, + annotation: { + annotations: [ + { + type: 'doughnutLabel', + color: ['red', 'blue', 'green'], + font: [{size: 24}, {size: 18}, {size: 14}, {size: 20}], + content: ['row1', 'row2', 'row3', 'row4'] + }, + ] + } + } + } + }, + options: { + canvas: { + height: 256, + width: 512 + } + } +}; diff --git a/test/fixtures/doughnutLabel/contentMultilineColors.png b/test/fixtures/doughnutLabel/contentMultilineColors.png new file mode 100644 index 0000000000000000000000000000000000000000..2f96810ec3c572cb0d4cfa9ab410a66b48002dc0 GIT binary patch literal 24209 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�AlxQ{9YGQww}JpD&*8!G%9j_B`+kpZ3}q92 zxJHDtk3Tw>$I8L?bYBWg&DdXkw|PlDDub*l3%Kcgcj&`*b7;#sug2}gCFqh0s-$VQ zu;PmNylaVmLc<&@$oZL}`zm}GZ6J?c0sd;rQ2KB~P^G1DUF0gI%c6%p+#phrf)dAT z=cs@vNzMs96br0us2O-$7!L$it8(M%{7EQFVgv>RBDTN!y#RVu#5+#2!7E4NHrN!~ zPCuf+lMaiwYFQ4(k_UQ{v!Iugf1Vh!&M*X10vK-h%c-M{E2%H!JZaqk3sst>M}1r| z*lwn55ASMdoNl`zW)-1+q|_DdGt;#MKlQnnzw=n>6BjTfEXTEbNY^|-iO$|bN+jDkIt>w`VpjseU^=qA-x!G9PA&l3n{a&o|(C>-2>a$xYc zu;OMaO*Jp1W&>8bda0}NzQgR{G=az&?wp}{WLwfO{pIv3oMpzE$65e5KZjV`fVYZc z;J;YcmFzZQX2T(22Iyo}s1i+?Xl}sSxow66m8>4Zzh0gpeM5usihgzH&w0jA*k`*S zY(Yuqdb=mr`2$MOa*{N}GlS55V-8D{sLb3GG&)gy*>db2wC4Mp-Gl^)D7~POC^djb zJWVRewZh@Ed$Qa+VN028GG9mh>sOJgD0L7)26(seY=7xwu=YW)uJU4iW$oOiJLE5b z+GkCLHJ$$fFkrqq-jEg|J7pUGvm)1FZ zj+6%CUhL-KmnBOBdfav-5|HF=w@%zm(+{7fCqqaXjrKsgxP{FBPfu0 z%zP${-6>2nK-Xu&_nVP8tE5;UZpPp3(*(D9CQ)^DP)bB2vih_M#sBFJpuxMN*;^Xc zz!B)N&M4L)5eyQUBG#%w^P`JQ7#wT7Kwj8b?ywRndlc5e+?Q;7lJ4Le#OT}*agINZ zY=rXDF#~>KaZuxD`~re`-7|ki)BwgkR($(YsB~!BixQ{;k9WCDzF(i(><^swu)qc% z+f|Lcp1HX0TqS#~{3Fows<6BIJq3}_trE(B=-9#M#pIGAU(&X`^-eN za!)FQutg#vz)Yo2c!4yKa9OIykt=1(95FXAg}ZEmzi=WrYGBFlT}?|KL;m5?v5ml? z=CN5*Ke3M$&T9_aX)C-p%J?3h3IOxXL0QrkQfa@Y=4T z-k-nm{{^Q3SpIt(Y%r&<9{~Ra?h=uQvJ1jJa{|dA-~u2S{ot(#gn+8r-1cUGrJ}R% zf0)bl*It8Z)8OTo!9o(-&r_zPhmgI=ueoOYu;cJ1D_@1ncF4-mXF!q@?S}h zlipG%kbVL#0Mg%w?m>zPsA_v)V_;LD53u%p-Ff4USP)p;fxIwy>80v=ztT$agWfjk z_39OW@7i^KZL&0rF9VYSOT9Z@M82-B175om2$z5hfN=ZXJx?eBRqX|I&&>|3n)}{u zzRi8>EqM1``1 { + return new Promise(resolve => { + chart.hide(0, 0); + chart.hide(0, 1); + chart.hide(0, 2); + chart.hide(0, 3); + resolve(); + }); + } + } +}; diff --git a/test/fixtures/doughnutLabel/noAutoHide.png b/test/fixtures/doughnutLabel/noAutoHide.png new file mode 100644 index 0000000000000000000000000000000000000000..90b50c8fd29bb1c248f9190b20f82f1afdeab07d GIT binary patch literal 6538 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 XUij%%`y24%3UKm--SMJhu6O?fXQF@- literal 0 HcmV?d00001 diff --git a/test/fixtures/doughnutLabel/noDoughnut.js b/test/fixtures/doughnutLabel/noDoughnut.js new file mode 100644 index 000000000..ef2ba04d5 --- /dev/null +++ b/test/fixtures/doughnutLabel/noDoughnut.js @@ -0,0 +1,45 @@ +module.exports = { + tolerance: 0.0055, + config: { + type: 'line', + data: { + labels: ['Data1', 'Data2', 'Data3', 'Data4'], + datasets: [{ + data: [102, 200, 80, 55], + }], + }, + options: { + events: [], + scales: { + x: { + display: false + }, + y: { + display: false + } + }, + plugins: { + legend: false, + annotation: { + annotations: [ + { + type: 'doughnutLabel', + font: [{size: 24}, {size: 18}, {size: 14}, {size: 20}], + content: ['row1', 'row2', 'row3', 'row4'] + }, + { + type: 'label', + content: 'Normal label to show' + } + ] + } + } + } + }, + options: { + canvas: { + height: 256, + width: 512 + } + } +}; diff --git a/test/fixtures/doughnutLabel/noDoughnut.png b/test/fixtures/doughnutLabel/noDoughnut.png new file mode 100644 index 0000000000000000000000000000000000000000..2c052c65909b278666ea43330b21b92b2437eea8 GIT binary patch literal 8261 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 F{uk5OQa=Cy literal 0 HcmV?d00001 diff --git a/test/fixtures/doughnutLabel/noFit.js b/test/fixtures/doughnutLabel/noFit.js new file mode 100644 index 000000000..537b551bb --- /dev/null +++ b/test/fixtures/doughnutLabel/noFit.js @@ -0,0 +1,33 @@ +module.exports = { + tolerance: 0.0090, + config: { + type: 'doughnut', + data: { + labels: ['Data1', 'Data2', 'Data3', 'Data4'], + datasets: [{ + data: [102, 200, 80, 55], + }], + }, + options: { + events: [], + plugins: { + legend: false, + annotation: { + annotations: [ + { + type: 'doughnutLabel', + content: ['row1', 'row2 with different length', 'row3', 'row4 with different length'], + autoFit: false + }, + ] + } + } + } + }, + options: { + canvas: { + height: 256, + width: 512 + } + } +}; diff --git a/test/fixtures/doughnutLabel/noFit.png b/test/fixtures/doughnutLabel/noFit.png new file mode 100644 index 0000000000000000000000000000000000000000..0799147390cf04976353dfc23f65a13a28d88932 GIT binary patch literal 23942 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 TZLlQ{fgck?b4rQ6bJ+g@c*z%i literal 0 HcmV?d00001 diff --git a/test/fixtures/doughnutLabel/rotation.js b/test/fixtures/doughnutLabel/rotation.js new file mode 100644 index 000000000..88114e37b --- /dev/null +++ b/test/fixtures/doughnutLabel/rotation.js @@ -0,0 +1,33 @@ +module.exports = { + tolerance: 0.0070, + config: { + type: 'doughnut', + data: { + labels: ['Data1', 'Data2', 'Data3', 'Data4'], + datasets: [{ + data: [102, 200, 80, 55], + }], + }, + options: { + events: [], + plugins: { + legend: false, + annotation: { + annotations: [ + { + type: 'doughnutLabel', + content: ['row1', 'row2 with different length', 'row3', 'row4 with different length'], + rotation: 45 + }, + ] + } + } + } + }, + options: { + canvas: { + height: 256, + width: 512 + } + } +}; diff --git a/test/fixtures/doughnutLabel/rotation.png b/test/fixtures/doughnutLabel/rotation.png new file mode 100644 index 0000000000000000000000000000000000000000..d4ee7bcfc5fedb45db361f9980a89feea2c0a2fe GIT binary patch literal 25355 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 Date: Wed, 4 Jan 2023 12:45:58 +0100 Subject: [PATCH 15/37] improves filter on array and more tests --- src/annotation.js | 2 +- test/events.js | 4 +-- test/fixtures/doughnutLabel/doubleDatasets.js | 34 ++++++++++++++++++ .../fixtures/doughnutLabel/doubleDatasets.png | Bin 0 -> 30528 bytes test/fixtures/doughnutLabel/noContent.js | 31 ++++++++++++++++ test/fixtures/doughnutLabel/noContent.png | Bin 0 -> 21345 bytes test/fixtures/doughnutLabel/noDisplay.js | 32 +++++++++++++++++ test/fixtures/doughnutLabel/noDisplay.png | Bin 0 -> 21345 bytes test/specs/events.spec.js | 25 +++++++++++++ 9 files changed, 125 insertions(+), 3 deletions(-) create mode 100644 test/fixtures/doughnutLabel/doubleDatasets.js create mode 100644 test/fixtures/doughnutLabel/doubleDatasets.png create mode 100644 test/fixtures/doughnutLabel/noContent.js create mode 100644 test/fixtures/doughnutLabel/noContent.png create mode 100644 test/fixtures/doughnutLabel/noDisplay.js create mode 100644 test/fixtures/doughnutLabel/noDisplay.png diff --git a/src/annotation.js b/src/annotation.js index f2601585a..f66a2305d 100644 --- a/src/annotation.js +++ b/src/annotation.js @@ -8,7 +8,7 @@ import {requireVersion} from './helpers'; import {version} from '../package.json'; const chartStates = new Map(); -const isNotDoughnutLabel = key => (isObject(key) ? key.type : key) !== 'doughnutLabel'; +const isNotDoughnutLabel = annotation => annotation.type !== 'doughnutLabel'; export default { id: 'annotation', diff --git a/test/events.js b/test/events.js index 61c10e33c..b0dddf314 100644 --- a/test/events.js +++ b/test/events.js @@ -4,9 +4,9 @@ export const eventPoint0 = { y: 0 }; -export function testEvents(options) { +export function testEvents(options, config) { describe(`events on ${options.type}`, function() { - const chartConfig = { + const chartConfig = config || { type: 'scatter', options: { animation: false, diff --git a/test/fixtures/doughnutLabel/doubleDatasets.js b/test/fixtures/doughnutLabel/doubleDatasets.js new file mode 100644 index 000000000..ec28c7bed --- /dev/null +++ b/test/fixtures/doughnutLabel/doubleDatasets.js @@ -0,0 +1,34 @@ +const canvas = window.createCanvas(); +module.exports = { + config: { + type: 'doughnut', + data: { + labels: ['Data1', 'Data2', 'Data3', 'Data4'], + datasets: [{ + data: [102, 200, 80, 55], + }, { + data: [102, 200, 80, 55], + }], + }, + options: { + events: [], + plugins: { + legend: false, + annotation: { + annotations: [ + { + type: 'doughnutLabel', + content: canvas + }, + ] + } + } + } + }, + options: { + canvas: { + height: 256, + width: 512 + } + } +}; diff --git a/test/fixtures/doughnutLabel/doubleDatasets.png b/test/fixtures/doughnutLabel/doubleDatasets.png new file mode 100644 index 0000000000000000000000000000000000000000..d6273035c51ee28cec1eb4fb530b2034b5b6e522 GIT binary patch literal 30528 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 Date: Wed, 4 Jan 2023 13:16:10 +0100 Subject: [PATCH 16/37] types def --- types/index.d.ts | 3 ++- types/label.d.ts | 25 +++++++++++++++++++------ types/options.d.ts | 10 ++++++++-- 3 files changed, 29 insertions(+), 9 deletions(-) diff --git a/types/index.d.ts b/types/index.d.ts index a713ce1e1..7f66578ec 100644 --- a/types/index.d.ts +++ b/types/index.d.ts @@ -1,5 +1,5 @@ import { ChartType, Plugin } from 'chart.js'; -import { AnnotationPluginOptions, BoxAnnotationOptions, EllipseAnnotationOptions, LabelAnnotationOptions, LineAnnotationOptions, PointAnnotationOptions, PolygonAnnotationOptions } from './options'; +import { AnnotationPluginOptions, BoxAnnotationOptions, EllipseAnnotationOptions, LabelAnnotationOptions, LineAnnotationOptions, PointAnnotationOptions, PolygonAnnotationOptions, DoughnutLabelAnnotationOptions } from './options'; declare module 'chart.js' { // eslint-disable-next-line @typescript-eslint/no-unused-vars @@ -9,6 +9,7 @@ declare module 'chart.js' { interface ElementOptionsByType { boxAnnotation: BoxAnnotationOptions; + doughnutLabelAnnotation: DoughnutLabelAnnotationOptions; ellipseAnnotation: EllipseAnnotationOptions; labelAnnotation: LabelAnnotationOptions; lineAnnotation: LineAnnotationOptions; diff --git a/types/label.d.ts b/types/label.d.ts index 5727f7686..fa2d59ed8 100644 --- a/types/label.d.ts +++ b/types/label.d.ts @@ -80,8 +80,7 @@ export interface CoreLabelOptions { * Overrides the height of the image. Could be set in pixel by a number, * or in percentage of current height of image by a string */ - height?: Scriptable, - z?: Scriptable + height?: Scriptable } export interface ContainedLabelOptions extends CoreLabelOptions { @@ -112,8 +111,7 @@ export interface ContainedLabelOptions extends CoreLabelOptions { * Border radius of the label rectangle * @default 6 */ - borderRadius?: Scriptable, - callout?: CalloutOptions, + borderRadius?: Scriptable } export interface LabelOptions extends ContainedLabelOptions, ShadowOptions { @@ -127,7 +125,9 @@ export interface LabelOptions extends ContainedLabelOptions, ShadowOptions { * Rotation of label, in degrees, or 'auto' to use the degrees of the line, default is 0 * @default 90 */ - rotation?: Scriptable + rotation?: Scriptable, + z?: Scriptable, + callout?: CalloutOptions, } export interface BoxLabelOptions extends CoreLabelOptions { @@ -137,9 +137,22 @@ export interface BoxLabelOptions extends CoreLabelOptions { * @default true */ display?: Scriptable, - rotation?: Scriptable + rotation?: Scriptable, + z?: Scriptable } export interface LabelTypeOptions extends ContainedLabelOptions { position?: Scriptable, + z?: Scriptable, + callout?: CalloutOptions, +} + +export interface DoughnutLabelOptions extends ContainedLabelOptions { + position?: Scriptable, + /** + * Whether the label should be displayed + * @default true + */ + display?: Scriptable, + rotation?: Scriptable } diff --git a/types/options.d.ts b/types/options.d.ts index 13fbd2c4b..823beb2f1 100644 --- a/types/options.d.ts +++ b/types/options.d.ts @@ -1,6 +1,6 @@ import { Color, PointStyle, BorderRadius, CoreInteractionOptions } from 'chart.js'; import { AnnotationEvents, PartialEventContext } from './events'; -import { LabelOptions, BoxLabelOptions, LabelTypeOptions } from './label'; +import { LabelOptions, BoxLabelOptions, LabelTypeOptions, DoughnutLabelOptions } from './label'; export type DrawTime = 'afterDraw' | 'afterDatasetsDraw' | 'beforeDraw' | 'beforeDatasetsDraw'; @@ -122,6 +122,12 @@ export interface LabelAnnotationOptions extends CoreAnnotationOptions, LabelType rotation?: Scriptable } +export interface DoughnutLabelAnnotationOptions extends AnnotationEvents, DoughnutLabelOptions, ShadowOptions { + autoFit?: Scriptable, + autoHide?: Scriptable, + id?: string, +} + interface PolygonAnnotationOptions extends CoreAnnotationOptions, AnnotationPointCoordinates { backgroundColor: Scriptable, borderCapStyle?: Scriptable, @@ -138,6 +144,6 @@ export interface AnnotationPluginOptions extends AnnotationEvents { animations?: Record, annotations: AnnotationOptions[] | Record, clip?: boolean, - common?: BoxAnnotationOptions | EllipseAnnotationOptions | LabelAnnotationOptions | LineAnnotationOptions | PointAnnotationOptions | PolygonAnnotationOptions, + common?: BoxAnnotationOptions | EllipseAnnotationOptions | LabelAnnotationOptions | LineAnnotationOptions | PointAnnotationOptions | PolygonAnnotationOptions | DoughnutLabelAnnotationOptions, interaction?: CoreInteractionOptions } From dcf09b671b9fbc72406f40ab5c7cb1a026997304 Mon Sep 17 00:00:00 2001 From: stockiNail Date: Wed, 4 Jan 2023 16:28:21 +0100 Subject: [PATCH 17/37] add documentation --- README.md | 5 +- docs/.vuepress/config.js | 3 +- .../diagrams/elementDoughnutLabelProps.drawio | 1 + docs/guide/index.md | 8 +- docs/guide/types/doughnutLabel.md | 145 ++++++++++++++++++ docs/img/elementDoughnutLabelProps.png | Bin 0 -> 10455 bytes 6 files changed, 158 insertions(+), 4 deletions(-) create mode 100644 docs/diagrams/elementDoughnutLabelProps.drawio create mode 100644 docs/guide/types/doughnutLabel.md create mode 100644 docs/img/elementDoughnutLabelProps.png diff --git a/README.md b/README.md index 309326f79..d59d0ddf2 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,10 @@ For Chart.js 2.4.0 to 2.9.x support, use [version 0.5.7 of this plugin](https:// This plugin draws lines, boxes, points, labels, polygons and ellipses on the chart area. -Annotations work with line, bar, scatter and bubble charts that use linear, logarithmic, time, or category scales. Annotations will not work on any chart that does not have exactly two axes, including pie, radar, and polar area charts. +Annotations work with line, bar, scatter and bubble charts that use linear, logarithmic, time, or category scales. +Furthermore you can use a doughnut label annotation which can be used to add contents (text, image, canvas) in the middle area of the doughnut charts. + +Annotations will not work on any chart that does not have exactly two axes, including pie, radar, and polar area charts. ![Example Screenshot](docs/guide/banner.png) diff --git a/docs/.vuepress/config.js b/docs/.vuepress/config.js index 301aad415..bca6f23a2 100644 --- a/docs/.vuepress/config.js +++ b/docs/.vuepress/config.js @@ -128,7 +128,8 @@ module.exports = { 'types/label', 'types/line', 'types/point', - 'types/polygon' + 'types/polygon', + 'types/doughnutLabel' ] }, 'migrationV1', diff --git a/docs/diagrams/elementDoughnutLabelProps.drawio b/docs/diagrams/elementDoughnutLabelProps.drawio new file mode 100644 index 000000000..f8bf616d1 --- /dev/null +++ b/docs/diagrams/elementDoughnutLabelProps.drawio @@ -0,0 +1 @@ +7ZfZjpswFIafhstUYLMkl4VZoqqVKkXVtFeVJzhg1XCocRqSp68NJonjjKaVMotGw03w7+Pt+31s4uGs6m4FacovkFPuIT/vPHzlIRT401j9aGU7KNNgOgiFYLkJOggLtqNjS6OuWU5bK1ACcMkaW1xCXdOltDQiBGzssBVwe9SGFNQRFkvCXfWO5bI0q0DJQZ9TVpTjyEE8G2oqMgablbQlyWFzJOFrD2cCQA5vVZdRruGNXIZ2Nw/U7icmaC3/pUF6t5vHP3dh1szR76+Lifz86dvE9PKH8LVZsJms3I4EBKzrnOpOfA+nm5JJumjIUtdulOdKK2XFVSlQr+6kxhGokLQ7kswkbylUVIqtCjG1yDfAzI5BoSlvDvxxbLTyiP2+ITGeF/u+D1jUiyHzH5TQ45RUL2pL0scJkbYZ9umKdZpqumKcZ8BB9B3h4bkMSpwkHyILJsZ75Qhn5MKMnggldlB2Hsq2Dk+1QmmDE7RlO3LfB+idSNYS2uG86LlyVtTqfalwUcUy1ZiYSuSPpqJiea4bpw2wWvbrilIvujqxoIZaB7VSwC96ItqpsIJamgMLhbqJ8pzVRQpSQqXE8DImBslJPvhuPkRn0iF8qmwIHQsH5t+Vkfok7gs/3h19+ISbnTg6O5eUwew5TY3cvEQ6Md2T7t3H0ccI2z6GZ26q5DlNjB0Th5m8GgvV/XbTP6/KRxzal+T+k+2lfEwcH82wb9lIAZJIBnoSk5l/obsztjMUn3F2ehlnVfHwLd/XHf0jwtd/AQ== \ No newline at end of file diff --git a/docs/guide/index.md b/docs/guide/index.md index e660ba4fe..9d61ec806 100644 --- a/docs/guide/index.md +++ b/docs/guide/index.md @@ -6,9 +6,13 @@ This plugin needs to be registered. It does not function as inline plugin. ::: -An annotation plugin for Chart.js >= 3.0.0 +An annotation plugin for Chart.js >= 3.7.0 -This plugin draws lines, boxes, labels, points, polygons and ellipses on the chart area. Annotations work with line, bar, scatter and bubble charts that use linear, logarithmic, time, or category scales. Annotations will not work on any chart that does not have exactly two axes, including pie, radar, and polar area charts. +This plugin draws lines, boxes, labels, points, polygons and ellipses on the chart area. Annotations work with line, bar, scatter and bubble charts that use linear, logarithmic, time, or category scales. + +Furthermore you can use a doughnut label annotation which can be used to add contents (text, image, canvas) in the middle area of the doughnut charts. + +Annotations will not work on any chart that does not have exactly two axes, including pie, radar, and polar area charts. ![Banner](./banner.png) diff --git a/docs/guide/types/doughnutLabel.md b/docs/guide/types/doughnutLabel.md new file mode 100644 index 000000000..febd9dfdd --- /dev/null +++ b/docs/guide/types/doughnutLabel.md @@ -0,0 +1,145 @@ +# Doughnut Label Annotations + +Doughnut label annotations are used to add contents (text, image, canvas) in the middle area of the doughnut charts. + +```js chart-editor +/* */ +const options = { + plugins: { + annotation: { + annotations: { + dLabel: { + type: 'doughnutLabel', + content: ({chart}) => ['Total', + chart.getDatasetMeta(0).total, + 'last 7 months' + ], + font: [{size: 60},{size: 50},{size: 30}], + color: ['black', 'red', 'grey'] + } + } + } + } +}; +/* */ + +/* */ +const config = { + type: 'doughnut', + data: { + labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'], + datasets: [{ + label: 'Amount', + data: [65, 59, 80, 81, 56, 55, 40] + }] + }, + options +}; +/* */ + +module.exports = { + config +}; +``` + +## Configuration + +### Options + +The following options are available for label annotations. + +| Name | Type | [Scriptable](../options.md#scriptable-options) | Default +| ---- | ---- | :----: | ---- +| [`autoHide`](#general) | `boolean` | Yes | `true` +| [`autoFit`](#general) | `boolean` | Yes | `true` +| [`backgroundColor`](#styling) | [`Color`](../options.md#color) | Yes | `'transparent'` +| [`backgroundShadowColor`](#styling) | [`Color`](../options.md#color) | Yes | `'transparent'` +| [`borderColor`](#styling) | [`Color`](../options.md#color) | Yes | `options.color` +| [`borderDash`](#styling) | `number[]` | Yes | `[]` +| [`borderDashOffset`](#styling) | `number` | Yes | `0` +| [`borderShadowColor`](#styling) | [`Color`](../options.md#color) | Yes | `'transparent'` +| [`display`](#general) | `boolean` | Yes | `true` +| [`drawTime`](#general) | `string` | Yes | `'afterDatasetsDraw'` +| [`borderCapStyle`](#styling) | `string` | Yes | `'butt'` +| [`borderJoinStyle`](#styling) | `string` | Yes | `'miter'` +| [`borderRadius`](#borderradius) | `number` \| `object` | Yes | `0` +| [`borderWidth`](#styling) | `number`| Yes | `0` +| [`color`](#styling) | [`Color`\|`Color[]`](../options.md#color) | Yes | `'black'` +| [`content`](#general) | `string`\|`string[]`\|[`Image`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement/Image)\|[`HTMLCanvasElement`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement) | Yes | `null` +| [`font`](#styling) | [`Font`\|`Font[]`](../options.md#font) | Yes | `{}` +| [`height`](#general) | `number`\|`string` | Yes | `undefined` +| [`id`](#general) | `string` | No | `undefined` +| [`padding`](#general) | [`Padding`](../options.md#padding) | Yes | `0` +| [`position`](#position) | `string`\|`{x: string, y: string}` | Yes | `'center'` +| [`rotation`](#general) | `number`| Yes | `0` +| [`shadowBlur`](#styling) | `number` | Yes | `0` +| [`shadowOffsetX`](#styling) | `number` | Yes | `0` +| [`shadowOffsetY`](#styling) | `number` | Yes | `0` +| [`textAlign`](#general) | `string` | Yes | `'center'` +| [`textStrokeColor`](#styling) | [`Color`](../options.md#color) | Yes | `undefined` +| [`textStrokeWidth`](#styling) | `number` | Yes | `0` +| [`width`](#general) | `number`\|`string` | Yes | `undefined` +| [`xAdjust`](#general) | `number` | Yes | `0` +| [`yAdjust`](#general) | `number` | Yes | `0` + +### General + +The content will be rendered in the center of the chart. + +| Name | Description +| ---- | ---- +| `autoFit` | If `true`, the label will be automatically fit inside the chart if its dimension is bigger than the available space. +| `autoHide` | If `true`, the label will be automatically hidden if the dataset or its data items will be all hidden. +| `content` | The content to show in the annotation. +| `display` | Whether or not this annotation is visible. +| `drawTime` | See [drawTime](../options.md#draw-time). +| `height` | Overrides the height of the image or canvas element. Could be set in pixel by a number, or in percentage of current height of image or canvas element by a string. If undefined, uses the height of the image or canvas element. It is used only when the content is an image or canvas element. +| `id` | Identifies a unique id for the annotation and it will be stored in the element context. When the annotations are defined by an object, the id is automatically set using the key used to store the annotations in the object. When the annotations are configured by an array, the id, passed by this option in the annotation, will be used. +| `padding` | The padding to add around the label. +| `rotation` | Rotation of the label in degrees. +| `textAlign` | Text alignment of label content when there's more than one line. Possible options are: `'left'`, `'start'`, `'center'`, `'end'`, `'right'`. +| `width` | Overrides the width of the image or canvas element. Could be set in pixel by a number, or in percentage of current width of image or canvas element by a string. If undefined, uses the width of the image or canvas element. It is used only when the content is an image or canvas element. +| `xAdjust` | Adjustment of label relative to computed position. Negative values move the label left, positive right. +| `yAdjust` | Adjustment along y-axis (top-bottom) of label relative to computed position. Negative values move the label up, positive down. + +### Styling + +| Name | Description +| ---- | ---- +| `backgroundColor` | Fill color. +| `backgroundShadowColor` | The color of shadow. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/shadowColor). +| `borderCapStyle` | Cap style of the border line. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/lineCap). +| `borderColor` | Stroke color. +| `borderDash` | Length and spacing of dashes. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/setLineDash). +| `borderDashOffset` | Offset for border line dashes. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/lineDashOffset). +| `borderJoinStyle` | Border line join style. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/lineJoin). +| `borderShadowColor` | The color of the border shadow. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/shadowColor). +| `borderWidth` | Stroke width (in pixels). +| `color` | Text color. When the label to draw has multiple lines, you can use different color for each row of the label. This is enabled configuring an array of colors. When the lines are more than the configured colors, the last configuration of this option is used for all remaining lines. +| `font` | Text font. When the label to draw has multiple lines, you can use different font for each row of the label. This is enabled configuring an array of fonts. When the lines are more than the configured fonts, the last configuration of this option is used for all remaining lines. +| `shadowBlur` | The amount of blur applied to shadow of the box where the label is located. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/shadowBlur). +| `shadowOffsetX` | The distance that shadow, of the box where the label is located, will be offset horizontally. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/shadowOffsetX). +| `shadowOffsetY` | The distance that shadow, of the box where the label is located, will be offset vertically. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/shadowOffsetY). +| `textStrokeColor` | The color of the stroke around the text. +| `textStrokeWidth` | Stroke width around the text. + +### Position + +A position can be set in 2 different values types: + +1. `'start'`, `'center'`, `'end'` which are defining where the label will be located +2. a `string`, in percentage format `'number%'`, is representing the percentage on the size where the label will be located + +If this value is a string (possible options are `'start'`, `'center'`, `'end'` or a string in percentage format), it is applied to vertical and horizontal position in the box. + +If this value is an object, the `x` property defines the horizontal alignment in the label, with respect to the center point of the chart. Similarly, the `y` property defines the vertical alignment in the label, with respect to the center point of the chart. Possible options for both properties are `'start'`, `'center'`, `'end'`, a string in percentage format. Omitted property have value of the default, `'center'`. + +#### borderRadius + +If this value is a number, it is applied to all corners of the rectangle (topLeft, topRight, bottomLeft, bottomRight). If this value is an object, the `topLeft` property defines the top-left corners border radius. Similarly, the `topRight`, `bottomLeft`, and `bottomRight` properties can also be specified. Omitted corners have radius of 0. + +## Element + +The following diagram is showing the element properties about a `'doughnutLabel'` annotation: + +![label](../../img/elementDoughnutLabelProps.png) diff --git a/docs/img/elementDoughnutLabelProps.png b/docs/img/elementDoughnutLabelProps.png new file mode 100644 index 0000000000000000000000000000000000000000..3204c25400166827b8b1c5a915b63fbd074703e1 GIT binary patch literal 10455 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 z Date: Wed, 4 Jan 2023 17:12:21 +0100 Subject: [PATCH 18/37] fix lint --- docs/guide/types/doughnutLabel.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/guide/types/doughnutLabel.md b/docs/guide/types/doughnutLabel.md index febd9dfdd..eeaac70c2 100644 --- a/docs/guide/types/doughnutLabel.md +++ b/docs/guide/types/doughnutLabel.md @@ -10,11 +10,11 @@ const options = { annotations: { dLabel: { type: 'doughnutLabel', - content: ({chart}) => ['Total', - chart.getDatasetMeta(0).total, + content: ({chart}) => ['Total', + chart.getDatasetMeta(0).total, 'last 7 months' ], - font: [{size: 60},{size: 50},{size: 30}], + font: [{size: 60}, {size: 50}, {size: 30}], color: ['black', 'red', 'grey'] } } From 1e1f0f0b63b6c092575dd7bdef76a5cdca7c35e2 Mon Sep 17 00:00:00 2001 From: stockiNail Date: Thu, 5 Jan 2023 08:59:30 +0100 Subject: [PATCH 19/37] add samples --- docs/.vuepress/config.js | 9 +++ docs/samples/doughnutLabel/basic.md | 71 +++++++++++++++++++++++ docs/samples/doughnutLabel/canvas.md | 59 +++++++++++++++++++ docs/samples/doughnutLabel/gauge.md | 86 ++++++++++++++++++++++++++++ docs/samples/doughnutLabel/image.md | 59 +++++++++++++++++++ 5 files changed, 284 insertions(+) create mode 100644 docs/samples/doughnutLabel/basic.md create mode 100644 docs/samples/doughnutLabel/canvas.md create mode 100644 docs/samples/doughnutLabel/gauge.md create mode 100644 docs/samples/doughnutLabel/image.md diff --git a/docs/.vuepress/config.js b/docs/.vuepress/config.js index bca6f23a2..f5876d29a 100644 --- a/docs/.vuepress/config.js +++ b/docs/.vuepress/config.js @@ -203,6 +203,15 @@ module.exports = { 'polygon/shadow', ] }, + { + title: 'Doughnut label annotations', + children: [ + 'doughnutLabel/basic', + 'doughnutLabel/canvas', + 'doughnutLabel/image', + 'doughnutLabel/gauge' + ] + }, { title: 'Charts', children: [ diff --git a/docs/samples/doughnutLabel/basic.md b/docs/samples/doughnutLabel/basic.md new file mode 100644 index 000000000..d916519ab --- /dev/null +++ b/docs/samples/doughnutLabel/basic.md @@ -0,0 +1,71 @@ +# Basic + +```js chart-editor +// +const DATA_COUNT = 12; +const MIN = 0; +const MAX = 100; + +const numberCfg = {count: DATA_COUNT, min: MIN, max: MAX, decimals: 0}; + +const data = { + labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], + datasets: [{ + data: Utils.numbers(numberCfg) + }] +}; +// + +// +const annotation = { + type: 'doughnutLabel', + content: ({chart}) => ['Average', + average(chart).toFixed(2), + 'on last ' + chart.data.labels.length + ' months' + ], + font: [{size: 60}, {size: 50}, {size: 30}], + color: ['black', 'red', 'grey'] +}; +// + +/* */ +const config = { + type: 'doughnut', + data, + options: { + aspectRatio: 2, + plugins: { + annotation: { + annotations: { + annotation + } + } + } + } +}; +/* */ + +// +function average(chart) { + const values = chart.data.datasets[0].data; + return values.reduce((a, b) => a + b, 0) / values.length; +} +// + +const actions = [ + { + name: 'Randomize', + handler: function(chart) { + chart.data.datasets.forEach(function(dataset, i) { + dataset.data = dataset.data.map(() => Utils.rand(MIN, MAX)); + }); + chart.update(); + } + } +]; + +module.exports = { + actions: actions, + config: config, +}; +``` diff --git a/docs/samples/doughnutLabel/canvas.md b/docs/samples/doughnutLabel/canvas.md new file mode 100644 index 000000000..adcd9993b --- /dev/null +++ b/docs/samples/doughnutLabel/canvas.md @@ -0,0 +1,59 @@ +# Using canvas as content + +```js chart-editor +// +const DATA_COUNT = 12; +const MIN = 0; +const MAX = 100; + +const numberCfg = {count: DATA_COUNT, min: MIN, max: MAX, decimals: 0}; + +const data = { + labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], + datasets: [{ + data: Utils.numbers(numberCfg) + }] +}; +// + +// +const annotation = { + type: 'doughnutLabel', + content: Utils.getHouse(), +}; +// + +/* */ +const config = { + type: 'doughnut', + data, + options: { + aspectRatio: 2, + plugins: { + annotation: { + annotations: { + annotation + } + } + } + } +}; +/* */ + +const actions = [ + { + name: 'Randomize', + handler: function(chart) { + chart.data.datasets.forEach(function(dataset, i) { + dataset.data = dataset.data.map(() => Utils.rand(MIN, MAX)); + }); + chart.update(); + } + } +]; + +module.exports = { + actions: actions, + config: config, +}; +``` diff --git a/docs/samples/doughnutLabel/gauge.md b/docs/samples/doughnutLabel/gauge.md new file mode 100644 index 000000000..1c8fc5e49 --- /dev/null +++ b/docs/samples/doughnutLabel/gauge.md @@ -0,0 +1,86 @@ +# Single gauge + +```js chart-editor +// +const COLORS = ['rgb(140, 214, 16)', 'rgb(239, 198, 0)', 'rgb(231, 24, 49)']; +const MIN = 0; +const MAX = 100; + +const value = Utils.rand(MIN, MAX); + +const data = { + datasets: [{ + data: [value, 100 - value], + backgroundColor(ctx) { + if (ctx.type !== 'data') { + return; + } + if (ctx.index === 1) { + return 'rgb(234, 234, 234)'; + } + return COLORS[index(ctx.raw)]; + } + }] +}; +// + +// +const annotation = { + type: 'doughnutLabel', + content: ({chart}) => [ + chart.data.datasets[0].data[0].toFixed(2) + ' %', + 'CPU utilization', + ], + drawTime: 'beforeDraw', + position: { + y: '-50%' + }, + font: [{size: 50, weight: 'bold'}, {size: 20}], + color: ['grey', 'lightGrey'] +}; +// + +/* */ +const config = { + type: 'doughnut', + data, + options: { + aspectRatio: 2, + circumference: 180, + rotation: -90, + plugins: { + annotation: { + annotations: { + annotation + } + } + } + } +}; +/* */ + +// +function index(perc) { + return perc < 70 ? 0 : perc < 90 ? 1 : 2; +} +// + +const actions = [ + { + name: 'Randomize', + handler: function(chart) { + chart.data.datasets.forEach(function(dataset, i) { + const perc = Utils.rand(MIN, MAX); + dataset.data[0] = perc; + dataset.data[1] = 100 - perc; + }); + chart.update(); + } + } +]; + +module.exports = { + actions: actions, + config: config, +}; +``` diff --git a/docs/samples/doughnutLabel/image.md b/docs/samples/doughnutLabel/image.md new file mode 100644 index 000000000..4e6a7dd56 --- /dev/null +++ b/docs/samples/doughnutLabel/image.md @@ -0,0 +1,59 @@ +# Using images as content + +```js chart-editor +// +const DATA_COUNT = 12; +const MIN = 0; +const MAX = 100; + +const numberCfg = {count: DATA_COUNT, min: MIN, max: MAX, decimals: 0}; + +const data = { + labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], + datasets: [{ + data: Utils.numbers(numberCfg) + }] +}; +// + +// +const annotation = { + type: 'doughnutLabel', + content: Utils.getImage(), +}; +// + +/* */ +const config = { + type: 'doughnut', + data, + options: { + aspectRatio: 2, + plugins: { + annotation: { + annotations: { + annotation + } + } + } + } +}; +/* */ + +const actions = [ + { + name: 'Randomize', + handler: function(chart) { + chart.data.datasets.forEach(function(dataset, i) { + dataset.data = dataset.data.map(() => Utils.rand(MIN, MAX)); + }); + chart.update(); + } + } +]; + +module.exports = { + actions: actions, + config: config, +}; +``` From 4c678052f77a8553d926905733c3657bc56aa27d Mon Sep 17 00:00:00 2001 From: stockiNail Date: Thu, 5 Jan 2023 16:14:08 +0100 Subject: [PATCH 20/37] fixes animations and options --- docs/samples/doughnutLabel/gauge.md | 2 +- src/elements.js | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/samples/doughnutLabel/gauge.md b/docs/samples/doughnutLabel/gauge.md index 1c8fc5e49..f84740148 100644 --- a/docs/samples/doughnutLabel/gauge.md +++ b/docs/samples/doughnutLabel/gauge.md @@ -36,7 +36,7 @@ const annotation = { y: '-50%' }, font: [{size: 50, weight: 'bold'}, {size: 20}], - color: ['grey', 'lightGrey'] + color: ({chart}) => [COLORS[index(chart.data.datasets[0].data[0])], 'grey'] }; // diff --git a/src/elements.js b/src/elements.js index 652695820..f818acfcd 100644 --- a/src/elements.js +++ b/src/elements.js @@ -64,9 +64,9 @@ export function updateElements(chart, state, options, mode) { Object.assign(element, properties); } - properties.options = resolveAnnotationOptions(resolver); - animations.update(element, properties); + + element.options = resolveAnnotationOptions(resolver); } } @@ -89,8 +89,8 @@ function updateSubElements(mainElement, {elements, initProperties}, resolver, an const properties = definition.properties; const subElement = getOrCreateElement(subElements, i, definition.type, initProperties); const subResolver = resolver[definition.optionScope].override(definition); - properties.options = resolveAnnotationOptions(subResolver); animations.update(subElement, properties); + subElement.options = resolveAnnotationOptions(subResolver); } } From 21b9e139abbfa68540837318180e15de9ad8f609 Mon Sep 17 00:00:00 2001 From: stockiNail Date: Fri, 6 Jan 2023 22:06:05 +0100 Subject: [PATCH 21/37] no extension from label and background not a box but arc --- src/helpers/helpers.core.js | 16 ++++ src/helpers/helpers.options.js | 34 +++++++ src/types/doughnutLabel.js | 120 ++++++++++++++++++------- src/types/label.js | 55 +++--------- test/fixtures/doughnutLabel/border.png | Bin 22314 -> 23546 bytes test/specs/doughnutLabel.spec.js | 37 +++----- 6 files changed, 163 insertions(+), 99 deletions(-) diff --git a/src/helpers/helpers.core.js b/src/helpers/helpers.core.js index 41df86b33..976ad7542 100644 --- a/src/helpers/helpers.core.js +++ b/src/helpers/helpers.core.js @@ -1,3 +1,6 @@ +import {toRadians} from 'chart.js/helpers'; +import {rotated} from './helpers.geometric'; + const isOlderPart = (act, req) => req > act || (act.length > req.length && act.slice(0, req.length) === req); /** @@ -56,6 +59,19 @@ export function inBoxRange(point, {x, y, x2, y2}, axis, borderWidth) { return inRangeX && inRangeY; } +/** + * @param {Point} point + * @param {rect: {x: number, y: number, x2: number, y2: number}, center: {x: number, y: number}} element + * @param {InteractionAxis} axis + * @param {number} rotation + * @param {number} [borderWidth=0] + * @returns {boolean} + */ +export function inLabelRange(point, {rect, center}, axis, rotation, borderWidth = 0) { + const rotPoint = rotated(point, center, toRadians(-rotation)); + return inBoxRange(rotPoint, rect, axis, borderWidth); +} + /** * @param {AnnotationElement} element * @param {boolean} useFinalPosition diff --git a/src/helpers/helpers.options.js b/src/helpers/helpers.options.js index 9058c0891..edba72594 100644 --- a/src/helpers/helpers.options.js +++ b/src/helpers/helpers.options.js @@ -6,6 +6,8 @@ const toPercent = (s) => clamp(parseFloat(s) / 100, 0, 1); /** * @typedef { import('chart.js').FontSpec } FontSpec + * @typedef { import('chart.js').Point } Point + * @typedef { import('chart.js').Padding } Padding * @typedef { import('../../types/options').AnnotationPointCoordinates } AnnotationPointCoordinates * @typedef { import('../../types/label').CoreLabelOptions } CoreLabelOptions * @typedef { import('../../types/label').LabelPositionObject } LabelPositionObject @@ -61,6 +63,34 @@ export function calculateTextAlignment(size, options) { return x; } +/** + * @param {Point} point + * @param {{height: number, width: number}} labelSize + * @param {{borderWidth: number, position: {LabelPositionObject|string}, xAdjust: number, yAdjust: number}} options + * @param {Padding|undefined} padding + * @returns {{x: number, y: number, x2: number, y2: number, height: number, width: number, centerX: number, centerY: number}} + + */ +export function measureLabelRectangle(point, labelSize, {borderWidth, position, xAdjust, yAdjust}, padding) { + const hasPadding = isObject(padding); + const width = labelSize.width + (hasPadding ? padding.width : 0) + borderWidth; + const height = labelSize.height + (hasPadding ? padding.height : 0) + borderWidth; + const positionObj = toPosition(position); + const x = calculateLabelPosition(point.x, width, xAdjust, positionObj.x); + const y = calculateLabelPosition(point.y, height, yAdjust, positionObj.y); + + return { + x, + y, + x2: x + width, + y2: y + height, + width, + height, + centerX: x + width / 2, + centerY: y + height / 2 + }; +} + /** * @param {LabelPositionObject|string} value * @returns {LabelPositionObject} @@ -111,3 +141,7 @@ export function toFonts(options, fitRatio) { export function isBoundToPoint(options) { return options && (defined(options.xValue) || defined(options.yValue)); } + +function calculateLabelPosition(start, size, adjust = 0, position) { + return start - getRelativePosition(size, position) + adjust; +} diff --git a/src/types/doughnutLabel.js b/src/types/doughnutLabel.js index 673f47ecb..8880e7495 100644 --- a/src/types/doughnutLabel.js +++ b/src/types/doughnutLabel.js @@ -1,41 +1,52 @@ -import LabelAnnotation from './label'; -import {DoughnutController} from 'chart.js'; -import {toPadding} from 'chart.js/helpers'; -import {drawBox, drawLabel, measureLabelSize, translate, shouldFit} from '../helpers'; +import {Element, DoughnutController} from 'chart.js'; +import {drawLabel, measureLabelSize, translate, shouldFit, inLabelRange, getElementCenterPoint, measureLabelRectangle, setBorderStyle} from '../helpers'; +import {TAU, getAngleFromPoint} from 'chart.js/helpers'; -export default class DoughnutLabelAnnotation extends LabelAnnotation { +export default class DoughnutLabelAnnotation extends Element { + + inRange(mouseX, mouseY, axis, useFinalPosition) { + return inLabelRange( + {x: mouseX, y: mouseY}, + {rect: this.getProps(['x', 'y', 'x2', 'y2'], useFinalPosition), center: this.getCenterPoint(useFinalPosition)}, + axis, + this.rotation + ); + } + + getCenterPoint(useFinalPosition) { + return getElementCenterPoint(this, useFinalPosition); + } draw(ctx) { const options = this.options; if (!options.display || !options.content) { return; } + drawBackground(ctx, this); ctx.save(); translate(ctx, this.getCenterPoint(), this.rotation); - drawBox(ctx, this, options); - drawLabel(ctx, this._getLabelSize(), options, this.fitRatio); + drawLabel(ctx, this, options, this._fitRatio); ctx.restore(); } resolveElementProperties(chart, options) { - const controller = getController(chart, options); - if (!controller) { + const meta = getDatasetMeta(chart, options); + if (!meta) { return {}; } - const {point, radius} = getControllerCenter(chart, controller); + const {controllerMeta, point, radius} = getControllerMeta(chart, options, meta); let labelSize = measureLabelSize(chart.ctx, options); - const padding = toPadding(options.padding); - const fitRatio = getFitRatio(chart, {borderWidth: options.borderWidth, padding}, labelSize, radius); - if (shouldFit(options, fitRatio)) { - labelSize = measureLabelSize(chart.ctx, options, fitRatio); + const _fitRatio = getFitRatio(labelSize, radius); + if (shouldFit(options, _fitRatio)) { + labelSize = measureLabelSize(chart.ctx, options, _fitRatio); } - const boxSize = this._measureRect(point, labelSize, options, padding); + const {position, xAdjust, yAdjust} = options; + const boxSize = measureLabelRectangle(point, labelSize, {borderWidth: 0, position, xAdjust, yAdjust}); return { - pointX: point.x, - pointY: point.y, ...boxSize, - fitRatio, - rotation: options.rotation + ...controllerMeta, + rotation: options.rotation, + _fitRatio }; } } @@ -47,13 +58,12 @@ DoughnutLabelAnnotation.defaults = { autoHide: true, backgroundColor: 'transparent', backgroundShadowColor: 'transparent', - borderCapStyle: 'butt', + borderColor: 'transparent', borderDash: [], borderDashOffset: 0, borderJoinStyle: 'miter', - borderRadius: 0, borderShadowColor: 'transparent', - borderWidth: 0, + borderWidth: 2, // like arc element color: 'black', content: null, display: true, @@ -64,8 +74,8 @@ DoughnutLabelAnnotation.defaults = { style: undefined, weight: undefined }, + forceRadius: false, height: undefined, - padding: 0, position: 'center', rotation: 0, shadowBlur: 0, @@ -80,16 +90,15 @@ DoughnutLabelAnnotation.defaults = { }; DoughnutLabelAnnotation.defaultRoutes = { - borderColor: 'color' }; -function getController(chart, options) { +function getDatasetMeta(chart, options) { return chart.getSortedVisibleDatasetMetas().reduce(function(result, value) { const controller = value.controller; if (controller instanceof DoughnutController && isControllerVisible(chart, options, value.data) && - (!result || controller.innerRadius < result.innerRadius)) { - return controller; + (!result || controller.innerRadius < result.controller.innerRadius)) { + return value; } return result; }, undefined); @@ -106,8 +115,9 @@ function isControllerVisible(chart, options, elements) { } } -function getControllerCenter({chartArea}, {innerRadius, offsetX, offsetY}) { +function getControllerMeta({chartArea}, options, meta) { const {left, top, right, bottom} = chartArea; + const {innerRadius, offsetX, offsetY} = meta.controller; const x = (left + right) / 2 + offsetX; const y = (top + bottom) / 2 + offsetY; const square = { @@ -120,15 +130,61 @@ function getControllerCenter({chartArea}, {innerRadius, offsetX, offsetY}) { x: (square.left + square.right) / 2, y: (square.top + square.bottom) / 2 }; + const hBorderWidth = options.borderWidth / 2; + const _radius = innerRadius - hBorderWidth; + const _counterclockwise = point.y > y; + const side = _counterclockwise ? top + hBorderWidth : bottom - hBorderWidth; + const angles = getAngles(side, x, y, _radius); + const controllerMeta = { + _centerX: x, + _centerY: y, + _radius, + _counterclockwise, + ...angles + }; return { + controllerMeta, point, radius: Math.min(innerRadius, Math.min(square.right - square.left, square.bottom - square.top) / 2) }; } -function getFitRatio(chart, {borderWidth, padding}, {width, height}, radius) { - const w = width + padding.width + borderWidth; - const h = height + padding.height + borderWidth; - const hypo = Math.sqrt(Math.pow(w, 2) + Math.pow(h, 2)); +function getFitRatio({width, height}, radius) { + const hypo = Math.sqrt(Math.pow(width, 2) + Math.pow(height, 2)); return (radius * 2) / hypo; } + +function getAngles(y, centerX, centerY, radius) { + const yk2 = Math.pow(centerY - y, 2); + const r2 = Math.pow(radius, 2); + const b = centerX * -2; + const c = Math.pow(centerX, 2) + yk2 - r2; + const delta = Math.pow(b, 2) - (4 * c); + if (delta <= 0) { + return { + _startAngle: 0, + _endAngle: TAU + }; + } + const start = (-b - Math.sqrt(delta)) / 2; + const end = (-b + Math.sqrt(delta)) / 2; + return { + _startAngle: getAngleFromPoint({x: centerX, y: centerY}, {x: start, y}).angle, + _endAngle: getAngleFromPoint({x: centerX, y: centerY}, {x: end, y}).angle + }; +} + +function drawBackground(ctx, element) { + const {_centerX, _centerY, _radius, _startAngle, _endAngle, _counterclockwise, options} = element; + ctx.save(); + const stroke = setBorderStyle(ctx, options); + ctx.fillStyle = options.backgroundColor; + ctx.beginPath(); + ctx.arc(_centerX, _centerY, _radius, _startAngle, _endAngle, _counterclockwise); + ctx.closePath(); + ctx.fill(); + if (stroke) { + ctx.stroke(); + } + ctx.restore(); +} diff --git a/src/types/label.js b/src/types/label.js index c79a70fc5..38d470bea 100644 --- a/src/types/label.js +++ b/src/types/label.js @@ -1,12 +1,17 @@ import {Element} from 'chart.js'; -import {drawBox, drawCallout, drawLabel, measureLabelSize, getChartPoint, toPosition, inBoxRange, isBoundToPoint, resolveBoxProperties, getRelativePosition, translate, rotated, getElementCenterPoint} from '../helpers'; -import {toPadding, toRadians, defined} from 'chart.js/helpers'; +import {drawBox, drawCallout, drawLabel, measureLabelSize, getChartPoint, isBoundToPoint, resolveBoxProperties, translate, getElementCenterPoint, inLabelRange, measureLabelRectangle} from '../helpers'; +import {toPadding, defined} from 'chart.js/helpers'; export default class LabelAnnotation extends Element { inRange(mouseX, mouseY, axis, useFinalPosition) { - const {x, y} = rotated({x: mouseX, y: mouseY}, this.getCenterPoint(useFinalPosition), toRadians(-this.rotation)); - return inBoxRange({x, y}, this.getProps(['x', 'y', 'x2', 'y2'], useFinalPosition), axis, this.options.borderWidth); + return inLabelRange( + {x: mouseX, y: mouseY}, + {rect: this.getProps(['x', 'y', 'x2', 'y2'], useFinalPosition), center: this.getCenterPoint(useFinalPosition)}, + axis, + this.rotation, + this.options.borderWidth + ); } getCenterPoint(useFinalPosition) { @@ -23,7 +28,7 @@ export default class LabelAnnotation extends Element { translate(ctx, this.getCenterPoint(), this.rotation); drawCallout(ctx, this); drawBox(ctx, this, options); - drawLabel(ctx, this._getLabelSize(), options); + drawLabel(ctx, getLabelSize(this), options); ctx.restore(); } @@ -37,7 +42,7 @@ export default class LabelAnnotation extends Element { } const padding = toPadding(options.padding); const labelSize = measureLabelSize(chart.ctx, options); - const boxSize = this._measureRect(point, labelSize, options, padding); + const boxSize = measureLabelRectangle(point, labelSize, options, padding); return { pointX: point.x, pointY: point.y, @@ -45,20 +50,6 @@ export default class LabelAnnotation extends Element { rotation: options.rotation }; } - - /** - * @protected - */ - _measureRect(point, labelSize, options, padding) { - return measureRect(point, labelSize, options, padding); - } - - /** - * @protected - */ - _getLabelSize() { - return getLabelSize(this); - } } LabelAnnotation.id = 'labelAnnotation'; @@ -125,30 +116,6 @@ LabelAnnotation.defaultRoutes = { borderColor: 'color' }; -function measureRect(point, size, options, padding) { - const width = size.width + padding.width + options.borderWidth; - const height = size.height + padding.height + options.borderWidth; - const position = toPosition(options.position); - const x = calculatePosition(point.x, width, options.xAdjust, position.x); - const y = calculatePosition(point.y, height, options.yAdjust, position.y); - - return { - x, - y, - x2: x + width, - y2: y + height, - width, - height, - centerX: x + width / 2, - centerY: y + height / 2 - }; -} - -function calculatePosition(start, size, adjust = 0, position) { - return start - getRelativePosition(size, position) + adjust; -} - - function getLabelSize({x, y, width, height, options}) { const hBorderWidth = options.borderWidth / 2; const padding = toPadding(options.padding); diff --git a/test/fixtures/doughnutLabel/border.png b/test/fixtures/doughnutLabel/border.png index 2fd45eb2ceb8554d4b9dff470ebda934f837677f..a469df4b0ccd9442883307e730309cf1955b8b93 100644 GIT binary patch literal 23546 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 Date: Mon, 9 Jan 2023 09:54:54 +0100 Subject: [PATCH 22/37] aply some reviews --- src/elements.js | 7 +++---- src/helpers/helpers.canvas.js | 9 ++------- src/types/doughnutLabel.js | 13 +++++++------ 3 files changed, 12 insertions(+), 17 deletions(-) diff --git a/src/elements.js b/src/elements.js index f818acfcd..718cdc189 100644 --- a/src/elements.js +++ b/src/elements.js @@ -64,9 +64,9 @@ export function updateElements(chart, state, options, mode) { Object.assign(element, properties); } - animations.update(element, properties); + properties.options = resolveAnnotationOptions(resolver); - element.options = resolveAnnotationOptions(resolver); + animations.update(element, properties); } } @@ -89,8 +89,8 @@ function updateSubElements(mainElement, {elements, initProperties}, resolver, an const properties = definition.properties; const subElement = getOrCreateElement(subElements, i, definition.type, initProperties); const subResolver = resolver[definition.optionScope].override(definition); + properties.options = resolveAnnotationOptions(subResolver); animations.update(subElement, properties); - subElement.options = resolveAnnotationOptions(subResolver); } } @@ -151,4 +151,3 @@ function resyncElements(elements, annotations) { } return elements; } - diff --git a/src/helpers/helpers.canvas.js b/src/helpers/helpers.canvas.js index 228860741..79b176c88 100644 --- a/src/helpers/helpers.canvas.js +++ b/src/helpers/helpers.canvas.js @@ -71,25 +71,20 @@ export function setShadowStyle(ctx, options) { /** * @param {CanvasRenderingContext2D} ctx * @param {CoreLabelOptions} options - * @param {number} fitRatio * @returns {{width: number, height: number}} */ -export function measureLabelSize(ctx, options, fitRatio) { +export function measureLabelSize(ctx, options) { const content = options.content; if (isImageOrCanvas(content)) { const size = { width: getSize(content.width, options.width), height: getSize(content.height, options.height) }; - if (shouldFit(options, fitRatio)) { - size.width = Math.floor(size.width * fitRatio); - size.height = Math.floor(size.height * fitRatio); - } return size; } const strokeWidth = options.textStrokeWidth; const lines = isArray(content) ? content : [content]; - const fonts = toFonts(options, fitRatio); + const fonts = toFonts(options); const mapKey = lines.join() + fontsKey(fonts) + strokeWidth + (ctx._measureText ? '-spriting' : ''); if (!widthCache.has(mapKey)) { widthCache.set(mapKey, calculateLabelSize(ctx, lines, fonts, strokeWidth)); diff --git a/src/types/doughnutLabel.js b/src/types/doughnutLabel.js index 8880e7495..e9f360f31 100644 --- a/src/types/doughnutLabel.js +++ b/src/types/doughnutLabel.js @@ -25,6 +25,7 @@ export default class DoughnutLabelAnnotation extends Element { drawBackground(ctx, this); ctx.save(); translate(ctx, this.getCenterPoint(), this.rotation); + console.log(this._fitRatio); drawLabel(ctx, this, options, this._fitRatio); ctx.restore(); } @@ -38,7 +39,7 @@ export default class DoughnutLabelAnnotation extends Element { let labelSize = measureLabelSize(chart.ctx, options); const _fitRatio = getFitRatio(labelSize, radius); if (shouldFit(options, _fitRatio)) { - labelSize = measureLabelSize(chart.ctx, options, _fitRatio); + labelSize = {width: labelSize.width * _fitRatio, height: labelSize.height * _fitRatio}; } const {position, xAdjust, yAdjust} = options; const boxSize = measureLabelRectangle(point, labelSize, {borderWidth: 0, position, xAdjust, yAdjust}); @@ -63,7 +64,7 @@ DoughnutLabelAnnotation.defaults = { borderDashOffset: 0, borderJoinStyle: 'miter', borderShadowColor: 'transparent', - borderWidth: 2, // like arc element + borderWidth: 0, color: 'black', content: null, display: true, @@ -74,13 +75,13 @@ DoughnutLabelAnnotation.defaults = { style: undefined, weight: undefined }, - forceRadius: false, height: undefined, position: 'center', rotation: 0, shadowBlur: 0, shadowOffsetX: 0, shadowOffsetY: 0, + spacing: 1, textAlign: 'center', textStrokeColor: undefined, textStrokeWidth: 0, @@ -130,10 +131,10 @@ function getControllerMeta({chartArea}, options, meta) { x: (square.left + square.right) / 2, y: (square.top + square.bottom) / 2 }; - const hBorderWidth = options.borderWidth / 2; - const _radius = innerRadius - hBorderWidth; + const space = options.spacing + options.borderWidth / 2; + const _radius = innerRadius - space; const _counterclockwise = point.y > y; - const side = _counterclockwise ? top + hBorderWidth : bottom - hBorderWidth; + const side = _counterclockwise ? top + space : bottom - space; const angles = getAngles(side, x, y, _radius); const controllerMeta = { _centerX: x, From fb3268458ccaa2e78c299d973d8286645dfb33df Mon Sep 17 00:00:00 2001 From: stockiNail Date: Mon, 9 Jan 2023 09:57:56 +0100 Subject: [PATCH 23/37] lint --- src/helpers/helpers.canvas.js | 2 +- src/types/doughnutLabel.js | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/helpers/helpers.canvas.js b/src/helpers/helpers.canvas.js index 79b176c88..df08c0cc8 100644 --- a/src/helpers/helpers.canvas.js +++ b/src/helpers/helpers.canvas.js @@ -1,6 +1,6 @@ import {addRoundedRectPath, isArray, toTRBLCorners, toRadians} from 'chart.js/helpers'; import {clampAll} from './helpers.core'; -import {calculateTextAlignment, getSize, toFonts, shouldFit} from './helpers.options'; +import {calculateTextAlignment, getSize, toFonts} from './helpers.options'; const widthCache = new Map(); const fontsKey = (fonts) => fonts.reduce(function(prev, item) { diff --git a/src/types/doughnutLabel.js b/src/types/doughnutLabel.js index e9f360f31..fa91f199f 100644 --- a/src/types/doughnutLabel.js +++ b/src/types/doughnutLabel.js @@ -25,7 +25,6 @@ export default class DoughnutLabelAnnotation extends Element { drawBackground(ctx, this); ctx.save(); translate(ctx, this.getCenterPoint(), this.rotation); - console.log(this._fitRatio); drawLabel(ctx, this, options, this._fitRatio); ctx.restore(); } @@ -39,7 +38,7 @@ export default class DoughnutLabelAnnotation extends Element { let labelSize = measureLabelSize(chart.ctx, options); const _fitRatio = getFitRatio(labelSize, radius); if (shouldFit(options, _fitRatio)) { - labelSize = {width: labelSize.width * _fitRatio, height: labelSize.height * _fitRatio}; + labelSize = {width: labelSize.width * _fitRatio, height: labelSize.height * _fitRatio}; } const {position, xAdjust, yAdjust} = options; const boxSize = measureLabelRectangle(point, labelSize, {borderWidth: 0, position, xAdjust, yAdjust}); From 7b92d982e60e00d39ab22b0d663b7b7c894e090e Mon Sep 17 00:00:00 2001 From: stockiNail Date: Mon, 9 Jan 2023 10:12:41 +0100 Subject: [PATCH 24/37] fixes test cases --- test/fixtures/doughnutLabel/border.png | Bin 23546 -> 23337 bytes .../doughnutLabel/contentMultiline.png | Bin 23368 -> 22229 bytes test/fixtures/doughnutLabel/rotation.png | Bin 25355 -> 23940 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/test/fixtures/doughnutLabel/border.png b/test/fixtures/doughnutLabel/border.png index a469df4b0ccd9442883307e730309cf1955b8b93..b321d4ccea1126ddb3e04f653697cf00522bea65 100644 GIT binary patch literal 23337 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 literal 23368 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 -(R|1n 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�PZa_O}uC7pKVz5XqD{ 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 W#qp#4;f)vse$JdSAU)Hz5C0#S&%y5i diff --git a/test/fixtures/doughnutLabel/rotation.png b/test/fixtures/doughnutLabel/rotation.png index d4ee7bcfc5fedb45db361f9980a89feea2c0a2fe..de04a1f6ce600186269af21c446060c884f1e09e 100644 GIT binary patch literal 23940 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 literal 25355 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 Date: Mon, 9 Jan 2023 10:27:18 +0100 Subject: [PATCH 25/37] fixes color animation --- src/annotation.js | 5 +++++ test/fixtures/doughnutLabel/border.js | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/annotation.js b/src/annotation.js index f66a2305d..cf8ef26d1 100644 --- a/src/annotation.js +++ b/src/annotation.js @@ -107,6 +107,11 @@ export default { properties: ['x', 'y', 'x2', 'y2', 'width', 'height', 'centerX', 'centerY', 'pointX', 'pointY', 'radius'], type: 'number' }, + colors: { + properties: ['color'], + type: 'color', + duration: 0 + } }, clip: true, interaction: { diff --git a/test/fixtures/doughnutLabel/border.js b/test/fixtures/doughnutLabel/border.js index 70158e912..731187473 100644 --- a/test/fixtures/doughnutLabel/border.js +++ b/test/fixtures/doughnutLabel/border.js @@ -3,7 +3,7 @@ function content(ctx, opts) { } module.exports = { - tolerance: 0.0055, + tolerance: 0.0062, config: { type: 'doughnut', data: { From 9817696cfeb7823f547403e5b1669dec1bed1e10 Mon Sep 17 00:00:00 2001 From: stockiNail Date: Mon, 9 Jan 2023 11:29:16 +0100 Subject: [PATCH 26/37] fixes font and colors options as indexable --- src/annotation.js | 6 ++++-- src/elements.js | 13 ++++++++----- test/fixtures/doughnutLabel/contentMultiline.js | 2 +- test/fixtures/doughnutLabel/rotation.js | 2 +- 4 files changed, 14 insertions(+), 9 deletions(-) diff --git a/src/annotation.js b/src/annotation.js index cf8ef26d1..9eec4f0fe 100644 --- a/src/annotation.js +++ b/src/annotation.js @@ -2,7 +2,7 @@ import {Chart} from 'chart.js'; import {clipArea, unclipArea, isObject, isArray} from 'chart.js/helpers'; import {handleEvent, hooks, updateListeners} from './events'; import {adjustScaleRange, verifyScaleOptions} from './scale'; -import {updateElements, resolveType} from './elements'; +import {updateElements, resolveType, isIndexable} from './elements'; import {annotationTypes} from './types'; import {requireVersion} from './helpers'; import {version} from '../package.json'; @@ -138,8 +138,10 @@ export default { }, common: { label: { + _indexable: isIndexable, _fallback: true - } + }, + _indexable: isIndexable, } }, diff --git a/src/elements.js b/src/elements.js index 718cdc189..4db28cf0d 100644 --- a/src/elements.js +++ b/src/elements.js @@ -1,14 +1,11 @@ import {Animations} from 'chart.js'; -import {isObject, isArray, defined} from 'chart.js/helpers'; +import {isObject, defined} from 'chart.js/helpers'; import {hooks} from './events'; import {annotationTypes} from './types'; const directUpdater = { update: Object.assign }; -// https://github.com/chartjs/chartjs-plugin-annotation/pull/801 -// font can be set as object or array, the only exception -const inspect = (prop, value, optDefs) => isObject(optDefs) && (prop !== 'font' || !isArray(value)); /** * @typedef { import("chart.js").Chart } Chart @@ -16,6 +13,12 @@ const inspect = (prop, value, optDefs) => isObject(optDefs) && (prop !== 'font' * @typedef { import('../../types/options').AnnotationPluginOptions } AnnotationPluginOptions */ +/** + * @param {string} prop + * @returns {boolean} + */ +export const isIndexable = (prop) => prop === 'color' || prop === 'font'; + /** * Resolve the annotation type, checking if is supported. * @param {string} [type=line] - annotation type @@ -126,7 +129,7 @@ function resolveObj(resolver, defs) { for (const prop of Object.keys(defs)) { const optDefs = defs[prop]; const value = resolver[prop]; - result[prop] = inspect(prop, value, optDefs) ? resolveObj(value, optDefs) : value; + result[prop] = isObject(optDefs) && !isIndexable(prop) ? resolveObj(value, optDefs) : value; } return result; } diff --git a/test/fixtures/doughnutLabel/contentMultiline.js b/test/fixtures/doughnutLabel/contentMultiline.js index 5046d34d8..8e370655e 100644 --- a/test/fixtures/doughnutLabel/contentMultiline.js +++ b/test/fixtures/doughnutLabel/contentMultiline.js @@ -1,5 +1,5 @@ module.exports = { - tolerance: 0.0060, + tolerance: 0.0069, config: { type: 'doughnut', data: { diff --git a/test/fixtures/doughnutLabel/rotation.js b/test/fixtures/doughnutLabel/rotation.js index 88114e37b..c833122d2 100644 --- a/test/fixtures/doughnutLabel/rotation.js +++ b/test/fixtures/doughnutLabel/rotation.js @@ -1,5 +1,5 @@ module.exports = { - tolerance: 0.0070, + tolerance: 0.0072, config: { type: 'doughnut', data: { From 89e2458dda4c97723502e5f20bef6bbe3e4ac302 Mon Sep 17 00:00:00 2001 From: stockiNail Date: Mon, 9 Jan 2023 12:17:27 +0100 Subject: [PATCH 27/37] adds new test cases for background --- src/types/doughnutLabel.js | 3 +- .../fixtures/doughnutLabel/backgroundColor.js | 34 ++++++++++++++++ .../doughnutLabel/backgroundColor.png | Bin 0 -> 22310 bytes .../backgroundColorPosRotatedChart.js | 37 ++++++++++++++++++ .../backgroundColorPosRotatedChart.png | Bin 0 -> 27352 bytes .../backgroundColorPosRotatedReducedChart.js | 37 ++++++++++++++++++ .../backgroundColorPosRotatedReducedChart.png | Bin 0 -> 23099 bytes .../backgroundColorRotatedChart.js | 37 ++++++++++++++++++ .../backgroundColorRotatedChart.png | Bin 0 -> 27279 bytes .../backgroundColorRotatedReducedChart.js | 37 ++++++++++++++++++ .../backgroundColorRotatedReducedChart.png | Bin 0 -> 23300 bytes .../noBackgroundColorCircumTooSmall.js | 35 +++++++++++++++++ .../noBackgroundColorCircumTooSmall.png | Bin 0 -> 17798 bytes 13 files changed, 219 insertions(+), 1 deletion(-) create mode 100644 test/fixtures/doughnutLabel/backgroundColor.js create mode 100644 test/fixtures/doughnutLabel/backgroundColor.png create mode 100644 test/fixtures/doughnutLabel/backgroundColorPosRotatedChart.js create mode 100644 test/fixtures/doughnutLabel/backgroundColorPosRotatedChart.png create mode 100644 test/fixtures/doughnutLabel/backgroundColorPosRotatedReducedChart.js create mode 100644 test/fixtures/doughnutLabel/backgroundColorPosRotatedReducedChart.png create mode 100644 test/fixtures/doughnutLabel/backgroundColorRotatedChart.js create mode 100644 test/fixtures/doughnutLabel/backgroundColorRotatedChart.png create mode 100644 test/fixtures/doughnutLabel/backgroundColorRotatedReducedChart.js create mode 100644 test/fixtures/doughnutLabel/backgroundColorRotatedReducedChart.png create mode 100644 test/fixtures/doughnutLabel/noBackgroundColorCircumTooSmall.js create mode 100644 test/fixtures/doughnutLabel/noBackgroundColorCircumTooSmall.png diff --git a/src/types/doughnutLabel.js b/src/types/doughnutLabel.js index fa91f199f..d26507fb0 100644 --- a/src/types/doughnutLabel.js +++ b/src/types/doughnutLabel.js @@ -97,7 +97,8 @@ function getDatasetMeta(chart, options) { const controller = value.controller; if (controller instanceof DoughnutController && isControllerVisible(chart, options, value.data) && - (!result || controller.innerRadius < result.controller.innerRadius)) { + (!result || controller.innerRadius < result.controller.innerRadius) && + controller.options.circumference >= 90) { return value; } return result; diff --git a/test/fixtures/doughnutLabel/backgroundColor.js b/test/fixtures/doughnutLabel/backgroundColor.js new file mode 100644 index 000000000..a24af67cd --- /dev/null +++ b/test/fixtures/doughnutLabel/backgroundColor.js @@ -0,0 +1,34 @@ +module.exports = { + tolerance: 0.0055, + config: { + type: 'doughnut', + data: { + labels: ['Data1', 'Data2', 'Data3', 'Data4'], + datasets: [{ + data: [102, 200, 80, 55], + }], + }, + options: { + events: [], + plugins: { + legend: false, + annotation: { + annotations: [ + { + type: 'doughnutLabel', + backgroundColor: 'red', + borderWidth: 0, + content: 't' + }, + ] + } + } + } + }, + options: { + canvas: { + height: 256, + width: 512 + } + } +}; diff --git a/test/fixtures/doughnutLabel/backgroundColor.png b/test/fixtures/doughnutLabel/backgroundColor.png new file mode 100644 index 0000000000000000000000000000000000000000..3e5d3e709a94db2ef782e3bdc36775bd003b371f GIT binary patch literal 22310 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 literal 0 HcmV?d00001 diff --git a/test/fixtures/doughnutLabel/backgroundColorPosRotatedChart.js b/test/fixtures/doughnutLabel/backgroundColorPosRotatedChart.js new file mode 100644 index 000000000..0c3adb4f5 --- /dev/null +++ b/test/fixtures/doughnutLabel/backgroundColorPosRotatedChart.js @@ -0,0 +1,37 @@ +module.exports = { + tolerance: 0.0055, + config: { + type: 'doughnut', + data: { + labels: ['Data1', 'Data2', 'Data3', 'Data4'], + datasets: [{ + data: [102, 200, 80, 55], + }], + }, + options: { + events: [], + circumference: 180, + rotation: 90, + plugins: { + legend: false, + annotation: { + annotations: [ + { + type: 'doughnutLabel', + backgroundColor: 'red', + borderColor: 'black', + borderWidth: 2, + content: 't' + }, + ] + } + } + } + }, + options: { + canvas: { + height: 256, + width: 512 + } + } +}; diff --git a/test/fixtures/doughnutLabel/backgroundColorPosRotatedChart.png b/test/fixtures/doughnutLabel/backgroundColorPosRotatedChart.png new file mode 100644 index 0000000000000000000000000000000000000000..5d832957e30b25e0f3e0e59d3db18005374b3b25 GIT binary patch literal 27352 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 literal 0 HcmV?d00001 diff --git a/test/fixtures/doughnutLabel/backgroundColorPosRotatedReducedChart.js b/test/fixtures/doughnutLabel/backgroundColorPosRotatedReducedChart.js new file mode 100644 index 000000000..2df169764 --- /dev/null +++ b/test/fixtures/doughnutLabel/backgroundColorPosRotatedReducedChart.js @@ -0,0 +1,37 @@ +module.exports = { + tolerance: 0.0055, + config: { + type: 'doughnut', + data: { + labels: ['Data1', 'Data2', 'Data3', 'Data4'], + datasets: [{ + data: [102, 200, 80, 55], + }], + }, + options: { + events: [], + circumference: 145, + rotation: 135, + plugins: { + legend: false, + annotation: { + annotations: [ + { + type: 'doughnutLabel', + backgroundColor: 'red', + borderColor: 'black', + borderWidth: 2, + content: 't' + }, + ] + } + } + } + }, + options: { + canvas: { + height: 256, + width: 512 + } + } +}; diff --git a/test/fixtures/doughnutLabel/backgroundColorPosRotatedReducedChart.png b/test/fixtures/doughnutLabel/backgroundColorPosRotatedReducedChart.png new file mode 100644 index 0000000000000000000000000000000000000000..4c0afe66e0794a4abdc3875d526c38a6e5f4c68e GIT binary patch literal 23099 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

eHJp&p@GuNKjDwDtU*=;IWk_t}*MhanI-O zLWLUi7?7)KVg3Q(2Be3baT(Rch$DQaXIIgphlEDfg7T6=A3l623OeFwp7Fnx(Iz;} z4+_8MWe*)%3V~HJUJtxo0KU>IH32C7TIH~)b}%kO%S|oiDsmog_K9iZ-CExzWqq?i z*UgDqqh?_S)|&aQM-{aXTf)rERT3Gx>$V(hFI+Q;>}(V67|X^Bo&IWOCM@XQVG~~d zHS1#i=eWsFyUqW;BNEc^#Y%cO;v~j~#w$}okZgTg{^8wU9Ykk!?`(h&ILaCw~2s|F5;^JO~ zMMXQM<>jqc9d6GhL#kajaVDU~_Ri&$ZwDJG#9z5!jh^K* zTcPF-*b8(s)8)qP4(ITrZA710+|@vL*&gZ~`Ab`Smo_~uT~$-_XYk`kj-ar*TrCI) zWxsy?`X!vK@y}f^$v+@JIGas1B!AY-rP|v3E}GxogZvx0QMLP57jLqTKde=+U87wQ9ZaqJ373j7#yyKyr~XB584wS7W@4ru=j zCTb~W0gx%qm|so{U;7Q?TommJ7GGwp6#w4RNvGTvP=tsb)q;J|S*K{TR{UUYpkaEhE{dn8AeGaKOOp_{QgGlRU0E9lrY2*7BI%+Jt95 z9Y&Z7{JM{w>x6TQ7Wx)zcQ_Eiq6M2P9OuY6JV-dUG`-J7k3*yJbnC&+DADqn-hFcm zOuNG>&xD|vSeFBZ2CmiP_2hJBdl{Cf47m3yG) sHibSqa71#ft}vQ#>c%nIUbfH>l#^{mOWIF=K?MHkpCRbM=)k-G1M^Yn{r~^~ literal 0 HcmV?d00001 diff --git a/test/fixtures/doughnutLabel/backgroundColorRotatedChart.js b/test/fixtures/doughnutLabel/backgroundColorRotatedChart.js new file mode 100644 index 000000000..d5fe8bf20 --- /dev/null +++ b/test/fixtures/doughnutLabel/backgroundColorRotatedChart.js @@ -0,0 +1,37 @@ +module.exports = { + tolerance: 0.0055, + config: { + type: 'doughnut', + data: { + labels: ['Data1', 'Data2', 'Data3', 'Data4'], + datasets: [{ + data: [102, 200, 80, 55], + }], + }, + options: { + events: [], + circumference: 180, + rotation: -90, + plugins: { + legend: false, + annotation: { + annotations: [ + { + type: 'doughnutLabel', + backgroundColor: 'red', + borderColor: 'black', + borderWidth: 2, + content: 't' + }, + ] + } + } + } + }, + options: { + canvas: { + height: 256, + width: 512 + } + } +}; diff --git a/test/fixtures/doughnutLabel/backgroundColorRotatedChart.png b/test/fixtures/doughnutLabel/backgroundColorRotatedChart.png new file mode 100644 index 0000000000000000000000000000000000000000..4d55f5ed3bd42c699d35fb0c20a7771cacf368ef GIT binary patch literal 27279 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 literal 0 HcmV?d00001 diff --git a/test/fixtures/doughnutLabel/backgroundColorRotatedReducedChart.js b/test/fixtures/doughnutLabel/backgroundColorRotatedReducedChart.js new file mode 100644 index 000000000..9fbeda1fb --- /dev/null +++ b/test/fixtures/doughnutLabel/backgroundColorRotatedReducedChart.js @@ -0,0 +1,37 @@ +module.exports = { + tolerance: 0.0055, + config: { + type: 'doughnut', + data: { + labels: ['Data1', 'Data2', 'Data3', 'Data4'], + datasets: [{ + data: [102, 200, 80, 55], + }], + }, + options: { + events: [], + circumference: 145, + rotation: -45, + plugins: { + legend: false, + annotation: { + annotations: [ + { + type: 'doughnutLabel', + backgroundColor: 'red', + borderColor: 'black', + borderWidth: 2, + content: 't' + }, + ] + } + } + } + }, + options: { + canvas: { + height: 256, + width: 512 + } + } +}; diff --git a/test/fixtures/doughnutLabel/backgroundColorRotatedReducedChart.png b/test/fixtures/doughnutLabel/backgroundColorRotatedReducedChart.png new file mode 100644 index 0000000000000000000000000000000000000000..fc91ddd10a8b67f9784ae7892473f60a2467da7f GIT binary patch literal 23300 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�hD4#+O)($ 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 Z2fgb`b*}r{pN8O%j)sAHk*fWT{|6*@N*n+H literal 0 HcmV?d00001 From fe411e921baee8b2774e8749e92060cacf8f6424 Mon Sep 17 00:00:00 2001 From: stockiNail Date: Mon, 9 Jan 2023 12:28:53 +0100 Subject: [PATCH 28/37] fixes types --- types/label.d.ts | 2 +- types/options.d.ts | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/types/label.d.ts b/types/label.d.ts index fa2d59ed8..f13b5f170 100644 --- a/types/label.d.ts +++ b/types/label.d.ts @@ -147,7 +147,7 @@ export interface LabelTypeOptions extends ContainedLabelOptions { callout?: CalloutOptions, } -export interface DoughnutLabelOptions extends ContainedLabelOptions { +export interface DoughnutLabelOptions extends Omit { position?: Scriptable, /** * Whether the label should be displayed diff --git a/types/options.d.ts b/types/options.d.ts index 823beb2f1..eab19bb8f 100644 --- a/types/options.d.ts +++ b/types/options.d.ts @@ -126,6 +126,7 @@ export interface DoughnutLabelAnnotationOptions extends AnnotationEvents, Doughn autoFit?: Scriptable, autoHide?: Scriptable, id?: string, + spacing?: Scriptable } interface PolygonAnnotationOptions extends CoreAnnotationOptions, AnnotationPointCoordinates { From 87f2e07d05b1208b42902a35b209be1f6dad8a90 Mon Sep 17 00:00:00 2001 From: stockiNail Date: Mon, 9 Jan 2023 13:10:15 +0100 Subject: [PATCH 29/37] fixes docs and samples --- docs/.vuepress/config.js | 3 +- docs/guide/types/doughnutLabel.md | 9 ++-- docs/samples/doughnutLabel/background.md | 68 ++++++++++++++++++++++++ 3 files changed, 73 insertions(+), 7 deletions(-) create mode 100644 docs/samples/doughnutLabel/background.md diff --git a/docs/.vuepress/config.js b/docs/.vuepress/config.js index f5876d29a..7e742c7be 100644 --- a/docs/.vuepress/config.js +++ b/docs/.vuepress/config.js @@ -209,7 +209,8 @@ module.exports = { 'doughnutLabel/basic', 'doughnutLabel/canvas', 'doughnutLabel/image', - 'doughnutLabel/gauge' + 'doughnutLabel/gauge', + 'doughnutLabel/background', ] }, { diff --git a/docs/guide/types/doughnutLabel.md b/docs/guide/types/doughnutLabel.md index eeaac70c2..90486ca25 100644 --- a/docs/guide/types/doughnutLabel.md +++ b/docs/guide/types/doughnutLabel.md @@ -54,27 +54,25 @@ The following options are available for label annotations. | [`autoFit`](#general) | `boolean` | Yes | `true` | [`backgroundColor`](#styling) | [`Color`](../options.md#color) | Yes | `'transparent'` | [`backgroundShadowColor`](#styling) | [`Color`](../options.md#color) | Yes | `'transparent'` -| [`borderColor`](#styling) | [`Color`](../options.md#color) | Yes | `options.color` +| [`borderColor`](#styling) | [`Color`](../options.md#color) | Yes | `'transparent'` | [`borderDash`](#styling) | `number[]` | Yes | `[]` | [`borderDashOffset`](#styling) | `number` | Yes | `0` | [`borderShadowColor`](#styling) | [`Color`](../options.md#color) | Yes | `'transparent'` | [`display`](#general) | `boolean` | Yes | `true` | [`drawTime`](#general) | `string` | Yes | `'afterDatasetsDraw'` -| [`borderCapStyle`](#styling) | `string` | Yes | `'butt'` | [`borderJoinStyle`](#styling) | `string` | Yes | `'miter'` -| [`borderRadius`](#borderradius) | `number` \| `object` | Yes | `0` | [`borderWidth`](#styling) | `number`| Yes | `0` | [`color`](#styling) | [`Color`\|`Color[]`](../options.md#color) | Yes | `'black'` | [`content`](#general) | `string`\|`string[]`\|[`Image`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement/Image)\|[`HTMLCanvasElement`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement) | Yes | `null` | [`font`](#styling) | [`Font`\|`Font[]`](../options.md#font) | Yes | `{}` | [`height`](#general) | `number`\|`string` | Yes | `undefined` | [`id`](#general) | `string` | No | `undefined` -| [`padding`](#general) | [`Padding`](../options.md#padding) | Yes | `0` | [`position`](#position) | `string`\|`{x: string, y: string}` | Yes | `'center'` | [`rotation`](#general) | `number`| Yes | `0` | [`shadowBlur`](#styling) | `number` | Yes | `0` | [`shadowOffsetX`](#styling) | `number` | Yes | `0` | [`shadowOffsetY`](#styling) | `number` | Yes | `0` +| [`spacing`](#general) | `number`| Yes | `1` | [`textAlign`](#general) | `string` | Yes | `'center'` | [`textStrokeColor`](#styling) | [`Color`](../options.md#color) | Yes | `undefined` | [`textStrokeWidth`](#styling) | `number` | Yes | `0` @@ -95,8 +93,8 @@ The content will be rendered in the center of the chart. | `drawTime` | See [drawTime](../options.md#draw-time). | `height` | Overrides the height of the image or canvas element. Could be set in pixel by a number, or in percentage of current height of image or canvas element by a string. If undefined, uses the height of the image or canvas element. It is used only when the content is an image or canvas element. | `id` | Identifies a unique id for the annotation and it will be stored in the element context. When the annotations are defined by an object, the id is automatically set using the key used to store the annotations in the object. When the annotations are configured by an array, the id, passed by this option in the annotation, will be used. -| `padding` | The padding to add around the label. | `rotation` | Rotation of the label in degrees. +| `spacing` | The space in pixels between the inner radius of the chart and the background of the label. | `textAlign` | Text alignment of label content when there's more than one line. Possible options are: `'left'`, `'start'`, `'center'`, `'end'`, `'right'`. | `width` | Overrides the width of the image or canvas element. Could be set in pixel by a number, or in percentage of current width of image or canvas element by a string. If undefined, uses the width of the image or canvas element. It is used only when the content is an image or canvas element. | `xAdjust` | Adjustment of label relative to computed position. Negative values move the label left, positive right. @@ -108,7 +106,6 @@ The content will be rendered in the center of the chart. | ---- | ---- | `backgroundColor` | Fill color. | `backgroundShadowColor` | The color of shadow. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/shadowColor). -| `borderCapStyle` | Cap style of the border line. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/lineCap). | `borderColor` | Stroke color. | `borderDash` | Length and spacing of dashes. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/setLineDash). | `borderDashOffset` | Offset for border line dashes. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/lineDashOffset). diff --git a/docs/samples/doughnutLabel/background.md b/docs/samples/doughnutLabel/background.md new file mode 100644 index 000000000..e3923c4ce --- /dev/null +++ b/docs/samples/doughnutLabel/background.md @@ -0,0 +1,68 @@ +# Filling background + +```js chart-editor +// +const DATA_COUNT = 6; +const MIN = 0; +const MAX = 100; + +const numberCfg = {count: DATA_COUNT, min: MIN, max: MAX, decimals: 0}; + +const data = { + labels: ['Apples', 'Orange', 'Lime', 'Grapes', 'Apricots', 'Blackberries'], + datasets: [{ + data: Utils.numbers(numberCfg) + }] +}; +// + +// +const annotation = { + type: 'doughnutLabel', + content: ({chart}) => [chart.getDatasetMeta(0).total, + 'pieces of fruits' + ], + font: [{size: 48}, {size: 20}], + color: ['indigo', 'grey'], + backgroundColor: 'rgba(0, 0, 0, 0.1)', + borderColor: 'black', + borderWidth: 2, + borderDash: [7, 7], + spacing: 2 +}; +// + +/* */ +const config = { + type: 'doughnut', + data, + options: { + aspectRatio: 2, + plugins: { + annotation: { + annotations: { + annotation + } + } + } + } +}; +/* */ + +const actions = [ + { + name: 'Randomize', + handler: function(chart) { + chart.data.datasets.forEach(function(dataset, i) { + dataset.data = dataset.data.map(() => Utils.rand(MIN, MAX).toFixed(0)); + }); + chart.update(); + } + } +]; + +module.exports = { + actions: actions, + config: config, +}; +``` From 829ff30f0fbbfe2aab03ab12cb4dcbec91f251f2 Mon Sep 17 00:00:00 2001 From: stockiNail Date: Mon, 9 Jan 2023 16:19:23 +0100 Subject: [PATCH 30/37] CC and color animations --- src/annotation.js | 5 ++--- src/helpers/helpers.core.js | 5 ++--- src/types/doughnutLabel.js | 2 +- src/types/label.js | 3 +-- 4 files changed, 6 insertions(+), 9 deletions(-) diff --git a/src/annotation.js b/src/annotation.js index 9eec4f0fe..56e2fa858 100644 --- a/src/annotation.js +++ b/src/annotation.js @@ -108,9 +108,8 @@ export default { type: 'number' }, colors: { - properties: ['color'], - type: 'color', - duration: 0 + properties: ['backgroundColor', 'borderColor'], + type: 'color' } }, clip: true, diff --git a/src/helpers/helpers.core.js b/src/helpers/helpers.core.js index 976ad7542..6ae9d555a 100644 --- a/src/helpers/helpers.core.js +++ b/src/helpers/helpers.core.js @@ -63,11 +63,10 @@ export function inBoxRange(point, {x, y, x2, y2}, axis, borderWidth) { * @param {Point} point * @param {rect: {x: number, y: number, x2: number, y2: number}, center: {x: number, y: number}} element * @param {InteractionAxis} axis - * @param {number} rotation - * @param {number} [borderWidth=0] + * @param {{rotation: number, borderWidth: number}} * @returns {boolean} */ -export function inLabelRange(point, {rect, center}, axis, rotation, borderWidth = 0) { +export function inLabelRange(point, {rect, center}, axis, {rotation, borderWidth}) { const rotPoint = rotated(point, center, toRadians(-rotation)); return inBoxRange(rotPoint, rect, axis, borderWidth); } diff --git a/src/types/doughnutLabel.js b/src/types/doughnutLabel.js index d26507fb0..85aae124c 100644 --- a/src/types/doughnutLabel.js +++ b/src/types/doughnutLabel.js @@ -9,7 +9,7 @@ export default class DoughnutLabelAnnotation extends Element { {x: mouseX, y: mouseY}, {rect: this.getProps(['x', 'y', 'x2', 'y2'], useFinalPosition), center: this.getCenterPoint(useFinalPosition)}, axis, - this.rotation + {rotation: this.rotation, borderWidth: 0} ); } diff --git a/src/types/label.js b/src/types/label.js index 38d470bea..c54abf800 100644 --- a/src/types/label.js +++ b/src/types/label.js @@ -9,8 +9,7 @@ export default class LabelAnnotation extends Element { {x: mouseX, y: mouseY}, {rect: this.getProps(['x', 'y', 'x2', 'y2'], useFinalPosition), center: this.getCenterPoint(useFinalPosition)}, axis, - this.rotation, - this.options.borderWidth + {rotation: this.rotation, borderWidth: this.options.borderWidth} ); } From 198d964fb374db54c33af8b8ca584d66c2d2c19f Mon Sep 17 00:00:00 2001 From: stockiNail Date: Mon, 9 Jan 2023 16:26:21 +0100 Subject: [PATCH 31/37] change doc about animations --- docs/guide/configuration.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/guide/configuration.md b/docs/guide/configuration.md index be6d25828..5d290a217 100644 --- a/docs/guide/configuration.md +++ b/docs/guide/configuration.md @@ -55,7 +55,9 @@ const options = { | Name | Option | Value | ---- | ---- | ---- | `numbers` | `properties` | `['x', 'y', 'x2', 'y2', 'width', 'height', 'centerX', 'centerY', 'pointX', 'pointY', 'radius']` -| `numbers` | `type` | `number` +| `numbers` | `type` | `'number'` +| `colors` | `properties` | `['backgroundColor', 'borderColor']` +| `colors` | `type` | `'color'` ## Common From b468ef68c7d9163a14d8c7f1f28c070277200270 Mon Sep 17 00:00:00 2001 From: stockiNail Date: Mon, 27 Feb 2023 15:20:54 +0100 Subject: [PATCH 32/37] apply new features coming from other PRs after merging --- docs/guide/types/doughnutLabel.md | 3 +++ src/types/doughnutLabel.js | 5 ++++- types/options.d.ts | 1 + 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/docs/guide/types/doughnutLabel.md b/docs/guide/types/doughnutLabel.md index 90486ca25..232e33f19 100644 --- a/docs/guide/types/doughnutLabel.md +++ b/docs/guide/types/doughnutLabel.md @@ -67,6 +67,8 @@ The following options are available for label annotations. | [`font`](#styling) | [`Font`\|`Font[]`](../options.md#font) | Yes | `{}` | [`height`](#general) | `number`\|`string` | Yes | `undefined` | [`id`](#general) | `string` | No | `undefined` +| [`init`](../configuration.html#common) | `boolean` | [See initial animation](../configuration.html#initial-animation) | `undefined` +| [`opacity`](#styling) | `number` | Yes | `undefined` | [`position`](#position) | `string`\|`{x: string, y: string}` | Yes | `'center'` | [`rotation`](#general) | `number`| Yes | `0` | [`shadowBlur`](#styling) | `number` | Yes | `0` @@ -114,6 +116,7 @@ The content will be rendered in the center of the chart. | `borderWidth` | Stroke width (in pixels). | `color` | Text color. When the label to draw has multiple lines, you can use different color for each row of the label. This is enabled configuring an array of colors. When the lines are more than the configured colors, the last configuration of this option is used for all remaining lines. | `font` | Text font. When the label to draw has multiple lines, you can use different font for each row of the label. This is enabled configuring an array of fonts. When the lines are more than the configured fonts, the last configuration of this option is used for all remaining lines. +| `opacity` | Overrides the opacity of the image or canvas element. Could be set a number in the range 0.0 to 1.0, inclusive. If undefined, uses the opacity of the image or canvas element. It is used only when the content is an image or canvas element. | `shadowBlur` | The amount of blur applied to shadow of the box where the label is located. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/shadowBlur). | `shadowOffsetX` | The distance that shadow, of the box where the label is located, will be offset horizontally. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/shadowOffsetX). | `shadowOffsetY` | The distance that shadow, of the box where the label is located, will be offset vertically. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/shadowOffsetY). diff --git a/src/types/doughnutLabel.js b/src/types/doughnutLabel.js index 85aae124c..f0024265a 100644 --- a/src/types/doughnutLabel.js +++ b/src/types/doughnutLabel.js @@ -1,5 +1,5 @@ import {Element, DoughnutController} from 'chart.js'; -import {drawLabel, measureLabelSize, translate, shouldFit, inLabelRange, getElementCenterPoint, measureLabelRectangle, setBorderStyle} from '../helpers'; +import {drawLabel, measureLabelSize, translate, shouldFit, inLabelRange, getElementCenterPoint, measureLabelRectangle, setBorderStyle, initAnimationProperties} from '../helpers'; import {TAU, getAngleFromPoint} from 'chart.js/helpers'; export default class DoughnutLabelAnnotation extends Element { @@ -43,6 +43,7 @@ export default class DoughnutLabelAnnotation extends Element { const {position, xAdjust, yAdjust} = options; const boxSize = measureLabelRectangle(point, labelSize, {borderWidth: 0, position, xAdjust, yAdjust}); return { + initProperties: initAnimationProperties(chart, boxSize, options), ...boxSize, ...controllerMeta, rotation: options.rotation, @@ -75,6 +76,8 @@ DoughnutLabelAnnotation.defaults = { weight: undefined }, height: undefined, + init: undefined, + opacity: undefined, position: 'center', rotation: 0, shadowBlur: 0, diff --git a/types/options.d.ts b/types/options.d.ts index 9f6daa398..fe9667d4a 100644 --- a/types/options.d.ts +++ b/types/options.d.ts @@ -140,6 +140,7 @@ export interface DoughnutLabelAnnotationOptions extends AnnotationEvents, Doughn autoFit?: Scriptable, autoHide?: Scriptable, id?: string, + init: boolean | ((chart: Chart, properties: AnnotationBoxModel, options: AnnotationOptions) => void | boolean | AnnotationBoxModel), spacing?: Scriptable } From 4bb7ecd55389d42947ef105f8abb723605eefb5c Mon Sep 17 00:00:00 2001 From: stockiNail Date: Mon, 27 Feb 2023 15:38:25 +0100 Subject: [PATCH 33/37] adds test cases for init animation --- test/fixtures/doughnutLabel/initAnimation.js | 33 ++++++++++++++++++ test/fixtures/doughnutLabel/initAnimation.png | Bin 0 -> 20964 bytes 2 files changed, 33 insertions(+) create mode 100644 test/fixtures/doughnutLabel/initAnimation.js create mode 100644 test/fixtures/doughnutLabel/initAnimation.png diff --git a/test/fixtures/doughnutLabel/initAnimation.js b/test/fixtures/doughnutLabel/initAnimation.js new file mode 100644 index 000000000..9b51558a8 --- /dev/null +++ b/test/fixtures/doughnutLabel/initAnimation.js @@ -0,0 +1,33 @@ +module.exports = { + tolerance: 0.0055, + config: { + type: 'doughnut', + data: { + labels: ['Data1', 'Data2', 'Data3', 'Data4'], + datasets: [{ + data: [102, 200, 80, 55], + }], + }, + options: { + events: [], + plugins: { + legend: false, + annotation: { + annotations: [ + { + type: 'doughnutLabel', + content: 'test', + init: true + }, + ] + } + } + } + }, + options: { + canvas: { + height: 256, + width: 512 + } + } +}; diff --git a/test/fixtures/doughnutLabel/initAnimation.png b/test/fixtures/doughnutLabel/initAnimation.png new file mode 100644 index 0000000000000000000000000000000000000000..0991419cd5eb334d92899008f8e059faca1fc18c GIT binary patch literal 20964 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 z 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 HfAW6-3L?0G literal 0 HcmV?d00001 From b2cc907ccc18e3ae5e2b56644fe1c58bb154817a Mon Sep 17 00:00:00 2001 From: stockiNail Date: Tue, 28 Feb 2023 08:57:49 +0100 Subject: [PATCH 34/37] apply review --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index d59d0ddf2..2576cbcb7 100644 --- a/README.md +++ b/README.md @@ -21,8 +21,6 @@ This plugin draws lines, boxes, points, labels, polygons and ellipses on the cha Annotations work with line, bar, scatter and bubble charts that use linear, logarithmic, time, or category scales. Furthermore you can use a doughnut label annotation which can be used to add contents (text, image, canvas) in the middle area of the doughnut charts. -Annotations will not work on any chart that does not have exactly two axes, including pie, radar, and polar area charts. - ![Example Screenshot](docs/guide/banner.png) [View this example](https://www.chartjs.org/chartjs-plugin-annotation/latest/samples/intro.html) From 4d592cd9b3d1f953aa056caf17819127dc0bdfe6 Mon Sep 17 00:00:00 2001 From: stockiNail Date: Mon, 22 May 2023 10:18:48 +0200 Subject: [PATCH 35/37] fix lineHeight on multiple font when size must be updated by fit ratio --- src/helpers/helpers.options.js | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/helpers/helpers.options.js b/src/helpers/helpers.options.js index 21d67a587..6ac16abf9 100644 --- a/src/helpers/helpers.options.js +++ b/src/helpers/helpers.options.js @@ -136,15 +136,16 @@ export const shouldFit = (options, fitRatio) => options && options.autoFit && fi */ export function toFonts(options, fitRatio) { const optFont = options.font; - let fonts = isArray(optFont) ? optFont.map(f => toFont(f)) : [toFont(optFont)]; + const fonts = isArray(optFont) ? optFont : [optFont]; if (shouldFit(options, fitRatio)) { - fonts = fonts.map(function(f) { - f.size = Math.floor(f.size * fitRatio); - f.lineHeight = undefined; - return toFont(f); + return fonts.map(function(f) { + const font = toFont(f); + font.size = Math.floor(f.size * fitRatio); + font.lineHeight = f.lineHeight; + return toFont(font); }); } - return fonts; + return fonts.map(f => toFont(f)); } /** From 26a5ca156d05adbc524611ecab466342def0bc68 Mon Sep 17 00:00:00 2001 From: stockiNail Date: Fri, 20 Sep 2024 13:09:28 +0200 Subject: [PATCH 36/37] add hitTolerance --- docs/guide/types/doughnutLabel.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/guide/types/doughnutLabel.md b/docs/guide/types/doughnutLabel.md index 232e33f19..c7dfc6170 100644 --- a/docs/guide/types/doughnutLabel.md +++ b/docs/guide/types/doughnutLabel.md @@ -66,6 +66,7 @@ The following options are available for label annotations. | [`content`](#general) | `string`\|`string[]`\|[`Image`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement/Image)\|[`HTMLCanvasElement`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement) | Yes | `null` | [`font`](#styling) | [`Font`\|`Font[]`](../options.md#font) | Yes | `{}` | [`height`](#general) | `number`\|`string` | Yes | `undefined` +| [`hitTolerance`](#general) | `number` | Yes | `0` | [`id`](#general) | `string` | No | `undefined` | [`init`](../configuration.html#common) | `boolean` | [See initial animation](../configuration.html#initial-animation) | `undefined` | [`opacity`](#styling) | `number` | Yes | `undefined` @@ -94,6 +95,7 @@ The content will be rendered in the center of the chart. | `display` | Whether or not this annotation is visible. | `drawTime` | See [drawTime](../options.md#draw-time). | `height` | Overrides the height of the image or canvas element. Could be set in pixel by a number, or in percentage of current height of image or canvas element by a string. If undefined, uses the height of the image or canvas element. It is used only when the content is an image or canvas element. +| `hitTolerance` | Amount of pixels to interact with annotations within some distance of the mouse point. | `id` | Identifies a unique id for the annotation and it will be stored in the element context. When the annotations are defined by an object, the id is automatically set using the key used to store the annotations in the object. When the annotations are configured by an array, the id, passed by this option in the annotation, will be used. | `rotation` | Rotation of the label in degrees. | `spacing` | The space in pixels between the inner radius of the chart and the background of the label. From a51cf394ae0fd8f966ea696ff4376d3326f1153f Mon Sep 17 00:00:00 2001 From: stockiNail Date: Mon, 7 Oct 2024 15:27:30 +0200 Subject: [PATCH 37/37] apply review --- docs/.vuepress/config.js | 243 --------------------------------------- 1 file changed, 243 deletions(-) delete mode 100644 docs/.vuepress/config.js diff --git a/docs/.vuepress/config.js b/docs/.vuepress/config.js deleted file mode 100644 index 3fde3d2c8..000000000 --- a/docs/.vuepress/config.js +++ /dev/null @@ -1,243 +0,0 @@ -const path = require('path'); -const docsVersion = "VERSION"; -const base = process.env.NODE_ENV === "development" ? '/chartjs-plugin-annotation/master/' : `/chartjs-plugin-annotation/${docsVersion}/`; - -module.exports = { - dest: 'dist/docs', - title: 'chartjs-plugin-annotation', - description: 'Annotations for Chart.js', - theme: 'chartjs', - base, - head: [ - ['link', {rel: 'icon', href: '/favicon.png'}], - ], - plugins: [ - ['flexsearch'], - ['redirect', { - redirectors: [ - // Default sample page when accessing /samples. - {base: '/samples', alternative: ['intro']}, - ], - }], - [ - 'vuepress-plugin-typedoc', - { - entryPoints: ['../../types/index.d.ts'], - hideInPageTOC: true, - tsconfig: 'tsconfig.json', - sidebar: { - fullNames: true, - parentCategory: 'API', - }, - }, - ], - ['@simonbrunel/vuepress-plugin-versions', { - filters: { - suffix: (tag) => tag ? ` (${tag})` : '', - title: (v, vars) => window.location.href.includes('master') ? 'Development (master)' : v + (vars.tag ? ` (${tag})` : ''), - }, - menu: { - text: '{{version|title}}', - items: [ - { - text: 'Documentation', - items: [ - { - text: 'Development (master)', - link: '/chartjs-plugin-annotation/master/', - target: '_self', - }, - { - type: 'versions', - text: '{{version}}{{tag|suffix}}', - link: '/chartjs-plugin-annotation/{{version}}/', - exclude: /^[0]\.[0-4]\./, - group: 'minor', - target: '_self', - } - ] - }, - { - text: 'Release notes (5 latest)', - items: [ - { - type: 'versions', - limit: 5, - target: '_blank', - group: 'patch', - link: 'https://github.com/chartjs/chartjs-plugin-annotation/releases/tag/v{{version}}' - } - ] - } - ] - }, - }], - ], - chainWebpack(config) { - config.module - .rule('chart.js') - .include.add(path.resolve('node_modules/chart.js')).end() - .use('babel-loader') - .loader('babel-loader') - .options({ - presets: ['@babel/preset-env'] - }) - .end(); - }, - markdown: { - extendMarkdown: md => { - md.use(require('markdown-it-include'), path.resolve(__dirname, '../')); - } - }, - themeConfig: { - repo: 'chartjs/chartjs-plugin-annotation', - logo: '/favicon.png', - lastUpdated: 'Last Updated', - searchPlaceholder: 'Search...', - editLinks: true, - docsDir: 'docs', - chart: { - imports: [ - ['scripts/register.js'], - ['scripts/defaults.js'], - ['scripts/utils.js', 'Utils'], - ] - }, - nav: [ - {text: 'Home', link: '/'}, - {text: 'API', link: '/api/'}, - {text: 'Guide', link: '/guide/'}, - {text: 'Samples', link: '/samples/'}, - ], - sidebar: { - '/api/': { - title: 'API' - }, - '/guide/': [ - '', - 'integration', - 'usage', - 'options', - 'configuration', - { - title: 'Annotations', - collapsable: false, - children: [ - 'types/box', - 'types/ellipse', - 'types/label', - 'types/line', - 'types/point', - 'types/polygon', - 'types/doughnutLabel' - ] - }, - 'migrationV1', - 'migrationV2' - ], - '/samples/': [ - 'intro', - { - title: 'Box annotations', - children: [ - 'box/basic', - 'box/quarters', - 'box/disclosure', - 'box/canvas', - 'box/image', - 'box/initAnim', - 'box/gradient', - ] - }, - { - title: 'Ellipse annotations', - children: [ - 'ellipse/basic', - 'ellipse/rotation', - 'ellipse/label', - 'ellipse/image', - ] - }, - { - title: 'Label annotations', - children: [ - 'label/basic', - 'label/point', - 'label/callout', - 'label/canvas', - 'label/image', - 'label/innerChart', - 'label/lowerUpper', - 'label/fontsColors', - 'label/autoscaling' - ] - }, - { - title: 'Line annotations', - children: [ - 'line/basic', - 'line/curve', - 'line/lowerUpper', - 'line/limited', - 'line/average', - 'line/standardDeviation', - 'line/callout', - 'line/visibility', - 'line/labelVisibility', - 'line/canvas', - 'line/image', - 'line/datasetBars', - 'line/animation', - 'line/hook', - ] - }, - { - title: 'Point annotations', - children: [ - 'point/basic', - 'point/combined', - 'point/outsideChartArea', - 'point/shadow', - 'point/initAnim', - ] - }, - { - title: 'Polygon annotations', - children: [ - 'polygon/basic', - 'polygon/stop', - 'polygon/outsideChartArea', - 'polygon/shadow', - ] - }, - { - title: 'Doughnut label annotations', - children: [ - 'doughnutLabel/basic', - 'doughnutLabel/canvas', - 'doughnutLabel/image', - 'doughnutLabel/gauge', - 'doughnutLabel/background', - ] - }, - { - title: 'Charts', - children: [ - 'charts/bar', - 'charts/line', - ], - }, - { - title: 'Interaction', - children: [ - 'interaction/interaction', - 'interaction/dragging', - 'interaction/selection', - 'interaction/cartesianplane', - ], - }, - 'utils', - ] - } - } -};