]> git.ipfire.org Git - thirdparty/Chart.js.git/commitdiff
Move niceNum to helpers.math, cleanup IE fallbacks (#8570)
authorJukka Kurkela <jukka.kurkela@gmail.com>
Fri, 5 Mar 2021 13:10:24 +0000 (15:10 +0200)
committerGitHub <noreply@github.com>
Fri, 5 Mar 2021 13:10:24 +0000 (08:10 -0500)
src/helpers/helpers.math.js
src/scales/scale.linearbase.js

index 41c8a6db254e6a640714e079f83381964148599b..daf849818d40800b1defe258499707a099d488b6 100644 (file)
@@ -1,5 +1,10 @@
 import {isFinite as isFiniteNumber} from './helpers.core';
 
+/**
+ * @alias Chart.helpers.math
+ * @namespace
+ */
+
 export const PI = Math.PI;
 export const TAU = 2 * PI;
 export const PITAU = TAU + PI;
@@ -9,10 +14,19 @@ export const HALF_PI = PI / 2;
 export const QUARTER_PI = PI / 4;
 export const TWO_THIRDS_PI = PI * 2 / 3;
 
+export const log10 = Math.log10;
+export const sign = Math.sign;
+
 /**
- * @alias Chart.helpers.math
- * @namespace
+ * Implementation of the nice number algorithm used in determining where axis labels will go
+ * @return {number}
  */
+export function niceNum(range) {
+  const niceRange = Math.pow(10, Math.floor(log10(range)));
+  const fraction = range / niceRange;
+  const niceFraction = fraction <= 1 ? 1 : fraction <= 2 ? 2 : fraction <= 5 ? 5 : 10;
+  return niceFraction * niceRange;
+}
 
 /**
  * Returns an array of factors sorted from 1 to sqrt(value)
@@ -37,16 +51,6 @@ export function _factorize(value) {
   return result;
 }
 
-export const log10 = Math.log10 || function(x) {
-  const exponent = Math.log(x) * Math.LOG10E; // Math.LOG10E = 1 / Math.LN10.
-  // Check for whole powers of 10,
-  // which due to floating point rounding error should be corrected.
-  const powerOf10 = Math.round(exponent);
-  const isPowerOf10 = x === Math.pow(10, powerOf10);
-
-  return isPowerOf10 ? powerOf10 : exponent;
-};
-
 export function isNumber(n) {
   return !isNaN(parseFloat(n)) && isFinite(n);
 }
@@ -75,18 +79,6 @@ export function _setMinAndMaxByKey(array, target, property) {
   }
 }
 
-export const sign = Math.sign ?
-  function(x) {
-    return Math.sign(x);
-  } :
-  function(x) {
-    x = +x; // convert to a number
-    if (x === 0 || isNaN(x)) {
-      return x;
-    }
-    return x > 0 ? 1 : -1;
-  };
-
 export function toRadians(degrees) {
   return degrees * (PI / 180);
 }
index 6d8f1e1a31cd46ce64a6824db729205e0ef3f06c..fe954a43f01bd35a422db80a0e2b6ec705dad3eb 100644 (file)
@@ -1,30 +1,8 @@
 import {isNullOrUndef} from '../helpers/helpers.core';
-import {almostEquals, almostWhole, log10, _decimalPlaces, _setMinAndMaxByKey, sign} from '../helpers/helpers.math';
+import {almostEquals, almostWhole, niceNum, _decimalPlaces, _setMinAndMaxByKey, sign} from '../helpers/helpers.math';
 import Scale from '../core/core.scale';
 import {formatNumber} from '../core/core.intl';
 
-/**
- * Implementation of the nice number algorithm used in determining where axis labels will go
- * @return {number}
- */
-function niceNum(range) {
-  const exponent = Math.floor(log10(range));
-  const fraction = range / Math.pow(10, exponent);
-  let niceFraction;
-
-  if (fraction <= 1.0) {
-    niceFraction = 1;
-  } else if (fraction <= 2) {
-    niceFraction = 2;
-  } else if (fraction <= 5) {
-    niceFraction = 5;
-  } else {
-    niceFraction = 10;
-  }
-
-  return niceFraction * Math.pow(10, exponent);
-}
-
 /**
  * Generate a set of linear ticks
  * @param generationOptions the options used to generate the ticks