Simplify and cleanup the scale _autoskip method (#6043)

This commit is contained in:
Ben McCann 2019-02-07 22:10:02 -08:00 committed by Simon Brunel
parent 7c11c81d96
commit c6c4db7906

View File

@ -625,31 +625,16 @@ module.exports = Element.extend({
* @private
*/
_autoSkip: function(ticks) {
var skipRatio;
var me = this;
var isHorizontal = me.isHorizontal();
var optionTicks = me.options.ticks.minor;
var tickCount = ticks.length;
// Calculate space needed by label in axis direction.
var rot = helpers.toRadians(me.labelRotation);
var cos = Math.abs(Math.cos(rot));
var sin = Math.abs(Math.sin(rot));
var padding = optionTicks.autoSkipPadding;
var w = me.longestLabelWidth + padding || 0;
var tickFont = helpers.options._parseFont(optionTicks);
var h = me._maxLabelLines * tickFont.lineHeight + padding;
// Calculate space needed for 1 tick in axis direction.
var tickSize = isHorizontal
? h * cos > w * sin ? w / cos : h / sin
: h * sin < w * cos ? h / cos : w / sin;
var skipRatio = false;
var maxTicks = optionTicks.maxTicksLimit;
// Total space needed to display all ticks. First and last ticks are
// drawn as their center at end of axis, so tickCount-1
var ticksLength = tickSize * (tickCount - 1);
var ticksLength = me._tickSize() * (tickCount - 1);
// Axis length
var axisLength = isHorizontal
@ -659,21 +644,13 @@ module.exports = Element.extend({
var result = [];
var i, tick;
// figure out the maximum number of gridlines to show
var maxTicks;
if (optionTicks.maxTicksLimit) {
maxTicks = optionTicks.maxTicksLimit;
}
skipRatio = false;
if (ticksLength > axisLength) {
skipRatio = 1 + Math.floor(ticksLength / axisLength);
}
// if they defined a max number of optionTicks,
// increase skipRatio until that number is met
if (maxTicks && tickCount > maxTicks) {
if (tickCount > maxTicks) {
skipRatio = Math.max(skipRatio, 1 + Math.floor(tickCount / maxTicks));
}
@ -689,6 +666,31 @@ module.exports = Element.extend({
return result;
},
/**
* @private
*/
_tickSize: function() {
var me = this;
var isHorizontal = me.isHorizontal();
var optionTicks = me.options.ticks.minor;
// Calculate space needed by label in axis direction.
var rot = helpers.toRadians(me.labelRotation);
var cos = Math.abs(Math.cos(rot));
var sin = Math.abs(Math.sin(rot));
var padding = optionTicks.autoSkipPadding;
var w = me.longestLabelWidth + padding || 0;
var tickFont = helpers.options._parseFont(optionTicks);
var h = me._maxLabelLines * tickFont.lineHeight + padding;
// Calculate space needed for 1 tick in axis direction.
return isHorizontal
? h * cos > w * sin ? w / cos : h / sin
: h * sin < w * cos ? h / cos : w / sin;
},
/**
* @private
*/