You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@echarts.apache.org by sh...@apache.org on 2022/01/04 08:55:57 UTC

[echarts] branch optimize-code updated: style: fix circular dependencies

This is an automated email from the ASF dual-hosted git repository.

shenyi pushed a commit to branch optimize-code
in repository https://gitbox.apache.org/repos/asf/echarts.git


The following commit(s) were added to refs/heads/optimize-code by this push:
     new 50fcadb  style: fix circular dependencies
50fcadb is described below

commit 50fcadb0903f8aa0b70a2a2bf2bac100b9790059
Author: pissang <bm...@gmail.com>
AuthorDate: Tue Jan 4 16:55:30 2022 +0800

    style: fix circular dependencies
---
 src/coord/axisAlignTicks.ts | 121 ++++++++++++++++++++++++++++++++++++++++++
 src/coord/cartesian/Grid.ts |   3 +-
 src/coord/radar/Radar.ts    |   2 +-
 src/scale/helper.ts         | 125 ++------------------------------------------
 4 files changed, 128 insertions(+), 123 deletions(-)

diff --git a/src/coord/axisAlignTicks.ts b/src/coord/axisAlignTicks.ts
new file mode 100644
index 0000000..d2c083a
--- /dev/null
+++ b/src/coord/axisAlignTicks.ts
@@ -0,0 +1,121 @@
+import { NumericAxisBaseOptionCommon } from './axisCommonTypes';
+import { getPrecisionSafe, round } from '../util/number';
+import IntervalScale from '../scale/Interval';
+import { getScaleExtent } from './axisHelper';
+import { AxisBaseModel } from './AxisBaseModel';
+import LogScale from '../scale/Log';
+import { warn } from '../util/log';
+import { mathLog, increaseInterval, isValueNice } from '../scale/helper';
+
+
+export function alignScaleTicks(
+    scale: IntervalScale | LogScale,
+    axisModel: AxisBaseModel<Pick<NumericAxisBaseOptionCommon, 'min' | 'max'>>,
+    alignToScale: IntervalScale | LogScale
+) {
+
+    const intervalScaleProto = IntervalScale.prototype;
+
+    // NOTE: There is a precondition for log scale  here:
+    // In log scale we store _interval and _extent of exponent value.
+    // So if we use the method of InternalScale to set/get these data.
+    // It process the exponent value, which is linear and what we want here.
+    const alignToTicks = intervalScaleProto.getTicks.call(alignToScale);
+    const alignToNicedTicks = intervalScaleProto.getTicks.call(alignToScale, true);
+    const alignToSplitNumber = alignToTicks.length - 1;
+    const alignToInterval = intervalScaleProto.getInterval.call(alignToScale);
+
+    const scaleExtent = getScaleExtent(scale, axisModel);
+    let rawExtent = scaleExtent.extent;
+    const isMinFixed = scaleExtent.fixMin;
+    const isMaxFixed = scaleExtent.fixMax;
+
+    if (scale.type === 'log') {
+        const logBase = mathLog((scale as LogScale).base);
+        rawExtent = [mathLog(rawExtent[0]) / logBase, mathLog(rawExtent[1]) / logBase];
+    }
+
+    scale.setExtent(rawExtent[0], rawExtent[1]);
+    scale.calcNiceExtent({
+        splitNumber: alignToSplitNumber,
+        fixMin: isMinFixed,
+        fixMax: isMaxFixed
+    });
+    const extent = intervalScaleProto.getExtent.call(scale);
+
+    // Need to update the rawExtent.
+    // Because value in rawExtent may be not parsed. e.g. 'dataMin', 'dataMax'
+    if (isMinFixed) {
+        rawExtent[0] = extent[0];
+    }
+    if (isMaxFixed) {
+        rawExtent[1] = extent[1];
+    }
+
+    let interval = intervalScaleProto.getInterval.call(scale);
+    let min: number = rawExtent[0];
+    let max: number = rawExtent[1];
+
+    if (isMinFixed && isMaxFixed) {
+        // User set min, max, divide to get new interval
+        interval = (max - min) / alignToSplitNumber;
+    }
+    else if (isMinFixed) {
+        max = rawExtent[0] + interval * alignToSplitNumber;
+        // User set min, expand extent on the other side
+        while (max < rawExtent[1] && isFinite(max) && isFinite(rawExtent[1])) {
+            interval = increaseInterval(interval);
+            max = rawExtent[0] + interval * alignToSplitNumber;
+        }
+    }
+    else if (isMaxFixed) {
+        // User set max, expand extent on the other side
+        min = rawExtent[1] - interval * alignToSplitNumber;
+        while (min > rawExtent[0] && isFinite(min) && isFinite(rawExtent[0])) {
+            interval = increaseInterval(interval);
+            min = rawExtent[1] - interval * alignToSplitNumber;
+        }
+    }
+    else {
+        const nicedSplitNumber = scale.getTicks().length - 1;
+        if (nicedSplitNumber > alignToSplitNumber) {
+            interval = increaseInterval(interval);
+        }
+
+        const range = interval * alignToSplitNumber;
+        max = Math.ceil(rawExtent[1] / interval) * interval;
+        min = round(max - range);
+        // Not change the result that crossing zero.
+        if (min < 0 && rawExtent[0] >= 0) {
+            min = 0;
+            max = round(range);
+        }
+        else if (max > 0 && rawExtent[1] <= 0) {
+            max = 0;
+            min = -round(range);
+        }
+
+    }
+
+    // Adjust min, max based on the extent of alignTo. When min or max is set in alignTo scale
+    const t0 = (alignToTicks[0].value - alignToNicedTicks[0].value) / alignToInterval;
+    const t1 = (alignToTicks[alignToSplitNumber].value - alignToNicedTicks[alignToSplitNumber].value) / alignToInterval;
+
+    // NOTE: Must in setExtent -> setInterval -> setNiceExtent order.
+    intervalScaleProto.setExtent.call(scale, min + interval * t0, max + interval * t1);
+    intervalScaleProto.setInterval.call(scale, interval);
+    if (t0 || t1) {
+        intervalScaleProto.setNiceExtent.call(scale, min + interval, max - interval);
+    }
+
+    if (__DEV__) {
+        const ticks = intervalScaleProto.getTicks.call(scale);
+        if (ticks[1]
+            && (!isValueNice(interval) || getPrecisionSafe(ticks[1].value) > getPrecisionSafe(interval))) {
+            warn(
+                // eslint-disable-next-line
+                `The ticks may be not readable when set min: ${axisModel.get('min')}, max: ${axisModel.get('max')} and alignTicks: true`
+            );
+        }
+    }
+}
diff --git a/src/coord/cartesian/Grid.ts b/src/coord/cartesian/Grid.ts
index d9c6de6..e389538 100644
--- a/src/coord/cartesian/Grid.ts
+++ b/src/coord/cartesian/Grid.ts
@@ -49,7 +49,8 @@ import OrdinalScale from '../../scale/Ordinal';
 import { isCartesian2DSeries, findAxisModels } from './cartesianAxisHelper';
 import { CategoryAxisBaseOption, NumericAxisBaseOptionCommon } from '../axisCommonTypes';
 import { AxisBaseModel } from '../AxisBaseModel';
-import { alignScaleTicks, isIntervalOrLogScale } from '../../scale/helper';
+import { isIntervalOrLogScale } from '../../scale/helper';
+import { alignScaleTicks } from "../axisAlignTicks";
 import IntervalScale from '../../scale/Interval';
 import LogScale from '../../scale/Log';
 
diff --git a/src/coord/radar/Radar.ts b/src/coord/radar/Radar.ts
index 3b5ffa4..f96d6c0 100644
--- a/src/coord/radar/Radar.ts
+++ b/src/coord/radar/Radar.ts
@@ -29,7 +29,7 @@ import ExtensionAPI from '../../core/ExtensionAPI';
 import { ScaleDataValue } from '../../util/types';
 import { ParsedModelFinder } from '../../util/model';
 import { map, each, isString, isNumber } from 'zrender/src/core/util';
-import { alignScaleTicks } from '../../scale/helper';
+import { alignScaleTicks } from "../axisAlignTicks";
 
 
 class Radar implements CoordinateSystem, CoordinateSystemMaster {
diff --git a/src/scale/helper.ts b/src/scale/helper.ts
index a04ec38..1f20f03 100644
--- a/src/scale/helper.ts
+++ b/src/scale/helper.ts
@@ -17,16 +17,12 @@
 * under the License.
 */
 
-import { NumericAxisBaseOptionCommon } from '../coord/axisCommonTypes';
-import {getPrecisionSafe, getPrecision, round, nice, quantityExponent} from '../util/number';
+import {getPrecision, round, nice, quantityExponent} from '../util/number';
 import IntervalScale from './Interval';
-import { getScaleExtent } from '../coord/axisHelper';
-import { AxisBaseModel } from '../coord/AxisBaseModel';
 import LogScale from './Log';
 import Scale from './Scale';
-import { warn } from '../util/log';
 
-const mathLog = Math.log;
+export const mathLog = Math.log;
 
 type intervalScaleNiceTicksResult = {
     interval: number,
@@ -34,7 +30,7 @@ type intervalScaleNiceTicksResult = {
     niceTickExtent: [number, number]
 };
 
-function isValueNice(val: number) {
+export function isValueNice(val: number) {
     const exp10 = Math.pow(10, quantityExponent(Math.abs(val)));
     const f = Math.abs(val / exp10);
     return f === 0
@@ -82,7 +78,7 @@ export function intervalScaleNiceTicks(
     return result;
 }
 
-function increaseInterval(interval: number) {
+export function increaseInterval(interval: number) {
     const exp10 = Math.pow(10, quantityExponent(interval));
     // Increase interval
     let f = interval / exp10;
@@ -101,119 +97,6 @@ function increaseInterval(interval: number) {
     return f * exp10;
 }
 
-export function alignScaleTicks(
-    scale: IntervalScale | LogScale,
-    axisModel: AxisBaseModel<Pick<NumericAxisBaseOptionCommon, 'min' | 'max'>>,
-    alignToScale: IntervalScale | LogScale
-) {
-
-    const intervalScaleProto = IntervalScale.prototype;
-
-    // NOTE: There is a precondition for log scale  here:
-    // In log scale we store _interval and _extent of exponent value.
-    // So if we use the method of InternalScale to set/get these data.
-    // It process the exponent value, which is linear and what we want here.
-    const alignToTicks = intervalScaleProto.getTicks.call(alignToScale);
-    const alignToNicedTicks = intervalScaleProto.getTicks.call(alignToScale, true);
-    const alignToSplitNumber = alignToTicks.length - 1;
-    const alignToInterval = intervalScaleProto.getInterval.call(alignToScale);
-
-    const scaleExtent = getScaleExtent(scale, axisModel);
-    let rawExtent = scaleExtent.extent;
-    const isMinFixed = scaleExtent.fixMin;
-    const isMaxFixed = scaleExtent.fixMax;
-
-    if (scale.type === 'log') {
-        const logBase = mathLog((scale as LogScale).base);
-        rawExtent = [mathLog(rawExtent[0]) / logBase, mathLog(rawExtent[1]) / logBase];
-    }
-
-    scale.setExtent(rawExtent[0], rawExtent[1]);
-    scale.calcNiceExtent({
-        splitNumber: alignToSplitNumber,
-        fixMin: isMinFixed,
-        fixMax: isMaxFixed
-    });
-    const extent = intervalScaleProto.getExtent.call(scale);
-
-    // Need to update the rawExtent.
-    // Because value in rawExtent may be not parsed. e.g. 'dataMin', 'dataMax'
-    if (isMinFixed) {
-        rawExtent[0] = extent[0];
-    }
-    if (isMaxFixed) {
-        rawExtent[1] = extent[1];
-    }
-
-    let interval = intervalScaleProto.getInterval.call(scale);
-    let min: number = rawExtent[0];
-    let max: number = rawExtent[1];
-
-    if (isMinFixed && isMaxFixed) {
-        // User set min, max, divide to get new interval
-        interval = (max - min) / alignToSplitNumber;
-    }
-    else if (isMinFixed) {
-        max = rawExtent[0] + interval * alignToSplitNumber;
-        // User set min, expand extent on the other side
-        while (max < rawExtent[1] && isFinite(max) && isFinite(rawExtent[1])) {
-            interval = increaseInterval(interval);
-            max = rawExtent[0] + interval * alignToSplitNumber;
-        }
-    }
-    else if (isMaxFixed) {
-        // User set max, expand extent on the other side
-        min = rawExtent[1] - interval * alignToSplitNumber;
-        while (min > rawExtent[0] && isFinite(min) && isFinite(rawExtent[0])) {
-            interval = increaseInterval(interval);
-            min = rawExtent[1] - interval * alignToSplitNumber;
-        }
-    }
-    else {
-        const nicedSplitNumber = scale.getTicks().length - 1;
-        if (nicedSplitNumber > alignToSplitNumber) {
-            interval = increaseInterval(interval);
-        }
-
-        const range = interval * alignToSplitNumber;
-        max = Math.ceil(rawExtent[1] / interval) * interval;
-        min = round(max - range);
-        // Not change the result that crossing zero.
-        if (min < 0 && rawExtent[0] >= 0) {
-            min = 0;
-            max = round(range);
-        }
-        else if (max > 0 && rawExtent[1] <= 0) {
-            max = 0;
-            min = -round(range);
-        }
-
-    }
-
-    // Adjust min, max based on the extent of alignTo. When min or max is set in alignTo scale
-    const t0 = (alignToTicks[0].value - alignToNicedTicks[0].value) / alignToInterval;
-    const t1 = (alignToTicks[alignToSplitNumber].value - alignToNicedTicks[alignToSplitNumber].value) / alignToInterval;
-
-    // NOTE: Must in setExtent -> setInterval -> setNiceExtent order.
-    intervalScaleProto.setExtent.call(scale, min + interval * t0, max + interval * t1);
-    intervalScaleProto.setInterval.call(scale, interval);
-    if (t0 || t1) {
-        intervalScaleProto.setNiceExtent.call(scale, min + interval, max - interval);
-    }
-
-    if (__DEV__) {
-        const ticks = intervalScaleProto.getTicks.call(scale);
-        if (ticks[1]
-            && (!isValueNice(interval) || getPrecisionSafe(ticks[1].value) > getPrecisionSafe(interval))
-        ) {
-            warn(
-                // eslint-disable-next-line
-                `The ticks may be not readable when set min: ${axisModel.get('min')}, max: ${axisModel.get('max')} and alignTicks: true`
-            );
-        }
-    }
-}
-
 /**
  * @return interval precision
  */

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@echarts.apache.org
For additional commands, e-mail: commits-help@echarts.apache.org