From a655da076e6a53918b94406dec7be54be45b154c Mon Sep 17 00:00:00 2001 From: Evert Timberg Date: Tue, 15 Jan 2019 03:24:12 -0500 Subject: [PATCH] Implement scriptable options for points in line charts (#5973) --- docs/charts/line.md | 115 +++++--- docs/general/options.md | 2 +- src/controllers/controller.line.js | 143 +++++----- .../backgroundColor/indexable.js | 56 ++++ .../backgroundColor/indexable.png | Bin 0 -> 5550 bytes .../backgroundColor/scriptable.js | 61 +++++ .../backgroundColor/scriptable.png | Bin 0 -> 5213 bytes .../controller.line/backgroundColor/value.js | 42 +++ .../controller.line/backgroundColor/value.png | Bin 0 -> 5160 bytes .../controller.line/borderColor/indexable.js | 56 ++++ .../controller.line/borderColor/indexable.png | Bin 0 -> 6693 bytes .../controller.line/borderColor/scriptable.js | 61 +++++ .../borderColor/scriptable.png | Bin 0 -> 6276 bytes .../controller.line/borderColor/value.js | 42 +++ .../controller.line/borderColor/value.png | Bin 0 -> 6231 bytes .../controller.line/borderWidth/indexable.js | 48 ++++ .../controller.line/borderWidth/indexable.png | Bin 0 -> 6204 bytes .../controller.line/borderWidth/scriptable.js | 61 +++++ .../borderWidth/scriptable.png | Bin 0 -> 11687 bytes .../controller.line/borderWidth/value.js | 44 +++ .../controller.line/borderWidth/value.png | Bin 0 -> 6145 bytes .../controller.line/pointStyle/indexable.js | 60 +++++ .../controller.line/pointStyle/indexable.png | Bin 0 -> 13374 bytes .../controller.line/pointStyle/scriptable.js | 65 +++++ .../controller.line/pointStyle/scriptable.png | Bin 0 -> 8641 bytes .../controller.line/pointStyle/value.js | 44 +++ .../controller.line/pointStyle/value.png | Bin 0 -> 13607 bytes .../controller.line/radius/indexable.js | 47 ++++ .../controller.line/radius/indexable.png | Bin 0 -> 3825 bytes .../controller.line/radius/scriptable.js | 60 +++++ .../controller.line/radius/scriptable.png | Bin 0 -> 4412 bytes test/fixtures/controller.line/radius/value.js | 43 +++ .../fixtures/controller.line/radius/value.png | Bin 0 -> 4047 bytes .../controller.line/rotation/indexable.js | 49 ++++ .../controller.line/rotation/indexable.png | Bin 0 -> 8133 bytes .../controller.line/rotation/scriptable.js | 62 +++++ .../controller.line/rotation/scriptable.png | Bin 0 -> 8369 bytes .../controller.line/rotation/value.js | 45 ++++ .../controller.line/rotation/value.png | Bin 0 -> 7936 bytes test/specs/controller.line.tests.js | 252 ++++++++---------- 40 files changed, 1210 insertions(+), 248 deletions(-) create mode 100644 test/fixtures/controller.line/backgroundColor/indexable.js create mode 100644 test/fixtures/controller.line/backgroundColor/indexable.png create mode 100644 test/fixtures/controller.line/backgroundColor/scriptable.js create mode 100644 test/fixtures/controller.line/backgroundColor/scriptable.png create mode 100644 test/fixtures/controller.line/backgroundColor/value.js create mode 100644 test/fixtures/controller.line/backgroundColor/value.png create mode 100644 test/fixtures/controller.line/borderColor/indexable.js create mode 100644 test/fixtures/controller.line/borderColor/indexable.png create mode 100644 test/fixtures/controller.line/borderColor/scriptable.js create mode 100644 test/fixtures/controller.line/borderColor/scriptable.png create mode 100644 test/fixtures/controller.line/borderColor/value.js create mode 100644 test/fixtures/controller.line/borderColor/value.png create mode 100644 test/fixtures/controller.line/borderWidth/indexable.js create mode 100644 test/fixtures/controller.line/borderWidth/indexable.png create mode 100644 test/fixtures/controller.line/borderWidth/scriptable.js create mode 100644 test/fixtures/controller.line/borderWidth/scriptable.png create mode 100644 test/fixtures/controller.line/borderWidth/value.js create mode 100644 test/fixtures/controller.line/borderWidth/value.png create mode 100644 test/fixtures/controller.line/pointStyle/indexable.js create mode 100644 test/fixtures/controller.line/pointStyle/indexable.png create mode 100644 test/fixtures/controller.line/pointStyle/scriptable.js create mode 100644 test/fixtures/controller.line/pointStyle/scriptable.png create mode 100644 test/fixtures/controller.line/pointStyle/value.js create mode 100644 test/fixtures/controller.line/pointStyle/value.png create mode 100644 test/fixtures/controller.line/radius/indexable.js create mode 100644 test/fixtures/controller.line/radius/indexable.png create mode 100644 test/fixtures/controller.line/radius/scriptable.js create mode 100644 test/fixtures/controller.line/radius/scriptable.png create mode 100644 test/fixtures/controller.line/radius/value.js create mode 100644 test/fixtures/controller.line/radius/value.png create mode 100644 test/fixtures/controller.line/rotation/indexable.js create mode 100644 test/fixtures/controller.line/rotation/indexable.png create mode 100644 test/fixtures/controller.line/rotation/scriptable.js create mode 100644 test/fixtures/controller.line/rotation/scriptable.png create mode 100644 test/fixtures/controller.line/rotation/value.js create mode 100644 test/fixtures/controller.line/rotation/value.png diff --git a/docs/charts/line.md b/docs/charts/line.md index 5078a2604..4783c5514 100644 --- a/docs/charts/line.md +++ b/docs/charts/line.md @@ -41,37 +41,90 @@ var myLineChart = new Chart(ctx, { The line chart allows a number of properties to be specified for each dataset. These are used to set display properties for a specific dataset. For example, the colour of a line is generally set this way. -All point* properties can be specified as an array. If these are set to an array value, the first value applies to the first point, the second value to the second point, and so on. - -| Name | Type | Description -| ---- | ---- | ----------- -| `label` | `String` | The label for the dataset which appears in the legend and tooltips. -| `xAxisID` | `String` | The ID of the x axis to plot this dataset on. If not specified, this defaults to the ID of the first found x axis. -| `yAxisID` | `String` | The ID of the y axis to plot this dataset on. If not specified, this defaults to the ID of the first found y axis. -| `backgroundColor` | `Color` | The fill color under the line. See [Colors](../general/colors.md#colors). -| `borderColor` | `Color` | The color of the line. See [Colors](../general/colors.md#colors). -| `borderWidth` | `Number` | The width of the line in pixels. -| `borderDash` | `Number[]` | Length and spacing of dashes. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/setLineDash). -| `borderDashOffset` | `Number` | Offset for line dashes. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/lineDashOffset). -| `borderCapStyle` | `String` | Cap style of the line. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/lineCap). -| `borderJoinStyle` | `String` | Line joint style. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/lineJoin). -| `cubicInterpolationMode` | `String` | Algorithm used to interpolate a smooth curve from the discrete data points. [more...](#cubicinterpolationmode) -| `fill` | `Boolean/String` | How to fill the area under the line. See [area charts](area.md). -| `lineTension` | `Number` | Bezier curve tension of the line. Set to 0 to draw straightlines. This option is ignored if monotone cubic interpolation is used. -| `pointBackgroundColor` | `Color/Color[]` | The fill color for points. -| `pointBorderColor` | `Color/Color[]` | The border color for points. -| `pointBorderWidth` | `Number/Number[]` | The width of the point border in pixels. -| `pointRadius` | `Number/Number[]` | The radius of the point shape. If set to 0, the point is not rendered. -| `pointStyle` | `String/String[]/Image/Image[]` | Style of the point. [more...](../configuration/elements#point-styles) -| `pointRotation` | `Number/Number[]` | The rotation of the point in degrees. -| `pointHitRadius` | `Number/Number[]` | The pixel size of the non-displayed point that reacts to mouse events. -| `pointHoverBackgroundColor` | `Color/Color[]` | Point background color when hovered. -| `pointHoverBorderColor` | `Color/Color[]` | Point border color when hovered. -| `pointHoverBorderWidth` | `Number/Number[]` | Border width of point when hovered. -| `pointHoverRadius` | `Number/Number[]` | The radius of the point when hovered. -| `showLine` | `Boolean` | If false, the line is not drawn for this dataset. -| `spanGaps` | `Boolean` | If true, lines will be drawn between points with no or null data. If false, points with `NaN` data will create a break in the line. -| `steppedLine` | `Boolean/String` | If the line is shown as a stepped line. [more...](#stepped-line) +| Name | Type | [Scriptable](../general/options.md#scriptable-options) | [Indexable](../general/options.md#indexable-options) | Default +| ---- | ---- | :----: | :----: | ---- +| [`backgroundColor`](#line-styling) | [`Color`](../general/colors.md) | - | - | `'rgba(0,0,0,0.1)'` +| [`borderCapStyle`](#line-styling) | `String` | - | - | `'butt'` +| [`borderColor`](#line-styling) | [`Color`](../general/colors.md) | - | - | `'rgba(0,0,0,0.1)'` +| [`borderDash`](#line-styling) | `Number[]` | - | - | `[]` +| [`borderDashOffset`](#line-styling) | `Number` | - | - | `0` +| [`borderJoinStyle`](#line-styling) | `String` | - | - | `'miter'` +| [`borderWidth`](#line-styling) | `Number` | - | - | `0` +| [`cubicInterpolationMode`](#cubicInterpolationMode) | `String` | - | - | `''` +| [`fill`](#line-styling) | `Boolean/String` | - | - | `true` +| [`label`](#general) | `String` | - | - | `''` +| [`lineTension`](#line-styling) | `Number` | - | - | `0.4` +| [`pointBackgroundColor`](#point-styling) | `Color` | Yes | Yes | `'rgba(0,0,0,0.1)'` +| [`pointBorderColor`](#point-styling) | `Color` | Yes | Yes | `'rgba(0,0,0,0.1)'` +| [`pointBorderWidth`](#point-styling) | `Number` | Yes | Yes | `1` +| [`pointHitRadius`](#point-styling) | `Number` | Yes | Yes | `1` +| [`pointHoverBackgroundColor`](#interactions) | `Color` | Yes | Yes | `undefined` +| [`pointHoverBorderColor`](#interactions) | `Color` | Yes | Yes | `undefined` +| [`pointHoverBorderWidth`](#interactions) | `Number` | Yes | Yes | `undefined` +| [`pointHoverRadius`](#interactions) | `Number` | Yes | Yes | `undefined` +| [`pointRadius`](#point-styling) | `Number` | Yes | Yes | `3` +| [`pointRotation`](#point-styling) | `Number` | Yes | Yes | `1` +| [`pointStyle`](#point-styling) | `String/Image` | Yes | Yes | `'circle'` +| [`showLine`](#general) | `Boolean` | - | - | `undefined` +| [`spanGaps`](#general) | `Boolean` | - | - | `false` +| [`steppedLine`](#stepped-line) | `Boolean/String` | - | - | `false` +| [`xAxisID`](#general) | `String` | - | - | first x axis +| [`yAxisID`](#general) | `String` | - | - | first y axis + +### General + +| Name | Description +| ---- | ---- +| `label` | The label for the dataset which appears in the legend and tooltips. +| `xAxisID` | The ID of the x axis to plot this dataset on. +| `yAxisID` | The ID of the y axis to plot this dataset on. + +### Point Styling + +The style of each point can be controlled with the following properties: + +| Name | Description +| ---- | ---- +| `pointBackgroundColor` | The fill color for points. +| `pointBorderColor` | The border color for points. +| `pointBorderWidth` | The width of the point border in pixels. +| `pointHitRadius` | The pixel size of the non-displayed point that reacts to mouse events. +| `pointRadius` | The radius of the point shape. If set to 0, the point is not rendered. +| `pointRotation` | The rotation of the point in degrees. +| `pointStyle` | Style of the point. [more...](../configuration/elements#point-styles) + +All these values, if `undefined`, fallback first to the dataset options then to the associated [`elements.point.*`](../configuration/elements.md#point-configuration) options. + +### Line Styling + +The style of the line can be controlled with the following properties: + +| Name | Description +| ---- | ---- +| `backgroundColor` | The line fill color. +| `borderCapStyle` | Cap style of the line. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/lineCap). +| `borderColor` | The line color. +| `borderDash` | Length and spacing of dashes. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/setLineDash). +| `borderDashOffset` | Offset for line dashes. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/lineDashOffset). +| `borderJoinStyle` | Line joint style. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/lineJoin). +| `borderWidth` | The line width (in pixels). +| `fill` | How to fill the area under the line. See [area charts](area.md). +| `lineTension` | Bezier curve tension of the line. Set to 0 to draw straightlines. This option is ignored if monotone cubic interpolation is used. +| `showLine` | If false, the line is not drawn for this dataset. +| `spanGaps` | If true, lines will be drawn between points with no or null data. If false, points with `NaN` data will create a break in the line. + +All these values, if `undefined`, fallback to the associated [`elements.line.*`](../configuration/elements.md#line-configuration) options. + +### Interactions + +The interaction with each point can be controlled with the following properties: + +| Name | Description +| ---- | ----------- +| `pointHoverBackgroundColor` | Point background color when hovered. +| `pointHoverBorderColor` | Point border color when hovered. +| `pointHoverBorderWidth` | Border width of point when hovered. +| `pointHoverRadius` | The radius of the point when hovered. ### cubicInterpolationMode The following interpolation modes are supported. diff --git a/docs/general/options.md b/docs/general/options.md index e05cd33ee..37f154613 100644 --- a/docs/general/options.md +++ b/docs/general/options.md @@ -2,7 +2,7 @@ ## Scriptable Options -Scriptable options also accept a function which is called for each data and that takes the unique argument `context` representing contextual information (see [option context](options.md#option-context)). +Scriptable options also accept a function which is called for each of the underlying data values and that takes the unique argument `context` representing contextual information (see [option context](options.md#option-context)). Example: diff --git a/src/controllers/controller.line.js b/src/controllers/controller.line.js index 0e313116e..e57d5e2ff 100644 --- a/src/controllers/controller.line.js +++ b/src/controllers/controller.line.js @@ -103,52 +103,6 @@ module.exports = DatasetController.extend({ } }, - getPointBackgroundColor: function(point, index) { - var dataset = this.getDataset(); - var custom = point.custom || {}; - - return resolve([ - custom.backgroundColor, - dataset.pointBackgroundColor, - dataset.backgroundColor, - this.chart.options.elements.point.backgroundColor - ], undefined, index); - }, - - getPointBorderColor: function(point, index) { - var dataset = this.getDataset(); - var custom = point.custom || {}; - - return resolve([ - custom.borderColor, - dataset.pointBorderColor, - dataset.borderColor, - this.chart.options.elements.point.borderColor - ], undefined, index); - }, - - getPointBorderWidth: function(point, index) { - var dataset = this.getDataset(); - var custom = point.custom || {}; - - return resolve([ - custom.borderWidth, - dataset.pointBorderWidth, - dataset.borderWidth, - this.chart.options.elements.point.borderWidth - ], undefined, index); - }, - - getPointRotation: function(point, index) { - var custom = point.custom || {}; - - return resolve([ - custom.rotation, - this.getDataset().pointRotation, - this.chart.options.elements.point.rotation - ], undefined, index); - }, - updateElement: function(point, index, reset) { var me = this; var meta = me.getMeta(); @@ -158,16 +112,9 @@ module.exports = DatasetController.extend({ var value = dataset.data[index]; var yScale = me.getScaleForId(meta.yAxisID); var xScale = me.getScaleForId(meta.xAxisID); - var pointOptions = me.chart.options.elements.point; var x, y; - // Compatibility: If the properties are defined with only the old name, use those values - if ((dataset.radius !== undefined) && (dataset.pointRadius === undefined)) { - dataset.pointRadius = dataset.radius; - } - if ((dataset.hitRadius !== undefined) && (dataset.pointHitRadius === undefined)) { - dataset.pointHitRadius = dataset.hitRadius; - } + var options = me._resolveElementOptions(point, index); x = xScale.getPixelForValue(typeof value === 'object' ? value : NaN, index, datasetIndex); y = reset ? yScale.getBasePixel() : me.calculatePointY(value, index, datasetIndex); @@ -175,6 +122,7 @@ module.exports = DatasetController.extend({ // Utility point._xScale = xScale; point._yScale = yScale; + point._options = options; point._datasetIndex = datasetIndex; point._index = index; @@ -184,19 +132,68 @@ module.exports = DatasetController.extend({ y: y, skip: custom.skip || isNaN(x) || isNaN(y), // Appearance - radius: resolve([custom.radius, dataset.pointRadius, pointOptions.radius], undefined, index), - pointStyle: resolve([custom.pointStyle, dataset.pointStyle, pointOptions.pointStyle], undefined, index), - rotation: me.getPointRotation(point, index), - backgroundColor: me.getPointBackgroundColor(point, index), - borderColor: me.getPointBorderColor(point, index), - borderWidth: me.getPointBorderWidth(point, index), + radius: options.radius, + pointStyle: options.pointStyle, + rotation: options.rotation, + backgroundColor: options.backgroundColor, + borderColor: options.borderColor, + borderWidth: options.borderWidth, tension: meta.dataset._model ? meta.dataset._model.tension : 0, steppedLine: meta.dataset._model ? meta.dataset._model.steppedLine : false, // Tooltip - hitRadius: resolve([custom.hitRadius, dataset.pointHitRadius, pointOptions.hitRadius], undefined, index) + hitRadius: options.hitRadius, }; }, + /** + * @private + */ + _resolveElementOptions: function(point, index) { + var me = this; + var chart = me.chart; + var datasets = chart.data.datasets; + var dataset = datasets[me.index]; + var custom = point.custom || {}; + var options = chart.options.elements.point; + var values = {}; + var i, ilen, key; + + // Scriptable options + var context = { + chart: chart, + dataIndex: index, + dataset: dataset, + datasetIndex: me.index + }; + + var ELEMENT_OPTIONS = { + backgroundColor: 'pointBackgroundColor', + borderColor: 'pointBorderColor', + borderWidth: 'pointBorderWidth', + hitRadius: 'pointHitRadius', + hoverBackgroundColor: 'pointHoverBackgroundColor', + hoverBorderColor: 'pointHoverBorderColor', + hoverBorderWidth: 'pointHoverBorderWidth', + hoverRadius: 'pointHoverRadius', + pointStyle: 'pointStyle', + radius: 'pointRadius', + rotation: 'pointRotation', + }; + var keys = Object.keys(ELEMENT_OPTIONS); + + for (i = 0, ilen = keys.length; i < ilen; ++i) { + key = keys[i]; + values[key] = resolve([ + custom[key], + dataset[ELEMENT_OPTIONS[key]], + dataset[key], + options[key] + ], context, index); + } + + return values; + }, + calculatePointY: function(value, index, datasetIndex) { var me = this; var chart = me.chart; @@ -317,24 +314,24 @@ module.exports = DatasetController.extend({ } }, - setHoverStyle: function(element) { - // Point - var dataset = this.chart.data.datasets[element._datasetIndex]; - var index = element._index; - var custom = element.custom || {}; - var model = element._model; + /** + * @protected + */ + setHoverStyle: function(point) { + var model = point._model; + var options = point._options; var getHoverColor = helpers.getHoverColor; - element.$previousStyle = { + point.$previousStyle = { backgroundColor: model.backgroundColor, borderColor: model.borderColor, borderWidth: model.borderWidth, radius: model.radius }; - model.backgroundColor = resolve([custom.hoverBackgroundColor, dataset.pointHoverBackgroundColor, getHoverColor(model.backgroundColor)], undefined, index); - model.borderColor = resolve([custom.hoverBorderColor, dataset.pointHoverBorderColor, getHoverColor(model.borderColor)], undefined, index); - model.borderWidth = resolve([custom.hoverBorderWidth, dataset.pointHoverBorderWidth, model.borderWidth], undefined, index); - model.radius = resolve([custom.hoverRadius, dataset.pointHoverRadius, this.chart.options.elements.point.hoverRadius], undefined, index); - } + model.backgroundColor = valueOrDefault(options.hoverBackgroundColor, getHoverColor(options.backgroundColor)); + model.borderColor = valueOrDefault(options.hoverBorderColor, getHoverColor(options.borderColor)); + model.borderWidth = valueOrDefault(options.hoverBorderWidth, options.borderWidth); + model.radius = valueOrDefault(options.hoverRadius, options.radius); + }, }); diff --git a/test/fixtures/controller.line/backgroundColor/indexable.js b/test/fixtures/controller.line/backgroundColor/indexable.js new file mode 100644 index 000000000..7b939724e --- /dev/null +++ b/test/fixtures/controller.line/backgroundColor/indexable.js @@ -0,0 +1,56 @@ +module.exports = { + config: { + type: 'line', + data: { + labels: [0, 1, 2, 3, 4, 5], + datasets: [ + { + // option in dataset + data: [0, 5, 10, null, -10, -5], + pointBackgroundColor: [ + '#ff0000', + '#00ff00', + '#0000ff', + '#ffff00', + '#ff00ff', + '#000000' + ] + }, + { + // option in element (fallback) + data: [4, -5, -10, null, 10, 5], + } + ] + }, + options: { + legend: false, + title: false, + elements: { + line: { + fill: false, + }, + point: { + backgroundColor: [ + '#ff88ff', + '#888888', + '#ff8800', + '#00ff88', + '#8800ff', + '#ffff88' + ], + radius: 10 + } + }, + scales: { + xAxes: [{display: false}], + yAxes: [{display: false}] + } + } + }, + options: { + canvas: { + height: 256, + width: 512 + } + } +}; diff --git a/test/fixtures/controller.line/backgroundColor/indexable.png b/test/fixtures/controller.line/backgroundColor/indexable.png new file mode 100644 index 0000000000000000000000000000000000000000..d4157964479b9d3ed8cc0270d0627e2a201969a0 GIT binary patch literal 5550 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 O02t_+>Xc)yKKLK*PRq^! literal 0 Hc-jL100001 diff --git a/test/fixtures/controller.line/backgroundColor/scriptable.js b/test/fixtures/controller.line/backgroundColor/scriptable.js new file mode 100644 index 000000000..6ede2cb0c --- /dev/null +++ b/test/fixtures/controller.line/backgroundColor/scriptable.js @@ -0,0 +1,61 @@ +module.exports = { + config: { + type: 'line', + data: { + labels: [0, 1, 2, 3, 4, 5], + datasets: [ + { + // option in dataset + data: [0, 5, 10, null, -10, -5], + pointBackgroundColor: function(ctx) { + var value = ctx.dataset.data[ctx.dataIndex] || 0; + return value > 8 ? '#ff0000' + : value > 0 ? '#00ff00' + : value > -8 ? '#0000ff' + : '#ff00ff'; + } + }, + { + // option in element (fallback) + data: [4, -5, -10, null, 10, 5], + } + ] + }, + options: { + legend: false, + title: false, + elements: { + line: { + fill: false, + }, + point: { + backgroundColor: function(ctx) { + var value = ctx.dataset.data[ctx.dataIndex] || 0; + return value > 8 ? '#ff00ff' + : value > 0 ? '#0000ff' + : value > -8 ? '#ff0000' + : '#00ff00'; + }, + radius: 10, + } + }, + scales: { + xAxes: [{display: false}], + yAxes: [ + { + display: false, + ticks: { + beginAtZero: true + } + } + ] + } + } + }, + options: { + canvas: { + height: 256, + width: 512 + } + } +}; diff --git a/test/fixtures/controller.line/backgroundColor/scriptable.png b/test/fixtures/controller.line/backgroundColor/scriptable.png new file mode 100644 index 0000000000000000000000000000000000000000..c366b6cfadfc7c83395b015d927cb639a60068b0 GIT binary patch literal 5213 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 8 ? '#ff0000' + : value > 0 ? '#00ff00' + : value > -8 ? '#0000ff' + : '#ff00ff'; + } + }, + { + // option in element (fallback) + data: [4, -5, -10, null, 10, 5], + } + ] + }, + options: { + legend: false, + title: false, + elements: { + line: { + fill: false, + }, + point: { + borderColor: function(ctx) { + var value = ctx.dataset.data[ctx.dataIndex] || 0; + return value > 8 ? '#ff00ff' + : value > 0 ? '#0000ff' + : value > -8 ? '#ff0000' + : '#00ff00'; + }, + radius: 10, + } + }, + scales: { + xAxes: [{display: false}], + yAxes: [ + { + display: false, + ticks: { + beginAtZero: true + } + } + ] + } + } + }, + options: { + canvas: { + height: 256, + width: 512 + } + } +}; diff --git a/test/fixtures/controller.line/borderColor/scriptable.png b/test/fixtures/controller.line/borderColor/scriptable.png new file mode 100644 index 0000000000000000000000000000000000000000..6366828ecfc5316b9953dff892bf64e15fbcb224 GIT binary patch literal 6276 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 literal 0 Hc-jL100001 diff --git a/test/fixtures/controller.line/borderColor/value.js b/test/fixtures/controller.line/borderColor/value.js new file mode 100644 index 000000000..84e4d6adf --- /dev/null +++ b/test/fixtures/controller.line/borderColor/value.js @@ -0,0 +1,42 @@ +module.exports = { + config: { + type: 'line', + data: { + labels: [0, 1, 2, 3, 4, 5], + datasets: [ + { + // option in dataset + data: [0, 5, 10, null, -10, -5], + pointBorderColor: '#ff0000' + }, + { + // option in element (fallback) + data: [4, -5, -10, null, 10, 5], + } + ] + }, + options: { + legend: false, + title: false, + elements: { + line: { + fill: false, + }, + point: { + borderColor: '#00ff00', + radius: 10, + } + }, + scales: { + xAxes: [{display: false}], + yAxes: [{display: false}] + } + } + }, + options: { + canvas: { + height: 256, + width: 512 + } + } +}; diff --git a/test/fixtures/controller.line/borderColor/value.png b/test/fixtures/controller.line/borderColor/value.png new file mode 100644 index 0000000000000000000000000000000000000000..6bfde92f541608c606a5ea1b4988de691a6827e3 GIT binary patch literal 6231 zc-k#kc_5Ts7oQo!*q7}4HkOI9Z;_omBVwp1%ao8Mrj$~a86wI$h!FCQooG>%<*|z* zvQ?_FlVYrmCBA3g_w&!V_nvd^`JH>uxxe!yIM|=yVi#kF!C+i~jU^5SLqPw+VXQ3B zPiJbsFAOFk1z4In-^%;_Eh^RBJED8_k7BMTTGoVB_Ol2l5<$wAZokgUj+1=pQ)Y5M zmT1E6AAqqbvApuwpXIVy?ZrALOVE)d@=+U}r|EL#LLx@}B!_gqDy z^k-4pH>+uW|H~b{I|BxP^8WB|Y|$Z77kqFc)A?;@k;mfkdGp={b@68;aji z0DJ8d=^&*yGLqa?a*?g)II8f!9=H!|69S15z#lWLGgT~qR#Qx0iRf+F8M0_l7gyG^ zJQ>+v)N`Eek11IOOhg#5Nm$If9~{PGlH3<=hqlKu*B@QAw*lDmdMhXFV&*$(&!YY3 z$5!eeg3Jkj%*e#WU1|x6immweMEj}$b&%KY4)$?%Pt;YtCBJ0}SL`C^SJ^!&(iq9W z^z2kbYR36=(zfYjtJy-ZsY@;wv4575HsrP9ntnG4_4_C`f z!L2;Ic27gj?0iOK22SGn6oiX+sS!1;10vnbzm4@vSzBx%y&U$yq7=!*QdasA&nfSq z>b0hAkaG8q90pYayLYICs>;I6^2Q_9JBIdY)9&Pf2~3>jpU+H~C>H$~<5z?4sRx_| zUa13I2XTIuHxG&nT#?N}%6=EG^BwnfJGo~bqWsZ)rxm6oK%M;2HZlgX4cEti<61)D zec?~-YNc^ooU5hC+hG}}*5Jt{qu_zeJdS#n^LfKBz3Y5}lOz2D7~qBlZvIif{<1nE zyo7at8+4DT{cAvPKA~W$o)LfFn5njP*jqW4eRev&C&BxTU??1LVEoD8y3-IF`V8^*2TBzq!d{*;D(OG zTKaJ4&sgN~mSPF2QWl7Q0~M@RK)g51n*RRJJ@R3}JhW_q(ahl`f1C!2j+qMfZl#?7!PW9+^YZP-HC?Qsw3tT=xS3w`qQ-lg^uPE+zDmHE;};Z%Y31NKYM?o@bsu420jsBwavTI(ZyX19_7uTXUOs6&J+L z^pKAgXypyn0+s{q;ns?nQ}6XLV@7cF>?1wXUdd7r?U#{aIH#R>#CweiBGD_R2c>mlylQJ3-clyz! z)?omfFRD`98$~2%NWB(6GnE%jru-tjy-=4YD**H=)(rTILNUvT=>O>7CbE`J+48cs zMRi1(l82i)*(&_(WdYp0I(mE&agwdp7-WX)vd~?KpK|DeaW?33ExY%d#|Z+Y5Vr6N z!6fH&M3q?d5~6YI&_pdy&}|mom3!4qwBNA5F@zh$&o?5IWKDpd;nTU3T;X}LQk0&5 zHeSRuxfNJ?ojw6Sss=8*6NEAc!fq4uKTY<0BRKMTh(xdVM#e%~y#-yG9wb-JYpABc zNo)I~yNyGdtY`OFj4hH#EnfyvUs`B^j?#rK0n`lNEdv4ueAU>5T+sdU{Y9qbb&96`m6W$X#>Ln3lQj2hTi+c5gW2G~- z09|f`rXMn)UhIdRf!jWV^~AwQbEti9&>t^ZyL^t`12am5oEs_&%AczlZx4;@=D;5r z{O}L6X$~TAg2S_9l@!HROCB_t>3Ozxn*Il-r0|^$z=d+H%6QKF2F0ePyZnoC0S=-z zXKTtz?4QALYD?a+DA0HEIqa;$Hxz)gW=_7C+AY#VGD<$Im)icriHz7N;68ziqIzOC zCQ9~FgmT+HGy4ioe(x}p1$s+B11O~Q>}yDcl+=4EI^}g5DF_J(s)88nHs688X|Agi zh*E(IH;4YFqP?B*pJ;L>Nr`G$Eb%jZ>yv3u${_odu%v-Mfh4B~G?%t-kkD!Bp{;97 zUIXeiC##df1gW!|t7c6;J;C%lI=&p?NEzThTVP?qS3hOnGgMu~81J|#-r7H@KSA!- z1e@=WX-{y~v_ZWbI06-Va)u*mR)DUBZ#g>iyBOpQ8FfhRu?h~KTO+V%XcyxW$($5j);LvnKRyXCti$Bq#4lbJcYLg%6X zBWIL)iw6yS7NRRh1QstM@G~Ma7d*UO*N&{X1P6}oiqkiO=qI{Zw?_e(LLsmJs#XE>*&Rk4qQ4@7dZ3_YjNbQ5fd|aE2TweN%sLTor#! zV7C*5jS&!5`F5qVSCpD1rxzS=zWomC=5DQnvp3O_A_#q2wGBK$zhiTmeyM?(@E`rD z=p+lOQCxiiBIVP-JBV>n6(rJFOp9z*?&TZo}>U z>_QZP27VW7Y9J!FFbz?d@*8QKeddnVQ-A1)1JZGUS!m!!H8Q!>15T6hl*v9;QxpUx z8AVmxHF3_xUl687JAx1{9_x7Tr$3_v;Lc<|wYjN1!cNR;cm&=V3b^Q#sKS^Rs+RFU zN&sPS-dkzl#70gw8wx7xXpHS`;&gm4_C;cv*>cdRR>$Z@PS!CfJ1NQ9nuU@Bm-%Yr z(mwdHj003j%qulJsDuNO0hjRS&0h-tU1;8TtDhy?{Lp6_cM)=GcomCkD2ATOrTQd} zTd}B~F`_RtogqFu@ao6=6uJPDk?vm0eCg+Uq$sraELMB`@xZfRbLQ+uy(-}ebW?q$ z5usNPp@hb9H+4k_+=>Q`+1*ayXK6Qm_@#LbSMA54l7J~il=A7n>AE?8h^O^NFL;>| z4h>bA{gaK4+X)N@{T+mBQ|SU>hQ{K04D9KO{849`Wxma6GfE18!XI8OUk_WjQ5X%+;A;uXzAyp&?4$x5OAs36bgv!wEMdi{8S36e6D#vv2{?5IaQ#7xz|ntRlJm~{2}>Y2c?uOH~Ic^;yH z>5VSaNcp@8)Opl}JMq!Ci_bNzzNX?&#O2!-00W5s6P*s!{zwM%!Omnq%(wWXt_2CYJ3T#M%fp53C@W=x+5|6^EbzsL;gpao zTa_Gk|7?V$dM5(LKs0))ZbF<9{7E` zXh}xTntyAJQfa)x8d^Nwj9X7wu~0YoHfIB|g`YyO2wD?N8h92_{3brwqA_*!=}Bb( z*Ii*i4<OkGQo+}UF?o_zKkhhLp3W4XBTN)74UiI6*Hh{b?sJOY` z9utLII!Nh0IrTd~KPUvc8*0x$PwDVr-dElm{Vfx2Zbx0nl)2xr;t*hj(Q)KkO#ynq zFyg;ygqMf;jT>~!3?{F&LNGG=m~F`!PP2W?zT2m* zp}aHe&EnYl00YR^+Vq&vKyP`_R4~hXTZT&*%%`gZj1@njWl`u}9&PX?LWWMi@df4Z z*WP?cLj%A9LP+x*QdMF<2g(padcyL4#BnIrd6*yiJ!8=A?M+x4W8$&@&)jSc>dhS} z$OalI^d*wk(3NB;hp~%Gq@x080B4`EB2_Pv{m}mbG>}ttbVZ)DtFwai_|oIm1YWXc zaYBHE6`AhwsUhAtU4eGT-nC*lG-4P2j@nLGmw{Yul{1BQ&oOUgb+Hi;%3$Q;;nfHx z?oP(MTeh_~-^a}VHt^w9LkQvd7`WccGzWvSi@GPsXa#S@RXKd*f8ZWjHL_-BG0p*p z^Wj%R%$0nVfKo2QpyL72;Q!)Bh2T(Fhm77MZO9q6vs&@xK-foya9aS{h> zAeyFuC{-A925?Fo1ZQFhQ~2TEuVy+04nH7@28Zj_-j{tUPZLwS%CuXb;0yIAuZH?w zvu$Ygj39kVKZP^iSK6xVtyi9)*#0zDD0dwe!2QPY?^={|& zr~R6fyWa@%&KD0y0=Qf@^#I=Gh1er{ZSOj|g%vJq)~2Q%(C^R>AGFVx>(I^`?u>WA zd?|ys0NgICdL3)TSX+X#v{Obc06zIOzq^-L16v|yYM({^Dg+h$v^^lQ4fkPQDBizS z)FD_;JV8elwMNb8C;Qwddc5M*H;5gzC2I!pE|-PO2g6fyOl5XbqKsDMsJFz9!1j~0 zl-KZUNm*!bS7OSaHlZ#l+l(^MdTY(w`T(YqAPlc0Drn=7oHTg^L^dG?>BH3;a~csP z1S=Px>YnJ^jX&T^R`5Vpv3&1viE8w1NCZzaI_3-jo-B5^`*NVJYXbX5$gvZ+?Rzd} z-h8z$d*`iF-1Dr`?(na~pfTx)yiYuawXmLSuodZ1v?V>QJY@x*qsHeH{Aeo|2vc1Q zf>;{{ESa>5^iR^VO_0)om}6RlK(-y;WK-q2d;-hSW+9>6%4AA>jw*KG&EwpI0$jGgk(}IX$7w~I@m2Jg==U%NU353aPcR?powd*%t zuXLN!K}^|`6b!#)N;*X|JX+cyCnLo@(atS3cfC+$o7;x0S;C>8efjNnegt7mfhJYd z5mkM*H}gK?$7I;kq6RrC0k3n=&2#H#k~@+|;fuEe)QNmj{u;FJPO#+jc(R{eG|YJo zb86i+2ZPx8+-i~MzO`uu4$m0M0N6n^UMkb8(+H0vV&EPP&$ga}*b$j5993g^TEd@e zN8F{gral|A(gl!WY8BJ_%w=w$XDCcp=WQ=u-g!#q-<`-!EM znFT_XgAhuzJK|S-NbgbaeVRHRo0CLF+r{5cl^#qgNQq#!9JvrCa!Es7SiOXK3T9A3ha7rN9o7?cv6;O-Xy&JjC2N;ljoqW*+(C)MrO9*C!)a*m z4|nfEGj(n9_RvG4E3)R)cipjp@UbTcZjS+Q$2hk!8lTFg4qp|$0AL})rx0|=k-P95 zXh|ME7q^%3M%4LCL7W}BTn7?#QiLkmlo@##3$3`K93xEN!aQWks@6>DEA>a0KdRL@ zJmyNJ%!#f!eSHMXYE{J2ONeNlw$y?z=kzjP!0pcixGQmc!;Tf+Oq@?`aCx#OHz;Yx znJZ4$84IOm_(E1WoXWzV>a6j6d(DiVg?i-KelutL8%J1tyg)15JhYKprC_K*;^kN~ z;HS3ySks!TgGFR-@jK_I=*z~YxKfQ7r4jX{%hkj+bG-2!6S_{#A`%x<5qnXHzsZXF zPOkhh#J_T!RivrU+sI!?vL=f#yON#Z&lfC%582=z){_ggTm7r0Yk9NtFTO?l-IX;d zkM(glu3QiMA(EQG4H=8BU=FbUE<(t$!{H$EhAG>ux}u>j>?xTsd@OE{!dWIL@JsfX z=;P>gZAWNbbl5I~Ss8j(CZ(9j+z?{Sbcy5NBse6mEmdb8xqdayv6td+$erAHY{AEZ zEas>(Gr!c06VJBV)ME+1;ea~=S><+Ash_TlA!8x7er)(s(OF~!v|<3c!+o9q+jiCf zi)xo13#Ac)Kl{-++{?6A3tHPwh32jMEQg_XAaal*L?Y7|g`EF)P$9;QtkxWWgBC|f)aQ+R=Kb9ac_JC5*lk7m2H zCeBrN#0s{EA2-UJeV$m!)VQV@9%2$0!LGX!lY3`!2Ua6Y4S*+Ct_MJY%W-hGTtW`_ zqB_)6N&KQS^S>t9k9r-+?6kPPr?PU9ct>PvDPhyHxA4hA&_SnX8*?d`HmvWv&)UbybAEht+7TJeH=8u+7ttP(h$^Nt2;0kBMO(JUSdyCJcMc3Q+b-ToRYX_|i}HltR~=(_Np?1#tlwxrXX1-__O zHh3J=&|m~fG0HS;g3&+BV9!;fL95DV91}rDDIgd0a$y~auem^;%Rw|xc$GqAWc7}u zn>e+N@i_$9|0E?!_Kl4sTa{vD+Bw_nt75xyf8fcAH1ny5)I$Q)9ACUv64zc|nNjH| z?{Sue&uqRzllhcg8Gx6rIdDxh^QOw|3wR}|U34k>ER_v$LTQ2nqhUpVXRn|B40Vv{ zoPVMl9xS%~{@!G^+=k+JHlPT+8FsgYva{Yh)Qt$hG!RCNJf@8y+VYJHgR#0bb)KN< rB@FB4Q!7j<+iH;8KzZ)k4j(W*_@&BMk@K<`2K@n6_Lfi0@zMVS$X-{j literal 0 Hc-jL100001 diff --git a/test/fixtures/controller.line/borderWidth/indexable.js b/test/fixtures/controller.line/borderWidth/indexable.js new file mode 100644 index 000000000..fad97da1e --- /dev/null +++ b/test/fixtures/controller.line/borderWidth/indexable.js @@ -0,0 +1,48 @@ +module.exports = { + config: { + type: 'line', + data: { + labels: [0, 1, 2, 3, 4, 5], + datasets: [ + { + // option in dataset + data: [0, 5, 10, null, -10, -5], + pointBorderColor: '#00ff00', + pointBorderWidth: [ + 1, 2, 3, 4, 5, 6 + ] + }, + { + // option in element (fallback) + data: [4, -5, -10, null, 10, 5], + } + ] + }, + options: { + legend: false, + title: false, + elements: { + line: { + fill: false, + }, + point: { + borderColor: '#ff0000', + borderWidth: [ + 6, 5, 4, 3, 2, 1 + ], + radius: 10 + } + }, + scales: { + xAxes: [{display: false}], + yAxes: [{display: false}] + } + } + }, + options: { + canvas: { + height: 256, + width: 512 + } + } +}; diff --git a/test/fixtures/controller.line/borderWidth/indexable.png b/test/fixtures/controller.line/borderWidth/indexable.png new file mode 100644 index 0000000000000000000000000000000000000000..b38c1b6b94d112701deb4d8f59d5010455bc0ae2 GIT binary patch literal 6204 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 c0Z 4 ? 10 + : value > -4 ? 5 + : 2; + } + }, + { + // option in element (fallback) + data: [4, -5, -10, null, 10, 5], + } + ] + }, + options: { + legend: false, + title: false, + elements: { + line: { + fill: false, + }, + point: { + borderColor: '#ff0000', + borderWidth: function(ctx) { + var value = ctx.dataset.data[ctx.dataIndex] || 0; + return value > 4 ? 2 + : value > -4 ? 5 + : 10; + }, + radius: 10, + } + }, + scales: { + xAxes: [{display: false}], + yAxes: [ + { + display: false, + ticks: { + beginAtZero: true + } + } + ] + } + } + }, + options: { + canvas: { + height: 256, + width: 512 + } + } +}; diff --git a/test/fixtures/controller.line/borderWidth/scriptable.png b/test/fixtures/controller.line/borderWidth/scriptable.png new file mode 100644 index 0000000000000000000000000000000000000000..7bb6b1b3c779607db82bf4d1a8825986a0c64559 GIT binary patch literal 11687 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 YOE(`E2|^A%1!zB}h86~;dibdS12hoRXaE2J literal 0 Hc-jL100001 diff --git a/test/fixtures/controller.line/borderWidth/value.js b/test/fixtures/controller.line/borderWidth/value.js new file mode 100644 index 000000000..291f422e5 --- /dev/null +++ b/test/fixtures/controller.line/borderWidth/value.js @@ -0,0 +1,44 @@ +module.exports = { + config: { + type: 'line', + data: { + labels: [0, 1, 2, 3, 4, 5], + datasets: [ + { + // option in dataset + data: [0, 5, 10, null, -10, -5], + pointBorderColor: '#0000ff', + pointBorderWidth: 6 + }, + { + // option in element (fallback) + data: [4, -5, -10, null, 10, 5], + } + ] + }, + options: { + legend: false, + title: false, + elements: { + line: { + fill: false, + }, + point: { + borderColor: '#00ff00', + borderWidth: 3, + radius: 10, + } + }, + scales: { + xAxes: [{display: false}], + yAxes: [{display: false}] + } + } + }, + options: { + canvas: { + height: 256, + width: 512 + } + } +}; diff --git a/test/fixtures/controller.line/borderWidth/value.png b/test/fixtures/controller.line/borderWidth/value.png new file mode 100644 index 0000000000000000000000000000000000000000..0b8f38c1d62bd16f190a519710df3009cc801d0d GIT binary patch literal 6145 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 YkG4P?MLaQL9|Hb>1{V6IXFUJ;KMf^tQUCw| literal 0 Hc-jL100001 diff --git a/test/fixtures/controller.line/pointStyle/indexable.js b/test/fixtures/controller.line/pointStyle/indexable.js new file mode 100644 index 000000000..508087086 --- /dev/null +++ b/test/fixtures/controller.line/pointStyle/indexable.js @@ -0,0 +1,60 @@ +module.exports = { + config: { + type: 'line', + data: { + labels: [0, 1, 2, 3, 4, 5], + datasets: [ + { + // option in dataset + data: [0, 5, 10, null, -10, -5], + pointBackgroundColor: '#ff0000', + pointBorderColor: '#ff0000', + pointStyle: [ + 'circle', + 'cross', + 'crossRot', + 'dash', + 'line', + 'rect', + ] + }, + { + // option in element (fallback) + data: [4, -5, -10, null, 10, 5], + } + ] + }, + options: { + legend: false, + title: false, + elements: { + line: { + fill: false, + }, + point: { + backgroundColor: '#00ff00', + borderColor: '#00ff00', + pointStyle: [ + 'line', + 'rect', + 'rectRounded', + 'rectRot', + 'star', + 'triangle' + ], + radius: 10 + } + }, + scales: { + xAxes: [{display: false}], + yAxes: [{display: false}] + } + } + }, + options: { + canvas: { + height: 256, + width: 512 + } + } +}; diff --git a/test/fixtures/controller.line/pointStyle/indexable.png b/test/fixtures/controller.line/pointStyle/indexable.png new file mode 100644 index 0000000000000000000000000000000000000000..9534602ab2d480bba84eec3648773715d5522a18 GIT binary patch literal 13374 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 8 ? 'rect' + : value > 0 ? 'star' + : value > -8 ? 'cross' + : 'triangle'; + } + }, + { + // option in element (fallback) + data: [4, -5, -10, null, 10, 5], + } + ] + }, + options: { + legend: false, + title: false, + elements: { + line: { + fill: false, + }, + point: { + backgroundColor: '#0000ff', + borderColor: '#0000ff', + pointStyle: function(ctx) { + var value = ctx.dataset.data[ctx.dataIndex] || 0; + return value > 8 ? 'triangle' + : value > 0 ? 'cross' + : value > -8 ? 'star' + : 'rect'; + }, + radius: 10, + } + }, + scales: { + xAxes: [{display: false}], + yAxes: [ + { + display: false, + ticks: { + beginAtZero: true + } + } + ] + } + } + }, + options: { + canvas: { + height: 256, + width: 512 + } + } +}; diff --git a/test/fixtures/controller.line/pointStyle/scriptable.png b/test/fixtures/controller.line/pointStyle/scriptable.png new file mode 100644 index 0000000000000000000000000000000000000000..970439ee7855f6b2b331801bceb7b733de3c6745 GIT binary patch literal 8641 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 K>J_TiVgCp4vHG_F literal 0 Hc-jL100001 diff --git a/test/fixtures/controller.line/radius/indexable.js b/test/fixtures/controller.line/radius/indexable.js new file mode 100644 index 000000000..f2b70d385 --- /dev/null +++ b/test/fixtures/controller.line/radius/indexable.js @@ -0,0 +1,47 @@ +module.exports = { + config: { + type: 'line', + data: { + labels: [0, 1, 2, 3, 4, 5], + datasets: [ + { + // option in dataset + data: [0, 5, 10, null, -10, -5], + pointBackgroundColor: '#00ff00', + pointRadius: [ + 1, 2, 3, 4, 5, 6 + ] + }, + { + // option in element (fallback) + data: [4, -5, -10, null, 10, 5], + } + ] + }, + options: { + legend: false, + title: false, + elements: { + line: { + fill: false, + }, + point: { + backgroundColor: '#ff0000', + radius: [ + 6, 5, 4, 3, 2, 1 + ], + } + }, + scales: { + xAxes: [{display: false}], + yAxes: [{display: false}] + } + } + }, + options: { + canvas: { + height: 256, + width: 512 + } + } +}; diff --git a/test/fixtures/controller.line/radius/indexable.png b/test/fixtures/controller.line/radius/indexable.png new file mode 100644 index 0000000000000000000000000000000000000000..6de4062614dbd5059e1252f7a9cbd9327be70286 GIT binary patch literal 3825 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 vU33k`&#Cf~eqcpzqoJ&zrz~)Ca6edsC#L=%E 4 ? 10 + : value > -4 ? 5 + : 2; + } + }, + { + // option in element (fallback) + data: [4, -5, -10, null, 10, 5], + } + ] + }, + options: { + legend: false, + title: false, + elements: { + line: { + fill: false, + }, + point: { + backgroundColor: '#ff0000', + radius: function(ctx) { + var value = ctx.dataset.data[ctx.dataIndex] || 0; + return value > 4 ? 2 + : value > -4 ? 5 + : 10; + }, + } + }, + scales: { + xAxes: [{display: false}], + yAxes: [ + { + display: false, + ticks: { + beginAtZero: true + } + } + ] + } + } + }, + options: { + canvas: { + height: 256, + width: 512 + } + } +}; diff --git a/test/fixtures/controller.line/radius/scriptable.png b/test/fixtures/controller.line/radius/scriptable.png new file mode 100644 index 0000000000000000000000000000000000000000..4ee9c9f1f99fcd3450d77f29c238a7f883dd4ad5 GIT binary patch literal 4412 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 F{ttvCSF!*A literal 0 Hc-jL100001 diff --git a/test/fixtures/controller.line/rotation/indexable.js b/test/fixtures/controller.line/rotation/indexable.js new file mode 100644 index 000000000..4aea90a87 --- /dev/null +++ b/test/fixtures/controller.line/rotation/indexable.js @@ -0,0 +1,49 @@ +module.exports = { + config: { + type: 'line', + data: { + labels: [0, 1, 2, 3, 4, 5], + datasets: [ + { + // option in dataset + data: [0, 5, 10, null, -10, -5], + pointBorderColor: '#00ff00', + pointRotation: [ + 0, 30, 60, 90, 120, 150 + ] + }, + { + // option in element (fallback) + data: [4, -5, -10, null, 10, 5], + } + ] + }, + options: { + legend: false, + title: false, + elements: { + line: { + fill: false, + }, + point: { + borderColor: '#ff0000', + borderWidth: 10, + pointStyle: 'line', + rotation: [ + 150, 120, 90, 60, 30, 0 + ], + } + }, + scales: { + xAxes: [{display: false}], + yAxes: [{display: false}] + } + } + }, + options: { + canvas: { + height: 256, + width: 512 + } + } +}; diff --git a/test/fixtures/controller.line/rotation/indexable.png b/test/fixtures/controller.line/rotation/indexable.png new file mode 100644 index 0000000000000000000000000000000000000000..e6c71897a6a1b2387cd186756eeeb715d8daef52 GIT binary patch literal 8133 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 R**rl0$d+~%1!k1k{{!( 4 ? 120 + : value > -4 ? 60 + : 0; + } + }, + { + // option in element (fallback) + data: [4, -5, -10, null, 10, 5], + } + ] + }, + options: { + legend: false, + title: false, + elements: { + line: { + fill: false, + }, + point: { + borderColor: '#ff0000', + rotation: function(ctx) { + var value = ctx.dataset.data[ctx.dataIndex] || 0; + return value > 4 ? 0 + : value > -4 ? 60 + : 120; + }, + pointStyle: 'line', + radius: 10, + } + }, + scales: { + xAxes: [{display: false}], + yAxes: [ + { + display: false, + ticks: { + beginAtZero: true + } + } + ] + } + } + }, + options: { + canvas: { + height: 256, + width: 512 + } + } +}; diff --git a/test/fixtures/controller.line/rotation/scriptable.png b/test/fixtures/controller.line/rotation/scriptable.png new file mode 100644 index 0000000000000000000000000000000000000000..29571fad7d6af5310c4cb72f617d9dca69be96c1 GIT binary patch literal 8369 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 O`A2f{a4dEpr~Dr+cgqX_ literal 0 Hc-jL100001 diff --git a/test/specs/controller.line.tests.js b/test/specs/controller.line.tests.js index f3a3351de..285f5c988 100644 --- a/test/specs/controller.line.tests.js +++ b/test/specs/controller.line.tests.js @@ -603,157 +603,123 @@ describe('Chart.controllers.line', function() { expect(meta.data[4] instanceof Chart.elements.Point).toBe(true); }); - it('should set point hover styles', function() { - var chart = window.acquireChart({ - type: 'line', - data: { - datasets: [{ - data: [10, 15, 0, -4], - label: 'dataset1', - }], - labels: ['label1', 'label2', 'label3', 'label4'] - }, - options: { - elements: { - point: { - backgroundColor: 'rgb(255, 255, 0)', - borderWidth: 1, - borderColor: 'rgb(255, 255, 255)', - hitRadius: 1, - hoverRadius: 4, - hoverBorderWidth: 1, - radius: 3, + describe('Interactions', function() { + beforeEach(function() { + this.chart = window.acquireChart({ + type: 'line', + data: { + labels: ['label1', 'label2', 'label3', 'label4'], + datasets: [{ + data: [10, 15, 0, -4] + }] + }, + options: { + elements: { + point: { + backgroundColor: 'rgb(100, 150, 200)', + borderColor: 'rgb(50, 100, 150)', + borderWidth: 2, + radius: 3 + } } } - } + }); }); - var meta = chart.getDatasetMeta(0); - var point = meta.data[0]; - - meta.controller.setHoverStyle(point); - expect(point._model.backgroundColor).toBe('rgb(229, 230, 0)'); - expect(point._model.borderColor).toBe('rgb(230, 230, 230)'); - expect(point._model.borderWidth).toBe(1); - expect(point._model.radius).toBe(4); - - // Can set hover style per dataset - chart.data.datasets[0].pointHoverRadius = 3.3; - chart.data.datasets[0].pointHoverBackgroundColor = 'rgb(77, 79, 81)'; - chart.data.datasets[0].pointHoverBorderColor = 'rgb(123, 125, 127)'; - chart.data.datasets[0].pointHoverBorderWidth = 2.1; - - meta.controller.setHoverStyle(point); - expect(point._model.backgroundColor).toBe('rgb(77, 79, 81)'); - expect(point._model.borderColor).toBe('rgb(123, 125, 127)'); - expect(point._model.borderWidth).toBe(2.1); - expect(point._model.radius).toBe(3.3); - - // Use the consistent name "pointRadius", setting but overwriting - // another value in "radius" - chart.data.datasets[0].pointRadius = 250; - chart.data.datasets[0].radius = 20; - - meta.controller.setHoverStyle(point); - expect(point._model.backgroundColor).toBe('rgb(77, 79, 81)'); - expect(point._model.borderColor).toBe('rgb(123, 125, 127)'); - expect(point._model.borderWidth).toBe(2.1); - expect(point._model.radius).toBe(3.3); - - // Custom style - point.custom = { - hoverRadius: 4.4, - hoverBorderWidth: 5.5, - hoverBackgroundColor: 'rgb(0, 0, 0)', - hoverBorderColor: 'rgb(10, 10, 10)' - }; - - meta.controller.setHoverStyle(point); - expect(point._model.backgroundColor).toBe('rgb(0, 0, 0)'); - expect(point._model.borderColor).toBe('rgb(10, 10, 10)'); - expect(point._model.borderWidth).toBe(5.5); - expect(point._model.radius).toBe(4.4); - }); - - it('should remove hover styles', function() { - var chart = window.acquireChart({ - type: 'line', - data: { - datasets: [{ - data: [10, 15, 0, -4], - label: 'dataset1', - }], - labels: ['label1', 'label2', 'label3', 'label4'] - }, - options: { - elements: { - point: { - backgroundColor: 'rgb(255, 255, 0)', - borderWidth: 1, - borderColor: 'rgb(255, 255, 255)', - hitRadius: 1, - hoverRadius: 4, - hoverBorderWidth: 1, - radius: 3, - } - } - } + it ('should handle default hover styles', function() { + var chart = this.chart; + var point = chart.getDatasetMeta(0).data[0]; + + jasmine.triggerMouseEvent(chart, 'mousemove', point); + expect(point._model.backgroundColor).toBe('rgb(49, 135, 221)'); + expect(point._model.borderColor).toBe('rgb(22, 89, 156)'); + expect(point._model.borderWidth).toBe(1); + expect(point._model.radius).toBe(4); + + jasmine.triggerMouseEvent(chart, 'mouseout', point); + expect(point._model.backgroundColor).toBe('rgb(100, 150, 200)'); + expect(point._model.borderColor).toBe('rgb(50, 100, 150)'); + expect(point._model.borderWidth).toBe(2); + expect(point._model.radius).toBe(3); }); - var meta = chart.getDatasetMeta(0); - var point = meta.data[0]; - - chart.options.elements.point.backgroundColor = 'rgb(45, 46, 47)'; - chart.options.elements.point.borderColor = 'rgb(50, 51, 52)'; - chart.options.elements.point.borderWidth = 10.1; - chart.options.elements.point.radius = 1.01; - - meta.controller.removeHoverStyle(point); - chart.update(); - expect(point._model.backgroundColor).toBe('rgb(45, 46, 47)'); - expect(point._model.borderColor).toBe('rgb(50, 51, 52)'); - expect(point._model.borderWidth).toBe(10.1); - expect(point._model.radius).toBe(1.01); - - // Can set hover style per dataset - chart.data.datasets[0].radius = 3.3; - chart.data.datasets[0].pointBackgroundColor = 'rgb(77, 79, 81)'; - chart.data.datasets[0].pointBorderColor = 'rgb(123, 125, 127)'; - chart.data.datasets[0].pointBorderWidth = 2.1; - - meta.controller.removeHoverStyle(point); - chart.update(); - expect(point._model.backgroundColor).toBe('rgb(77, 79, 81)'); - expect(point._model.borderColor).toBe('rgb(123, 125, 127)'); - expect(point._model.borderWidth).toBe(2.1); - expect(point._model.radius).toBe(3.3); + it ('should handle hover styles defined via dataset properties', function() { + var chart = this.chart; + var point = chart.getDatasetMeta(0).data[0]; + + Chart.helpers.merge(chart.data.datasets[0], { + hoverBackgroundColor: 'rgb(200, 100, 150)', + hoverBorderColor: 'rgb(150, 50, 100)', + hoverBorderWidth: 8.4, + hoverRadius: 4.2 + }); + + chart.update(); + + jasmine.triggerMouseEvent(chart, 'mousemove', point); + expect(point._model.backgroundColor).toBe('rgb(200, 100, 150)'); + expect(point._model.borderColor).toBe('rgb(150, 50, 100)'); + expect(point._model.borderWidth).toBe(8.4); + expect(point._model.radius).toBe(4.2); + + jasmine.triggerMouseEvent(chart, 'mouseout', point); + expect(point._model.backgroundColor).toBe('rgb(100, 150, 200)'); + expect(point._model.borderColor).toBe('rgb(50, 100, 150)'); + expect(point._model.borderWidth).toBe(2); + expect(point._model.radius).toBe(3); + }); - // Use the consistent name "pointRadius", setting but overwriting - // another value in "radius" - chart.data.datasets[0].pointRadius = 250; - chart.data.datasets[0].radius = 20; + it ('should handle hover styles defined via element options', function() { + var chart = this.chart; + var point = chart.getDatasetMeta(0).data[0]; + + Chart.helpers.merge(chart.options.elements.point, { + hoverBackgroundColor: 'rgb(200, 100, 150)', + hoverBorderColor: 'rgb(150, 50, 100)', + hoverBorderWidth: 8.4, + hoverRadius: 4.2 + }); + + chart.update(); + + jasmine.triggerMouseEvent(chart, 'mousemove', point); + expect(point._model.backgroundColor).toBe('rgb(200, 100, 150)'); + expect(point._model.borderColor).toBe('rgb(150, 50, 100)'); + expect(point._model.borderWidth).toBe(8.4); + expect(point._model.radius).toBe(4.2); + + jasmine.triggerMouseEvent(chart, 'mouseout', point); + expect(point._model.backgroundColor).toBe('rgb(100, 150, 200)'); + expect(point._model.borderColor).toBe('rgb(50, 100, 150)'); + expect(point._model.borderWidth).toBe(2); + expect(point._model.radius).toBe(3); + }); - meta.controller.removeHoverStyle(point); - chart.update(); - expect(point._model.backgroundColor).toBe('rgb(77, 79, 81)'); - expect(point._model.borderColor).toBe('rgb(123, 125, 127)'); - expect(point._model.borderWidth).toBe(2.1); - expect(point._model.radius).toBe(250); - - // Custom style - point.custom = { - radius: 4.4, - borderWidth: 5.5, - backgroundColor: 'rgb(0, 0, 0)', - borderColor: 'rgb(10, 10, 10)' - }; - - meta.controller.removeHoverStyle(point); - chart.update(); - expect(point._model.backgroundColor).toBe('rgb(0, 0, 0)'); - expect(point._model.borderColor).toBe('rgb(10, 10, 10)'); - expect(point._model.borderWidth).toBe(5.5); - expect(point._model.radius).toBe(4.4); + it ('should handle hover styles defined via element custom', function() { + var chart = this.chart; + var point = chart.getDatasetMeta(0).data[0]; + + point.custom = { + hoverBackgroundColor: 'rgb(200, 100, 150)', + hoverBorderColor: 'rgb(150, 50, 100)', + hoverBorderWidth: 8.4, + hoverRadius: 4.2 + }; + + chart.update(); + + jasmine.triggerMouseEvent(chart, 'mousemove', point); + expect(point._model.backgroundColor).toBe('rgb(200, 100, 150)'); + expect(point._model.borderColor).toBe('rgb(150, 50, 100)'); + expect(point._model.borderWidth).toBe(8.4); + expect(point._model.radius).toBe(4.2); + + jasmine.triggerMouseEvent(chart, 'mouseout', point); + expect(point._model.backgroundColor).toBe('rgb(100, 150, 200)'); + expect(point._model.borderColor).toBe('rgb(50, 100, 150)'); + expect(point._model.borderWidth).toBe(2); + expect(point._model.radius).toBe(3); + }); }); it('should allow 0 as a point border width', function() { -- 2.47.3