UNPKG

cione-comp-lib

Version:

`$ yarn add cione-comp-lib` 或者 `$ npm i cione-comp-lib -S`

188 lines (187 loc) 5.93 kB
import { __extends } from "../../../tslib/tslib.es6.mjs"; import { getPrecision, round } from "../util/number.mjs"; import { addCommas } from "../util/format.mjs"; import Scale from "./Scale.mjs"; import { contain, normalize, scale, getIntervalPrecision, intervalScaleNiceTicks } from "./helper.mjs"; var roundNumber = round; var IntervalScale = function(_super) { __extends(IntervalScale2, _super); function IntervalScale2() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.type = "interval"; _this._interval = 0; _this._intervalPrecision = 2; return _this; } IntervalScale2.prototype.parse = function(val) { return val; }; IntervalScale2.prototype.contain = function(val) { return contain(val, this._extent); }; IntervalScale2.prototype.normalize = function(val) { return normalize(val, this._extent); }; IntervalScale2.prototype.scale = function(val) { return scale(val, this._extent); }; IntervalScale2.prototype.setExtent = function(start, end) { var thisExtent = this._extent; if (!isNaN(start)) { thisExtent[0] = parseFloat(start); } if (!isNaN(end)) { thisExtent[1] = parseFloat(end); } }; IntervalScale2.prototype.unionExtent = function(other) { var extent = this._extent; other[0] < extent[0] && (extent[0] = other[0]); other[1] > extent[1] && (extent[1] = other[1]); this.setExtent(extent[0], extent[1]); }; IntervalScale2.prototype.getInterval = function() { return this._interval; }; IntervalScale2.prototype.setInterval = function(interval) { this._interval = interval; this._niceExtent = this._extent.slice(); this._intervalPrecision = getIntervalPrecision(interval); }; IntervalScale2.prototype.getTicks = function(expandToNicedExtent) { var interval = this._interval; var extent = this._extent; var niceTickExtent = this._niceExtent; var intervalPrecision = this._intervalPrecision; var ticks = []; if (!interval) { return ticks; } var safeLimit = 1e4; if (extent[0] < niceTickExtent[0]) { if (expandToNicedExtent) { ticks.push({ value: roundNumber(niceTickExtent[0] - interval, intervalPrecision) }); } else { ticks.push({ value: extent[0] }); } } var tick = niceTickExtent[0]; while (tick <= niceTickExtent[1]) { ticks.push({ value: tick }); tick = roundNumber(tick + interval, intervalPrecision); if (tick === ticks[ticks.length - 1].value) { break; } if (ticks.length > safeLimit) { return []; } } var lastNiceTick = ticks.length ? ticks[ticks.length - 1].value : niceTickExtent[1]; if (extent[1] > lastNiceTick) { if (expandToNicedExtent) { ticks.push({ value: roundNumber(lastNiceTick + interval, intervalPrecision) }); } else { ticks.push({ value: extent[1] }); } } return ticks; }; IntervalScale2.prototype.getMinorTicks = function(splitNumber) { var ticks = this.getTicks(true); var minorTicks = []; var extent = this.getExtent(); for (var i = 1; i < ticks.length; i++) { var nextTick = ticks[i]; var prevTick = ticks[i - 1]; var count = 0; var minorTicksGroup = []; var interval = nextTick.value - prevTick.value; var minorInterval = interval / splitNumber; while (count < splitNumber - 1) { var minorTick = roundNumber(prevTick.value + (count + 1) * minorInterval); if (minorTick > extent[0] && minorTick < extent[1]) { minorTicksGroup.push(minorTick); } count++; } minorTicks.push(minorTicksGroup); } return minorTicks; }; IntervalScale2.prototype.getLabel = function(data, opt) { if (data == null) { return ""; } var precision = opt && opt.precision; if (precision == null) { precision = getPrecision(data.value) || 0; } else if (precision === "auto") { precision = this._intervalPrecision; } var dataNum = roundNumber(data.value, precision, true); return addCommas(dataNum); }; IntervalScale2.prototype.calcNiceTicks = function(splitNumber, minInterval, maxInterval) { splitNumber = splitNumber || 5; var extent = this._extent; var span = extent[1] - extent[0]; if (!isFinite(span)) { return; } if (span < 0) { span = -span; extent.reverse(); } var result = intervalScaleNiceTicks(extent, splitNumber, minInterval, maxInterval); this._intervalPrecision = result.intervalPrecision; this._interval = result.interval; this._niceExtent = result.niceTickExtent; }; IntervalScale2.prototype.calcNiceExtent = function(opt) { var extent = this._extent; if (extent[0] === extent[1]) { if (extent[0] !== 0) { var expandSize = Math.abs(extent[0]); if (!opt.fixMax) { extent[1] += expandSize / 2; extent[0] -= expandSize / 2; } else { extent[0] -= expandSize / 2; } } else { extent[1] = 1; } } var span = extent[1] - extent[0]; if (!isFinite(span)) { extent[0] = 0; extent[1] = 1; } this.calcNiceTicks(opt.splitNumber, opt.minInterval, opt.maxInterval); var interval = this._interval; if (!opt.fixMin) { extent[0] = roundNumber(Math.floor(extent[0] / interval) * interval); } if (!opt.fixMax) { extent[1] = roundNumber(Math.ceil(extent[1] / interval) * interval); } }; IntervalScale2.prototype.setNiceExtent = function(min, max) { this._niceExtent = [min, max]; }; IntervalScale2.type = "interval"; return IntervalScale2; }(Scale); Scale.registerClass(IntervalScale); var IntervalScale$1 = IntervalScale; export { IntervalScale$1 as default };