feat: Make options.layout.padding scriptable. Closes #7873 (#7968)

This commit is contained in:
Dan Manastireanu 2020-10-28 17:28:17 +02:00 committed by GitHub
parent ea047f5cf2
commit aad748dc5a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 56 additions and 6 deletions

View File

@ -4,9 +4,9 @@ title: Layout
The layout configuration is passed into the `options.layout` namespace. The global options for the chart layout is defined in `Chart.defaults.layout`.
| Name | Type | Default | Description
| ---- | ---- | ------- | -----------
| `padding` | <code>number&#124;object</code> | `0` | The padding to add inside the chart. [more...](#padding)
| Name | Type | Default | [Scriptable](../general/options.md#scriptable-options) | Description
| ---- | ---- | ------- | :----: | -----------
| `padding` | <code>number&#124;object</code> | `0` | Yes | The padding to add inside the chart. [more...](#padding)
## Padding
If this value is a number, it is applied to all sides of the chart (left, top, right, bottom). If this value is an object, the `left` property defines the left padding. Similarly the `right`, `top` and `bottom` properties can also be specified.

View File

@ -1,6 +1,6 @@
import defaults from './core.defaults';
import {each, isObject} from '../helpers/helpers.core';
import {toPadding} from '../helpers/helpers.options';
import {toPadding, resolve} from '../helpers/helpers.options';
/**
* @typedef { import("./core.controller").default } Chart
@ -310,7 +310,8 @@ export default {
}
const layoutOptions = chart.options.layout || {};
const padding = toPadding(layoutOptions.padding);
const context = {chart};
const padding = toPadding(resolve([layoutOptions.padding], context));
const availableWidth = width - padding.width;
const availableHeight = height - padding.height;

View File

@ -0,0 +1,49 @@
module.exports = {
config: {
type: 'line',
data: {
datasets: [
{data: [10, 5, 0, 25, 78, -10]}
],
labels: ['tick1', 'tick2', 'tick3', 'tick4', 'tick5', 'tick6']
},
options: {
layout: {
padding: function(ctx) {
// 10% padding
const horizontalPadding = ctx.chart.width * 0.1;
const verticalPadding = ctx.chart.height * 0.1;
return {
top: verticalPadding,
right: horizontalPadding,
bottom: verticalPadding,
left: horizontalPadding
};
}
},
legend: {
display: false
},
scales: {
x: {
type: 'category',
ticks: {
maxRotation: 0,
autoSkip: false
}
},
y: {
type: 'linear',
position: 'right'
}
}
}
},
options: {
spriteText: true,
canvas: {
height: 150,
width: 512
}
}
};

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

View File

@ -149,7 +149,7 @@ export interface ICoreChartOptions {
elements: { [key: string]: IElementOptions };
layout: {
padding: number | IChartArea;
padding: Scriptable<number | IChartArea>;
};
}