Skip to content

Commit

Permalink
Override _resolveDataElementOptions
Browse files Browse the repository at this point in the history
  • Loading branch information
benmccann committed May 15, 2019
1 parent 9ccb407 commit 116949b
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 37 deletions.
5 changes: 4 additions & 1 deletion samples/scales/time/financial.html
Expand Up @@ -69,7 +69,6 @@

var color = Chart.helpers.color;
var cfg = {
type: 'bar',
data: {
datasets: [{
label: 'CHRT - Chart.js Corporation',
Expand All @@ -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 ($)'
Expand Down
61 changes: 25 additions & 36 deletions src/controllers/controller.bar.js
Expand Up @@ -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.
Expand Down Expand Up @@ -135,7 +138,12 @@ module.exports = DatasetController.extend({
'backgroundColor',
'borderColor',
'borderSkipped',
'borderWidth'
'borderWidth',
'barPercentage',
'barThickness',
'categoryPercentage',
'maxBarThickness',
'minBarLength'
],

initialize: function() {
Expand All @@ -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) {
Expand All @@ -188,23 +195,23 @@ module.exports = DatasetController.extend({
label: me.chart.data.labels[index]
};

me._updateElementGeometry(rectangle, index, reset);
me._updateElementGeometry(rectangle, index, reset, options);

rectangle.pivot();
},

/**
* @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;
Expand Down Expand Up @@ -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,
Expand All @@ -304,15 +306,15 @@ 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();
var scale = me._getValueScale();
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;
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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;
}
Expand Down

0 comments on commit 116949b

Please sign in to comment.