@visactor/vscale
Version:
Scales for visual encoding, used in VGrammar, VTable
57 lines (53 loc) • 2.56 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: !0
}), exports.TimeScale = void 0;
const vutils_1 = require("@visactor/vutils"), continuous_scale_1 = require("./continuous-scale"), type_1 = require("./type"), time_1 = require("./utils/time"), utils_1 = require("./utils/utils");
class TimeScale extends continuous_scale_1.ContinuousScale {
constructor(isUtc = !1) {
super(), this.type = type_1.ScaleEnum.Time, this._domain = isUtc ? [ Date.UTC(2e3, 0, 1), Date.UTC(2e3, 0, 2) ] : [ +new Date(2e3, 0, 1), +new Date(2e3, 0, 2) ],
this._isUtc = isUtc;
}
invert(y) {
return new Date(super.invert(y));
}
domain(_, slience) {
if (!_) return this._domain.map(vutils_1.toDate);
const nextDomain = Array.from(_, time_1.toDateNumber);
return this._domain = nextDomain, this.rescale(slience);
}
ticks(interval) {
const d = this.domain();
let start = d[0], stop = d[d.length - 1];
const reverse = stop < start;
reverse && ([start, stop] = [ stop, start ]);
let options = interval;
((0, vutils_1.isNumber)(interval) || (0, vutils_1.isNil)(interval)) && (options = (0,
time_1.getTickInterval)(start, stop, (0, vutils_1.isNil)(interval) ? 10 : interval, this._isUtc)),
start = options.ceil(start);
const tickValues = [];
let cur = +start, i = 0;
for (;cur <= +stop && i < 100; ) tickValues.push(new Date(cur)), cur = +options.offset(new Date(cur), 1),
i++;
return reverse ? tickValues.reverse() : tickValues;
}
tickFormat(count, specifier) {
return null == specifier ? (0, vutils_1.getTimeFormatter)((0, vutils_1.getFormatFromValue)(this._domain[0], this._isUtc), this._isUtc) : (0,
vutils_1.getTimeFormatter)(specifier, this._isUtc);
}
clone() {
return new TimeScale(this._isUtc).domain(this.domain(), !0).range(this._range, !0).unknown(this._unknown).clamp(this.clamp(), null, !0).interpolate(this._interpolate);
}
nice(interval) {
const d = this.domain();
let options = interval;
return ((0, vutils_1.isNumber)(interval) || (0, vutils_1.isNil)(interval)) && (options = (0,
time_1.getTickInterval)(d[0], d[d.length - 1], (0, vutils_1.isNil)(interval) ? 10 : interval, this._isUtc)),
options && this.domain((0, utils_1.nice)(d, options)), this;
}
utc() {
return this._isUtc;
}
}
exports.TimeScale = TimeScale;
//# sourceMappingURL=time-scale.js.map