Skip to content

Commit e228d62

Browse files
kurkleetimberg
authored andcommitted
Refactor core.layouts (chartjs#6304)
1 parent 0316f3a commit e228d62

File tree

9 files changed

+386
-340
lines changed

9 files changed

+386
-340
lines changed

src/core/core.layouts.js

Lines changed: 217 additions & 237 deletions
Large diffs are not rendered by default.

src/core/core.scale.js

Lines changed: 17 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -476,8 +476,7 @@ var Scale = Element.extend({
476476

477477
// Width
478478
if (isHorizontal) {
479-
// subtract the margins to line up with the chartArea if we are a full width scale
480-
minSize.width = me.isFullWidth() ? me.maxWidth - me.margins.left - me.margins.right : me.maxWidth;
479+
minSize.width = me.maxWidth;
481480
} else if (display) {
482481
minSize.width = getTickMarkLength(gridLineOpts) + getScaleLabelHeight(scaleLabelOpts);
483482
}
@@ -565,10 +564,10 @@ var Scale = Element.extend({
565564
handleMargins: function() {
566565
var me = this;
567566
if (me.margins) {
568-
me.paddingLeft = Math.max(me.paddingLeft - me.margins.left, 0);
569-
me.paddingTop = Math.max(me.paddingTop - me.margins.top, 0);
570-
me.paddingRight = Math.max(me.paddingRight - me.margins.right, 0);
571-
me.paddingBottom = Math.max(me.paddingBottom - me.margins.bottom, 0);
567+
me.margins.left = Math.max(me.paddingLeft, me.margins.left);
568+
me.margins.top = Math.max(me.paddingTop, me.margins.top);
569+
me.margins.right = Math.max(me.paddingRight, me.margins.right);
570+
me.margins.bottom = Math.max(me.paddingBottom, me.margins.bottom);
572571
}
573572
},
574573

@@ -679,21 +678,21 @@ var Scale = Element.extend({
679678
getPixelForTick: function(index) {
680679
var me = this;
681680
var offset = me.options.offset;
681+
var numTicks = me._ticks.length;
682+
if (index < 0 || index > numTicks - 1) {
683+
return null;
684+
}
682685
if (me.isHorizontal()) {
683-
var innerWidth = me.width - (me.paddingLeft + me.paddingRight);
684-
var tickWidth = innerWidth / Math.max((me._ticks.length - (offset ? 0 : 1)), 1);
685-
var pixel = (tickWidth * index) + me.paddingLeft;
686+
var tickWidth = me.width / Math.max((numTicks - (offset ? 0 : 1)), 1);
687+
var pixel = (tickWidth * index);
686688

687689
if (offset) {
688690
pixel += tickWidth / 2;
689691
}
690692

691-
var finalVal = me.left + pixel;
692-
finalVal += me.isFullWidth() ? me.margins.left : 0;
693-
return finalVal;
693+
return me.left + pixel;
694694
}
695-
var innerHeight = me.height - (me.paddingTop + me.paddingBottom);
696-
return me.top + (index * (innerHeight / (me._ticks.length - 1)));
695+
return me.top + (index * (me.height / (numTicks - 1)));
697696
},
698697

699698
/**
@@ -702,15 +701,9 @@ var Scale = Element.extend({
702701
*/
703702
getPixelForDecimal: function(decimal) {
704703
var me = this;
705-
if (me.isHorizontal()) {
706-
var innerWidth = me.width - (me.paddingLeft + me.paddingRight);
707-
var valueOffset = (innerWidth * decimal) + me.paddingLeft;
708-
709-
var finalVal = me.left + valueOffset;
710-
finalVal += me.isFullWidth() ? me.margins.left : 0;
711-
return finalVal;
712-
}
713-
return me.top + (decimal * me.height);
704+
return me.isHorizontal()
705+
? me.left + decimal * me.width
706+
: me.top + decimal * me.height;
714707
},
715708

716709
/**
@@ -749,9 +742,7 @@ var Scale = Element.extend({
749742
var ticksLength = me._tickSize() * (tickCount - 1);
750743

751744
// Axis length
752-
var axisLength = isHorizontal
753-
? me.width - (me.paddingLeft + me.paddingRight)
754-
: me.height - (me.paddingTop + me.PaddingBottom);
745+
var axisLength = isHorizontal ? me.width : me.height;
755746

756747
var result = [];
757748
var i, tick;

src/scales/scale.category.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,11 @@ module.exports = Scale.extend({
101101
},
102102

103103
getPixelForTick: function(index) {
104-
return this.getPixelForValue(this.ticks[index], index + this.minIndex);
104+
var ticks = this.ticks;
105+
if (index < 0 || index > ticks.length - 1) {
106+
return null;
107+
}
108+
return this.getPixelForValue(ticks[index], index + this.minIndex);
105109
},
106110

107111
getValueForPixel: function(pixel) {

src/scales/scale.linear.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,11 @@ module.exports = LinearScaleBase.extend({
184184
},
185185

186186
getPixelForTick: function(index) {
187-
return this.getPixelForValue(this.ticksAsNumbers[index]);
187+
var ticks = this.ticksAsNumbers;
188+
if (index < 0 || index > ticks.length - 1) {
189+
return null;
190+
}
191+
return this.getPixelForValue(ticks[index]);
188192
}
189193
});
190194

src/scales/scale.logarithmic.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -247,7 +247,11 @@ module.exports = Scale.extend({
247247
},
248248

249249
getPixelForTick: function(index) {
250-
return this.getPixelForValue(this.tickValues[index]);
250+
var ticks = this.tickValues;
251+
if (index < 0 || index > ticks.length - 1) {
252+
return null;
253+
}
254+
return this.getPixelForValue(ticks[index]);
251255
},
252256

253257
/**

src/scales/scale.time.js

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -774,7 +774,7 @@ module.exports = Scale.extend({
774774
var me = this;
775775
var ticksOpts = me.options.ticks;
776776
var tickLabelWidth = me.ctx.measureText(label).width;
777-
var angle = helpers.toRadians(ticksOpts.maxRotation);
777+
var angle = helpers.toRadians(me.isHorizontal() ? ticksOpts.maxRotation : ticksOpts.minRotation);
778778
var cosRotation = Math.cos(angle);
779779
var sinRotation = Math.sin(angle);
780780
var tickFontSize = valueOrDefault(ticksOpts.fontSize, defaults.global.defaultFontSize);
@@ -800,19 +800,12 @@ module.exports = Scale.extend({
800800
var me = this;
801801
var timeOpts = me.options.time;
802802
var displayFormats = timeOpts.displayFormats;
803-
var margins = me.margins;
804803

805804
// pick the longest format (milliseconds) for guestimation
806805
var format = displayFormats[timeOpts.unit] || displayFormats.millisecond;
807806
var exampleLabel = me.tickFormatFunction(exampleTime, 0, ticksFromTimestamps(me, [exampleTime], me._majorUnit), format);
808807
var size = me._getLabelSize(exampleLabel);
809-
810-
// Using margins instead of padding because padding is not calculated
811-
// at this point (buildTicks). Margins are provided from previous calculation
812-
// in layout steps 5/6
813-
var capacity = Math.floor(me.isHorizontal()
814-
? (me.width - margins.left - margins.right) / size.w
815-
: (me.height - margins.top - margins.bottom) / size.h);
808+
var capacity = Math.floor(me.isHorizontal() ? me.width / size.w : me.height / size.h);
816809

817810
if (me.options.offset) {
818811
capacity--;

0 commit comments

Comments
 (0)