angular-material-datatransfer-lib
Version:
A HTML5 datatransfer UI for handling upload and download of multiple simultaneous files.
180 lines • 15.9 kB
JavaScript
/**
* @fileoverview added by tsickle
* Generated from: lib/models/progress-container.model.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { ReflectiveInjector } from '@angular/core';
import { DateUtil } from '../utils/date.util';
import { SizeContainer } from './size-container.model';
import { DecimalByteUnit } from '../enums/decimal-byte-unit.enum';
/**
* @record
*/
export function IProgressContainer() { }
if (false) {
/** @type {?} */
IProgressContainer.prototype.total;
/** @type {?} */
IProgressContainer.prototype.progressTimestamp;
/** @type {?} */
IProgressContainer.prototype.bitrateTimestamp;
/** @type {?} */
IProgressContainer.prototype.bitrate;
/** @type {?} */
IProgressContainer.prototype.percent;
/** @type {?} */
IProgressContainer.prototype.displayBitrate;
/** @type {?} */
IProgressContainer.prototype.displayTimeLeft;
/** @type {?} */
IProgressContainer.prototype.loadedSizeContainer;
/** @type {?} */
IProgressContainer.prototype.totalSizeContainer;
/**
* @param {?} total
* @return {?}
*/
IProgressContainer.prototype.reset = function (total) { };
/**
* @param {?} now
* @param {?} loaded
* @param {?} interval
* @return {?}
*/
IProgressContainer.prototype.updateProgress = function (now, loaded, interval) { };
/**
* @param {?} now
* @param {?} loaded
* @param {?} interval
* @return {?}
*/
IProgressContainer.prototype.updateBitrate = function (now, loaded, interval) { };
}
var ProgressContainer = /** @class */ (function () {
function ProgressContainer(total) {
/** @type {?} */
var injector = ReflectiveInjector.resolveAndCreate([DateUtil]);
this.dateUtil = injector.get(DateUtil);
this.bitrateSizeContainer = new SizeContainer();
this.loadedSizeContainer = new SizeContainer();
this.totalSizeContainer = new SizeContainer();
this.reset(total);
}
/**
* @param {?} total
* @return {?}
*/
ProgressContainer.prototype.reset = /**
* @param {?} total
* @return {?}
*/
function (total) {
this.progressTimestamp = this.dateUtil.now();
this.bitrateTimestamp = this.dateUtil.now();
this.loaded = 0;
this.bitrate = 0;
this.percent = 0;
this.total = total;
this.displayBitrate = undefined;
this.displayTimeLeft = undefined;
this.bitrateSizeContainer.updateDecimal(DecimalByteUnit.Byte, this.bitrate);
this.loadedSizeContainer.updateDecimal(DecimalByteUnit.Byte, this.loaded);
this.totalSizeContainer.updateDecimal(DecimalByteUnit.Byte, this.total);
};
/**
* @param {?} now
* @param {?} loaded
* @param {?} interval
* @return {?}
*/
ProgressContainer.prototype.updateProgress = /**
* @param {?} now
* @param {?} loaded
* @param {?} interval
* @return {?}
*/
function (now, loaded, interval) {
/** @type {?} */
var timeDiff = now - this.progressTimestamp;
// console.log('loaded: ' + loaded + ' total: ' + this.total);
if (!this.percent || timeDiff > interval) {
this.percent = Number((loaded / this.total * 100).toFixed(2));
this.loaded = loaded;
this.loadedSizeContainer.updateDecimal(DecimalByteUnit.Byte, this.loaded);
this.progressTimestamp = now;
if (this.bitrate > 0) {
this.displayTimeLeft = this.dateUtil.format((this.total - this.loaded) * 8 / this.bitrate);
}
else {
this.displayTimeLeft = this.dateUtil.format(0);
}
}
else if (loaded >= this.total) {
this.percent = 100;
this.loaded = this.total;
}
};
/**
* @param {?} now
* @param {?} loaded
* @param {?} interval
* @return {?}
*/
ProgressContainer.prototype.updateBitrate = /**
* @param {?} now
* @param {?} loaded
* @param {?} interval
* @return {?}
*/
function (now, loaded, interval) {
/** @type {?} */
var timeDiff = now - this.bitrateTimestamp;
if (!this.bitrate || timeDiff > interval) {
this.bitrate = (loaded - this.loaded) * (1000 / timeDiff) * 8;
if (this.bitrate === Number.POSITIVE_INFINITY || this.bitrate === Number.NEGATIVE_INFINITY) {
this.bitrate = 0;
}
this.bitrateSizeContainer.updateDecimal(DecimalByteUnit.Byte, this.bitrate / 8);
this.displayBitrate = this.bitrateSizeContainer.displaySize + ' ' + this.bitrateSizeContainer.displayUnit + '/s';
this.bitrateTimestamp = now;
}
};
return ProgressContainer;
}());
export { ProgressContainer };
if (false) {
/**
* @type {?}
* @private
*/
ProgressContainer.prototype.dateUtil;
/**
* @type {?}
* @private
*/
ProgressContainer.prototype.loaded;
/**
* @type {?}
* @private
*/
ProgressContainer.prototype.bitrateSizeContainer;
/** @type {?} */
ProgressContainer.prototype.total;
/** @type {?} */
ProgressContainer.prototype.progressTimestamp;
/** @type {?} */
ProgressContainer.prototype.bitrateTimestamp;
/** @type {?} */
ProgressContainer.prototype.bitrate;
/** @type {?} */
ProgressContainer.prototype.percent;
/** @type {?} */
ProgressContainer.prototype.displayBitrate;
/** @type {?} */
ProgressContainer.prototype.displayTimeLeft;
/** @type {?} */
ProgressContainer.prototype.loadedSizeContainer;
/** @type {?} */
ProgressContainer.prototype.totalSizeContainer;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3Jlc3MtY29udGFpbmVyLm1vZGVsLmpzIiwic291cmNlUm9vdCI6Im5nOi8vYW5ndWxhci1tYXRlcmlhbC1kYXRhdHJhbnNmZXItbGliLyIsInNvdXJjZXMiOlsibGliL21vZGVscy9wcm9ncmVzcy1jb250YWluZXIubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzlDLE9BQU8sRUFBa0IsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDOzs7O0FBRWxFLHdDQWFDOzs7SUFaRyxtQ0FBYzs7SUFDZCwrQ0FBMEI7O0lBQzFCLDhDQUF5Qjs7SUFDekIscUNBQWdCOztJQUNoQixxQ0FBZ0I7O0lBQ2hCLDRDQUF1Qjs7SUFDdkIsNkNBQXdCOztJQUN4QixpREFBb0M7O0lBQ3BDLGdEQUFtQzs7Ozs7SUFDbkMsMERBQTJCOzs7Ozs7O0lBQzNCLG1GQUFvRTs7Ozs7OztJQUNwRSxrRkFBbUU7O0FBR3ZFO0lBZUksMkJBQW1CLEtBQWE7O1lBQ3RCLFFBQVEsR0FBRyxrQkFBa0IsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2hFLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUV2QyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxhQUFhLEVBQUUsQ0FBQztRQUNoRCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxhQUFhLEVBQUUsQ0FBQztRQUMvQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxhQUFhLEVBQUUsQ0FBQztRQUM5QyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RCLENBQUM7Ozs7O0lB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QWlCLElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxNQUFNLENBQUMsaUJBQWlCLEVBQUU7Z0JBQ3hGLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO2FBQ3BCO1lBQ0QsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDaEYsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsV0FBVyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztZQUNqSCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsR0FBRyxDQUFDO1NBQy9CO0lBQ0wsQ0FBQztJQUNMLHdCQUFDO0FBQUQsQ0FBQyxBQXRFRCxJQXNFQzs7Ozs7OztJQXJFRyxxQ0FBMkI7Ozs7O0lBQzNCLG1DQUF1Qjs7Ozs7SUFDdkIsaURBQTZDOztJQUU3QyxrQ0FBcUI7O0lBQ3JCLDhDQUFpQzs7SUFDakMsNkNBQWdDOztJQUNoQyxvQ0FBdUI7O0lBQ3ZCLG9DQUF1Qjs7SUFDdkIsMkNBQThCOztJQUM5Qiw0Q0FBK0I7O0lBQy9CLGdEQUEyQzs7SUFDM0MsK0NBQTBDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmVmbGVjdGl2ZUluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IERhdGVVdGlsIH0gZnJvbSAnLi4vdXRpbHMvZGF0ZS51dGlsJztcclxuaW1wb3J0IHsgSVNpemVDb250YWluZXIsIFNpemVDb250YWluZXIgfSBmcm9tICcuL3NpemUtY29udGFpbmVyLm1vZGVsJztcclxuaW1wb3J0IHsgRGVjaW1hbEJ5dGVVbml0IH0gZnJvbSAnLi4vZW51bXMvZGVjaW1hbC1ieXRlLXVuaXQuZW51bSc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElQcm9ncmVzc0NvbnRhaW5lciB7XHJcbiAgICB0b3RhbDogbnVtYmVyOyAvLyBieXRlc1xyXG4gICAgcHJvZ3Jlc3NUaW1lc3RhbXA6IG51bWJlcjsgLy8gbWlsbGlzZWNvbmRzXHJcbiAgICBiaXRyYXRlVGltZXN0YW1wOiBudW1iZXI7IC8vIG1pbGxpc2Vjb25kc1xyXG4gICAgYml0cmF0ZTogbnVtYmVyOyAvLyBiaXQvc1xyXG4gICAgcGVyY2VudDogbnVtYmVyOyAvLyAwLTEwMFxyXG4gICAgZGlzcGxheUJpdHJhdGU6IHN0cmluZztcclxuICAgIGRpc3BsYXlUaW1lTGVmdDogc3RyaW5nO1xyXG4gICAgbG9hZGVkU2l6ZUNvbnRhaW5lcjogSVNpemVDb250YWluZXI7XHJcbiAgICB0b3RhbFNpemVDb250YWluZXI6IElTaXplQ29udGFpbmVyO1xyXG4gICAgcmVzZXQodG90YWw6IG51bWJlcik6IHZvaWQ7XHJcbiAgICB1cGRhdGVQcm9ncmVzcyhub3c6IG51bWJlciwgbG9hZGVkOiBudW1iZXIsIGludGVydmFsOiBudW1iZXIpOiB2b2lkO1xyXG4gICAgdXBkYXRlQml0cmF0ZShub3c6IG51bWJlciwgbG9hZGVkOiBudW1iZXIsIGludGVydmFsOiBudW1iZXIpOiB2b2lkO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgUHJvZ3Jlc3NDb250YWluZXIgaW1wbGVtZW50cyBJUHJvZ3Jlc3NDb250YWluZXIge1xyXG4gICAgcHJpdmF0ZSBkYXRlVXRpbDogRGF0ZVV0aWw7XHJcbiAgICBwcml2YXRlIGxvYWRlZDogbnVtYmVyOyAvLyBieXRlc1xyXG4gICAgcHJpdmF0ZSBiaXRyYXRlU2l6ZUNvbnRhaW5lcjogSVNpemVDb250YWluZXI7XHJcblxyXG4gICAgcHVibGljIHRvdGFsOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgcHJvZ3Jlc3NUaW1lc3RhbXA6IG51bWJlcjtcclxuICAgIHB1YmxpYyBiaXRyYXRlVGltZXN0YW1wOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgYml0cmF0ZTogbnVtYmVyO1xyXG4gICAgcHVibGljIHBlcmNlbnQ6IG51bWJlcjtcclxuICAgIHB1YmxpYyBkaXNwbGF5Qml0cmF0ZTogc3RyaW5nO1xyXG4gICAgcHVibGljIGRpc3BsYXlUaW1lTGVmdDogc3RyaW5nO1xyXG4gICAgcHVibGljIGxvYWRlZFNpemVDb250YWluZXI6IElTaXplQ29udGFpbmVyO1xyXG4gICAgcHVibGljIHRvdGFsU2l6ZUNvbnRhaW5lcjogSVNpemVDb250YWluZXI7XHJcblxyXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHRvdGFsOiBudW1iZXIpIHtcclxuICAgICAgICBjb25zdCBpbmplY3RvciA9IFJlZmxlY3RpdmVJbmplY3Rvci5yZXNvbHZlQW5kQ3JlYXRlKFtEYXRlVXRpbF0pO1xyXG4gICAgICAgIHRoaXMuZGF0ZVV0aWwgPSBpbmplY3Rvci5nZXQoRGF0ZVV0aWwpO1xyXG5cclxuICAgICAgICB0aGlzLmJpdHJhdGVTaXplQ29udGFpbmVyID0gbmV3IFNpemVDb250YWluZXIoKTtcclxuICAgICAgICB0aGlzLmxvYWRlZFNpemVDb250YWluZXIgPSBuZXcgU2l6ZUNvbnRhaW5lcigpO1xyXG4gICAgICAgIHRoaXMudG90YWxTaXplQ29udGFpbmVyID0gbmV3IFNpemVDb250YWluZXIoKTtcclxuICAgICAgICB0aGlzLnJlc2V0KHRvdGFsKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVzZXQodG90YWw6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMucHJvZ3Jlc3NUaW1lc3RhbXAgPSB0aGlzLmRhdGVVdGlsLm5vdygpO1xyXG4gICAgICAgIHRoaXMuYml0cmF0ZVRpbWVzdGFtcCA9IHRoaXMuZGF0ZVV0aWwubm93KCk7XHJcbiAgICAgICAgdGhpcy5sb2FkZWQgPSAwO1xyXG4gICAgICAgIHRoaXMuYml0cmF0ZSA9IDA7XHJcbiAgICAgICAgdGhpcy5wZXJjZW50ID0gMDtcclxuICAgICAgICB0aGlzLnRvdGFsID0gdG90YWw7XHJcbiAgICAgICAgdGhpcy5kaXNwbGF5Qml0cmF0ZSA9IHVuZGVmaW5lZDtcclxuICAgICAgICB0aGlzLmRpc3BsYXlUaW1lTGVmdCA9IHVuZGVmaW5lZDtcclxuICAgICAgICB0aGlzLmJpdHJhdGVTaXplQ29udGFpbmVyLnVwZGF0ZURlY2ltYWwoRGVjaW1hbEJ5dGVVbml0LkJ5dGUsIHRoaXMuYml0cmF0ZSk7XHJcbiAgICAgICAgdGhpcy5sb2FkZWRTaXplQ29udGFpbmVyLnVwZGF0ZURlY2ltYWwoRGVjaW1hbEJ5dGVVbml0LkJ5dGUsIHRoaXMubG9hZGVkKTtcclxuICAgICAgICB0aGlzLnRvdGFsU2l6ZUNvbnRhaW5lci51cGRhdGVEZWNpbWFsKERlY2ltYWxCeXRlVW5pdC5CeXRlLCB0aGlzLnRvdGFsKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlUHJvZ3Jlc3Mobm93OiBudW1iZXIsIGxvYWRlZDogbnVtYmVyLCBpbnRlcnZhbDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgdGltZURpZmYgPSBub3cgLSB0aGlzLnByb2dyZXNzVGltZXN0YW1wO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdsb2FkZWQ6ICcgKyBsb2FkZWQgKyAnIHRvdGFsOiAnICsgdGhpcy50b3RhbCk7XHJcbiAgICAgICAgaWYgKCF0aGlzLnBlcmNlbnQgfHwgdGltZURpZmYgPiBpbnRlcnZhbCkge1xyXG4gICAgICAgICAgICB0aGlzLnBlcmNlbnQgPSBOdW1iZXIoKGxvYWRlZCAvIHRoaXMudG90YWwgKiAxMDApLnRvRml4ZWQoMikpO1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRlZCA9IGxvYWRlZDtcclxuICAgICAgICAgICAgdGhpcy5sb2FkZWRTaXplQ29udGFpbmVyLnVwZGF0ZURlY2ltYWwoRGVjaW1hbEJ5dGVVbml0LkJ5dGUsIHRoaXMubG9hZGVkKTtcclxuICAgICAgICAgICAgdGhpcy5wcm9ncmVzc1RpbWVzdGFtcCA9IG5vdztcclxuICAgICAgICAgICAgaWYgKHRoaXMuYml0cmF0ZSA+IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlzcGxheVRpbWVMZWZ0ID0gdGhpcy5kYXRlVXRpbC5mb3JtYXQoKHRoaXMudG90YWwgLSB0aGlzLmxvYWRlZCkgKiA4IC8gdGhpcy5iaXRyYXRlKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlzcGxheVRpbWVMZWZ0ID0gdGhpcy5kYXRlVXRpbC5mb3JtYXQoMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKGxvYWRlZCA+PSB0aGlzLnRvdGFsKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGVyY2VudCA9IDEwMDtcclxuICAgICAgICAgICAgdGhpcy5sb2FkZWQgPSB0aGlzLnRvdGFsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlQml0cmF0ZShub3c6IG51bWJlciwgbG9hZGVkOiBudW1iZXIsIGludGVydmFsOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCB0aW1lRGlmZiA9IG5vdyAtIHRoaXMuYml0cmF0ZVRpbWVzdGFtcDtcclxuICAgICAgICBpZiAoIXRoaXMuYml0cmF0ZSB8fCB0aW1lRGlmZiA+IGludGVydmFsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYml0cmF0ZSA9IChsb2FkZWQgLSB0aGlzLmxvYWRlZCkgKiAoMTAwMCAvIHRpbWVEaWZmKSAqIDg7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmJpdHJhdGUgPT09IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSB8fCB0aGlzLmJpdHJhdGUgPT09IE51bWJlci5ORUdBVElWRV9JTkZJTklUWSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5iaXRyYXRlID0gMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmJpdHJhdGVTaXplQ29udGFpbmVyLnVwZGF0ZURlY2ltYWwoRGVjaW1hbEJ5dGVVbml0LkJ5dGUsIHRoaXMuYml0cmF0ZSAvIDgpO1xyXG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlCaXRyYXRlID0gdGhpcy5iaXRyYXRlU2l6ZUNvbnRhaW5lci5kaXNwbGF5U2l6ZSArICcgJyArIHRoaXMuYml0cmF0ZVNpemVDb250YWluZXIuZGlzcGxheVVuaXQgKyAnL3MnO1xyXG4gICAgICAgICAgICB0aGlzLmJpdHJhdGVUaW1lc3RhbXAgPSBub3c7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiJdfQ==