From 690a243774dac9c15388c6c9d33e1aeb2afde4de Mon Sep 17 00:00:00 2001 From: etimberg Date: Wed, 9 Jan 2019 19:15:12 -0500 Subject: [PATCH 01/14] Initial line controller scriptable options. Also updates the hover style tests to properly setup the chart --- src/controllers/controller.line.js | 148 ++++++++-------- test/specs/controller.line.tests.js | 252 ++++++++++++---------------- 2 files changed, 190 insertions(+), 210 deletions(-) diff --git a/src/controllers/controller.line.js b/src/controllers/controller.line.js index 0e313116ef4..e5e9fb99947 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,7 +112,6 @@ 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 @@ -169,12 +122,16 @@ module.exports = DatasetController.extend({ dataset.pointHitRadius = dataset.hitRadius; } + // Do this after the compatibility code above + 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); // Utility point._xScale = xScale; point._yScale = yScale; + point._options = options; point._datasetIndex = datasetIndex; point._index = index; @@ -184,19 +141,77 @@ 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 data = dataset.data[index]; + 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); + } + + // Custom radius resolution + values.radius = resolve([ + custom.radius, + data ? data.r : undefined, + dataset.radius, + options.radius + ], context, index); + + return values; + }, + calculatePointY: function(value, index, datasetIndex) { var me = this; var chart = me.chart; @@ -317,24 +332,23 @@ 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; - var getHoverColor = helpers.getHoverColor; + /** + * @protected + */ + setHoverStyle: function(point) { + var model = point._model; + var options = point._options; - 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 = helpers.valueOrDefault(options.hoverBackgroundColor, helpers.getHoverColor(options.backgroundColor)); + model.borderColor = helpers.valueOrDefault(options.hoverBorderColor, helpers.getHoverColor(options.borderColor)); + model.borderWidth = helpers.valueOrDefault(options.hoverBorderWidth, options.borderWidth); + model.radius = helpers.valueOrDefault(options.hoverRadius, options.radius); + }, }); diff --git a/test/specs/controller.line.tests.js b/test/specs/controller.line.tests.js index f3a3351de9c..285f5c988a2 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() { From 2bf7a2dfe2a49c07fc1db3d427a9e9b836ae65e1 Mon Sep 17 00:00:00 2001 From: etimberg Date: Wed, 9 Jan 2019 19:48:10 -0500 Subject: [PATCH 02/14] Tests for line scriptable point background color, border color, and border width --- .../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 18 files changed, 471 insertions(+) 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 diff --git a/test/fixtures/controller.line/backgroundColor/indexable.js b/test/fixtures/controller.line/backgroundColor/indexable.js new file mode 100644 index 00000000000..7b939724e6b --- /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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 Uu~`8`h#UX|T~nQM%+&|~1MW`C&Hw-a literal 0 HcmV?d00001 diff --git a/test/fixtures/controller.line/backgroundColor/scriptable.js b/test/fixtures/controller.line/backgroundColor/scriptable.js new file mode 100644 index 00000000000..6ede2cb0c15 --- /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 zcmXX~cR&+M6Ti@f(4_ZvNE0c7G$Ek03rGnd&q5PH1!>ZI=%6$Y6#Zx_0f~s_NfkkY zpwf%do**TFD2OyEk@j79@2}grot^#7?9A?OH_gV%jGa}O6#xKs$lMqQ0CY$b1+Xw7 zpZD3l*8qSQgp7^s!wQzZ_V_ss#iXpxZ!5> zrbJIfId6TL|2ZF6&DW9E+`k0tdfX=FiLa^N zPW^JLM>SAXKG8Riu=~%gml=%Ykrjh}i3VHTQ%m*mu%vsnLHiZY`Pl#n`?dXacWueK zOVW3{Fxj94f|c%vzn}gJc&W@tW>p#hb5hRMK{zX?#dMDDSHK=M$>Yy=tM4@AbwOQAJX;e~Ye0`m3ml)}MoKxuQouUYu_Z z+54%q?R2v6AZvB}VBnE5jN3fs_p7;QX|ac6ueoO|#r!Sv7LUMOwA7d^QH!1K4HPq# zPJapiPJraj-&=XApZd~J!)N|w!5{tRgZ1!l*MxuU=3Q_uxVq-(jk&_J`uX6`)~o?V z+6lgRUb5(#s2tU(Dt}F9r=@Rt`{;3l=L4&l)RA55J-NngUpvB0otCuKuFD3¯v z6%Km)5>&N@&Y`O1)rl%u%oD@QiH;Gm9A#s|P}9{1$BI-lTXKrYT_e-ublow`1JcHI zt_v30RLqLB@3ssdpH<)=vc~6^6O`dWI<~5=<7T1tRYCb<5>Av)#3RQzaC)GgVFq_Y zW}P9f@4LHGyWiKE!VljBnep6|c(?Sh_D`HL#0DwKR<|cbHYQ(qcONSxb~YYfz%9`e z1~{c5x8K|Xi^&YKL#3YWDpS#rSEiH^q^WsyEoaclD~TaG)Dhzt zqv$QXk~q0=c>yfeI6a*td5;1qaj1|oe<#=W{CD`%6iZ1ickcki+LC^kH`~t;lA;3A zrQK56&;<%FVbCqvAN06aY>i9#%gtheDboh)LlMm<_+B-IyyE;Mp|9P{fKKVMfV$MnM$=$)PyHPpMMicp75hmtYo>rG-g&B0~s6*jbK0vR(i5TLFr~qL+ zfW;CP4`j91?<;%-64fyhLsifHWpB7=WK3g=lW)LV5FA#Aab662i8BQR+upcPwq)&|ZM6W4m4c`{KN z`e$~&O7}x{G3Ze&Q|%>kHU=Jy?!Hcx-KT?aTk2qWvQ8ohHMM5DTA}Gn$lq!(BH#mwI-2=*^k^yR;0r8XYDtqc-UIm6q>lSME zC9Y?sh8ebv?b0JCpe%O4y0uQrJ9M8PkV^l%9oNNZXxtXui%NJb0z#eej}j5g-X(zG z2e)eS9Aq^9;toiEdPWO^bA|T&H-3I7Y-Tk4V=%8>;iCwgPkk`!|NR&QtGhG2E&Lm3 zFQPjs>SwnlvC6|O5eNpAfY3uVe!n$$RJP`l3Q!iNaQMp&m3`r)70MjeExW6L=X92I z*3&+^UAF$XP>Sq4ce)Pb@gv5qC)cu(0 z9Trb#=HxS4kD1@=X-2nSQV!kcOx5nYbLdBb?OzXko&fUBE-rYLkVIb-&hV(q%Th(| zMfu8nfYxig^#M${ZD4@=c%EFdzvdnKKX0eGnTW}6T%q{|tlPWh>@#otmsg{l4|65m#>2K6LChx`L zzkQJTB2RZY^bTJZB4OL2r9HKK^?q8sQG*FD98#as^LtJ|HD$x6a7V4(`pzGe2G0me zIEjdj=+UySP2pQTS?vB_$F9U(@Vymx!+B1FSzcKjgr4=8UuLKah-H4>!0qjL1X*AA6wt+}+89I5ZW4BOEGwV`byh5*{zB0bI> zco-ENMoYnPTjIKlb8=d&)UVyOTObLU0$21LLtRc`c^e}!v8@D)O%Ic{Mr{w3HA1C+ z{l-KyT1iZ;+HCQFdTq{8M^DYlL7kOSlvb4DKc?yoBT8Z=G@z$QcV-L1v{I&NKT5VQ0XFi$bpL)-Zwh-V5~Txj*ZRG^DJOgPnL3EW*pD zLW^kW)x@iEjjt09ln>+E&aWHmiKl^7zrNRr4=MWB0=lAF{m~FLjHVMDhl0g6d--EB z^=J@GPTfWS@bQ_7WT#2*Pv!h1n=NjO(=<2m8!b%%6n%O{H6#$YtP7Z|=B%(S^2Q;& zgg@pSivo3Qv>@TKL}mlZm!YW}w60t>8FF7-Gf+go&wFU6`bzt<5T*A(XG-NrWFiTK z79M@do~&vs0WdB*4UBjY(kEPO_fzVKcXccm$pxV$yFRO!1libT<-IYQ_^I70Mn?AF zMNuIgl2yqXZ*nI2;m`C5g-z!W&?hQ?&DK@T?w}d5a4xJyk)nR`iSWKLVim*a%9)Ie zz>eVIZAw*@rOYs5w&K)kGY_1}t{BAcaw!5L~!lw8)L*aw?OAavuR z3-DZp!PBa8FQGbfQIl65!bK?Z0q+;9V&%ThM6lE5%Dl)(Ze^K>e)#)84P7rjz?NZh zLek)!R^?0tvw5a&y&Yn0sm>O)Vpq-2YMJxc5Q25ROXwtTPc2*!9+P_{MuR=5L#q^L zFhNPIvZ5TJ2mqVg;;>EF_|M47W>enW?R0|$01nQ2H0GwXBn;9 z)I_pl=1*GjzLPkze!aQkqO)sA{BJ!83ZJ@9s*{1>Pq>ED{h#S&q0Y1=FpoJiu}KU` z;QJe0^k3!8VM2ktzP`WcDDUq~1eD?*c@?_k_=&q9gf)@q$cW#ZzEAVv42G04_ZPa0X|8JZ9% zxwpAt6Y`0}@k!k9Jkw8fq#g_^D7%Aq@M8b@ezHT_HIlX<(2ekT#G>-gB?M;mP1y?! zH`)JHA0x5Q!c*&h%n&AARunrjnzqA$gov&5ArOkr1r_A5j?7^pwBV|l-WqewI(nb> zua9HYEUJ-KoB^%50;sb_%jQV1ucX$`sPLm^+LDYkTgmdPA+05CX57f4a_qIq47xw| z167z5ROn2H_x8vPqK#-dzgDwQ*8rg>dL(UTyU#0~H?;9etRU1Ql=P#-e-7R4l2|JL zn|-bW2oUt&V~y*%HZ9;d)y-;bd(WHi$qrW!c~Oo+F@gyZy#JAy`#~yLI}9nMhHi>I zY*l=`a(LCT;oCHY_cTwv7;?&~uII01PSQ!{8n|vPu7rlps6A-VJD>!!c}}L^VS!*p zg|@=j%3sFBNcK$?@`fiuVlYv-d_5-sPL&dwwKs*&4^A$TUVe}h#vc7WVd#yRF zevOykQ|lKtxAyP%$5Qq!UM~7`n4v)E$Y(RHm_K!Z`BzZ%#l3C6*#_nTwJ^n?e1wDy za60x4k7UR@6t}Jpo#F$OxX!(s?)O2Cy$>u=dI&wyPZH9e$n3?$f0s)wn=0+kpmqJV zSJjQpK{i2R&T-(C*9Qdv!p&lnRk*?*%thDELLMV*NvWt%Zrz^r6`3Xl6%>l>9feEz1 zU_biZ0wPpDFgTo)|J(}+y0M=j|1x0UFkTS*ceP= zI!mZUW+Sz^%T91^5sE^b{KQOF9_&rbXiFjwRjnGJED(^@Y4z@t=ycMmdb3n#1=;De z@cv!otb(&AOT4uLY;9h~xC)x3N19^h_@GBZQ?d zuu!2apR%ab>jEeEatXdTzjkY^p!5V-9#nr_V-`7AP7U5{w~inHH%p_wUuWhJgK)#u zO0#nMIOWq6Rb=H7q%gsjacda~w@Ihh3A<8a$y{NxkKMIpje-xhJ?A~tu47n>iqe_#=9No<33(m>A1YHN#_vt(@rB`~SiTMbh z5w=&Bn5umTH^fO{h$egX;<{rNjj$p7s;zLBaH^sFBEA7^-kG@TgX3he|HC_sxC8 z35;6K@zI|U%eBuy5SZDs{i+YL`4oY;B0gl@Xxv|#0Aq#La&Ecew>z4HG+ad;(dOZZ z>z$9KE~`n-Jw&d>^Un&^NFsH=b0ZKZpd&-)(LdXO>_IjJ)U#)tqu9AeQ|AkKavSa; zy}>`8-m>wRST&DpO~i$&&dL!LYU1NFn39;%)|uSBM^s|~sOF|L$E>gOPSt>ACNe}> z}Sx> zTKL}Meu>`rgCG-C)GBf<^Vld$*!*cxZ=V;vmS(b_Rlcx@;tsS_ zYiY5+B;(P2#40_uBTw#EAm*Zn=IvBPXQk)Hj`g>`=}$z~&YBIfQrQn5Gs=rQ18-;1 zo4Ak?ye$X6Z+5vT8CwQw*q0Ep%N|5{7E$jE>F!}i)VuEFSnhi*nIY+r`#&!#UXFTu zQge{{QiaZ-hQ;P>V~dD2^4d{jifp^Vd2cNI);Fb)(6LH}|6bws(;T7-xJ*{H`%yin zPC++>8asN}dV==fd;j+~gb-dvu0H*Jnb@u^<=}(WMep9}4`659dO_?eit~TJcJGXU zIR{8RL2sq1?%ose7HKefC-g>h7;5^{A5 z{-lPc`|C#5xbI<#}XL*0;ocBHFrrO(DvZIC3006KvA*rsOesAO`*4b6og}KIsg~7h%b0#w8y^}U5yk#KMF@a|gqa$Fme^@^@<(S~>ZhRX2=X`5Rk;3G z|LNgc!glEb+HRX+^G1-Int0PG*xD2Q{#D3I`^|%So4x3x#njBrDQaw)3S9qFv4xT` zV8D6M-Z2Kw#J8lTZIx#Y!Hy>%kiuaJ?J*Kl*_MKTeqy$bTi9U)RyS~^uKpMOtzprL zT3xD(a!}HYGBx2^w;lDzMxR@^MKk#1Tw-KNaKR$;P`K0Zhs+oZ^AWGPn8FOId+YM8 zWurNQf1%XUAodaEj`S4P{oUm14{7crI>VpzKa+VCyDcK0?XFyEOuy?0F6@vKHl_6U z4fP|0Y=^tnPNfJ){t~!onA}CBADK-u!ktQdur{ZEl&qpYs6L<~Rr~C9L~E~{=p4fh zKM7c@e2B$u#zm5#mh_m7GT~PEH6SCH;U7s=!AB{{$_Hw&vxs!eNR6EP{PWs@jlg?v z{{rO+(oYPHn-3&mz8ILnVo`*ff4Dn1MHE z0TI)tCJnNy&5+=Coy;tLB<%z_g;TazYaQPdOI-UNMQSOBzqvwLyHkECAv6p&Rr3ZJ z7e(xGR)%;hp->iET!}WL!jF8cC=|7{l07cx^d4r4mCnIg7kOuEqzuYKS7t@5MkTjV zCstvzOYrS(g_C~#4P2+Z8(P`TG+?H}(m)*BH=^l1$D0{J)&of?D_up>*^aUoiySY% zM1i^aoW_b`$t3VAs?zv$Pgv6rd3Zvr#hmuS z+8kaG?s}2w>2;y=cPkFb+oxanBq~A&D=gI^T{?SGFmWNctG~$19?p>v z*Q$A`o*)HL7FVAA>d7hvmrAAowN6Li5!S!>@4vE#bkOMRG4OG%P67zM^0Fd=J+YAI z!B*+C{u2?YyA|iHzimeg{zIC_YMrnpeIA)5N02{XJKMzg7I~o6SLP@Wh{-?gHV{`3 z_O6S~6));D@5Ol!2FF_5Kb)!hsLRp*i!Nh2QT}qUib)vreZ|(B@`uT_zOU`z{>rgC zXA(o#d`oPmk)qZCW7>G&_~d(5<1aY2;$lCVeJ=z$Bspw?dUST}F^%c$DkBM_FVg%sTrouiURPH+ z0C2_O*YoIEu@WhFJ#Fq^wF8nvT(c@>c(|fM)f69*(sZg@G;c4*Y@hjt=}dIT!xtDb zpDKM0IPon~$aCSyOS${~1EjNGH2Lfq-;-5a8{Z96#my_{^53w-;LmJ8&nCS#1PAx^DfW#cuD9T6)>oAKf?9|LMpAANmLiGC$H) z0+wGSh%h#cYAinAZz#v_%0M`gVm?4C^~)jDh(V4e5bCc(q%pGLnZ%N5R3$ z;ay{oPD9bcmfy8{m})6yyE&3m-K9=rNWEB0RS5`=yM{_aOInUGK$a<5MN6|?@x-#^KokAGufvGd%e3G9e6>nnHmg76nL z?_xUmA9`yb!bcSw?-ub&EUFbDQej<3RCt!CltlN7V6zwmKEHn!T`7&k=VSad@=1qa zU-|ZsS74sQ0~I2uNdK@apZ8d6OLZ=Q73?Va#56_( z5@7gbI$egKWGAObN!Q#zc(fMi0D})778dWz3Lm!EhNE+kQ)Kj;ZH$POE$5w|yP8O# zIlpVpo_UwFq0T3dz=7PCiz3gzUX^=Nyst>&z%W|FIZrH7YC95-&c44vEd9B?d7xbz zk?=W_^BxGbrASt}?P3d(ZC2(@%Qm5xrM*8gyyflTinZ}0z>h>@{tRWR+&QtyE3~m1 z4JF|6q$PRd!VTBDa$^Xte^U!IalUmSi+=e366JrDfcx5#k%@aOGc_6C#IQQ6v$nCw z9FwM&Gqe#L`&eCl1Wc z58FIcV}0VH4nuhw4+JxfU1lWd5AsMHDPrb_d$~5s+Vyy?k>aWPDr3=uN@{@@TuxH) z3bcePP~)}0V?A!Qz@C&)ph0RDiCAf96z}(AkqX7=Q417cC3@3ZTo&j@)L=SX_R>u5 zI(*{a`8`esTKzn~rAsyHbWtZOQ&{(}T^0#Aq730C5yy-$UxTK(f_pc@J76$(P`=N; z>=UC6?8x(H1@yv=2tqOwO>ShX_n+>9(78)fs_%1A$kGHQdL-fq+=y1q&Oi27#mk3EBMe0PU5HYP|`qx<`56kJ+W=*(>-jpjaNSIAZEj@G-M}Y6s z5EotCLQu569~?ECMB5i!KiZ`KW{h42IW~sCJZ9U3|5W^1iVffc5wRL2;@a#rY}YMe zP=VL1MwzZB?lWRve>YcOdR+M2J=$(M)ri>_xYc-eG7t_~WxD_Dbz$1*?m})pMaDD$ zQF%G%0yi;UTUj1C!vgLszCe9?%8~^V_})FOXL-!fhM1C*$_iVMH2?4?vcfA&{_HpO z5VcAUU>g39Z$KX(gFY$G(ElKcNWl`4m zw|_GrK%vv~fd~u|O`z}@=E!h70{CARA)h=mdG681MmXME+-ybMpx6}bB!KcZ*|35^ zpYwN`7V7v>W8H}+N(&@#GrTLi+mhP`&Pno`=Uyee(ZUHlKv0ogJ&Z}ZN;b25SISNJpXGjD zYuk05uwB#z`n=5wNI8*Tl>8yQ7^!#! z9h7&pcV_mQ2O&|$EO0`HliBIUujc^E9Om~&*~6BoY1w%Tan@-h0s=4|2@BQN4g~=0 z%|VlUI7MKcCpam(ybuYS^wcZ%4Z!PC^l6Sq;|G@e=G~Z)r2mQ;0lhE#DnPw2N)lR? zW5Z8X=`td3B9%ah60LT@pse9lA-ch*8hNOaP9LO_(N(1%e3t3(8r8&&B;!Nw*|*e0 zB>^C6ho|L5$65gze>AFe&l8);at}O>XYcME+K6E*300bHy`Efo-4OEyeda?iZ+9g+ zK+e#|9(J_-b~b8ie1lj=ji~O&I5SH)N6Rk}8EHUgYTp4N zisx&)Xa}#Q9+L(GdQlu)p@yL-s4r-6<~F4hL7#!F(qmfYMf8^h)b4^m@~}pXS{?nX zW5iVOM>5uEsh^9;uf+*h#2j0!oGPfGM9~F^BX^VfVr8t_$*HeePLDH~tZ=&+ir?(X zry&`anQQs7Dr^O}#*9V0mM-DDoZ#^StP#KUGk<&sKV*$aF|8_AcvDk#&Dj{2FSO;L zaHl@Rz4~X``ehX4LhQS6nRL>FAJ$Sn#UC-W*a+^ z&JJtjm!9Nj7}l5_DH97WrRq^2g)0rWNF1K}v(XR^>6i$avX{j9rjnGHz(lXtcK!Cx zJWpMHh41o*>ye59T{hwRNrT9m$6>uHVHShq_!o^{myJ=^Wsp-)K{SgBV~6Q91W+yH zJ1FQ1(*N|oxTfLp*X*bX)OLw~>rp^Db2+HRj3{5RGSLWFi+t|`c))_Lyh*%%beL!5%*Qc_#Mu-Unn1qQ5yo}v7jPH{3 zJomZCl@YBATGpRbY7wtU$%*vK@MFHhMS(;Wg$_F;)epN*TyK5wIakl zCVg6~i~=*oOXeC%bg3V|-4NIlYv-7fRZx21(e=R{89L5S2x$Etk>_N99U&T6F z`FhSw=b-U2DOEvgVTEAs+gs1_^b`buGdeb{qsEFALXkgXtQn1W$^bR`ta2(d-%_vk U(W;&rzvrA+7$j=A@fmo2HhA0q-8W>W6=pn$PCw0&b z1mgRHG}OO>$y=SkraHRhFKz}$Qba_l5T+N4qxE2^?^B8!1h4T1UC0+ouyyr~l3$AJ zH`C+DGNj^oJ^rYDZ``>1r-L!WcepO(GIuJ$$Y_wq9`{; zZ?A3W#IHGB=k5Ax``h7&!Q;(H+kD+W?Grkz`2hv%8jIUntftgvdqf*MkRw-LSX6p+ zl0je0^BUX8>RHU^tLT!MpDgmzX=m96)$e}QPMq8|HT9HG%YX?h);X~e!O#0 zXY(Y^-)A{L6-LjaM*(;9;PM z%`y8j{F)}oF5Mgr2ZFmk36FxKjfihZnxcf;1E6G@=4pe9qCNImreS_GEeq?3l_O&* zeD|g)-_rTKhFG=rqM7YEyRHpI3cJtJz=rB8()KqkpSnd?Ffm#mtkaTkd)(|2(^dGo{>qB15- zoSDp#_l@|A(kB-cZSr+3j>H^PNBJ|cGhq&XNU3kFRT?4=K6g@x-Cx7bxn;5Q{Knny zf5G12cEfTD5uhxubnwMjDkGAyL-L(P8EPBxcjH32)jB>< z2`3wRvAmquTnO{g!3ag#DUQd3fs;EogCNn zHy^}$K3gQ~!(fB`&sWrLdeCaTd!SW{Nc-H9J2@6SytnFkuv;zYGybe(PrwM#M4ZM- zvt3Qu^mJ8R;JAn^AG!~HL_X8UuDp}1;1#vO!`6V<7kre0u-Bqp%^XFf`Gy)cHk$rG z!N_H2-BjKc%ZyNB+9KK5R5jp_OOW|!;v`cG4%5(eh{5N?z={v~PA&I=N zslU6|yTVP*6Vjjhp-i@EQc3SysZf2J>`!4rbJEuJ+IAms_~lle@_W~2%)ai2Bgz|Q zG-Z(0M5ZLEOIzl@Eb(pNTHwZ{!ZOz zHN`n(i|VUGOUPedG<#Ay?f|)$5{$5|7v%c@b|S z%p3?1+V6_}BlN9ZD}UxyyccPMHX*^oAK%jNDCwmU-zh{Uis~XgupFW91Q0`R5IQES zjE`T2kB`IFu=ANK-WH|x{08w885o?2ddipekl9~df-4*}w3tw5Jn zME?a|-hOP&TeaYkdvA{q+_?(vTp>#fcHwCbU~GL!O4!e#p9USBsfDn>Y6XJ_qT`w^ zHBa-5@6}S-B|5!l ztumU=Ci!X6*4`~37D{Yi9~wwD3r7>az}Cw82% zr}Lsw^=B%)qpRBki2q&mY)F?p6gBy(tMyHUc>+VA~t3vCYIY4y%S4(KAgHArgvHMc5trxWMs z4c&wFfe<3%ECFZec6AE$rxSv}d{`?2Cc5Pc9s@tAW9)(!ACjGIG zR@0DHcsT++=$WcGenYea;qdH;IN7E3scq2i+$XcgU$sRU)gHrduz5qb6+HvX;B_ex zdFI-p9h=G7OXsaGwJ_oE3!LwgD$GjX$r0R`Lzc_Ssxh19a%*c-!xTM&b!atbX1lkj z{A23t`xl&C?)TSx*BTh@i##bH3cr}7L!yTH1!c6Zx=c_!OtzSY9FNCU)`L2Zx~%El z?tI<)%Uwg_gxgs4`&9nIZVO9pW0ti6=hw4^>P(Dex8xc#Ma|qUlHVA9Tk_WK#neti zpl{2h(& z)xl9KAqAf9UK<^SY6t1}TLAZ}i2ljvLTpxzd25zkJ&XQBwfI&OE0Ec2Zs+!8pIbE@ z6Wg9fxlrLVqDkD%z{HsRG_30AqODwT`hl1Zgfzk1fJi!Aqi<>ggAa}l5C4t_Eaorf zTZ+*VE!?K=duT{?Jhd3UZh1?ym%Z=D*e=BKR_b;7jHP*j*53S9qU_h3B zgSw^xj#LXcNk!crQ+Xw!U=;}H^ygdpzjT8pr`jmbeQ*Crwe7mz-3g@0ZN4P05rL=1 z(_%C_=0NF4WXRJIugZi4=CKuLigFIIK5t}MhJy}+_9l1|X5?Ob_@-B!-Ae3G)$R&H z;*?*g5G9{n2DQHVRf>Sq*esSL2?4v05YHlK9B@X3G0Kkev0{q3XQSy)&X4=ctOrOO z32$6&8hp-{F-k4KXOcZ(rsSu}EB8w>z~)8)749{?dO-rUh~doMOog*wkcAgx?Ad=D z?^8*nk7u~fe;#Q$d-5@Mh+l?zGT(7q(XHPKN6Lz!dt;++PgCi3Hz4PD;%M(NJRIKj z*X2F1!3ps8mzp7`YhD%I-a8?II!M?fk*JjL#ZCwpl^9F3iLk2_+ zs>6{D1MYD^wZ%a@y>KamDg6x^feNRzu%}l3@{UjM1$dk)@fCL6&>x+jdoSS3skO?F zlh1{?X-khSfPk|Ynd3j8tV9HSgp@4Lq7Fjk;5@9?ndr(CO`!eZEus>Z8*-+vdAHAy;mnny0F?rG26}`weVzsy|8~$8zh{ z$%cRDKf-`Ib>8LcRINOxgn^Gjh-PT*T6T4+e|+j^Qm2mM=_pA=$m>@L*87?CRG)C>kSX&+~oLiYmenDlfzzIj9 znr}w89dGC{L~78d(C+W>3Ku4&d^o*E)hO4k-mYW8E2BmkeP|1g9%&cO0YDTla2erjeizCgD^_>)Z z^s4Iq56=y@-}gp5;np~O#ueyEMZDU|PkOI#zO!VN@PeI&m3*YX$8%{wS!LQ7y3tJH zMd;d(x9s*5+x-m@tt|iCQ#+JCIj?~$#Vt?l@}W}@`M|zDSxFVQ zAn&cG(|)R&;PBtC)Pd+XEbk7|Vq7^EK`~>^@?#4CLJBRPJYZ!xaj&B2vd5-*?T!EA z?}?;2Ih<|*xTH@W*f~7;NNbKGHQJ$lbhYdsEYi)Soo6I}^JI|akwKzvQ+qM_Msj@G zE`0gB8{F~lQ)kySX4>W(wSaB!<{yY7m#zPO8e4utw((h+B9K%_RMU-GB`^%R%r?lJ z3L_W{z%-Pm<4&dHzAEzUoz96}AZnj}VYz2bs0MVB!_BrYQ> zZ5ZqbH^t$hmz%<-{n3^$F5qBD!qdT}bLgP|jV=A37r8XvIkm$X;>-O09NP82m0J4$ zbZ)w{q0ktT3aodY12z&=CGie>ZHBrG9H^k6<1IjjE-Uw)!#yme}Bv42oh7#$F0QK(pxSM7BMAc~?=dr*7h);7Q< zkAMI^N19KAZ;Ws-Nv^thx|5l6XbnGS`45wAVQ%x=2X)2p(Hn5i2II^3k%QST@{+?pQ@1u!gV?ttl{Ao5{iTUo5m+^$Oa$PkKAmL&i*)&|8c&Z z%jhyzr%>+i&W_Bdm&ZUV21#zvY$*HcZtQyH4qtOU6H8?>$Y%d}Vxmnmp;$t$gS@pZ z)gC-;-xj*NIo5FR=*DwvOg$h#s^qUZ&S3~K9Y%B{y2JW-O7B8yGoDlSHG}@_S4h{i zZe8?XCVxwwXbGOm9aYBu=fSCY7yjg{5V_k7LZ$j1+{ zQ7SWPfYaO$lCGArZbcXX%M0)%JUolC?*TD|YUjP8xl-=&MGWU)NM*Yx&ut+9S5 z7{I=MuEZYrt|fqKzr_=kNPEiH+!KmlVt1Fn^(h^)zRLMxM0{nd6Fl7r;PoMCPDTJR zbKvlT*kMmGD?!+3KqZB`CApO9;H>!qwM&JB?0#7JF0(UC-7xnp=v_gkp zpI&v>cu1j5>b3+d4o)avrGdSR1{~dp{g`z@81kZY z3XDXhKZ6KbwoZieZ0JU(oRK*3w2-vpE`}eD0Rc4zNLqR9gC_zu$Y1}%A;s|&>>zUt$25icBa!Vaj6+%W%Nx=l3)t{iYVIYB;IcF^JQ%ocRX=pB2% z?$3L!96VHIwx@00_hNXnPC~Jps?TI=JpaR!!`&4-AR{BpU)hIiCln{fMBex7SC2b(0~dWkd@K+kZx)4BsedcRxd!3lTiZL$JdMDQuF>zK6Cy}nlnDFtQ$MbFDGBjBwc}tRchQ!-6b@})=hNXXn}|fBJY3Io99FebY303Aa^~R}f?~Ka zshC$HDv50G-V_uRq!?b_`H6U5s{*K#*fab47x{;mv0b!zoG`@{H)`P0@3XI-(+Gb# z;zvB_mWGtGd_vzh!Z6EAe>6to&KuRIPAP`3R)`Ms3PG+xW%^%V#^D(Rx1Yd)+IXISD;)|{|64mHC1RUj(qJmN?->t}bR@=< zeO@Fk2WYh|p1D7{seTtT01}o&qEwj=Bvk?kXQll3oRMbPqPnHt7yY0`4n#woay_sX zu+8fj!LOQzCph<8S-4#E<&-@OL)rikIp=$L`MSjPtUgZJFNRDydAw>}DQ z>Dq54D9uS&JP*0T$|wr} z2i$AG7PHIs=z)zVRKj&gGvMMw5?nu759s%cq>r@eOD!bPc+k?e#90{&cOr9SV#xUO z%IWG%*4Jocy0jrMp^Jci>A42Gd|*qV3}yCuM5M_qhcQ9YcFfNgvs{$Rf-ET2_MOU4#?30h-*GT;qPrMffxTPT%u@Y;x+CLCwnV^jj^1l;YRP(uEM2K0Yw2 z48Ze&ML*SV>n+~_WJB#dQ=&`!kX8gCpgYO1_Ut8I<^|zKqXCGnVnN4!SsUI+KgD2H z^&zzo-~6d4)Y_MCGo4zP!>kIpX2CP?NyC3wTf+_W_!+|$cWPA(!*zBx%4W`IT?$Ps zRb{7lgS-=ut`%pKWqPE`@W}Y=Hvq@q?_ana;XWh&WOGfP=0#@0A9{AV^^WL{m9eg1 zr^7P`b~TGWp#k9)f}0=E(d&=mbS+DHQ0YvMdc@6o^e`(HljK}A%&#@4?G?wG%~7GY zok@QB^(^>tph%upZw+9dJIX@rrbN+I9T7ig23j3?>uE|`>%+BilOM#T+2>44hr)%k zDSN@&U7cD^RyES7ZN57jIKBPjp@V~kVU1%9aEVIk*DY`=-XVd&O$km4SNnagnoXpV zdR?uL^Jk;=zMKfy?|K&$dfE4WkSeSQ)!Mo?C?K<8-|U!{(-rv_Tba@x_HsL%s=44- zlP4W-W8{(@kVhFg3t6~~o83~bhj-@C9uXDY&iw{N4xY9aRe4|(1cI`x#9(}tqfA7@1CskdcMjy)qz zvsO}nr#vY<{#LX9jR$C?B*DW`U0AGkuy&+|8XFHtAbMACAoy8*ag4^b_1$34(XrN)pLxg`RU!mTcv%PUS z;YV($1fG-jo$#s~We>QoaANTi35l#a7V2mbXR9^^&Q8t*ujP-MQ}J@BKJbd^O}r|b zQ)_Qqe?&NoM9kTn7Hu4;1nQX=JQ!!5T^6!5Uj*=%Ad=;CeM-b)mLx@fRmb$q^M1RV z8f~7O9z~8CXUGkW25{Po|lJcJVtKmr*k`#>a(Vz>t6U$OERFWRO$BbRz2%kN6 z`OroPM&QiYr$RggvTcqd=KDve1$g~t$^%=62TEp)2QReK;91`g= oMJW}3n-u3y^n6F15>9kg?`a2kE7Gq4zkfhTBTK_-1p2}M0We#i)c^nh literal 0 HcmV?d00001 diff --git a/test/fixtures/controller.line/borderColor/scriptable.js b/test/fixtures/controller.line/borderColor/scriptable.js new file mode 100644 index 00000000000..04b12360647 --- /dev/null +++ b/test/fixtures/controller.line/borderColor/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], + pointBorderColor: 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: { + 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 HcmV?d00001 diff --git a/test/fixtures/controller.line/borderColor/value.js b/test/fixtures/controller.line/borderColor/value.js new file mode 100644 index 00000000000..84e4d6adfb9 --- /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 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 literal 0 HcmV?d00001 diff --git a/test/fixtures/controller.line/borderWidth/scriptable.js b/test/fixtures/controller.line/borderWidth/scriptable.js new file mode 100644 index 00000000000..a40ac1cb0a4 --- /dev/null +++ b/test/fixtures/controller.line/borderWidth/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], + pointBorderColor: '#0000ff', + pointBorderWidth: function(ctx) { + var value = ctx.dataset.data[ctx.dataIndex] || 0; + return value > 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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 literal 0 HcmV?d00001 diff --git a/test/fixtures/controller.line/borderWidth/value.js b/test/fixtures/controller.line/borderWidth/value.js new file mode 100644 index 00000000000..291f422e527 --- /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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 Date: Wed, 9 Jan 2019 20:13:01 -0500 Subject: [PATCH 03/14] Handle radius correctly --- src/controllers/controller.line.js | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/src/controllers/controller.line.js b/src/controllers/controller.line.js index e5e9fb99947..c4d3f0d5fd8 100644 --- a/src/controllers/controller.line.js +++ b/src/controllers/controller.line.js @@ -114,14 +114,6 @@ module.exports = DatasetController.extend({ var xScale = me.getScaleForId(meta.xAxisID); 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; - } - // Do this after the compatibility code above var options = me._resolveElementOptions(point, index); @@ -164,7 +156,6 @@ module.exports = DatasetController.extend({ var dataset = datasets[me.index]; var custom = point.custom || {}; var options = chart.options.elements.point; - var data = dataset.data[index]; var values = {}; var i, ilen, key; @@ -201,14 +192,6 @@ module.exports = DatasetController.extend({ ], context, index); } - // Custom radius resolution - values.radius = resolve([ - custom.radius, - data ? data.r : undefined, - dataset.radius, - options.radius - ], context, index); - return values; }, From e6baf8fc1b032e2e350537815f0ce91b58b4b077 Mon Sep 17 00:00:00 2001 From: etimberg Date: Wed, 9 Jan 2019 20:35:02 -0500 Subject: [PATCH 04/14] Tests for scriptable pointStyle, rotation, and radius options --- .../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 18 files changed, 475 insertions(+) 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/test/fixtures/controller.line/pointStyle/indexable.js b/test/fixtures/controller.line/pointStyle/indexable.js new file mode 100644 index 00000000000..50808708615 --- /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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%0Dn9l74!I6~M&b4(Olh{5 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 a{H>s6is#wO_oV*?0lHd-nnmi^7ykpyM%s7) literal 0 HcmV?d00001 diff --git a/test/fixtures/controller.line/pointStyle/scriptable.js b/test/fixtures/controller.line/pointStyle/scriptable.js new file mode 100644 index 00000000000..c2a48ce8249 --- /dev/null +++ b/test/fixtures/controller.line/pointStyle/scriptable.js @@ -0,0 +1,65 @@ +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: function(ctx) { + var value = ctx.dataset.data[ctx.dataIndex] || 0; + return value > 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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
    tbkOl~m{-yq~Y49p4UYdRE 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 literal 0 HcmV?d00001 diff --git a/test/fixtures/controller.line/pointStyle/value.js b/test/fixtures/controller.line/pointStyle/value.js new file mode 100644 index 00000000000..3e2f2cf58ad --- /dev/null +++ b/test/fixtures/controller.line/pointStyle/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: '#ff0000', + pointStyle: 'star', + }, + { + // option in element (fallback) + data: [4, -5, -10, null, 10, 5], + } + ] + }, + options: { + legend: false, + title: false, + elements: { + line: { + fill: false, + }, + point: { + backgroundColor: '#00ff00', + pointStyle: 'rect', + radius: 10, + } + }, + scales: { + xAxes: [{display: false}], + yAxes: [{display: false}] + } + } + }, + options: { + canvas: { + height: 256, + width: 512 + } + } +}; diff --git a/test/fixtures/controller.line/pointStyle/value.png b/test/fixtures/controller.line/pointStyle/value.png new file mode 100644 index 0000000000000000000000000000000000000000..c8c488166a4f8951f474d8932ad9b9c892acc034 GIT binary patch literal 13607 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 MGz`@%Rc*rm5Ad=2w*UYD literal 0 HcmV?d00001 diff --git a/test/fixtures/controller.line/radius/indexable.js b/test/fixtures/controller.line/radius/indexable.js new file mode 100644 index 00000000000..f2b70d385d8 --- /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 HcmV?d00001 diff --git a/test/fixtures/controller.line/rotation/indexable.js b/test/fixtures/controller.line/rotation/indexable.js new file mode 100644 index 00000000000..4aea90a873f --- /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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 U*}kPq$me-LHnlRzH=;!UAMsQsRR910 literal 0 HcmV?d00001 diff --git a/test/fixtures/controller.line/rotation/scriptable.js b/test/fixtures/controller.line/rotation/scriptable.js new file mode 100644 index 00000000000..5a130f29e87 --- /dev/null +++ b/test/fixtures/controller.line/rotation/scriptable.js @@ -0,0 +1,62 @@ +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', + pointRotation: function(ctx) { + var value = ctx.dataset.data[ctx.dataIndex] || 0; + return value > 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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 KUA`?X;r{?FcgqX_ literal 0 HcmV?d00001 From 6e1d8ba4c81d94a5f62a4f7cde6d42f09268c34d Mon Sep 17 00:00:00 2001 From: etimberg Date: Wed, 9 Jan 2019 21:09:12 -0500 Subject: [PATCH 05/14] Initial doc conversion for line charts --- docs/charts/line.md | 106 ++++++++++++++++++++++++++++++++------------ 1 file changed, 77 insertions(+), 29 deletions(-) diff --git a/docs/charts/line.md b/docs/charts/line.md index 5078a2604de..4bb96a71ed9 100644 --- a/docs/charts/line.md +++ b/docs/charts/line.md @@ -43,35 +43,83 @@ The line chart allows a number of properties to be specified for each dataset. T 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`](#styling) | [`Color`](../general/colors.md) | - | - | `'rgba(0,0,0,0.1)'` +| [`borderCapStyle`](#styling) | `String` | - | - | `'butt'` +| [`borderColor`](#styling) | [`Color`](../general/colors.md) | - | - | `'rgba(0,0,0,0.1)'` +| [`borderDash`](#styling) | `Number[]` | - | - | `[]` +| [`borderDashOffset`](#styling) | `Number` | - | - | `0` +| [`borderJoinStyle`](#styling) | `String` | - | - | `'miter'` +| [`borderWidth`](#styling) | `Number` | - | - | `0` +| [`cubicInterpolationMode`](#cubicInterpolationMode) | `String` | - | - | `''` +| [`fill`](#styling) | `Boolean/String` | No | No | `true` +| [`label`](#general) | `String` | - | - | `''` +| [`lineTension`](#styling) | `Number` | - | - | `0.4` +| [`pointBackgroundColor`](#styling) | `Color/Color[]` | Yes | Yes | `'rgba(0,0,0,0.1)'` +| [`pointBorderColor`](#styling) | `Color/Color[]` | Yes | Yes | `'rgba(0,0,0,0.1)'` +| [`pointBorderWidth`](#styling) | `Number/Number[]` | Yes | Yes | `1` +| [`pointRadius`](#styling) | `Number/Number[]` | Yes | Yes | `3` +| [`pointStyle`](#styling) | `String/String[]/Image/Image[]` | Yes | Yes | `'circle'` +| [`pointRotation`](#styling) | `Number/Number[]` | Yes | Yes | `1` +| [`pointHitRadius`](#styling) | `Number/Number[]` | Yes | Yes | `1` +| [`steppedLine`](#stepped-line) | `Boolean/String` | - | - | `false` +| [`xAxisID`](#general) | `String` | - | - | first x axis +| [`yAxisID`](#general) | `String` | - | - | first y axis +| [`pointHoverBackgroundColor`](#interactions) | `Color/Color[]` | Yes | Yes | `undefined` +| [`pointHoverBorderColor`](#interactions) | `Color/Color[]` | Yes | Yes | `undefined` +| [`pointHoverBorderWidth`](#interactions) | `Number/Number[]` | Yes | Yes | `undefined` +| [`pointHoverRadius`](#interactions) | `Number/Number[]` | Yes | Yes | `undefined` +| [`showLine`](#general) | `Boolean` | - | - | `undefined` +| [`spanGaps`](#general) | `Boolean` | - | - | `false` + +### 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. + +### Styling + +The style of the line and each point 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. +| `pointBackgroundColor` | The fill color for points. +| `pointBorderColor` | The border color for points. +| `pointBorderWidth` | The width of the point border in pixels. +| `pointRadius` | The radius of the point shape. If set to 0, the point is not rendered. +| `pointStyle` | Style of the point. [more...](../configuration/elements#point-styles) +| `pointRotation` | The rotation of the point in degrees. +| `pointHitRadius` | The pixel size of the non-displayed point that reacts to mouse events. +| `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) or [`'elements.point.*`](../configuration/elements.md#point-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. + +All these values, if `undefined`, fallback to the associated [`elements.point.*`](../configuration/elements.md#point-configuration) options. ### cubicInterpolationMode The following interpolation modes are supported. From d9e6546055c1559f91bde79279634ef631c4ca0e Mon Sep 17 00:00:00 2001 From: etimberg Date: Wed, 9 Jan 2019 21:13:10 -0500 Subject: [PATCH 06/14] Fill is not scriptable --- docs/charts/line.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/charts/line.md b/docs/charts/line.md index 4bb96a71ed9..318ec4418ac 100644 --- a/docs/charts/line.md +++ b/docs/charts/line.md @@ -53,7 +53,7 @@ All point* properties can be specified as an array. If these are set to an array | [`borderJoinStyle`](#styling) | `String` | - | - | `'miter'` | [`borderWidth`](#styling) | `Number` | - | - | `0` | [`cubicInterpolationMode`](#cubicInterpolationMode) | `String` | - | - | `''` -| [`fill`](#styling) | `Boolean/String` | No | No | `true` +| [`fill`](#styling) | `Boolean/String` | - | - | `true` | [`label`](#general) | `String` | - | - | `''` | [`lineTension`](#styling) | `Number` | - | - | `0.4` | [`pointBackgroundColor`](#styling) | `Color/Color[]` | Yes | Yes | `'rgba(0,0,0,0.1)'` From ab01ac07fff9895f8509de5f496da378cdb9a2a7 Mon Sep 17 00:00:00 2001 From: etimberg Date: Thu, 10 Jan 2019 07:26:06 -0500 Subject: [PATCH 07/14] Remove unneeded text in docs & incorrect comment in line controller --- docs/charts/line.md | 2 -- src/controllers/controller.line.js | 1 - 2 files changed, 3 deletions(-) diff --git a/docs/charts/line.md b/docs/charts/line.md index 318ec4418ac..0ac8284f4a2 100644 --- a/docs/charts/line.md +++ b/docs/charts/line.md @@ -41,8 +41,6 @@ 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 | [Scriptable](../general/options.md#scriptable-options) | [Indexable](../general/options.md#indexable-options) | Default | ---- | ---- | :----: | :----: | ---- | [`backgroundColor`](#styling) | [`Color`](../general/colors.md) | - | - | `'rgba(0,0,0,0.1)'` diff --git a/src/controllers/controller.line.js b/src/controllers/controller.line.js index c4d3f0d5fd8..bd3a18ec24f 100644 --- a/src/controllers/controller.line.js +++ b/src/controllers/controller.line.js @@ -55,7 +55,6 @@ module.exports = DatasetController.extend({ if (showLine) { custom = line.custom || {}; - // Compatibility: If the properties are defined with only the old name, use those values if ((dataset.tension !== undefined) && (dataset.lineTension === undefined)) { dataset.lineTension = dataset.tension; } From 14ddec48f90f50f14d366dfb71068e5d1ca61aa8 Mon Sep 17 00:00:00 2001 From: etimberg Date: Thu, 10 Jan 2019 18:45:26 -0500 Subject: [PATCH 08/14] Removed the incorrect comment --- src/controllers/controller.line.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/controllers/controller.line.js b/src/controllers/controller.line.js index bd3a18ec24f..5cd49f9c228 100644 --- a/src/controllers/controller.line.js +++ b/src/controllers/controller.line.js @@ -55,6 +55,7 @@ module.exports = DatasetController.extend({ if (showLine) { custom = line.custom || {}; + // Compatibility: If the properties are defined with only the old name, use those values if ((dataset.tension !== undefined) && (dataset.lineTension === undefined)) { dataset.lineTension = dataset.tension; } @@ -113,7 +114,6 @@ module.exports = DatasetController.extend({ var xScale = me.getScaleForId(meta.xAxisID); var x, y; - // Do this after the compatibility code above var options = me._resolveElementOptions(point, index); x = xScale.getPixelForValue(typeof value === 'object' ? value : NaN, index, datasetIndex); From b9008deb25bc2e1b0b089e304c369bd9cfe9c4f7 Mon Sep 17 00:00:00 2001 From: etimberg Date: Thu, 10 Jan 2019 18:45:34 -0500 Subject: [PATCH 09/14] Update line document datatypes --- docs/charts/line.md | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/docs/charts/line.md b/docs/charts/line.md index 0ac8284f4a2..5054a11555a 100644 --- a/docs/charts/line.md +++ b/docs/charts/line.md @@ -54,20 +54,20 @@ The line chart allows a number of properties to be specified for each dataset. T | [`fill`](#styling) | `Boolean/String` | - | - | `true` | [`label`](#general) | `String` | - | - | `''` | [`lineTension`](#styling) | `Number` | - | - | `0.4` -| [`pointBackgroundColor`](#styling) | `Color/Color[]` | Yes | Yes | `'rgba(0,0,0,0.1)'` -| [`pointBorderColor`](#styling) | `Color/Color[]` | Yes | Yes | `'rgba(0,0,0,0.1)'` -| [`pointBorderWidth`](#styling) | `Number/Number[]` | Yes | Yes | `1` -| [`pointRadius`](#styling) | `Number/Number[]` | Yes | Yes | `3` -| [`pointStyle`](#styling) | `String/String[]/Image/Image[]` | Yes | Yes | `'circle'` -| [`pointRotation`](#styling) | `Number/Number[]` | Yes | Yes | `1` -| [`pointHitRadius`](#styling) | `Number/Number[]` | Yes | Yes | `1` +| [`pointBackgroundColor`](#styling) | `Color` | Yes | Yes | `'rgba(0,0,0,0.1)'` +| [`pointBorderColor`](#styling) | `Color` | Yes | Yes | `'rgba(0,0,0,0.1)'` +| [`pointBorderWidth`](#styling) | `Number` | Yes | Yes | `1` +| [`pointRadius`](#styling) | `Number` | Yes | Yes | `3` +| [`pointStyle`](#styling) | `String/Image` | Yes | Yes | `'circle'` +| [`pointRotation`](#styling) | `Number` | Yes | Yes | `1` +| [`pointHitRadius`](#styling) | `Number` | Yes | Yes | `1` | [`steppedLine`](#stepped-line) | `Boolean/String` | - | - | `false` | [`xAxisID`](#general) | `String` | - | - | first x axis | [`yAxisID`](#general) | `String` | - | - | first y axis -| [`pointHoverBackgroundColor`](#interactions) | `Color/Color[]` | Yes | Yes | `undefined` -| [`pointHoverBorderColor`](#interactions) | `Color/Color[]` | Yes | Yes | `undefined` -| [`pointHoverBorderWidth`](#interactions) | `Number/Number[]` | Yes | Yes | `undefined` -| [`pointHoverRadius`](#interactions) | `Number/Number[]` | Yes | Yes | `undefined` +| [`pointHoverBackgroundColor`](#interactions) | `Color` | Yes | Yes | `undefined` +| [`pointHoverBorderColor`](#interactions) | `Color` | Yes | Yes | `undefined` +| [`pointHoverBorderWidth`](#interactions) | `Number` | Yes | Yes | `undefined` +| [`pointHoverRadius`](#interactions) | `Number` | Yes | Yes | `undefined` | [`showLine`](#general) | `Boolean` | - | - | `undefined` | [`spanGaps`](#general) | `Boolean` | - | - | `false` From 51fccab96051e55ea47547afce1a024a1a687042 Mon Sep 17 00:00:00 2001 From: etimberg Date: Thu, 10 Jan 2019 18:48:42 -0500 Subject: [PATCH 10/14] Fix a typo in the scriptable options docs --- docs/general/options.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/general/options.md b/docs/general/options.md index e05cd33ee4a..37f15461302 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: From 99fcb01d170a9c285c6abea42619998f7ffe71f6 Mon Sep 17 00:00:00 2001 From: etimberg Date: Fri, 11 Jan 2019 07:55:36 -0500 Subject: [PATCH 11/14] update docs to split tables --- docs/charts/line.md | 67 +++++++++++++++++++++++---------------------- 1 file changed, 35 insertions(+), 32 deletions(-) diff --git a/docs/charts/line.md b/docs/charts/line.md index 5054a11555a..11af3a19a62 100644 --- a/docs/charts/line.md +++ b/docs/charts/line.md @@ -43,33 +43,33 @@ The line chart allows a number of properties to be specified for each dataset. T | Name | Type | [Scriptable](../general/options.md#scriptable-options) | [Indexable](../general/options.md#indexable-options) | Default | ---- | ---- | :----: | :----: | ---- -| [`backgroundColor`](#styling) | [`Color`](../general/colors.md) | - | - | `'rgba(0,0,0,0.1)'` -| [`borderCapStyle`](#styling) | `String` | - | - | `'butt'` -| [`borderColor`](#styling) | [`Color`](../general/colors.md) | - | - | `'rgba(0,0,0,0.1)'` -| [`borderDash`](#styling) | `Number[]` | - | - | `[]` -| [`borderDashOffset`](#styling) | `Number` | - | - | `0` -| [`borderJoinStyle`](#styling) | `String` | - | - | `'miter'` -| [`borderWidth`](#styling) | `Number` | - | - | `0` +| [`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`](#styling) | `Boolean/String` | - | - | `true` +| [`fill`](#line-styling) | `Boolean/String` | - | - | `true` | [`label`](#general) | `String` | - | - | `''` -| [`lineTension`](#styling) | `Number` | - | - | `0.4` -| [`pointBackgroundColor`](#styling) | `Color` | Yes | Yes | `'rgba(0,0,0,0.1)'` -| [`pointBorderColor`](#styling) | `Color` | Yes | Yes | `'rgba(0,0,0,0.1)'` -| [`pointBorderWidth`](#styling) | `Number` | Yes | Yes | `1` -| [`pointRadius`](#styling) | `Number` | Yes | Yes | `3` -| [`pointStyle`](#styling) | `String/Image` | Yes | Yes | `'circle'` -| [`pointRotation`](#styling) | `Number` | Yes | Yes | `1` -| [`pointHitRadius`](#styling) | `Number` | Yes | Yes | `1` -| [`steppedLine`](#stepped-line) | `Boolean/String` | - | - | `false` -| [`xAxisID`](#general) | `String` | - | - | first x axis -| [`yAxisID`](#general) | `String` | - | - | first y axis +| [`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 @@ -79,9 +79,23 @@ The line chart allows a number of properties to be specified for each dataset. T | `xAxisID` | The ID of the x axis to plot this dataset on. | `yAxisID` | The ID of the y axis to plot this dataset on. -### Styling +### Point Styling -The style of the line and each point can be controlled with the following properties: +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) + +### Line Styling + +The style of the line can be controlled with the following properties: | Name | Description | ---- | ---- @@ -94,18 +108,9 @@ The style of the line and each point can be controlled with the following proper | `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. -| `pointBackgroundColor` | The fill color for points. -| `pointBorderColor` | The border color for points. -| `pointBorderWidth` | The width of the point border in pixels. -| `pointRadius` | The radius of the point shape. If set to 0, the point is not rendered. -| `pointStyle` | Style of the point. [more...](../configuration/elements#point-styles) -| `pointRotation` | The rotation of the point in degrees. -| `pointHitRadius` | The pixel size of the non-displayed point that reacts to mouse events. | `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) or [`'elements.point.*`](../configuration/elements.md#point-configuration) options. - ### Interactions The interaction with each point can be controlled with the following properties: @@ -117,8 +122,6 @@ The interaction with each point can be controlled with the following properties: | `pointHoverBorderWidth` | Border width of point when hovered. | `pointHoverRadius` | The radius of the point when hovered. -All these values, if `undefined`, fallback to the associated [`elements.point.*`](../configuration/elements.md#point-configuration) options. - ### cubicInterpolationMode The following interpolation modes are supported. * 'default' From f4ef595f1e743888af955d7023dcebe7eb3921f0 Mon Sep 17 00:00:00 2001 From: etimberg Date: Fri, 11 Jan 2019 19:17:00 -0500 Subject: [PATCH 12/14] Use local var for better minification --- src/controllers/controller.line.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/controllers/controller.line.js b/src/controllers/controller.line.js index 5cd49f9c228..d68c0a92802 100644 --- a/src/controllers/controller.line.js +++ b/src/controllers/controller.line.js @@ -328,9 +328,9 @@ module.exports = DatasetController.extend({ radius: model.radius }; - model.backgroundColor = helpers.valueOrDefault(options.hoverBackgroundColor, helpers.getHoverColor(options.backgroundColor)); - model.borderColor = helpers.valueOrDefault(options.hoverBorderColor, helpers.getHoverColor(options.borderColor)); - model.borderWidth = helpers.valueOrDefault(options.hoverBorderWidth, options.borderWidth); - model.radius = helpers.valueOrDefault(options.hoverRadius, options.radius); + model.backgroundColor = valueOrDefault(options.hoverBackgroundColor, helpers.getHoverColor(options.backgroundColor)); + model.borderColor = valueOrDefault(options.hoverBorderColor, helpers.getHoverColor(options.borderColor)); + model.borderWidth = valueOrDefault(options.hoverBorderWidth, options.borderWidth); + model.radius = valueOrDefault(options.hoverRadius, options.radius); }, }); From 3bc797029a2775fa3d5730852633f94892dfe60d Mon Sep 17 00:00:00 2001 From: etimberg Date: Fri, 11 Jan 2019 19:27:49 -0500 Subject: [PATCH 13/14] More minification --- src/controllers/controller.line.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/controllers/controller.line.js b/src/controllers/controller.line.js index d68c0a92802..e57d5e2ffb2 100644 --- a/src/controllers/controller.line.js +++ b/src/controllers/controller.line.js @@ -320,6 +320,7 @@ module.exports = DatasetController.extend({ setHoverStyle: function(point) { var model = point._model; var options = point._options; + var getHoverColor = helpers.getHoverColor; point.$previousStyle = { backgroundColor: model.backgroundColor, @@ -328,8 +329,8 @@ module.exports = DatasetController.extend({ radius: model.radius }; - model.backgroundColor = valueOrDefault(options.hoverBackgroundColor, helpers.getHoverColor(options.backgroundColor)); - model.borderColor = valueOrDefault(options.hoverBorderColor, helpers.getHoverColor(options.borderColor)); + 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); }, From 149a588f73df3834ba2a708f2e6cdcc1689fb012 Mon Sep 17 00:00:00 2001 From: etimberg Date: Sat, 12 Jan 2019 08:05:00 -0500 Subject: [PATCH 14/14] Add note about how option fallback occurs --- docs/charts/line.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/charts/line.md b/docs/charts/line.md index 11af3a19a62..4783c551470 100644 --- a/docs/charts/line.md +++ b/docs/charts/line.md @@ -93,6 +93,8 @@ The style of each point can be controlled with the following properties: | `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: @@ -111,6 +113,8 @@ The style of the line can be controlled with the following properties: | `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: