angular-material-fileupload
Version:
A fileupload component based on angular-material design
231 lines • 17.9 kB
JavaScript
/**
* @fileoverview added by tsickle
* Generated from: lib/mat-file-upload-queue/mat-file-upload-queue.component.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import * as tslib_1 from "tslib";
import { Component, ChangeDetectionStrategy, ContentChildren, forwardRef, QueryList, Input, ChangeDetectorRef, } from "@angular/core";
import { merge } from "rxjs";
import { HttpHeaders, HttpParams } from "@angular/common/http";
import { startWith } from "rxjs/operators";
import { MatFileUploadQueueService } from "./mat-file-upload-queue.service";
import { MatFileUploadComponent } from "../mat-file-upload/mat-file-upload.component";
var MatFileUploadQueueComponent = /** @class */ (function () {
function MatFileUploadQueueComponent(matFileUploadQueueService, changeDetectorRef) {
this.matFileUploadQueueService = matFileUploadQueueService;
this.changeDetectorRef = changeDetectorRef;
this.files = [];
this.httpRequestHeaders = new HttpHeaders();
this.httpRequestParams = new HttpParams();
this.fileAlias = "file";
this.uploadAllColor = "primary";
this.uploadAllLabel = "Upload All";
this.removeAllColor = "primary";
this.removeAllLabel = "Remove All";
}
Object.defineProperty(MatFileUploadQueueComponent.prototype, "fileUploadRemoveEvents", {
/** Combined stream of all of the file upload remove change events. */
get: /**
* Combined stream of all of the file upload remove change events.
* @return {?}
*/
function () {
return merge.apply(void 0, tslib_1.__spread(this.fileUploads.map((/**
* @param {?} fileUpload
* @return {?}
*/
function (fileUpload) { return fileUpload.removeEvent; }))));
},
enumerable: true,
configurable: true
});
/**
* @param {?} changes
* @return {?}
*/
MatFileUploadQueueComponent.prototype.ngOnChanges = /**
* @param {?} changes
* @return {?}
*/
function (changes) {
this.matFileUploadQueueService.initialize({
httpUrl: changes["httpUrl"] ? changes["httpUrl"].currentValue : undefined,
httpRequestHeaders: changes["httpRequestHeaders"]
? changes["httpRequestHeaders"].currentValue
: undefined,
httpRequestParams: changes["httpRequestParams"]
? changes["httpRequestParams"].currentValue
: undefined,
fileAlias: changes["fileAlias"]
? changes["fileAlias"].currentValue
: undefined,
});
};
/**
* @return {?}
*/
MatFileUploadQueueComponent.prototype.ngAfterViewInit = /**
* @return {?}
*/
function () {
var _this = this;
// When the list changes, re-subscribe
this._changeSubscription = this.fileUploads.changes
.pipe(startWith(null))
.subscribe((/**
* @return {?}
*/
function () {
if (_this._fileRemoveSubscription) {
_this._fileRemoveSubscription.unsubscribe();
}
_this._listenTofileRemoved();
}));
};
/**
* @private
* @return {?}
*/
MatFileUploadQueueComponent.prototype._listenTofileRemoved = /**
* @private
* @return {?}
*/
function () {
var _this = this;
this._fileRemoveSubscription = this.fileUploadRemoveEvents.subscribe((/**
* @param {?} event
* @return {?}
*/
function (event) {
_this.files.splice(event.id, 1);
_this.changeDetectorRef.markForCheck();
}));
};
/**
* @param {?} file
* @return {?}
*/
MatFileUploadQueueComponent.prototype.add = /**
* @param {?} file
* @return {?}
*/
function (file) {
this.files.push(file);
this.changeDetectorRef.markForCheck();
};
/**
* @return {?}
*/
MatFileUploadQueueComponent.prototype.uploadAll = /**
* @return {?}
*/
function () {
this.fileUploads.forEach((/**
* @param {?} fileUpload
* @return {?}
*/
function (fileUpload) {
fileUpload.upload();
}));
};
/**
* @return {?}
*/
MatFileUploadQueueComponent.prototype.removeAll = /**
* @return {?}
*/
function () {
this.files.splice(0, this.files.length);
this.changeDetectorRef.markForCheck();
};
/**
* @return {?}
*/
MatFileUploadQueueComponent.prototype.ngOnDestroy = /**
* @return {?}
*/
function () {
if (this._changeSubscription)
this._changeSubscription.unsubscribe();
if (this._fileRemoveSubscription)
this._fileRemoveSubscription.unsubscribe();
if (this.files) {
this.removeAll();
}
};
MatFileUploadQueueComponent.decorators = [
{ type: Component, args: [{
selector: "mat-file-upload-queue",
template: "<ng-content></ng-content>\n<br />\n<button\n mat-raised-button\n [color]=\"uploadAllColor\"\n *ngIf=\"files.length > 0\"\n (click)=\"uploadAll()\"\n>\n {{ uploadAllLabel }}\n</button>\n<button\n mat-raised-button\n [color]=\"removeAllColor\"\n *ngIf=\"files.length > 0\"\n (click)=\"removeAll()\"\n>\n {{ removeAllLabel }}\n</button>\n",
changeDetection: ChangeDetectionStrategy.OnPush,
providers: [MatFileUploadQueueService],
styles: [""]
}] }
];
/** @nocollapse */
MatFileUploadQueueComponent.ctorParameters = function () { return [
{ type: MatFileUploadQueueService },
{ type: ChangeDetectorRef }
]; };
MatFileUploadQueueComponent.propDecorators = {
fileUploads: [{ type: ContentChildren, args: [forwardRef((/**
* @return {?}
*/
function () { return MatFileUploadComponent; })),] }],
httpUrl: [{ type: Input }],
httpRequestHeaders: [{ type: Input }],
httpRequestParams: [{ type: Input }],
fileAlias: [{ type: Input }],
uploadAllColor: [{ type: Input }],
uploadAllLabel: [{ type: Input }],
removeAllColor: [{ type: Input }],
removeAllLabel: [{ type: Input }]
};
return MatFileUploadQueueComponent;
}());
export { MatFileUploadQueueComponent };
if (false) {
/** @type {?} */
MatFileUploadQueueComponent.prototype.fileUploads;
/**
* Subscription to remove changes in files.
* @type {?}
* @private
*/
MatFileUploadQueueComponent.prototype._fileRemoveSubscription;
/**
* Subscription to changes in the files.
* @type {?}
* @private
*/
MatFileUploadQueueComponent.prototype._changeSubscription;
/** @type {?} */
MatFileUploadQueueComponent.prototype.files;
/** @type {?} */
MatFileUploadQueueComponent.prototype.httpUrl;
/** @type {?} */
MatFileUploadQueueComponent.prototype.httpRequestHeaders;
/** @type {?} */
MatFileUploadQueueComponent.prototype.httpRequestParams;
/** @type {?} */
MatFileUploadQueueComponent.prototype.fileAlias;
/** @type {?} */
MatFileUploadQueueComponent.prototype.uploadAllColor;
/** @type {?} */
MatFileUploadQueueComponent.prototype.uploadAllLabel;
/** @type {?} */
MatFileUploadQueueComponent.prototype.removeAllColor;
/** @type {?} */
MatFileUploadQueueComponent.prototype.removeAllLabel;
/**
* @type {?}
* @private
*/
MatFileUploadQueueComponent.prototype.matFileUploadQueueService;
/**
* @type {?}
* @private
*/
MatFileUploadQueueComponent.prototype.changeDetectorRef;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0LWZpbGUtdXBsb2FkLXF1ZXVlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2FuZ3VsYXItbWF0ZXJpYWwtZmlsZXVwbG9hZC8iLCJzb3VyY2VzIjpbImxpYi9tYXQtZmlsZS11cGxvYWQtcXVldWUvbWF0LWZpbGUtdXBsb2FkLXF1ZXVlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULHVCQUF1QixFQUN2QixlQUFlLEVBQ2YsVUFBVSxFQUdWLFNBQVMsRUFFVCxLQUFLLEVBQ0wsaUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBNEIsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDL0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBRXRGO0lBeUNFLHFDQUNVLHlCQUFvRCxFQUNwRCxpQkFBb0M7UUFEcEMsOEJBQXlCLEdBQXpCLHlCQUF5QixDQUEyQjtRQUNwRCxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBbkJ2QyxVQUFLLEdBQWUsRUFBRSxDQUFDO1FBMkI5Qix1QkFBa0IsR0FJVixJQUFJLFdBQVcsRUFBRSxDQUFDO1FBRzFCLHNCQUFpQixHQUlULElBQUksVUFBVSxFQUFFLENBQUM7UUFHekIsY0FBUyxHQUFXLE1BQU0sQ0FBQztRQUczQixtQkFBYyxHQUFHLFNBQVMsQ0FBQztRQUczQixtQkFBYyxHQUFHLFlBQVksQ0FBQztRQUc5QixtQkFBYyxHQUFHLFNBQVMsQ0FBQztRQUczQixtQkFBYyxHQUFHLFlBQVksQ0FBQztJQWpDM0IsQ0FBQztJQTFCSixzQkFBSSwrREFBc0I7UUFEMUIsc0VBQXNFOzs7OztRQUN0RTtZQUNFLE9BQU8sS0FBSyxnQ0FDUCxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUc7Ozs7WUFBQyxVQUFDLFVBQVUsSUFBSyxPQUFBLFVBQVUsQ0FBQyxXQUFXLEVBQXRCLENBQXNCLEVBQUMsR0FDL0Q7UUFDSixDQUFDOzs7T0FBQTs7Ozs7SUFJRCxpREFBVzs7OztJQUFYLFVBQVksT0FBc0I7UUFDaEMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLFVBQVUsQ0FBQztZQUN4QyxPQUFPLEVBQUUsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxTQUFTO1lBQ3pFLGtCQUFrQixFQUFFLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQztnQkFDL0MsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLFlBQVk7Z0JBQzVDLENBQUMsQ0FBQyxTQUFTO1lBQ2IsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLG1CQUFtQixDQUFDO2dCQUM3QyxDQUFDLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLENBQUMsWUFBWTtnQkFDM0MsQ0FBQyxDQUFDLFNBQVM7WUFDYixTQUFTLEVBQUUsT0FBTyxDQUFDLFdBQVcsQ0FBQztnQkFDN0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxZQUFZO2dCQUNuQyxDQUFDLENBQUMsU0FBUztTQUNkLENBQUMsQ0FBQztJQUNMLENBQUM7Ozs7SUF3Q0QscURBQWU7OztJQUFmO1FBQUEsaUJBVUM7UUFUQyxzQ0FBc0M7UUFDdEMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTzthQUNoRCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ3JCLFNBQVM7OztRQUFDO1lBQ1QsSUFBSSxLQUFJLENBQUMsdUJBQXVCLEVBQUU7Z0JBQ2hDLEtBQUksQ0FBQyx1QkFBdUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQzthQUM1QztZQUNELEtBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQzlCLENBQUMsRUFBQyxDQUFDO0lBQ1AsQ0FBQzs7Ozs7SUFFTywwREFBb0I7Ozs7SUFBNUI7UUFBQSxpQkFPQztRQU5DLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsU0FBUzs7OztRQUNsRSxVQUFDLEtBQTZCO1lBQzVCLEtBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDL0IsS0FBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3hDLENBQUMsRUFDRixDQUFDO0lBQ0osQ0FBQzs7Ozs7SUFFRCx5Q0FBRzs7OztJQUFILFVBQUksSUFBUztRQUNYLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN4QyxDQUFDOzs7O0lBRU0sK0NBQVM7OztJQUFoQjtRQUNFLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTzs7OztRQUFDLFVBQUMsVUFBVTtZQUNsQyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDdEIsQ0FBQyxFQUFDLENBQUM7SUFDTCxDQUFDOzs7O0lBRU0sK0NBQVM7OztJQUFoQjtRQUNFLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN4QyxDQUFDOzs7O0lBRUQsaURBQVc7OztJQUFYO1FBQ0UsSUFBSSxJQUFJLENBQUMsbUJBQW1CO1lBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3JFLElBQUksSUFBSSxDQUFDLHVCQUF1QjtZQUM5QixJQUFJLENBQUMsdUJBQXVCLENBQUMsV0FBVyxFQUFFLENBQUM7UUFFN0MsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ2QsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1NBQ2xCO0lBQ0gsQ0FBQzs7Z0JBNUhGLFNBQVMsU0FBQztvQkFDVCxRQUFRLEVBQUUsdUJBQXVCO29CQUNqQyxxV0FBcUQ7b0JBRXJELGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO29CQUMvQyxTQUFTLEVBQUUsQ0FBQyx5QkFBeUIsQ0FBQzs7aUJBQ3ZDOzs7O2dCQVRRLHlCQUF5QjtnQkFMaEMsaUJBQWlCOzs7OEJBZ0JoQixlQUFlLFNBQUMsVUFBVTs7O29CQUFDLGNBQU0sT0FBQSxzQkFBc0IsRUFBdEIsQ0FBc0IsRUFBQzswQkF1Q3hELEtBQUs7cUNBR0wsS0FBSztvQ0FPTCxLQUFLOzRCQU9MLEtBQUs7aUNBR0wsS0FBSztpQ0FHTCxLQUFLO2lDQUdMLEtBQUs7aUNBR0wsS0FBSzs7SUFpRFIsa0NBQUM7Q0FBQSxBQTdIRCxJQTZIQztTQXRIWSwyQkFBMkI7OztJQUN0QyxrREFDK0M7Ozs7OztJQUcvQyw4REFBcUQ7Ozs7OztJQUdyRCwwREFBMEM7O0lBUzFDLDRDQUE4Qjs7SUF1QjlCLDhDQUNnQjs7SUFFaEIseURBSzBCOztJQUUxQix3REFLeUI7O0lBRXpCLGdEQUMyQjs7SUFFM0IscURBQzJCOztJQUUzQixxREFDOEI7O0lBRTlCLHFEQUMyQjs7SUFFM0IscURBQzhCOzs7OztJQW5DNUIsZ0VBQTREOzs7OztJQUM1RCx3REFBNEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIGZvcndhcmRSZWYsXG4gIE9uRGVzdHJveSxcbiAgT25DaGFuZ2VzLFxuICBRdWVyeUxpc3QsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIElucHV0LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiwgT2JzZXJ2YWJsZSwgbWVyZ2UgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgSHR0cEhlYWRlcnMsIEh0dHBQYXJhbXMgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIjtcbmltcG9ydCB7IHN0YXJ0V2l0aCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xuaW1wb3J0IHsgTWF0RmlsZVVwbG9hZFF1ZXVlU2VydmljZSB9IGZyb20gXCIuL21hdC1maWxlLXVwbG9hZC1xdWV1ZS5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBNYXRGaWxlVXBsb2FkQ29tcG9uZW50IH0gZnJvbSBcIi4uL21hdC1maWxlLXVwbG9hZC9tYXQtZmlsZS11cGxvYWQuY29tcG9uZW50XCI7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJtYXQtZmlsZS11cGxvYWQtcXVldWVcIixcbiAgdGVtcGxhdGVVcmw6IFwiLi9tYXQtZmlsZS11cGxvYWQtcXVldWUuY29tcG9uZW50Lmh0bWxcIixcbiAgc3R5bGVVcmxzOiBbXCIuL21hdC1maWxlLXVwbG9hZC1xdWV1ZS5jb21wb25lbnQuc2Nzc1wiXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHByb3ZpZGVyczogW01hdEZpbGVVcGxvYWRRdWV1ZVNlcnZpY2VdLFxufSlcbmV4cG9ydCBjbGFzcyBNYXRGaWxlVXBsb2FkUXVldWVDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gIEBDb250ZW50Q2hpbGRyZW4oZm9yd2FyZFJlZigoKSA9PiBNYXRGaWxlVXBsb2FkQ29tcG9uZW50KSlcbiAgZmlsZVVwbG9hZHM6IFF1ZXJ5TGlzdDxNYXRGaWxlVXBsb2FkQ29tcG9uZW50PjtcblxuICAvKiogU3Vic2NyaXB0aW9uIHRvIHJlbW92ZSBjaGFuZ2VzIGluIGZpbGVzLiAqL1xuICBwcml2YXRlIF9maWxlUmVtb3ZlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCBudWxsO1xuXG4gIC8qKiBTdWJzY3JpcHRpb24gdG8gY2hhbmdlcyBpbiB0aGUgZmlsZXMuICovXG4gIHByaXZhdGUgX2NoYW5nZVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gIC8qKiBDb21iaW5lZCBzdHJlYW0gb2YgYWxsIG9mIHRoZSBmaWxlIHVwbG9hZCByZW1vdmUgY2hhbmdlIGV2ZW50cy4gKi9cbiAgZ2V0IGZpbGVVcGxvYWRSZW1vdmVFdmVudHMoKTogT2JzZXJ2YWJsZTxNYXRGaWxlVXBsb2FkQ29tcG9uZW50PiB7XG4gICAgcmV0dXJuIG1lcmdlKFxuICAgICAgLi4udGhpcy5maWxlVXBsb2Fkcy5tYXAoKGZpbGVVcGxvYWQpID0+IGZpbGVVcGxvYWQucmVtb3ZlRXZlbnQpXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBmaWxlczogQXJyYXk8YW55PiA9IFtdO1xuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICB0aGlzLm1hdEZpbGVVcGxvYWRRdWV1ZVNlcnZpY2UuaW5pdGlhbGl6ZSh7XG4gICAgICBodHRwVXJsOiBjaGFuZ2VzW1wiaHR0cFVybFwiXSA/IGNoYW5nZXNbXCJodHRwVXJsXCJdLmN1cnJlbnRWYWx1ZSA6IHVuZGVmaW5lZCxcbiAgICAgIGh0dHBSZXF1ZXN0SGVhZGVyczogY2hhbmdlc1tcImh0dHBSZXF1ZXN0SGVhZGVyc1wiXVxuICAgICAgICA/IGNoYW5nZXNbXCJodHRwUmVxdWVzdEhlYWRlcnNcIl0uY3VycmVudFZhbHVlXG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgaHR0cFJlcXVlc3RQYXJhbXM6IGNoYW5nZXNbXCJodHRwUmVxdWVzdFBhcmFtc1wiXVxuICAgICAgICA/IGNoYW5nZXNbXCJodHRwUmVxdWVzdFBhcmFtc1wiXS5jdXJyZW50VmFsdWVcbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICBmaWxlQWxpYXM6IGNoYW5nZXNbXCJmaWxlQWxpYXNcIl1cbiAgICAgICAgPyBjaGFuZ2VzW1wiZmlsZUFsaWFzXCJdLmN1cnJlbnRWYWx1ZVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgbWF0RmlsZVVwbG9hZFF1ZXVlU2VydmljZTogTWF0RmlsZVVwbG9hZFF1ZXVlU2VydmljZSxcbiAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZlxuICApIHt9XG5cbiAgLyogSHR0cCByZXF1ZXN0IGlucHV0IGJpbmRpbmdzICovXG4gIEBJbnB1dCgpXG4gIGh0dHBVcmw6IHN0cmluZztcblxuICBASW5wdXQoKVxuICBodHRwUmVxdWVzdEhlYWRlcnM6XG4gICAgfCBIdHRwSGVhZGVyc1xuICAgIHwge1xuICAgICAgICBbaGVhZGVyOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgICAgIH0gPSBuZXcgSHR0cEhlYWRlcnMoKTtcblxuICBASW5wdXQoKVxuICBodHRwUmVxdWVzdFBhcmFtczpcbiAgICB8IEh0dHBQYXJhbXNcbiAgICB8IHtcbiAgICAgICAgW3BhcmFtOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgICAgIH0gPSBuZXcgSHR0cFBhcmFtcygpO1xuXG4gIEBJbnB1dCgpXG4gIGZpbGVBbGlhczogc3RyaW5nID0gXCJmaWxlXCI7XG5cbiAgQElucHV0KClcbiAgdXBsb2FkQWxsQ29sb3IgPSBcInByaW1hcnlcIjtcblxuICBASW5wdXQoKVxuICB1cGxvYWRBbGxMYWJlbCA9IFwiVXBsb2FkIEFsbFwiO1xuXG4gIEBJbnB1dCgpXG4gIHJlbW92ZUFsbENvbG9yID0gXCJwcmltYXJ5XCI7XG5cbiAgQElucHV0KClcbiAgcmVtb3ZlQWxsTGFiZWwgPSBcIlJlbW92ZSBBbGxcIjtcblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgLy8gV2hlbiB0aGUgbGlzdCBjaGFuZ2VzLCByZS1zdWJzY3JpYmVcbiAgICB0aGlzLl9jaGFuZ2VTdWJzY3JpcHRpb24gPSB0aGlzLmZpbGVVcGxvYWRzLmNoYW5nZXNcbiAgICAgIC5waXBlKHN0YXJ0V2l0aChudWxsKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5fZmlsZVJlbW92ZVN1YnNjcmlwdGlvbikge1xuICAgICAgICAgIHRoaXMuX2ZpbGVSZW1vdmVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9saXN0ZW5Ub2ZpbGVSZW1vdmVkKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2xpc3RlblRvZmlsZVJlbW92ZWQoKTogdm9pZCB7XG4gICAgdGhpcy5fZmlsZVJlbW92ZVN1YnNjcmlwdGlvbiA9IHRoaXMuZmlsZVVwbG9hZFJlbW92ZUV2ZW50cy5zdWJzY3JpYmUoXG4gICAgICAoZXZlbnQ6IE1hdEZpbGVVcGxvYWRDb21wb25lbnQpID0+IHtcbiAgICAgICAgdGhpcy5maWxlcy5zcGxpY2UoZXZlbnQuaWQsIDEpO1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBhZGQoZmlsZTogYW55KSB7XG4gICAgdGhpcy5maWxlcy5wdXNoKGZpbGUpO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwdWJsaWMgdXBsb2FkQWxsKCkge1xuICAgIHRoaXMuZmlsZVVwbG9hZHMuZm9yRWFjaCgoZmlsZVVwbG9hZCkgPT4ge1xuICAgICAgZmlsZVVwbG9hZC51cGxvYWQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyByZW1vdmVBbGwoKSB7XG4gICAgdGhpcy5maWxlcy5zcGxpY2UoMCwgdGhpcy5maWxlcy5sZW5ndGgpO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5fY2hhbmdlU3Vic2NyaXB0aW9uKSB0aGlzLl9jaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICBpZiAodGhpcy5fZmlsZVJlbW92ZVN1YnNjcmlwdGlvbilcbiAgICAgIHRoaXMuX2ZpbGVSZW1vdmVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcblxuICAgIGlmICh0aGlzLmZpbGVzKSB7XG4gICAgICB0aGlzLnJlbW92ZUFsbCgpO1xuICAgIH1cbiAgfVxufVxuIl19