From f556b469352283176dfe9a5a61f1fc480f373452 Mon Sep 17 00:00:00 2001 From: Akihiko Kusanagi Date: Tue, 8 Jan 2019 11:34:42 +0800 Subject: [PATCH] Use helpers.options.resolve instead of helpers.options._fallback --- src/controllers/controller.bubble.js | 8 +- src/controllers/controller.doughnut.js | 18 ++--- src/controllers/controller.line.js | 103 ++++++++++-------------- src/controllers/controller.polarArea.js | 18 ++--- src/controllers/controller.radar.js | 46 +++++------ src/core/core.datasetController.js | 8 +- src/core/core.scale.js | 5 +- src/elements/element.line.js | 5 +- src/helpers/helpers.options.js | 17 ---- src/scales/scale.logarithmic.js | 22 ++--- src/scales/scale.radialLinear.js | 6 +- test/specs/helpers.options.tests.js | 25 ------ 12 files changed, 109 insertions(+), 172 deletions(-) diff --git a/src/controllers/controller.bubble.js b/src/controllers/controller.bubble.js index bf9912b2486..cd8a4eb9517 100644 --- a/src/controllers/controller.bubble.js +++ b/src/controllers/controller.bubble.js @@ -5,8 +5,6 @@ var defaults = require('../core/core.defaults'); var elements = require('../elements/index'); var helpers = require('../helpers/index'); -var valueOrDefault = helpers.valueOrDefault; - defaults._set('bubble', { hover: { mode: 'single' @@ -103,6 +101,8 @@ module.exports = DatasetController.extend({ setHoverStyle: function(point) { var model = point._model; var options = point._options; + var valueOrDefault = helpers.valueOrDefault; + var getHoverColor = helpers.getHoverColor; point.$previousStyle = { backgroundColor: model.backgroundColor, @@ -111,8 +111,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 = options.radius + options.hoverRadius; }, diff --git a/src/controllers/controller.doughnut.js b/src/controllers/controller.doughnut.js index 1f83c9d384b..e634e4baff6 100644 --- a/src/controllers/controller.doughnut.js +++ b/src/controllers/controller.doughnut.js @@ -5,7 +5,7 @@ var defaults = require('../core/core.defaults'); var elements = require('../elements/index'); var helpers = require('../helpers/index'); -var valueAtIndexOrDefault = helpers.valueAtIndexOrDefault; +var resolve = helpers.options.resolve; defaults._set('doughnut', { animation: { @@ -49,9 +49,9 @@ defaults._set('doughnut', { var arc = meta.data[i]; var custom = arc && arc.custom || {}; var arcOpts = chart.options.elements.arc; - var fill = custom.backgroundColor ? custom.backgroundColor : valueAtIndexOrDefault(ds.backgroundColor, i, arcOpts.backgroundColor); - var stroke = custom.borderColor ? custom.borderColor : valueAtIndexOrDefault(ds.borderColor, i, arcOpts.borderColor); - var bw = !isNaN(custom.borderWidth) ? custom.borderWidth : valueAtIndexOrDefault(ds.borderWidth, i, arcOpts.borderWidth); + var fill = resolve([custom.backgroundColor, ds.backgroundColor, arcOpts.backgroundColor], undefined, i); + var stroke = resolve([custom.borderColor, ds.borderColor, arcOpts.borderColor], undefined, i); + var bw = resolve([custom.borderWidth, ds.borderWidth, arcOpts.borderWidth], undefined, i); return { text: label, @@ -228,7 +228,7 @@ module.exports = DatasetController.extend({ circumference: circumference, outerRadius: outerRadius, innerRadius: innerRadius, - label: valueAtIndexOrDefault(dataset.label, index, chart.data.labels[index]) + label: helpers.valueAtIndexOrDefault(dataset.label, index, chart.data.labels[index]) } }); @@ -325,10 +325,10 @@ module.exports = DatasetController.extend({ var options = me.chart.options.elements.arc; return { - backgroundColor: custom.backgroundColor ? custom.backgroundColor : valueAtIndexOrDefault(dataset.backgroundColor, index, options.backgroundColor), - borderColor: custom.borderColor ? custom.borderColor : valueAtIndexOrDefault(dataset.borderColor, index, options.borderColor), - borderWidth: !isNaN(custom.borderWidth) ? custom.borderWidth : valueAtIndexOrDefault(dataset.borderWidth, index, options.borderWidth), - borderAlign: custom.borderAlign ? custom.borderAlign : valueAtIndexOrDefault(dataset.borderAlign, index, options.borderAlign) + backgroundColor: resolve([custom.backgroundColor, dataset.backgroundColor, options.backgroundColor], undefined, index), + borderColor: resolve([custom.borderColor, dataset.borderColor, options.borderColor], undefined, index), + borderWidth: resolve([custom.borderWidth, dataset.borderWidth, options.borderWidth], undefined, index), + borderAlign: resolve([custom.borderAlign, dataset.borderAlign, options.borderAlign], undefined, index) }; } }); diff --git a/src/controllers/controller.line.js b/src/controllers/controller.line.js index 90e0a8e6890..3a5f21629ae 100644 --- a/src/controllers/controller.line.js +++ b/src/controllers/controller.line.js @@ -6,9 +6,7 @@ var elements = require('../elements/index'); var helpers = require('../helpers/index'); var valueOrDefault = helpers.valueOrDefault; -var valueAtIndexOrDefault = helpers.valueAtIndexOrDefault; -var fallback = helpers.options._fallback; -var isPointInArea = helpers.canvas._isPointInArea; +var resolve = helpers.options.resolve; defaults._set('line', { showLines: true, @@ -73,17 +71,17 @@ module.exports = DatasetController.extend({ // to https://github.com/chartjs/Chart.js/issues/2435#issuecomment-216718158 // This option gives lines the ability to span gaps spanGaps: valueOrDefault(dataset.spanGaps, options.spanGaps), - tension: fallback(custom.tension, dataset.lineTension, lineElementOptions.tension), - backgroundColor: fallback(custom.backgroundColor, dataset.backgroundColor, lineElementOptions.backgroundColor), - borderWidth: fallback(custom.borderWidth, dataset.borderWidth, lineElementOptions.borderWidth), - borderColor: fallback(custom.borderColor, dataset.borderColor, lineElementOptions.borderColor), - borderCapStyle: fallback(custom.borderCapStyle, dataset.borderCapStyle, lineElementOptions.borderCapStyle), - borderDash: fallback(custom.borderDash, dataset.borderDash, lineElementOptions.borderDash), - borderDashOffset: fallback(custom.borderDashOffset, dataset.borderDashOffset, lineElementOptions.borderDashOffset), - borderJoinStyle: fallback(custom.borderJoinStyle, dataset.borderJoinStyle, lineElementOptions.borderJoinStyle), - fill: fallback(custom.fill, dataset.fill, lineElementOptions.fill), - steppedLine: fallback(custom.steppedLine, dataset.steppedLine, lineElementOptions.stepped), - cubicInterpolationMode: fallback(custom.cubicInterpolationMode, dataset.cubicInterpolationMode, lineElementOptions.cubicInterpolationMode), + tension: resolve([custom.tension, dataset.lineTension, lineElementOptions.tension]), + backgroundColor: resolve([custom.backgroundColor, dataset.backgroundColor, lineElementOptions.backgroundColor]), + borderWidth: resolve([custom.borderWidth, dataset.borderWidth, lineElementOptions.borderWidth]), + borderColor: resolve([custom.borderColor, dataset.borderColor, lineElementOptions.borderColor]), + borderCapStyle: resolve([custom.borderCapStyle, dataset.borderCapStyle, lineElementOptions.borderCapStyle]), + borderDash: resolve([custom.borderDash, dataset.borderDash, lineElementOptions.borderDash]), + borderDashOffset: resolve([custom.borderDashOffset, dataset.borderDashOffset, lineElementOptions.borderDashOffset]), + borderJoinStyle: resolve([custom.borderJoinStyle, dataset.borderJoinStyle, lineElementOptions.borderJoinStyle]), + fill: resolve([custom.fill, dataset.fill, lineElementOptions.fill]), + steppedLine: resolve([custom.steppedLine, dataset.steppedLine, lineElementOptions.stepped]), + cubicInterpolationMode: resolve([custom.cubicInterpolationMode, dataset.cubicInterpolationMode, lineElementOptions.cubicInterpolationMode]), }; line.pivot(); @@ -105,64 +103,49 @@ module.exports = DatasetController.extend({ }, getPointBackgroundColor: function(point, index) { - var backgroundColor = this.chart.options.elements.point.backgroundColor; var dataset = this.getDataset(); var custom = point.custom || {}; - if (custom.backgroundColor) { - backgroundColor = custom.backgroundColor; - } else if (dataset.pointBackgroundColor) { - backgroundColor = valueAtIndexOrDefault(dataset.pointBackgroundColor, index, backgroundColor); - } else if (dataset.backgroundColor) { - backgroundColor = dataset.backgroundColor; - } - - return backgroundColor; + return resolve([ + custom.backgroundColor, + dataset.pointBackgroundColor, + dataset.backgroundColor, + this.chart.options.elements.point.backgroundColor + ], undefined, index); }, getPointBorderColor: function(point, index) { - var borderColor = this.chart.options.elements.point.borderColor; var dataset = this.getDataset(); var custom = point.custom || {}; - if (custom.borderColor) { - borderColor = custom.borderColor; - } else if (dataset.pointBorderColor) { - borderColor = valueAtIndexOrDefault(dataset.pointBorderColor, index, borderColor); - } else if (dataset.borderColor) { - borderColor = dataset.borderColor; - } - - return borderColor; + return resolve([ + custom.borderColor, + dataset.pointBorderColor, + dataset.borderColor, + this.chart.options.elements.point.borderColor + ], undefined, index); }, getPointBorderWidth: function(point, index) { - var borderWidth = this.chart.options.elements.point.borderWidth; var dataset = this.getDataset(); var custom = point.custom || {}; - if (!isNaN(custom.borderWidth)) { - borderWidth = custom.borderWidth; - } else if (!isNaN(dataset.pointBorderWidth) || helpers.isArray(dataset.pointBorderWidth)) { - borderWidth = valueAtIndexOrDefault(dataset.pointBorderWidth, index, borderWidth); - } else if (!isNaN(dataset.borderWidth)) { - borderWidth = dataset.borderWidth; - } - - return borderWidth; + return resolve([ + custom.borderWidth, + dataset.pointBorderWidth, + dataset.borderWidth, + this.chart.options.elements.point.borderWidth + ], undefined, index); }, getPointRotation: function(point, index) { - var pointRotation = this.chart.options.elements.point.rotation; - var dataset = this.getDataset(); var custom = point.custom || {}; - if (!isNaN(custom.rotation)) { - pointRotation = custom.rotation; - } else if (!isNaN(dataset.pointRotation) || helpers.isArray(dataset.pointRotation)) { - pointRotation = valueAtIndexOrDefault(dataset.pointRotation, index, pointRotation); - } - return pointRotation; + return resolve([ + custom.rotation, + this.getDataset().pointRotation, + this.chart.options.elements.point.rotation + ], undefined, index); }, updateElement: function(point, index, reset) { @@ -200,8 +183,8 @@ module.exports = DatasetController.extend({ y: y, skip: custom.skip || isNaN(x) || isNaN(y), // Appearance - radius: !isNaN(custom.radius) ? custom.radius : valueAtIndexOrDefault(dataset.pointRadius, index, pointOptions.radius), - pointStyle: custom.pointStyle || valueAtIndexOrDefault(dataset.pointStyle, index, pointOptions.pointStyle), + 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), @@ -209,7 +192,7 @@ module.exports = DatasetController.extend({ tension: meta.dataset._model ? meta.dataset._model.tension : 0, steppedLine: meta.dataset._model ? meta.dataset._model.steppedLine : false, // Tooltip - hitRadius: !isNaN(custom.hitRadius) ? custom.hitRadius : valueAtIndexOrDefault(dataset.pointHitRadius, index, pointOptions.hitRadius) + hitRadius: resolve([custom.hitRadius, dataset.pointHitRadius, pointOptions.hitRadius], undefined, index) }; }, @@ -253,6 +236,7 @@ module.exports = DatasetController.extend({ var lineModel = meta.dataset._model; var area = chart.chartArea; var points = meta.data || []; + var isPointInArea = helpers.canvas._isPointInArea; var i, ilen, point, model, controlPoints; // Only consider points that are drawn in case the spanGaps option is used @@ -339,6 +323,7 @@ module.exports = DatasetController.extend({ var index = element._index; var custom = element.custom || {}; var model = element._model; + var getHoverColor = helpers.getHoverColor; element.$previousStyle = { backgroundColor: model.backgroundColor, @@ -347,9 +332,9 @@ module.exports = DatasetController.extend({ radius: model.radius }; - model.backgroundColor = custom.hoverBackgroundColor || valueAtIndexOrDefault(dataset.pointHoverBackgroundColor, index, helpers.getHoverColor(model.backgroundColor)); - model.borderColor = custom.hoverBorderColor || valueAtIndexOrDefault(dataset.pointHoverBorderColor, index, helpers.getHoverColor(model.borderColor)); - model.borderWidth = !isNaN(custom.hoverBorderWidth) ? custom.hoverBorderWidth : valueAtIndexOrDefault(dataset.pointHoverBorderWidth, index, model.borderWidth); - model.radius = !isNaN(custom.hoverRadius) ? custom.hoverRadius : valueAtIndexOrDefault(dataset.pointHoverRadius, index, this.chart.options.elements.point.hoverRadius); + 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); } }); diff --git a/src/controllers/controller.polarArea.js b/src/controllers/controller.polarArea.js index 570ea7d88d8..03b43814162 100644 --- a/src/controllers/controller.polarArea.js +++ b/src/controllers/controller.polarArea.js @@ -5,7 +5,7 @@ var defaults = require('../core/core.defaults'); var elements = require('../elements/index'); var helpers = require('../helpers/index'); -var valueAtIndexOrDefault = helpers.valueAtIndexOrDefault; +var resolve = helpers.options.resolve; defaults._set('polarArea', { scale: { @@ -63,9 +63,9 @@ defaults._set('polarArea', { var arc = meta.data[i]; var custom = arc.custom || {}; var arcOpts = chart.options.elements.arc; - var fill = custom.backgroundColor || valueAtIndexOrDefault(ds.backgroundColor, i, arcOpts.backgroundColor); - var stroke = custom.borderColor || valueAtIndexOrDefault(ds.borderColor, i, arcOpts.borderColor); - var bw = !isNaN(custom.borderWidth) ? custom.borderWidth : valueAtIndexOrDefault(ds.borderWidth, i, arcOpts.borderWidth); + var fill = resolve([custom.backgroundColor, ds.backgroundColor, arcOpts.backgroundColor], undefined, i); + var stroke = resolve([custom.borderColor, ds.borderColor, arcOpts.borderColor], undefined, i); + var bw = resolve([custom.borderWidth, ds.borderWidth, arcOpts.borderWidth], undefined, i); return { text: label, @@ -193,7 +193,7 @@ module.exports = DatasetController.extend({ outerRadius: reset ? resetRadius : distance, startAngle: reset && animationOpts.animateRotate ? datasetStartAngle : startAngle, endAngle: reset && animationOpts.animateRotate ? datasetStartAngle : endAngle, - label: valueAtIndexOrDefault(labels, index, labels[index]) + label: helpers.valueAtIndexOrDefault(labels, index, labels[index]) } }); @@ -202,10 +202,10 @@ module.exports = DatasetController.extend({ var custom = arc.custom || {}; var model = arc._model; - model.backgroundColor = custom.backgroundColor || valueAtIndexOrDefault(dataset.backgroundColor, index, elementOpts.backgroundColor); - model.borderColor = custom.borderColor || valueAtIndexOrDefault(dataset.borderColor, index, elementOpts.borderColor); - model.borderWidth = !isNaN(custom.borderWidth) ? custom.borderWidth : valueAtIndexOrDefault(dataset.borderWidth, index, elementOpts.borderWidth); - model.borderAlign = custom.borderAlign || valueAtIndexOrDefault(dataset.borderAlign, index, elementOpts.borderAlign); + model.backgroundColor = resolve([custom.backgroundColor, dataset.backgroundColor, elementOpts.backgroundColor], undefined, index); + model.borderColor = resolve([custom.borderColor, dataset.borderColor, elementOpts.borderColor], undefined, index); + model.borderWidth = resolve([custom.borderWidth, dataset.borderWidth, elementOpts.borderWidth], undefined, index); + model.borderAlign = resolve([custom.borderAlign, dataset.borderAlign, elementOpts.borderAlign], undefined, index); arc.pivot(); }, diff --git a/src/controllers/controller.radar.js b/src/controllers/controller.radar.js index e7814cc4c84..500a40d3446 100644 --- a/src/controllers/controller.radar.js +++ b/src/controllers/controller.radar.js @@ -5,8 +5,7 @@ var defaults = require('../core/core.defaults'); var elements = require('../elements/index'); var helpers = require('../helpers/index'); -var valueAtIndexOrDefault = helpers.valueAtIndexOrDefault; -var fallback = helpers.options._fallback; +var resolve = helpers.options.resolve; defaults._set('radar', { scale: { @@ -53,15 +52,15 @@ module.exports = DatasetController.extend({ // Model _model: { // Appearance - tension: fallback(custom.tension, dataset.lineTension, lineElementOptions.tension), - backgroundColor: fallback(custom.backgroundColor, dataset.backgroundColor, lineElementOptions.backgroundColor), - borderWidth: fallback(custom.borderWidth, dataset.borderWidth, lineElementOptions.borderWidth), - borderColor: fallback(custom.borderColor, dataset.borderColor, lineElementOptions.borderColor), - fill: fallback(custom.fill, dataset.fill, lineElementOptions.fill), - borderCapStyle: fallback(custom.borderCapStyle, dataset.borderCapStyle, lineElementOptions.borderCapStyle), - borderDash: fallback(custom.borderDash, dataset.borderDash, lineElementOptions.borderDash), - borderDashOffset: fallback(custom.borderDashOffset, dataset.borderDashOffset, lineElementOptions.borderDashOffset), - borderJoinStyle: fallback(custom.borderJoinStyle, dataset.borderJoinStyle, lineElementOptions.borderJoinStyle), + tension: resolve([custom.tension, dataset.lineTension, lineElementOptions.tension]), + backgroundColor: resolve([custom.backgroundColor, dataset.backgroundColor, lineElementOptions.backgroundColor]), + borderWidth: resolve([custom.borderWidth, dataset.borderWidth, lineElementOptions.borderWidth]), + borderColor: resolve([custom.borderColor, dataset.borderColor, lineElementOptions.borderColor]), + fill: resolve([custom.fill, dataset.fill, lineElementOptions.fill]), + borderCapStyle: resolve([custom.borderCapStyle, dataset.borderCapStyle, lineElementOptions.borderCapStyle]), + borderDash: resolve([custom.borderDash, dataset.borderDash, lineElementOptions.borderDash]), + borderDashOffset: resolve([custom.borderDashOffset, dataset.borderDashOffset, lineElementOptions.borderDashOffset]), + borderJoinStyle: resolve([custom.borderJoinStyle, dataset.borderJoinStyle, lineElementOptions.borderJoinStyle]), } }); @@ -109,16 +108,16 @@ module.exports = DatasetController.extend({ y: reset ? scale.yCenter : pointPosition.y, // Appearance - tension: fallback(custom.tension, dataset.lineTension, me.chart.options.elements.line.tension), - radius: !isNaN(custom.radius) ? custom.radius : valueAtIndexOrDefault(dataset.pointRadius, index, pointElementOptions.radius), - backgroundColor: custom.backgroundColor || valueAtIndexOrDefault(dataset.pointBackgroundColor, index, pointElementOptions.backgroundColor), - borderColor: custom.borderColor || valueAtIndexOrDefault(dataset.pointBorderColor, index, pointElementOptions.borderColor), - borderWidth: !isNaN(custom.borderWidth) ? custom.borderWidth : valueAtIndexOrDefault(dataset.pointBorderWidth, index, pointElementOptions.borderWidth), - pointStyle: custom.pointStyle || valueAtIndexOrDefault(dataset.pointStyle, index, pointElementOptions.pointStyle), - rotation: !isNaN(custom.rotation) ? custom.rotation : valueAtIndexOrDefault(dataset.pointRotation, index, pointElementOptions.rotation), + tension: resolve([custom.tension, dataset.lineTension, me.chart.options.elements.line.tension]), + radius: resolve([custom.radius, dataset.pointRadius, pointElementOptions.radius], undefined, index), + backgroundColor: resolve([custom.backgroundColor, dataset.pointBackgroundColor, pointElementOptions.backgroundColor], undefined, index), + borderColor: resolve([custom.borderColor, dataset.pointBorderColor, pointElementOptions.borderColor], undefined, index), + borderWidth: resolve([custom.borderWidth, dataset.pointBorderWidth, pointElementOptions.borderWidth], undefined, index), + pointStyle: resolve([custom.pointStyle, dataset.pointStyle, pointElementOptions.pointStyle], undefined, index), + rotation: resolve([custom.rotation, dataset.pointRotation, pointElementOptions.rotation], undefined, index), // Tooltip - hitRadius: !isNaN(custom.hitRadius) ? custom.hitRadius : valueAtIndexOrDefault(dataset.pointHitRadius, index, pointElementOptions.hitRadius) + hitRadius: resolve([custom.hitRadius, dataset.pointHitRadius, pointElementOptions.hitRadius], undefined, index) } }); @@ -159,6 +158,7 @@ module.exports = DatasetController.extend({ var custom = point.custom || {}; var index = point._index; var model = point._model; + var getHoverColor = helpers.getHoverColor; point.$previousStyle = { backgroundColor: model.backgroundColor, @@ -167,9 +167,9 @@ module.exports = DatasetController.extend({ radius: model.radius }; - model.radius = !isNaN(custom.hoverRadius) ? custom.hoverRadius : valueAtIndexOrDefault(dataset.pointHoverRadius, index, this.chart.options.elements.point.hoverRadius); - model.backgroundColor = custom.hoverBackgroundColor || valueAtIndexOrDefault(dataset.pointHoverBackgroundColor, index, helpers.getHoverColor(model.backgroundColor)); - model.borderColor = custom.hoverBorderColor || valueAtIndexOrDefault(dataset.pointHoverBorderColor, index, helpers.getHoverColor(model.borderColor)); - model.borderWidth = !isNaN(custom.hoverBorderWidth) ? custom.hoverBorderWidth : valueAtIndexOrDefault(dataset.pointHoverBorderWidth, index, model.borderWidth); + model.radius = resolve([custom.hoverRadius, dataset.pointHoverRadius, this.chart.options.elements.point.hoverRadius], undefined, index); + 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); } }); diff --git a/src/core/core.datasetController.js b/src/core/core.datasetController.js index 94587667458..3deafa1758f 100644 --- a/src/core/core.datasetController.js +++ b/src/core/core.datasetController.js @@ -2,7 +2,7 @@ var helpers = require('../helpers/index'); -var valueAtIndexOrDefault = helpers.valueAtIndexOrDefault; +var resolve = helpers.options.resolve; var arrayEvents = ['push', 'pop', 'shift', 'splice', 'unshift']; @@ -256,9 +256,9 @@ helpers.extend(DatasetController.prototype, { borderWidth: model.borderWidth }; - model.backgroundColor = custom.hoverBackgroundColor || valueAtIndexOrDefault(dataset.hoverBackgroundColor, index, getHoverColor(model.backgroundColor)); - model.borderColor = custom.hoverBorderColor || valueAtIndexOrDefault(dataset.hoverBorderColor, index, getHoverColor(model.borderColor)); - model.borderWidth = !isNaN(custom.hoverBorderWidth) ? custom.hoverBorderWidth : valueAtIndexOrDefault(dataset.hoverBorderWidth, index, model.borderWidth); + model.backgroundColor = resolve([custom.hoverBackgroundColor, dataset.hoverBackgroundColor, getHoverColor(model.backgroundColor)], undefined, index); + model.borderColor = resolve([custom.hoverBorderColor, dataset.hoverBorderColor, getHoverColor(model.borderColor)], undefined, index); + model.borderWidth = resolve([custom.hoverBorderWidth, dataset.hoverBorderWidth, model.borderWidth], undefined, index); }, /** diff --git a/src/core/core.scale.js b/src/core/core.scale.js index f4c38aa2565..7d191af1292 100644 --- a/src/core/core.scale.js +++ b/src/core/core.scale.js @@ -5,9 +5,6 @@ var Element = require('./core.element'); var helpers = require('../helpers/index'); var Ticks = require('./core.ticks'); -var valueOrDefault = helpers.valueOrDefault; -var valueAtIndexOrDefault = helpers.valueAtIndexOrDefault; - defaults._set('scale', { display: true, position: 'left', @@ -731,6 +728,8 @@ module.exports = Element.extend({ var isMirrored = optionTicks.mirror; var isHorizontal = me.isHorizontal(); + var valueOrDefault = helpers.valueOrDefault; + var valueAtIndexOrDefault = helpers.valueAtIndexOrDefault; var parseFont = helpers.options._parseFont; var ticks = optionTicks.autoSkip ? me._autoSkip(me.getTicks()) : me.getTicks(); var tickFontColor = valueOrDefault(optionTicks.fontColor, defaultFontColor); diff --git a/src/elements/element.line.js b/src/elements/element.line.js index 4698681e535..6bb056c135b 100644 --- a/src/elements/element.line.js +++ b/src/elements/element.line.js @@ -30,6 +30,7 @@ module.exports = Element.extend({ var ctx = me._chart.ctx; var spanGaps = vm.spanGaps; var points = me._children.slice(); // clone array + var valueOrDefault = helpers.valueOrDefault; var globalDefaults = defaults.global; var globalOptionLineElements = globalDefaults.elements.line; var lastDrawnIndex = -1; @@ -50,9 +51,9 @@ module.exports = Element.extend({ ctx.setLineDash(vm.borderDash || globalOptionLineElements.borderDash); } - ctx.lineDashOffset = helpers.valueOrDefault(vm.borderDashOffset, globalOptionLineElements.borderDashOffset); + ctx.lineDashOffset = valueOrDefault(vm.borderDashOffset, globalOptionLineElements.borderDashOffset); ctx.lineJoin = vm.borderJoinStyle || globalOptionLineElements.borderJoinStyle; - ctx.lineWidth = helpers.valueOrDefault(vm.borderWidth, globalOptionLineElements.borderWidth); + ctx.lineWidth = valueOrDefault(vm.borderWidth, globalOptionLineElements.borderWidth); ctx.strokeStyle = vm.borderColor || globalDefaults.defaultColor; // Stroke Line diff --git a/src/helpers/helpers.options.js b/src/helpers/helpers.options.js index e4a6dc246c2..0b107e40d84 100644 --- a/src/helpers/helpers.options.js +++ b/src/helpers/helpers.options.js @@ -134,22 +134,5 @@ module.exports = { return value; } } - }, - - /** - * Returns the first defined value from the given `args`. - * @param {*} args - The arguments from which the first defined value is to be returned. - * @returns {*} - */ - _fallback: function() { - var i, ilen, value; - - for (i = 0, ilen = arguments.length - 1; i < ilen; ++i) { - value = arguments[i]; - if (typeof value !== 'undefined') { - return value; - } - } - return arguments[i]; } }; diff --git a/src/scales/scale.logarithmic.js b/src/scales/scale.logarithmic.js index 63868537532..91f90845da3 100644 --- a/src/scales/scale.logarithmic.js +++ b/src/scales/scale.logarithmic.js @@ -170,8 +170,7 @@ module.exports = Scale.extend({ handleTickRangeOptions: function() { var me = this; - var opts = me.options; - var tickOpts = opts.ticks; + var tickOpts = me.options.ticks; var DEFAULT_MIN = 1; var DEFAULT_MAX = 10; @@ -208,8 +207,7 @@ module.exports = Scale.extend({ buildTicks: function() { var me = this; - var opts = me.options; - var tickOpts = opts.ticks; + var tickOpts = me.options.ticks; var reverse = !me.isHorizontal(); var generationOptions = { @@ -266,7 +264,8 @@ module.exports = Scale.extend({ getPixelForValue: function(value) { var me = this; - var reverse = me.options.ticks.reverse; + var tickOpts = me.options.ticks; + var reverse = tickOpts.reverse; var log10 = helpers.log10; var firstTickValue = me._getFirstTickValue(me.minNotZero); var offset = 0; @@ -292,10 +291,7 @@ module.exports = Scale.extend({ } if (value !== start) { if (start === 0) { // include zero tick - offset = helpers.getValueOrDefault( - me.options.ticks.fontSize, - defaults.global.defaultFontSize - ); + offset = valueOrDefault(tickOpts.fontSize, defaults.global.defaultFontSize); innerDimension -= offset; start = firstTickValue; } @@ -309,7 +305,8 @@ module.exports = Scale.extend({ getValueForPixel: function(pixel) { var me = this; - var reverse = me.options.ticks.reverse; + var tickOpts = me.options.ticks; + var reverse = tickOpts.reverse; var log10 = helpers.log10; var firstTickValue = me._getFirstTickValue(me.minNotZero); var innerDimension, start, end, value; @@ -330,10 +327,7 @@ module.exports = Scale.extend({ } if (value !== start) { if (start === 0) { // include zero tick - var offset = helpers.getValueOrDefault( - me.options.ticks.fontSize, - defaults.global.defaultFontSize - ); + var offset = valueOrDefault(tickOpts.fontSize, defaults.global.defaultFontSize); value -= offset; innerDimension -= offset; start = firstTickValue; diff --git a/src/scales/scale.radialLinear.js b/src/scales/scale.radialLinear.js index b13812f345e..42eeb02b540 100644 --- a/src/scales/scale.radialLinear.js +++ b/src/scales/scale.radialLinear.js @@ -7,7 +7,6 @@ var Ticks = require('../core/core.ticks'); var valueOrDefault = helpers.valueOrDefault; var valueAtIndexOrDefault = helpers.valueAtIndexOrDefault; -var fallback = helpers.options._fallback; var defaultConfig = { display: true, @@ -227,6 +226,7 @@ function drawPointLabels(scale) { var angleLineOpts = opts.angleLines; var gridLineOpts = opts.gridLines; var pointLabelOpts = opts.pointLabels; + var resolve = helpers.options.resolve; var lineWidth = valueOrDefault(angleLineOpts.lineWidth, gridLineOpts.lineWidth); var lineColor = valueOrDefault(angleLineOpts.color, gridLineOpts.color); var tickBackdropHeight = getTickBackdropHeight(opts); @@ -235,8 +235,8 @@ function drawPointLabels(scale) { ctx.lineWidth = lineWidth; ctx.strokeStyle = lineColor; if (ctx.setLineDash) { - ctx.setLineDash(fallback(angleLineOpts.borderDash, gridLineOpts.borderDash, [])); - ctx.lineDashOffset = fallback(angleLineOpts.borderDashOffset, gridLineOpts.borderDashOffset, 0.0); + ctx.setLineDash(resolve([angleLineOpts.borderDash, gridLineOpts.borderDash, []])); + ctx.lineDashOffset = resolve([angleLineOpts.borderDashOffset, gridLineOpts.borderDashOffset, 0.0]); } var outerDistance = scale.getDistanceFromCenterForValue(opts.ticks.reverse ? scale.min : scale.max); diff --git a/test/specs/helpers.options.tests.js b/test/specs/helpers.options.tests.js index 3d775246ffa..1afbd59bd45 100644 --- a/test/specs/helpers.options.tests.js +++ b/test/specs/helpers.options.tests.js @@ -197,29 +197,4 @@ describe('Chart.helpers.options', function() { expect(resolve([input, ['foo', 'bar']], {v: 42}, 1)).toBe('bar'); }); }); - - describe('_fallback', function() { - var fallback = options._fallback; - - it('should return the first value if defined', function() { - var object = {}; - var array = []; - - expect(fallback(null, 21, 42)).toBe(null); - expect(fallback(false, 21, 42)).toBe(false); - expect(fallback(object, 21, 42)).toBe(object); - expect(fallback(array, 21, 42)).toBe(array); - expect(fallback('', 21, 42)).toBe(''); - expect(fallback(0, 21, 42)).toBe(0); - }); - it('should return the second value if the first value is undefined', function() { - expect(fallback(undefined, 21, 42)).toBe(21); - expect(fallback({}.foo, 21, 42)).toBe(21); - }); - it('should return the last value if others are undefined', function() { - expect(fallback(undefined, 42)).toBe(42); - expect(fallback(undefined, undefined, 42)).toBe(42); - expect(fallback(undefined, undefined, undefined, 42)).toBe(42); - }); - }); });