@helgoland/core
Version:
233 lines (232 loc) • 17 kB
JavaScript
/**
* @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==