cione-comp-lib
Version:
`$ yarn add cione-comp-lib` 或者 `$ npm i cione-comp-lib -S`
298 lines (297 loc) • 8.22 kB
JavaScript
import { reduce, map, isString } from "../../../zrender/lib/core/util.mjs";
var RADIAN_EPSILON = 1e-4;
var ROUND_SUPPORTED_PRECISION_MAX = 20;
function _trim(str) {
return str.replace(/^\s+|\s+$/g, "");
}
function linearMap(val, domain, range, clamp) {
var d0 = domain[0];
var d1 = domain[1];
var r0 = range[0];
var r1 = range[1];
var subDomain = d1 - d0;
var subRange = r1 - r0;
if (subDomain === 0) {
return subRange === 0 ? r0 : (r0 + r1) / 2;
}
if (clamp) {
if (subDomain > 0) {
if (val <= d0) {
return r0;
} else if (val >= d1) {
return r1;
}
} else {
if (val >= d0) {
return r0;
} else if (val <= d1) {
return r1;
}
}
} else {
if (val === d0) {
return r0;
}
if (val === d1) {
return r1;
}
}
return (val - d0) / subDomain * subRange + r0;
}
function parsePercent(percent, all) {
switch (percent) {
case "center":
case "middle":
percent = "50%";
break;
case "left":
case "top":
percent = "0%";
break;
case "right":
case "bottom":
percent = "100%";
break;
}
if (isString(percent)) {
if (_trim(percent).match(/%$/)) {
return parseFloat(percent) / 100 * all;
}
return parseFloat(percent);
}
return percent == null ? NaN : +percent;
}
function round(x, precision, returnStr) {
if (precision == null) {
precision = 10;
}
precision = Math.min(Math.max(0, precision), ROUND_SUPPORTED_PRECISION_MAX);
x = (+x).toFixed(precision);
return returnStr ? x : +x;
}
function asc(arr) {
arr.sort(function(a, b) {
return a - b;
});
return arr;
}
function getPrecision(val) {
val = +val;
if (isNaN(val)) {
return 0;
}
if (val > 1e-14) {
var e = 1;
for (var i = 0; i < 15; i++, e *= 10) {
if (Math.round(val * e) / e === val) {
return i;
}
}
}
return getPrecisionSafe(val);
}
function getPrecisionSafe(val) {
var str = val.toString().toLowerCase();
var eIndex = str.indexOf("e");
var exp = eIndex > 0 ? +str.slice(eIndex + 1) : 0;
var significandPartLen = eIndex > 0 ? eIndex : str.length;
var dotIndex = str.indexOf(".");
var decimalPartLen = dotIndex < 0 ? 0 : significandPartLen - 1 - dotIndex;
return Math.max(0, decimalPartLen - exp);
}
function getPixelPrecision(dataExtent, pixelExtent) {
var log = Math.log;
var LN10 = Math.LN10;
var dataQuantity = Math.floor(log(dataExtent[1] - dataExtent[0]) / LN10);
var sizeQuantity = Math.round(log(Math.abs(pixelExtent[1] - pixelExtent[0])) / LN10);
var precision = Math.min(Math.max(-dataQuantity + sizeQuantity, 0), 20);
return !isFinite(precision) ? 20 : precision;
}
function getPercentWithPrecision(valueList, idx, precision) {
if (!valueList[idx]) {
return 0;
}
var seats = getPercentSeats(valueList, precision);
return seats[idx] || 0;
}
function getPercentSeats(valueList, precision) {
var sum = reduce(valueList, function(acc, val) {
return acc + (isNaN(val) ? 0 : val);
}, 0);
if (sum === 0) {
return [];
}
var digits = Math.pow(10, precision);
var votesPerQuota = map(valueList, function(val) {
return (isNaN(val) ? 0 : val) / sum * digits * 100;
});
var targetSeats = digits * 100;
var seats = map(votesPerQuota, function(votes) {
return Math.floor(votes);
});
var currentSum = reduce(seats, function(acc, val) {
return acc + val;
}, 0);
var remainder = map(votesPerQuota, function(votes, idx) {
return votes - seats[idx];
});
while (currentSum < targetSeats) {
var max = Number.NEGATIVE_INFINITY;
var maxId = null;
for (var i = 0, len = remainder.length; i < len; ++i) {
if (remainder[i] > max) {
max = remainder[i];
maxId = i;
}
}
++seats[maxId];
remainder[maxId] = 0;
++currentSum;
}
return map(seats, function(seat) {
return seat / digits;
});
}
function addSafe(val0, val1) {
var maxPrecision = Math.max(getPrecision(val0), getPrecision(val1));
var sum = val0 + val1;
return maxPrecision > ROUND_SUPPORTED_PRECISION_MAX ? sum : round(sum, maxPrecision);
}
var MAX_SAFE_INTEGER = 9007199254740991;
function remRadian(radian) {
var pi2 = Math.PI * 2;
return (radian % pi2 + pi2) % pi2;
}
function isRadianAroundZero(val) {
return val > -RADIAN_EPSILON && val < RADIAN_EPSILON;
}
var TIME_REG = /^(?:(\d{4})(?:[-\/](\d{1,2})(?:[-\/](\d{1,2})(?:[T ](\d{1,2})(?::(\d{1,2})(?::(\d{1,2})(?:[.,](\d+))?)?)?(Z|[\+\-]\d\d:?\d\d)?)?)?)?)?$/;
function parseDate(value) {
if (value instanceof Date) {
return value;
} else if (isString(value)) {
var match = TIME_REG.exec(value);
if (!match) {
return new Date(NaN);
}
if (!match[8]) {
return new Date(+match[1], +(match[2] || 1) - 1, +match[3] || 1, +match[4] || 0, +(match[5] || 0), +match[6] || 0, match[7] ? +match[7].substring(0, 3) : 0);
} else {
var hour = +match[4] || 0;
if (match[8].toUpperCase() !== "Z") {
hour -= +match[8].slice(0, 3);
}
return new Date(Date.UTC(+match[1], +(match[2] || 1) - 1, +match[3] || 1, hour, +(match[5] || 0), +match[6] || 0, match[7] ? +match[7].substring(0, 3) : 0));
}
} else if (value == null) {
return new Date(NaN);
}
return new Date(Math.round(value));
}
function quantity(val) {
return Math.pow(10, quantityExponent(val));
}
function quantityExponent(val) {
if (val === 0) {
return 0;
}
var exp = Math.floor(Math.log(val) / Math.LN10);
if (val / Math.pow(10, exp) >= 10) {
exp++;
}
return exp;
}
function nice(val, round2) {
var exponent = quantityExponent(val);
var exp10 = Math.pow(10, exponent);
var f = val / exp10;
var nf;
if (round2) {
if (f < 1.5) {
nf = 1;
} else if (f < 2.5) {
nf = 2;
} else if (f < 4) {
nf = 3;
} else if (f < 7) {
nf = 5;
} else {
nf = 10;
}
} else {
if (f < 1) {
nf = 1;
} else if (f < 2) {
nf = 2;
} else if (f < 3) {
nf = 3;
} else if (f < 5) {
nf = 5;
} else {
nf = 10;
}
}
val = nf * exp10;
return exponent >= -20 ? +val.toFixed(exponent < 0 ? -exponent : 0) : val;
}
function quantile(ascArr, p) {
var H = (ascArr.length - 1) * p + 1;
var h = Math.floor(H);
var v = +ascArr[h - 1];
var e = H - h;
return e ? v + e * (ascArr[h] - v) : v;
}
function reformIntervals(list) {
list.sort(function(a, b) {
return littleThan(a, b, 0) ? -1 : 1;
});
var curr = -Infinity;
var currClose = 1;
for (var i = 0; i < list.length; ) {
var interval = list[i].interval;
var close_1 = list[i].close;
for (var lg = 0; lg < 2; lg++) {
if (interval[lg] <= curr) {
interval[lg] = curr;
close_1[lg] = !lg ? 1 - currClose : 1;
}
curr = interval[lg];
currClose = close_1[lg];
}
if (interval[0] === interval[1] && close_1[0] * close_1[1] !== 1) {
list.splice(i, 1);
} else {
i++;
}
}
return list;
function littleThan(a, b, lg2) {
return a.interval[lg2] < b.interval[lg2] || a.interval[lg2] === b.interval[lg2] && (a.close[lg2] - b.close[lg2] === (!lg2 ? 1 : -1) || !lg2 && littleThan(a, b, 1));
}
}
function numericToNumber(val) {
var valFloat = parseFloat(val);
return valFloat == val && (valFloat !== 0 || !isString(val) || val.indexOf("x") <= 0) ? valFloat : NaN;
}
function isNumeric(val) {
return !isNaN(numericToNumber(val));
}
function getRandomIdBase() {
return Math.round(Math.random() * 9);
}
function getGreatestCommonDividor(a, b) {
if (b === 0) {
return a;
}
return getGreatestCommonDividor(b, a % b);
}
function getLeastCommonMultiple(a, b) {
if (a == null) {
return b;
}
if (b == null) {
return a;
}
return a * b / getGreatestCommonDividor(a, b);
}
export { MAX_SAFE_INTEGER, addSafe, asc, getGreatestCommonDividor, getLeastCommonMultiple, getPercentSeats, getPercentWithPrecision, getPixelPrecision, getPrecision, getPrecisionSafe, getRandomIdBase, isNumeric, isRadianAroundZero, linearMap, nice, numericToNumber, parseDate, parsePercent, quantile, quantity, quantityExponent, reformIntervals, remRadian, round };