diff --git a/samples/scales/time/financial.html b/samples/scales/time/financial.html index d5b5ac8d59b..00869e7a28f 100644 --- a/samples/scales/time/financial.html +++ b/samples/scales/time/financial.html @@ -69,7 +69,6 @@ var color = Chart.helpers.color; var cfg = { - type: 'bar', data: { datasets: [{ label: 'CHRT - Chart.js Corporation', @@ -88,12 +87,16 @@ xAxes: [{ type: 'time', distribution: 'series', + offset: true, ticks: { source: 'data', autoSkip: true } }], yAxes: [{ + gridLines: { + drawBorder: false + }, scaleLabel: { display: true, labelString: 'Closing price ($)' diff --git a/src/controllers/controller.bar.js b/src/controllers/controller.bar.js index 55c6ab31baf..2794234f38c 100644 --- a/src/controllers/controller.bar.js +++ b/src/controllers/controller.bar.js @@ -69,10 +69,13 @@ function computeFitCategoryTraits(index, ruler, options) { var thickness = options.barThickness; var count = ruler.stackCount; var curr = ruler.pixels[index]; + var min = helpers.isNullOrUndef(options.barThickness) + ? computeMinSampleSize(ruler.scale, ruler.pixels) + : -1; var size, ratio; if (helpers.isNullOrUndef(thickness)) { - size = ruler.min * options.categoryPercentage; + size = min * options.categoryPercentage; ratio = options.barPercentage; } else { // When bar thickness is enforced, category and bar percentages are ignored. @@ -135,7 +138,12 @@ module.exports = DatasetController.extend({ 'backgroundColor', 'borderColor', 'borderSkipped', - 'borderWidth' + 'borderWidth', + 'barPercentage', + 'barThickness', + 'categoryPercentage', + 'maxBarThickness', + 'minBarLength' ], initialize: function() { @@ -161,7 +169,6 @@ module.exports = DatasetController.extend({ var rects = me.getMeta().data; var i, ilen; - me._options = me._resolveControllerOptions(me.index); me._ruler = me.getRuler(); for (i = 0, ilen = rects.length; i < ilen; ++i) { @@ -188,7 +195,7 @@ module.exports = DatasetController.extend({ label: me.chart.data.labels[index] }; - me._updateElementGeometry(rectangle, index, reset); + me._updateElementGeometry(rectangle, index, reset, options); rectangle.pivot(); }, @@ -196,15 +203,15 @@ module.exports = DatasetController.extend({ /** * @private */ - _updateElementGeometry: function(rectangle, index, reset) { + _updateElementGeometry: function(rectangle, index, reset, options) { var me = this; var model = rectangle._model; var vscale = me._getValueScale(); var base = vscale.getBasePixel(); var horizontal = vscale.isHorizontal(); var ruler = me._ruler || me.getRuler(); - var vpixels = me.calculateBarValuePixels(me.index, index); - var ipixels = me.calculateBarIndexPixels(me.index, index, ruler); + var vpixels = me.calculateBarValuePixels(me.index, index, options); + var ipixels = me.calculateBarIndexPixels(me.index, index, ruler, options); model.horizontal = horizontal; model.base = reset ? base : vpixels.base; @@ -280,18 +287,13 @@ module.exports = DatasetController.extend({ var start = isHorizontal ? scale.left : scale.top; var end = start + (isHorizontal ? scale.width : scale.height); var pixels = []; - var i, ilen, min; + var i, ilen; for (i = 0, ilen = me.getMeta().data.length; i < ilen; ++i) { pixels.push(scale.getPixelForValue(null, i, datasetIndex)); } - min = helpers.isNullOrUndef(me._options.barThickness) - ? computeMinSampleSize(scale, pixels) - : -1; - return { - min: min, pixels: pixels, start: start, end: end, @@ -304,7 +306,7 @@ module.exports = DatasetController.extend({ * Note: pixel values are not clamped to the scale area. * @private */ - calculateBarValuePixels: function(datasetIndex, index) { + calculateBarValuePixels: function(datasetIndex, index, options) { var me = this; var chart = me.chart; var meta = me.getMeta(); @@ -312,7 +314,7 @@ module.exports = DatasetController.extend({ var isHorizontal = scale.isHorizontal(); var datasets = chart.data.datasets; var value = +scale.getRightValue(datasets[datasetIndex].data[index]); - var minBarLength = me._options.minBarLength; + var minBarLength = options.minBarLength; var stacked = scale.options.stacked; var stack = meta.stack; var start = 0; @@ -359,9 +361,8 @@ module.exports = DatasetController.extend({ /** * @private */ - calculateBarIndexPixels: function(datasetIndex, index, ruler) { + calculateBarIndexPixels: function(datasetIndex, index, ruler, options) { var me = this; - var options = me._options; var range = options.barThickness === 'flex' ? computeFlexCategoryTraits(index, ruler, options) : computeFitCategoryTraits(index, ruler, options); @@ -403,29 +404,17 @@ module.exports = DatasetController.extend({ /** * @private */ - _resolveControllerOptions: function() { + _resolveDataElementOptions: function() { var me = this; - var datasetOpts = me._config; + var values = DatasetController.prototype._resolveDataElementOptions.apply(me, arguments); var indexOpts = me._getIndexScale().options; var valueOpts = me._getValueScale().options; - var values = {}; - var keys = [ - 'barPercentage', - 'barThickness', - 'categoryPercentage', - 'maxBarThickness' - ]; - var i, ilen, key; - - for (i = 0, ilen = keys.length; i < ilen; ++i) { - key = keys[i]; - values[key] = valueOrDefault( - indexOpts[key], - datasetOpts[key] - ); - } - values.minBarLength = valueOrDefault(valueOpts.minBarLength, datasetOpts.minBarLength); + values.barPercentage = valueOrDefault(indexOpts.barPercentage, values.barPercentage); + values.barThickness = valueOrDefault(indexOpts.barThickness, values.barThickness); + values.categoryPercentage = valueOrDefault(indexOpts.categoryPercentage, values.categoryPercentage); + values.maxBarThickness = valueOrDefault(indexOpts.maxBarThickness, values.maxBarThickness); + values.minBarLength = valueOrDefault(valueOpts.minBarLength, values.minBarLength); return values; }