/* *
|
*
|
* (c) 2010-2019 Torstein Honsi
|
*
|
* License: www.highcharts.com/license
|
*
|
* !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
|
*
|
* */
|
'use strict';
|
|
var _Globals = require('./Globals.js');
|
|
var _Globals2 = _interopRequireDefault(_Globals);
|
|
require('./Utilities.js');
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
var Axis = _Globals2.default.Axis,
|
getMagnitude = _Globals2.default.getMagnitude,
|
normalizeTickInterval = _Globals2.default.normalizeTickInterval,
|
pick = _Globals2.default.pick;
|
/* ************************************************************************** *
|
* Methods defined on the Axis prototype
|
* ************************************************************************** */
|
/* eslint-disable valid-jsdoc */
|
/**
|
* Set the tick positions of a logarithmic axis.
|
*
|
* @private
|
* @function Highcharts.Axis#getLogTickPositions
|
* @param {number} interval
|
* @param {number} min
|
* @param {number} max
|
* @param {boolean} [minor]
|
* @return {Array<number>}
|
*/
|
Axis.prototype.getLogTickPositions = function (interval, min, max, minor) {
|
var axis = this,
|
options = axis.options,
|
axisLength = axis.len,
|
|
// Since we use this method for both major and minor ticks,
|
// use a local variable and return the result
|
positions = [];
|
// Reset
|
if (!minor) {
|
axis._minorAutoInterval = null;
|
}
|
// First case: All ticks fall on whole logarithms: 1, 10, 100 etc.
|
if (interval >= 0.5) {
|
interval = Math.round(interval);
|
positions = axis.getLinearTickPositions(interval, min, max);
|
// Second case: We need intermediary ticks. For example
|
// 1, 2, 4, 6, 8, 10, 20, 40 etc.
|
} else if (interval >= 0.08) {
|
var roundedMin = Math.floor(min),
|
intermediate,
|
i,
|
j,
|
len,
|
pos,
|
lastPos,
|
break2;
|
if (interval > 0.3) {
|
intermediate = [1, 2, 4];
|
// 0.2 equals five minor ticks per 1, 10, 100 etc
|
} else if (interval > 0.15) {
|
intermediate = [1, 2, 4, 6, 8];
|
} else {
|
// 0.1 equals ten minor ticks per 1, 10, 100 etc
|
intermediate = [1, 2, 3, 4, 5, 6, 7, 8, 9];
|
}
|
for (i = roundedMin; i < max + 1 && !break2; i++) {
|
len = intermediate.length;
|
for (j = 0; j < len && !break2; j++) {
|
pos = axis.log2lin(axis.lin2log(i) * intermediate[j]);
|
// #1670, lastPos is #3113
|
if (pos > min && (!minor || lastPos <= max) && lastPos !== undefined) {
|
positions.push(lastPos);
|
}
|
if (lastPos > max) {
|
break2 = true;
|
}
|
lastPos = pos;
|
}
|
}
|
// Third case: We are so deep in between whole logarithmic values that
|
// we might as well handle the tick positions like a linear axis. For
|
// example 1.01, 1.02, 1.03, 1.04.
|
} else {
|
var realMin = axis.lin2log(min),
|
realMax = axis.lin2log(max),
|
tickIntervalOption = minor ? this.getMinorTickInterval() : options.tickInterval,
|
filteredTickIntervalOption = tickIntervalOption === 'auto' ? null : tickIntervalOption,
|
tickPixelIntervalOption = options.tickPixelInterval / (minor ? 5 : 1),
|
totalPixelLength = minor ? axisLength / axis.tickPositions.length : axisLength;
|
interval = pick(filteredTickIntervalOption, axis._minorAutoInterval, (realMax - realMin) * tickPixelIntervalOption / (totalPixelLength || 1));
|
interval = normalizeTickInterval(interval, null, getMagnitude(interval));
|
positions = axis.getLinearTickPositions(interval, realMin, realMax).map(axis.log2lin);
|
if (!minor) {
|
axis._minorAutoInterval = interval / 5;
|
}
|
}
|
// Set the axis-level tickInterval variable
|
if (!minor) {
|
axis.tickInterval = interval;
|
}
|
return positions;
|
};
|
/**
|
* @private
|
* @function Highcharts.Axis#log2lin
|
*
|
* @param {number} num
|
*
|
* @return {number}
|
*/
|
Axis.prototype.log2lin = function (num) {
|
return Math.log(num) / Math.LN10;
|
};
|
/**
|
* @private
|
* @function Highcharts.Axis#lin2log
|
*
|
* @param {number} num
|
*
|
* @return {number}
|
*/
|
Axis.prototype.lin2log = function (num) {
|
return Math.pow(10, num);
|
};
|