UNPKG

@helgoland/core

Version:

233 lines (232 loc) 17 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ import { Injectable } from '@angular/core'; import { plainToClass } from 'class-transformer'; import moment from 'moment'; import { LocalStorage } from '../local-storage/local-storage.service'; import { BufferedTime, Timespan } from '../model/internal/timeInterval'; var Time = /** @class */ (function () { function Time(localStorage) { this.localStorage = localStorage; } /** * @param {?} timespan * @param {?} date * @return {?} */ Time.prototype.centerTimespan = /** * @param {?} timespan * @param {?} date * @return {?} */ function (timespan, date) { /** @type {?} */ var halfduration = this.getDuration(timespan).asMilliseconds() / 2; /** @type {?} */ var from = moment(date).subtract(halfduration).unix() * 1000; /** @type {?} */ var to = moment(date).add(halfduration).unix() * 1000; return new Timespan(from, to); }; /** * @param {?} timespan * @param {?} duration * @return {?} */ Time.prototype.centerTimespanWithDuration = /** * @param {?} timespan * @param {?} duration * @return {?} */ function (timespan, duration) { /** @type {?} */ var half = duration.asMilliseconds() / 2; /** @type {?} */ var center = this.getCenterOfTimespan(timespan); return new Timespan(center - half, center + half); }; /** * @param {?} timespan * @return {?} */ Time.prototype.getCenterOfTimespan = /** * @param {?} timespan * @return {?} */ function (timespan) { return timespan.from + (timespan.to - timespan.from) / 2; }; /** * @param {?} timespan * @return {?} */ Time.prototype.stepBack = /** * @param {?} timespan * @return {?} */ function (timespan) { /** @type {?} */ var duration = this.getDuration(timespan); /** @type {?} */ var from = moment(timespan.from).subtract(duration).unix() * 1000; /** @type {?} */ var to = moment(timespan.to).subtract(duration).unix() * 1000; return new Timespan(from, to); }; /** * @param {?} timespan * @return {?} */ Time.prototype.stepForward = /** * @param {?} timespan * @return {?} */ function (timespan) { /** @type {?} */ var duration = this.getDuration(timespan); /** @type {?} */ var from = moment(timespan.from).add(duration).unix() * 1000; /** @type {?} */ var to = moment(timespan.to).add(duration).unix() * 1000; return new Timespan(from, to); }; /** * @param {?} timeInterval * @param {?} from * @param {?} to * @return {?} */ Time.prototype.overlaps = /** * @param {?} timeInterval * @param {?} from * @param {?} to * @return {?} */ function (timeInterval, from, to) { /** @type {?} */ var timespan = this.createTimespanOfInterval(timeInterval); if (timespan.from <= to && timespan.to >= from) { return true; } return false; }; /** * @param {?} timeInterval * @return {?} */ Time.prototype.createTimespanOfInterval = /** * @param {?} timeInterval * @return {?} */ function (timeInterval) { if (timeInterval instanceof Timespan) { return timeInterval; } else if (timeInterval instanceof BufferedTime) { /** @type {?} */ var duration = moment.duration(timeInterval.bufferInterval / 2); /** @type {?} */ var from = moment(timeInterval.timestamp).subtract(duration).unix() * 1000; /** @type {?} */ var to = moment(timeInterval.timestamp).add(duration).unix() * 1000; return new Timespan(from, to); } else { console.error('Wrong time interval!'); } }; /** * @param {?} timespan * @param {?} factor * @return {?} */ Time.prototype.getBufferedTimespan = /** * @param {?} timespan * @param {?} factor * @return {?} */ function (timespan, factor) { /** @type {?} */ var durationMillis = this.getDuration(timespan).asMilliseconds(); /** @type {?} */ var from = moment(timespan.from).subtract(durationMillis * factor).unix() * 1000; /** @type {?} */ var to = moment(timespan.to).add(durationMillis * factor).unix() * 1000; return new Timespan(from, to); }; /** * @param {?} param * @param {?} timespan * @return {?} */ Time.prototype.saveTimespan = /** * @param {?} param * @param {?} timespan * @return {?} */ function (param, timespan) { this.localStorage.save(param, timespan); }; /** * @param {?} param * @return {?} */ Time.prototype.loadTimespan = /** * @param {?} param * @return {?} */ function (param) { /** @type {?} */ var json = this.localStorage.load(param); if (json) { return plainToClass(Timespan, json); } return null; }; /** * @return {?} */ Time.prototype.initTimespan = /** * @return {?} */ function () { /** @type {?} */ var now = new Date(); /** @type {?} */ var start = moment(now).startOf('day').unix() * 1000; /** @type {?} */ var end = moment(now).endOf('day').unix() * 1000; return new Timespan(start, end); }; /** * @param {?} timespan * @return {?} */ Time.prototype.getDuration = /** * @param {?} timespan * @return {?} */ function (timespan) { /** @type {?} */ var from = moment(timespan.from); /** @type {?} */ var to = moment(timespan.to); return moment.duration(to.diff(from)); }; Time.decorators = [ { type: Injectable }, ]; /** @nocollapse */ Time.ctorParameters = function () { return [ { type: LocalStorage } ]; }; return Time; }()); export { Time }; if (false) { /** @type {?} */ Time.prototype.localStorage; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGhlbGdvbGFuZC9jb3JlLyIsInNvdXJjZXMiOlsibGliL3RpbWUvdGltZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRCxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFFNUIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxZQUFZLEVBQWdCLFFBQVEsRUFBRSxNQUFNLGdDQUFnQyxDQUFDOztJQUtsRixjQUNjLFlBQTBCO1FBQTFCLGlCQUFZLEdBQVosWUFBWSxDQUFjO0tBQ25DOzs7Ozs7SUFFRSw2QkFBYzs7Ozs7Y0FBQyxRQUFrQixFQUFFLElBQVU7O1FBQ2hELElBQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUMsY0FBYyxFQUFFLEdBQUcsQ0FBQyxDQUFDOztRQUNyRSxJQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQzs7UUFDL0QsSUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUM7UUFDeEQsTUFBTSxDQUFDLElBQUksUUFBUSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQzs7Ozs7OztJQUczQix5Q0FBMEI7Ozs7O2NBQUMsUUFBa0IsRUFBRSxRQUF5Qjs7UUFDM0UsSUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLGNBQWMsRUFBRSxHQUFHLENBQUMsQ0FBQzs7UUFDM0MsSUFBTSxNQUFNLEdBQUcs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QUN2RCxJQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQztRQUNuRCxNQUFNLENBQUMsSUFBSSxRQUFRLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDOzs7Ozs7SUFHNUIsMEJBQVc7Ozs7Y0FBQyxRQUFrQjs7UUFDbEMsSUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQzs7UUFDbkMsSUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMvQixNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7OztnQkF4RjdDLFVBQVU7Ozs7Z0JBSEYsWUFBWTs7ZUFKckI7O1NBUWEsSUFBSSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHBsYWluVG9DbGFzcyB9IGZyb20gJ2NsYXNzLXRyYW5zZm9ybWVyJztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcblxuaW1wb3J0IHsgTG9jYWxTdG9yYWdlIH0gZnJvbSAnLi4vbG9jYWwtc3RvcmFnZS9sb2NhbC1zdG9yYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgQnVmZmVyZWRUaW1lLCBUaW1lSW50ZXJ2YWwsIFRpbWVzcGFuIH0gZnJvbSAnLi4vbW9kZWwvaW50ZXJuYWwvdGltZUludGVydmFsJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFRpbWUge1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByb3RlY3RlZCBsb2NhbFN0b3JhZ2U6IExvY2FsU3RvcmFnZVxuICAgICkgeyB9XG5cbiAgICBwdWJsaWMgY2VudGVyVGltZXNwYW4odGltZXNwYW46IFRpbWVzcGFuLCBkYXRlOiBEYXRlKTogVGltZXNwYW4ge1xuICAgICAgICBjb25zdCBoYWxmZHVyYXRpb24gPSB0aGlzLmdldER1cmF0aW9uKHRpbWVzcGFuKS5hc01pbGxpc2Vjb25kcygpIC8gMjtcbiAgICAgICAgY29uc3QgZnJvbSA9IG1vbWVudChkYXRlKS5zdWJ0cmFjdChoYWxmZHVyYXRpb24pLnVuaXgoKSAqIDEwMDA7XG4gICAgICAgIGNvbnN0IHRvID0gbW9tZW50KGRhdGUpLmFkZChoYWxmZHVyYXRpb24pLnVuaXgoKSAqIDEwMDA7XG4gICAgICAgIHJldHVybiBuZXcgVGltZXNwYW4oZnJvbSwgdG8pO1xuICAgIH1cblxuICAgIHB1YmxpYyBjZW50ZXJUaW1lc3BhbldpdGhEdXJhdGlvbih0aW1lc3BhbjogVGltZXNwYW4sIGR1cmF0aW9uOiBtb21lbnQuRHVyYXRpb24pOiBUaW1lc3BhbiB7XG4gICAgICAgIGNvbnN0IGhhbGYgPSBkdXJhdGlvbi5hc01pbGxpc2Vjb25kcygpIC8gMjtcbiAgICAgICAgY29uc3QgY2VudGVyID0gdGhpcy5nZXRDZW50ZXJPZlRpbWVzcGFuKHRpbWVzcGFuKTtcbiAgICAgICAgcmV0dXJuIG5ldyBUaW1lc3BhbihjZW50ZXIgLSBoYWxmLCBjZW50ZXIgKyBoYWxmKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Q2VudGVyT2ZUaW1lc3Bhbih0aW1lc3BhbjogVGltZXNwYW4pOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGltZXNwYW4uZnJvbSArICh0aW1lc3Bhbi50byAtIHRpbWVzcGFuLmZyb20pIC8gMjtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RlcEJhY2sodGltZXNwYW46IFRpbWVzcGFuKTogVGltZXNwYW4ge1xuICAgICAgICBjb25zdCBkdXJhdGlvbiA9IHRoaXMuZ2V0RHVyYXRpb24odGltZXNwYW4pO1xuICAgICAgICBjb25zdCBmcm9tID0gbW9tZW50KHRpbWVzcGFuLmZyb20pLnN1YnRyYWN0KGR1cmF0aW9uKS51bml4KCkgKiAxMDAwO1xuICAgICAgICBjb25zdCB0byA9IG1vbWVudCh0aW1lc3Bhbi50bykuc3VidHJhY3QoZHVyYXRpb24pLnVuaXgoKSAqIDEwMDA7XG4gICAgICAgIHJldHVybiBuZXcgVGltZXNwYW4oZnJvbSwgdG8pO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGVwRm9yd2FyZCh0aW1lc3BhbjogVGltZXNwYW4pOiBUaW1lc3BhbiB7XG4gICAgICAgIGNvbnN0IGR1cmF0aW9uID0gdGhpcy5nZXREdXJhdGlvbih0aW1lc3Bhbik7XG4gICAgICAgIGNvbnN0IGZyb20gPSBtb21lbnQodGltZXNwYW4uZnJvbSkuYWRkKGR1cmF0aW9uKS51bml4KCkgKiAxMDAwO1xuICAgICAgICBjb25zdCB0byA9IG1vbWVudCh0aW1lc3Bhbi50bykuYWRkKGR1cmF0aW9uKS51bml4KCkgKiAxMDAwO1xuICAgICAgICByZXR1cm4gbmV3IFRpbWVzcGFuKGZyb20sIHRvKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcmxhcHModGltZUludGVydmFsOiBUaW1lSW50ZXJ2YWwsIGZyb206IG51bWJlciwgdG86IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCB0aW1lc3BhbiA9IHRoaXMuY3JlYXRlVGltZXNwYW5PZkludGVydmFsKHRpbWVJbnRlcnZhbCk7XG4gICAgICAgIGlmICh0aW1lc3Bhbi5mcm9tIDw9IHRvICYmIHRpbWVzcGFuLnRvID49IGZyb20pIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlVGltZXNwYW5PZkludGVydmFsKHRpbWVJbnRlcnZhbDogVGltZUludGVydmFsKTogVGltZXNwYW4ge1xuICAgICAgICBpZiAodGltZUludGVydmFsIGluc3RhbmNlb2YgVGltZXNwYW4pIHtcbiAgICAgICAgICAgIHJldHVybiB0aW1lSW50ZXJ2YWw7XG4gICAgICAgIH0gZWxzZSBpZiAodGltZUludGVydmFsIGluc3RhbmNlb2YgQnVmZmVyZWRUaW1lKSB7XG4gICAgICAgICAgICBjb25zdCBkdXJhdGlvbiA9IG1vbWVudC5kdXJhdGlvbih0aW1lSW50ZXJ2YWwuYnVmZmVySW50ZXJ2YWwgLyAyKTtcbiAgICAgICAgICAgIGNvbnN0IGZyb20gPSBtb21lbnQodGltZUludGVydmFsLnRpbWVzdGFtcCkuc3VidHJhY3QoZHVyYXRpb24pLnVuaXgoKSAqIDEwMDA7XG4gICAgICAgICAgICBjb25zdCB0byA9IG1vbWVudCh0aW1lSW50ZXJ2YWwudGltZXN0YW1wKS5hZGQoZHVyYXRpb24pLnVuaXgoKSAqIDEwMDA7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFRpbWVzcGFuKGZyb20sIHRvKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1dyb25nIHRpbWUgaW50ZXJ2YWwhJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0QnVmZmVyZWRUaW1lc3Bhbih0aW1lc3BhbjogVGltZXNwYW4sIGZhY3RvcjogbnVtYmVyKTogVGltZXNwYW4ge1xuICAgICAgICBjb25zdCBkdXJhdGlvbk1pbGxpcyA9IHRoaXMuZ2V0RHVyYXRpb24odGltZXNwYW4pLmFzTWlsbGlzZWNvbmRzKCk7XG4gICAgICAgIGNvbnN0IGZyb20gPSBtb21lbnQodGltZXNwYW4uZnJvbSkuc3VidHJhY3QoZHVyYXRpb25NaWxsaXMgKiBmYWN0b3IpLnVuaXgoKSAqIDEwMDA7XG4gICAgICAgIGNvbnN0IHRvID0gbW9tZW50KHRpbWVzcGFuLnRvKS5hZGQoZHVyYXRpb25NaWxsaXMgKiBmYWN0b3IpLnVuaXgoKSAqIDEwMDA7XG4gICAgICAgIHJldHVybiBuZXcgVGltZXNwYW4oZnJvbSwgdG8pO1xuICAgIH1cblxuICAgIHB1YmxpYyBzYXZlVGltZXNwYW4ocGFyYW06IHN0cmluZywgdGltZXNwYW46IFRpbWVzcGFuKSB7XG4gICAgICAgIHRoaXMubG9jYWxTdG9yYWdlLnNhdmUocGFyYW0sIHRpbWVzcGFuKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbG9hZFRpbWVzcGFuKHBhcmFtOiBzdHJpbmcpOiBUaW1lc3BhbiB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLmxvY2FsU3RvcmFnZS5sb2FkKHBhcmFtKTtcbiAgICAgICAgaWYgKGpzb24pIHtcbiAgICAgICAgICAgIHJldHVybiBwbGFpblRvQ2xhc3M8VGltZXNwYW4sIG9iamVjdD4oVGltZXNwYW4sIGpzb24pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHB1YmxpYyBpbml0VGltZXNwYW4oKTogVGltZXNwYW4ge1xuICAgICAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICAgICAgICBjb25zdCBzdGFydCA9IG1vbWVudChub3cpLnN0YXJ0T2YoJ2RheScpLnVuaXgoKSAqIDEwMDA7XG4gICAgICAgIGNvbnN0IGVuZCA9IG1vbWVudChub3cpLmVuZE9mKCdkYXknKS51bml4KCkgKiAxMDAwO1xuICAgICAgICByZXR1cm4gbmV3IFRpbWVzcGFuKHN0YXJ0LCBlbmQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RHVyYXRpb24odGltZXNwYW46IFRpbWVzcGFuKTogbW9tZW50LkR1cmF0aW9uIHtcbiAgICAgICAgY29uc3QgZnJvbSA9IG1vbWVudCh0aW1lc3Bhbi5mcm9tKTtcbiAgICAgICAgY29uc3QgdG8gPSBtb21lbnQodGltZXNwYW4udG8pO1xuICAgICAgICByZXR1cm4gbW9tZW50LmR1cmF0aW9uKHRvLmRpZmYoZnJvbSkpO1xuICAgIH1cbn1cbiJdfQ==