com.phloxui
Version:
PhloxUI Ng2+ Framework
369 lines (368 loc) • 22.3 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
import * as tslib_1 from "tslib";
import { EventEmitter } from '@angular/core';
import { AbstractInputDataView } from "./AbstractInputDataView";
import { Option } from '../../../decorator/Option.decorator';
import { EventUtils } from '../../../share/utils/EventUtils';
import { BEFORE_SELECT_EVENT, SELECT_EVENT } from '../../../share/CustomEventType';
/**
* @abstract
*/
var AbstracFileSelector = /** @class */ (function (_super) {
tslib_1.__extends(AbstracFileSelector, _super);
function AbstracFileSelector(elementRef, needFocusService) {
var _this = _super.call(this, elementRef, needFocusService) || this;
_this.beforeSelectEvent = new EventEmitter();
_this.selectEvent = new EventEmitter();
_this.allowMultipleSelect = false;
_this.files = [];
_this.acceptStatus = true;
_this.alertMessage = null;
return _this;
}
/**
* @return {?}
*/
AbstracFileSelector.prototype.ngOnInit = /**
* @return {?}
*/
function () {
_super.prototype.ngOnInit.call(this);
// recall setData to do some function
this.setData(this.data);
};
/**
* @param {?=} $event
* @return {?}
*/
AbstracFileSelector.prototype.emitBeforeSelectEvent = /**
* @param {?=} $event
* @return {?}
*/
function ($event) {
var /** @type {?} */ data = null;
var /** @type {?} */ ev = EventUtils.newCustomEvent(BEFORE_SELECT_EVENT, this, data, $event);
this.beforeSelectEvent.emit(ev);
};
/**
* @param {?=} $event
* @return {?}
*/
AbstracFileSelector.prototype.emitSelectEvent = /**
* @param {?=} $event
* @return {?}
*/
function ($event) {
var /** @type {?} */ data = null;
var /** @type {?} */ ev = EventUtils.newCustomEvent(SELECT_EVENT, this, data, $event);
this.selectEvent.emit(ev);
};
/**
* @param {?} files
* @return {?}
*/
AbstracFileSelector.prototype.isAccept = /**
* @param {?} files
* @return {?}
*/
function (files) {
try {
for (var files_1 = tslib_1.__values(files), files_1_1 = files_1.next(); !files_1_1.done; files_1_1 = files_1.next()) {
var file = files_1_1.value;
if (this.fileTypes.indexOf(file.type) === -1) {
this.alertMessage = "Error: Allow only file type '" + JSON.stringify(this.fileTypes) + "'";
this.acceptStatus = false;
return false;
}
if (file.size > this.maxFilesize) {
this.alertMessage = "Error: The maximun size for file upload is " + this.maxFilesize + " KB";
this.acceptStatus = false;
return false;
}
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (files_1_1 && !files_1_1.done && (_a = files_1.return)) _a.call(files_1);
}
finally { if (e_1) throw e_1.error; }
}
this.acceptStatus = true;
this.alertMessage = "Done! Upload more?";
return true;
var e_1, _a;
};
/**
* @return {?}
*/
AbstracFileSelector.prototype.setDefaultState = /**
* @return {?}
*/
function () {
this.alertMessage = null;
this.acceptStatus = true;
};
/**
* @return {?}
*/
AbstracFileSelector.prototype.isAcceptStatus = /**
* @return {?}
*/
function () {
return this.acceptStatus;
};
/**
* @return {?}
*/
AbstracFileSelector.prototype.getAlertMessage = /**
* @return {?}
*/
function () {
return this.alertMessage;
};
/**
* @return {?}
*/
AbstracFileSelector.prototype.getFiles = /**
* @return {?}
*/
function () {
return this.files;
};
/**
* @return {?}
*/
AbstracFileSelector.prototype.getFile = /**
* @return {?}
*/
function () {
if (this.files !== undefined && this.files !== null && this.files.length > 0) {
return this.files[0];
}
return;
};
/**
* @return {?}
*/
AbstracFileSelector.prototype.getFilesCount = /**
* @return {?}
*/
function () {
return this.files.length;
};
/**
* @return {?}
*/
AbstracFileSelector.prototype.clear = /**
* @return {?}
*/
function () {
this.files = [];
};
/**
* @param {?} index
* @return {?}
*/
AbstracFileSelector.prototype.removeFile = /**
* @param {?} index
* @return {?}
*/
function (index) {
this.files.splice(index, 1);
};
/**
* @param {?} files
* @param {?=} $event
* @param {?=} fireEvent
* @return {?}
*/
AbstracFileSelector.prototype.addFiles = /**
* @param {?} files
* @param {?=} $event
* @param {?=} fireEvent
* @return {?}
*/
function (files, $event, fireEvent) {
var _this = this;
if (fireEvent === null || fireEvent === undefined) {
fireEvent = true;
}
EventUtils.handleBrowserEvent(this, 'beforeSelectEvent', $event, fireEvent, function ($event) {
// doEvent
if (_this.allowMultipleSelect) {
try {
for (var files_2 = tslib_1.__values(files), files_2_1 = files_2.next(); !files_2_1.done; files_2_1 = files_2.next()) {
var file = files_2_1.value;
_this.files.push(file);
}
}
catch (e_2_1) { e_2 = { error: e_2_1 }; }
finally {
try {
if (files_2_1 && !files_2_1.done && (_a = files_2.return)) _a.call(files_2);
}
finally { if (e_2) throw e_2.error; }
}
}
else {
_this.files[0] = files[0];
}
var e_2, _a;
}, function ($event) {
// emitBeforeEvent
// emitBeforeEvent
_this.emitBeforeSelectEvent($event);
}, function ($event, result) {
// emitAfterEvent
// emitAfterEvent
_this.emitSelectEvent($event);
}, function ($event) {
// doPrevented
});
};
/**
* @return {?}
*/
AbstracFileSelector.prototype.getBeforeSelectEvent = /**
* @return {?}
*/
function () {
return this.beforeSelectEvent;
};
/**
* @param {?} event
* @return {?}
*/
AbstracFileSelector.prototype.setBeforeSelectEvent = /**
* @param {?} event
* @return {?}
*/
function (event) {
this.beforeSelectEvent = event;
};
/**
* @return {?}
*/
AbstracFileSelector.prototype.getSelectEvent = /**
* @return {?}
*/
function () {
return this.selectEvent;
};
/**
* @param {?} event
* @return {?}
*/
AbstracFileSelector.prototype.setSelectEvent = /**
* @param {?} event
* @return {?}
*/
function (event) {
this.selectEvent = event;
};
/**
* @return {?}
*/
AbstracFileSelector.prototype.getAllowMultipleSelect = /**
* @return {?}
*/
function () {
return this.allowMultipleSelect;
};
/**
* @param {?} allowMultipleSelect
* @return {?}
*/
AbstracFileSelector.prototype.setAllowMultipleSelect = /**
* @param {?} allowMultipleSelect
* @return {?}
*/
function (allowMultipleSelect) {
this.allowMultipleSelect = allowMultipleSelect;
};
/**
* @return {?}
*/
AbstracFileSelector.prototype.getMaxFilesize = /**
* @return {?}
*/
function () {
return this.maxFilesize;
};
/**
* @param {?} maxFilesize
* @return {?}
*/
AbstracFileSelector.prototype.setMaxFilesize = /**
* @param {?} maxFilesize
* @return {?}
*/
function (maxFilesize) {
this.maxFilesize = maxFilesize;
};
/**
* @return {?}
*/
AbstracFileSelector.prototype.getFileTypes = /**
* @return {?}
*/
function () {
return this.fileTypes;
};
/**
* @param {?} fileTypes
* @return {?}
*/
AbstracFileSelector.prototype.setFileTypes = /**
* @param {?} fileTypes
* @return {?}
*/
function (fileTypes) {
this.fileTypes = fileTypes;
};
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Number)
], AbstracFileSelector.prototype, "maxFilesize", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], AbstracFileSelector.prototype, "allowMultipleSelect", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Array)
], AbstracFileSelector.prototype, "fileTypes", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", EventEmitter)
], AbstracFileSelector.prototype, "beforeSelectEvent", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", EventEmitter)
], AbstracFileSelector.prototype, "selectEvent", void 0);
return AbstracFileSelector;
}(AbstractInputDataView));
export { AbstracFileSelector };
function AbstracFileSelector_tsickle_Closure_declarations() {
/** @type {?} */
AbstracFileSelector.prototype.maxFilesize;
/** @type {?} */
AbstracFileSelector.prototype.allowMultipleSelect;
/** @type {?} */
AbstracFileSelector.prototype.fileTypes;
/** @type {?} */
AbstracFileSelector.prototype.beforeSelectEvent;
/** @type {?} */
AbstracFileSelector.prototype.selectEvent;
/** @type {?} */
AbstracFileSelector.prototype.acceptStatus;
/** @type {?} */
AbstracFileSelector.prototype.alertMessage;
/** @type {?} */
AbstracFileSelector.prototype.files;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWJzdHJhY0ZpbGVTZWxlY3Rvci5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2NvbS5waGxveHVpLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudC9kYXRhdmlldy9pbnB1dC9BYnN0cmFjRmlsZVNlbGVjdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFVLFlBQVksRUFBYyxNQUFNLGVBQWUsQ0FBQztBQUNqRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUVoRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDN0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzdELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxZQUFZLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7Ozs7SUFFakMsK0NBQXFCO0lBZ0JyRSw2QkFBWSxVQUFzQixFQUFFLGdCQUFrQztRQUF0RSxZQUNFLGtCQUFNLFVBQVUsRUFBRSxnQkFBZ0IsQ0FBQyxTQVFwQztRQU5DLEtBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzVDLEtBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUN0QyxLQUFJLENBQUMsbUJBQW1CLEdBQUcsS0FBSyxDQUFDO1FBQ2pDLEtBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLEtBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3pCLEtBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDOztLQUMxQjs7OztJQUVNLHNDQUFROzs7O1FBQ2IsaUJBQU0sUUFBUSxXQUFFLENBQUM7O1FBR2pCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDOzs7Ozs7SUFHbEIsbURBQXFCOzs7O2NBQUMsTUFBYztRQUMxQyxxQkFBSSxJQUFJLEdBQVEsSUFBSSxDQUFDO1FBQ3JC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LENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQzs7Ozs7SUFHcEIsb0RBQXNCOzs7O1FBQzNCLE1BQU0sQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUM7Ozs7OztJQUczQixvREFBc0I7Ozs7Y0FBQyxtQkFBNEI7UUFDeEQsSUFBSSxDQUFDLG1CQUFtQixHQUFHLG1CQUFtQixDQUFDOzs7OztJQUcxQyw0Q0FBYzs7OztRQUNuQixNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQzs7Ozs7O0lBR25CLDRDQUFjOzs7O2NBQUMsV0FBbUI7UUFDdkMsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7Ozs7O0lBRzFCLDBDQUFZOzs7O1FBQ2pCLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDOzs7Ozs7SUFHakIsMENBQVk7Ozs7Y0FBQyxTQUFtQjtRQUNyQyxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQzs7O1FBbEs1QixNQUFNLEVBQUU7Ozs7UUFFUixNQUFNLEVBQUU7Ozs7UUFFUixNQUFNLEVBQUU7Ozs7UUFFUixNQUFNLEVBQUU7MENBQ29CLFlBQVk7OztRQUN4QyxNQUFNLEVBQUU7MENBQ2MsWUFBWTs7OEJBbEJyQztFQU9rRCxxQkFBcUI7U0FBakQsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT25Jbml0LCBFdmVudEVtaXR0ZXIsIEVsZW1lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0SW5wdXREYXRhVmlldyB9IGZyb20gXCIuL0Fic3RyYWN0SW5wdXREYXRhVmlld1wiO1xuaW1wb3J0IHsgTmVlZEZvY3VzU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlL05lZWRGb2N1c1NlcnZpY2Uuc2VydmljZVwiO1xuaW1wb3J0IHsgT3B0aW9uIH0gZnJvbSAnLi4vLi4vLi4vZGVjb3JhdG9yL09wdGlvbi5kZWNvcmF0b3InO1xuaW1wb3J0IHsgRXZlbnRVdGlscyB9IGZyb20gJy4uLy4uLy4uL3NoYXJlL3V0aWxzL0V2ZW50VXRpbHMnO1xuaW1wb3J0IHsgQkVGT1JFX1NFTEVDVF9FVkVOVCwgU0VMRUNUX0VWRU5UIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmUvQ3VzdG9tRXZlbnRUeXBlJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFic3RyYWNGaWxlU2VsZWN0b3IgZXh0ZW5kcyBBYnN0cmFjdElucHV0RGF0YVZpZXcgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIEBPcHRpb24oKVxuICBwcm90ZWN0ZWQgbWF4RmlsZXNpemU6IG51bWJlcjtcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCBhbGxvd011bHRpcGxlU2VsZWN0OiBib29sZWFuO1xuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIGZpbGVUeXBlczogc3RyaW5nW107XG4gIEBPcHRpb24oKVxuICBwcm90ZWN0ZWQgYmVmb3JlU2VsZWN0RXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIHNlbGVjdEV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgcHJpdmF0ZSBhY2NlcHRTdGF0dXM6IGJvb2xlYW47XG4gIHByaXZhdGUgYWxlcnRNZXNzYWdlOiBzdHJpbmc7XG4gIHByaXZhdGUgZmlsZXM6IEZpbGVbXTtcblxuICBjb25zdHJ1Y3RvcihlbGVtZW50UmVmOiBFbGVtZW50UmVmLCBuZWVkRm9jdXNTZXJ2aWNlOiBOZWVkRm9jdXNTZXJ2aWNlKSB7XG4gICAgc3VwZXIoZWxlbWVudFJlZiwgbmVlZEZvY3VzU2VydmljZSk7XG5cbiAgICB0aGlzLmJlZm9yZVNlbGVjdEV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIHRoaXMuc2VsZWN0RXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgdGhpcy5hbGxvd011bHRpcGxlU2VsZWN0ID0gZmFsc2U7XG4gICAgdGhpcy5maWxlcyA9IFtdO1xuICAgIHRoaXMuYWNjZXB0U3RhdHVzID0gdHJ1ZTtcbiAgICB0aGlzLmFsZXJ0TWVzc2FnZSA9IG51bGw7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgc3VwZXIubmdPbkluaXQoKTtcblxuICAgIC8vIHJlY2FsbCBzZXREYXRhIHRvIGRvIHNvbWUgZnVuY3Rpb25cbiAgICB0aGlzLnNldERhdGEodGhpcy5kYXRhKTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdEJlZm9yZVNlbGVjdEV2ZW50KCRldmVudD86IEV2ZW50KTogdm9pZCB7XG4gICAgbGV0IGRhdGE6IGFueSA9IG51bGw7XG4gICAgbGV0IGV2ID0gRXZlbnRVdGlscy5uZXdDdXN0b21FdmVudChCRUZPUkVfU0VMRUNUX0VWRU5ULCB0aGlzLCBkYXRhLCAkZXZlbnQpO1xuXG4gICAgdGhpcy5iZWZvcmVTZWxlY3RFdmVudC5lbWl0KGV2KTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdFNlbGVjdEV2ZW50KCRldmVudD86IEV2ZW50KTogdm9pZCB7XG4gICAgbGV0IGRhdGE6IGFueSA9IG51bGw7XG4gICAgbGV0IGV2ID0gRXZlbnRVdGlscy5uZXdDdXN0b21FdmVudChTRUxFQ1RfRVZFTlQsIHRoaXMsIGRhdGEsICRldmVudCk7XG5cbiAgICB0aGlzLnNlbGVjdEV2ZW50LmVtaXQoZXYpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGlzQWNjZXB0KGZpbGVzOiBhbnlbXSk6IGJvb2xlYW4ge1xuICAgIGZvciAobGV0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICAgIGlmICh0aGlzLmZpbGVUeXBlcy5pbmRleE9mKGZpbGUudHlwZSkgPT09IC0xKSB7XG4gICAgICAgIHRoaXMuYWxlcnRNZXNzYWdlID0gXCJFcnJvcjogQWxsb3cgb25seSBmaWxlIHR5cGUgJ1wiICsgSlNPTi5zdHJpbmdpZnkodGhpcy5maWxlVHlwZXMpICsgXCInXCI7XG4gICAgICAgIHRoaXMuYWNjZXB0U3RhdHVzID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChmaWxlLnNpemUgPiB0aGlzLm1heEZpbGVzaXplKSB7XG4gICAgICAgIHRoaXMuYWxlcnRNZXNzYWdlID0gXCJFcnJvcjogVGhlIG1heGltdW4gc2l6ZSBmb3IgZmlsZSB1cGxvYWQgaXMgXCIgKyB0aGlzLm1heEZpbGVzaXplICsgXCIgS0JcIjtcbiAgICAgICAgdGhpcy5hY2NlcHRTdGF0dXMgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuYWNjZXB0U3RhdHVzID0gdHJ1ZTtcbiAgICB0aGlzLmFsZXJ0TWVzc2FnZSA9IFwiRG9uZSEgVXBsb2FkIG1vcmU/XCI7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0RGVmYXVsdFN0YXRlKCk6IHZvaWQge1xuICAgIHRoaXMuYWxlcnRNZXNzYWdlID0gbnVsbDtcbiAgICB0aGlzLmFjY2VwdFN0YXR1cyA9IHRydWU7XG4gIH1cblxuICBwdWJsaWMgaXNBY2NlcHRTdGF0dXMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuYWNjZXB0U3RhdHVzO1xuICB9XG5cbiAgcHVibGljIGdldEFsZXJ0TWVzc2FnZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmFsZXJ0TWVzc2FnZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRGaWxlcygpOiBGaWxlW10ge1xuICAgIHJldHVybiB0aGlzLmZpbGVzO1xuICB9XG5cbiAgcHVibGljIGdldEZpbGUoKTogRmlsZSB7XG4gICAgaWYgKHRoaXMuZmlsZXMgIT09IHVuZGVmaW5lZCAmJiB0aGlzLmZpbGVzICE9PSBudWxsICYmIHRoaXMuZmlsZXMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHRoaXMuZmlsZXNbMF07XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIHB1YmxpYyBnZXRGaWxlc0NvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZmlsZXMubGVuZ3RoO1xuICB9XG5cbiAgcHVibGljIGNsZWFyKCk6IHZvaWQge1xuICAgIHRoaXMuZmlsZXMgPSBbXTtcbiAgfVxuXG4gIHB1YmxpYyByZW1vdmVGaWxlKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmZpbGVzLnNwbGljZShpbmRleCwgMSk7XG4gIH1cblxuICBwdWJsaWMgYWRkRmlsZXMoZmlsZXM6IEZpbGVbXSwgJGV2ZW50PzogRXZlbnQsIGZpcmVFdmVudD86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAoZmlyZUV2ZW50ID09PSBudWxsIHx8IGZpcmVFdmVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBmaXJlRXZlbnQgPSB0cnVlO1xuICAgIH1cblxuICAgIEV2ZW50VXRpbHMuaGFuZGxlQnJvd3NlckV2ZW50KHRoaXMsICdiZWZvcmVTZWxlY3RFdmVudCcsICRldmVudCwgZmlyZUV2ZW50LCAoJGV2ZW50OiBFdmVudCkgPT4ge1xuICAgICAgLy8gZG9FdmVudFxuICAgICAgaWYgKHRoaXMuYWxsb3dNdWx0aXBsZVNlbGVjdCkge1xuICAgICAgICBmb3IgKGxldCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgICAgICAgdGhpcy5maWxlcy5wdXNoKGZpbGUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmZpbGVzWzBdID0gZmlsZXNbMF07XG4gICAgICB9XG4gICAgfSwgKCRldmVudDogRXZlbnQpID0+IHtcbiAgICAgIC8vIGVtaXRCZWZvcmVFdmVudFxuICAgICAgdGhpcy5lbWl0QmVmb3JlU2VsZWN0RXZlbnQoJGV2ZW50KTtcbiAgICB9LCAoJGV2ZW50OiBFdmVudCwgcmVzdWx0OiBhbnkpID0+IHtcbiAgICAgIC8vIGVtaXRBZnRlckV2ZW50XG4gICAgICB0aGlzLmVtaXRTZWxlY3RFdmVudCgkZXZlbnQpO1xuICAgIH0sICgkZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICAvLyBkb1ByZXZlbnRlZFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldEJlZm9yZVNlbGVjdEV2ZW50KCk6IEV2ZW50RW1pdHRlcjxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5iZWZvcmVTZWxlY3RFdmVudDtcbiAgfVxuXG4gIHB1YmxpYyBzZXRCZWZvcmVTZWxlY3RFdmVudChldmVudDogRXZlbnRFbWl0dGVyPGFueT4pOiB2b2lkIHtcbiAgICB0aGlzLmJlZm9yZVNlbGVjdEV2ZW50ID0gZXZlbnQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0U2VsZWN0RXZlbnQoKTogRXZlbnRFbWl0dGVyPGFueT4ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdEV2ZW50O1xuICB9XG5cbiAgcHVibGljIHNldFNlbGVjdEV2ZW50KGV2ZW50OiBFdmVudEVtaXR0ZXI8YW55Pik6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0RXZlbnQgPSBldmVudDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRBbGxvd011bHRpcGxlU2VsZWN0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmFsbG93TXVsdGlwbGVTZWxlY3Q7XG4gIH1cblxuICBwdWJsaWMgc2V0QWxsb3dNdWx0aXBsZVNlbGVjdChhbGxvd011bHRpcGxlU2VsZWN0OiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5hbGxvd011bHRpcGxlU2VsZWN0ID0gYWxsb3dNdWx0aXBsZVNlbGVjdDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRNYXhGaWxlc2l6ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLm1heEZpbGVzaXplO1xuICB9XG5cbiAgcHVibGljIHNldE1heEZpbGVzaXplKG1heEZpbGVzaXplOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLm1heEZpbGVzaXplID0gbWF4RmlsZXNpemU7XG4gIH1cblxuICBwdWJsaWMgZ2V0RmlsZVR5cGVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5maWxlVHlwZXM7XG4gIH1cblxuICBwdWJsaWMgc2V0RmlsZVR5cGVzKGZpbGVUeXBlczogc3RyaW5nW10pOiB2b2lkIHtcbiAgICB0aGlzLmZpbGVUeXBlcyA9IGZpbGVUeXBlcztcbiAgfVxufVxuIl19