com.phloxui
Version:
PhloxUI Ng2+ Framework
263 lines (262 loc) • 18.6 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
*/
export class AbstracFileSelector extends AbstractInputDataView {
/**
* @param {?} elementRef
* @param {?} needFocusService
*/
constructor(elementRef, needFocusService) {
super(elementRef, needFocusService);
this.beforeSelectEvent = new EventEmitter();
this.selectEvent = new EventEmitter();
this.allowMultipleSelect = false;
this.files = [];
this.acceptStatus = true;
this.alertMessage = null;
}
/**
* @return {?}
*/
ngOnInit() {
super.ngOnInit();
// recall setData to do some function
this.setData(this.data);
}
/**
* @param {?=} $event
* @return {?}
*/
emitBeforeSelectEvent($event) {
let /** @type {?} */ data = null;
let /** @type {?} */ ev = EventUtils.newCustomEvent(BEFORE_SELECT_EVENT, this, data, $event);
this.beforeSelectEvent.emit(ev);
}
/**
* @param {?=} $event
* @return {?}
*/
emitSelectEvent($event) {
let /** @type {?} */ data = null;
let /** @type {?} */ ev = EventUtils.newCustomEvent(SELECT_EVENT, this, data, $event);
this.selectEvent.emit(ev);
}
/**
* @param {?} files
* @return {?}
*/
isAccept(files) {
for (let /** @type {?} */ file of files) {
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;
}
}
this.acceptStatus = true;
this.alertMessage = "Done! Upload more?";
return true;
}
/**
* @return {?}
*/
setDefaultState() {
this.alertMessage = null;
this.acceptStatus = true;
}
/**
* @return {?}
*/
isAcceptStatus() {
return this.acceptStatus;
}
/**
* @return {?}
*/
getAlertMessage() {
return this.alertMessage;
}
/**
* @return {?}
*/
getFiles() {
return this.files;
}
/**
* @return {?}
*/
getFile() {
if (this.files !== undefined && this.files !== null && this.files.length > 0) {
return this.files[0];
}
return;
}
/**
* @return {?}
*/
getFilesCount() {
return this.files.length;
}
/**
* @return {?}
*/
clear() {
this.files = [];
}
/**
* @param {?} index
* @return {?}
*/
removeFile(index) {
this.files.splice(index, 1);
}
/**
* @param {?} files
* @param {?=} $event
* @param {?=} fireEvent
* @return {?}
*/
addFiles(files, $event, fireEvent) {
if (fireEvent === null || fireEvent === undefined) {
fireEvent = true;
}
EventUtils.handleBrowserEvent(this, 'beforeSelectEvent', $event, fireEvent, ($event) => {
// doEvent
if (this.allowMultipleSelect) {
for (let /** @type {?} */ file of files) {
this.files.push(file);
}
}
else {
this.files[0] = files[0];
}
}, ($event) => {
// emitBeforeEvent
this.emitBeforeSelectEvent($event);
}, ($event, result) => {
// emitAfterEvent
this.emitSelectEvent($event);
}, ($event) => {
// doPrevented
});
}
/**
* @return {?}
*/
getBeforeSelectEvent() {
return this.beforeSelectEvent;
}
/**
* @param {?} event
* @return {?}
*/
setBeforeSelectEvent(event) {
this.beforeSelectEvent = event;
}
/**
* @return {?}
*/
getSelectEvent() {
return this.selectEvent;
}
/**
* @param {?} event
* @return {?}
*/
setSelectEvent(event) {
this.selectEvent = event;
}
/**
* @return {?}
*/
getAllowMultipleSelect() {
return this.allowMultipleSelect;
}
/**
* @param {?} allowMultipleSelect
* @return {?}
*/
setAllowMultipleSelect(allowMultipleSelect) {
this.allowMultipleSelect = allowMultipleSelect;
}
/**
* @return {?}
*/
getMaxFilesize() {
return this.maxFilesize;
}
/**
* @param {?} maxFilesize
* @return {?}
*/
setMaxFilesize(maxFilesize) {
this.maxFilesize = maxFilesize;
}
/**
* @return {?}
*/
getFileTypes() {
return this.fileTypes;
}
/**
* @param {?} fileTypes
* @return {?}
*/
setFileTypes(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);
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWJzdHJhY0ZpbGVTZWxlY3Rvci5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2NvbS5waGxveHVpLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudC9kYXRhdmlldy9pbnB1dC9BYnN0cmFjRmlsZVNlbGVjdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFVLFlBQVksRUFBYyxNQUFNLGVBQWUsQ0FBQztBQUNqRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUVoRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDN0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzdELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxZQUFZLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7OztBQUVuRixNQUFNLDBCQUFvQyxTQUFRLHFCQUFxQjs7Ozs7SUFnQnJFLFlBQVksVUFBc0IsRUFBRSxnQkFBa0M7UUFDcEUsS0FBSyxDQUFDLFVBQVUsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBRXBDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzVDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUN0QyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsS0FBSyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO0tBQzFCOzs7O0lBRU0sUUFBUTtRQUNiLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQzs7UUFHakIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Ozs7OztJQUdsQixxQkFBcUIsQ0FBQyxNQUFjO1FBQzFDLHFCQUFJLElBQUksR0FBUSxJ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Q3hELElBQUksQ0FBQyxtQkFBbUIsR0FBRyxtQkFBbUIsQ0FBQzs7Ozs7SUFHMUMsY0FBYztRQUNuQixNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQzs7Ozs7O0lBR25CLGNBQWMsQ0FBQyxXQUFtQjtRQUN2QyxJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQzs7Ozs7SUFHMUIsWUFBWTtRQUNqQixNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQzs7Ozs7O0lBR2pCLFlBQVksQ0FBQyxTQUFtQjtRQUNyQyxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQzs7Q0FFOUI7O0lBcEtFLE1BQU0sRUFBRTs7OztJQUVSLE1BQU0sRUFBRTs7OztJQUVSLE1BQU0sRUFBRTs7OztJQUVSLE1BQU0sRUFBRTtzQ0FDb0IsWUFBWTs7O0lBQ3hDLE1BQU0sRUFBRTtzQ0FDYyxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT25Jbml0LCBFdmVudEVtaXR0ZXIsIEVsZW1lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0SW5wdXREYXRhVmlldyB9IGZyb20gXCIuL0Fic3RyYWN0SW5wdXREYXRhVmlld1wiO1xuaW1wb3J0IHsgTmVlZEZvY3VzU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlL05lZWRGb2N1c1NlcnZpY2Uuc2VydmljZVwiO1xuaW1wb3J0IHsgT3B0aW9uIH0gZnJvbSAnLi4vLi4vLi4vZGVjb3JhdG9yL09wdGlvbi5kZWNvcmF0b3InO1xuaW1wb3J0IHsgRXZlbnRVdGlscyB9IGZyb20gJy4uLy4uLy4uL3NoYXJlL3V0aWxzL0V2ZW50VXRpbHMnO1xuaW1wb3J0IHsgQkVGT1JFX1NFTEVDVF9FVkVOVCwgU0VMRUNUX0VWRU5UIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmUvQ3VzdG9tRXZlbnRUeXBlJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFic3RyYWNGaWxlU2VsZWN0b3IgZXh0ZW5kcyBBYnN0cmFjdElucHV0RGF0YVZpZXcgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIEBPcHRpb24oKVxuICBwcm90ZWN0ZWQgbWF4RmlsZXNpemU6IG51bWJlcjtcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCBhbGxvd011bHRpcGxlU2VsZWN0OiBib29sZWFuO1xuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIGZpbGVUeXBlczogc3RyaW5nW107XG4gIEBPcHRpb24oKVxuICBwcm90ZWN0ZWQgYmVmb3JlU2VsZWN0RXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIHNlbGVjdEV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgcHJpdmF0ZSBhY2NlcHRTdGF0dXM6IGJvb2xlYW47XG4gIHByaXZhdGUgYWxlcnRNZXNzYWdlOiBzdHJpbmc7XG4gIHByaXZhdGUgZmlsZXM6IEZpbGVbXTtcblxuICBjb25zdHJ1Y3RvcihlbGVtZW50UmVmOiBFbGVtZW50UmVmLCBuZWVkRm9jdXNTZXJ2aWNlOiBOZWVkRm9jdXNTZXJ2aWNlKSB7XG4gICAgc3VwZXIoZWxlbWVudFJlZiwgbmVlZEZvY3VzU2VydmljZSk7XG5cbiAgICB0aGlzLmJlZm9yZVNlbGVjdEV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIHRoaXMuc2VsZWN0RXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgdGhpcy5hbGxvd011bHRpcGxlU2VsZWN0ID0gZmFsc2U7XG4gICAgdGhpcy5maWxlcyA9IFtdO1xuICAgIHRoaXMuYWNjZXB0U3RhdHVzID0gdHJ1ZTtcbiAgICB0aGlzLmFsZXJ0TWVzc2FnZSA9IG51bGw7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgc3VwZXIubmdPbkluaXQoKTtcblxuICAgIC8vIHJlY2FsbCBzZXREYXRhIHRvIGRvIHNvbWUgZnVuY3Rpb25cbiAgICB0aGlzLnNldERhdGEodGhpcy5kYXRhKTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdEJlZm9yZVNlbGVjdEV2ZW50KCRldmVudD86IEV2ZW50KTogdm9pZCB7XG4gICAgbGV0IGRhdGE6IGFueSA9IG51bGw7XG4gICAgbGV0IGV2ID0gRXZlbnRVdGlscy5uZXdDdXN0b21FdmVudChCRUZPUkVfU0VMRUNUX0VWRU5ULCB0aGlzLCBkYXRhLCAkZXZlbnQpO1xuXG4gICAgdGhpcy5iZWZvcmVTZWxlY3RFdmVudC5lbWl0KGV2KTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdFNlbGVjdEV2ZW50KCRldmVudD86IEV2ZW50KTogdm9pZCB7XG4gICAgbGV0IGRhdGE6IGFueSA9IG51bGw7XG4gICAgbGV0IGV2ID0gRXZlbnRVdGlscy5uZXdDdXN0b21FdmVudChTRUxFQ1RfRVZFTlQsIHRoaXMsIGRhdGEsICRldmVudCk7XG5cbiAgICB0aGlzLnNlbGVjdEV2ZW50LmVtaXQoZXYpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGlzQWNjZXB0KGZpbGVzOiBhbnlbXSk6IGJvb2xlYW4ge1xuICAgIGZvciAobGV0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICAgIGlmICh0aGlzLmZpbGVUeXBlcy5pbmRleE9mKGZpbGUudHlwZSkgPT09IC0xKSB7XG4gICAgICAgIHRoaXMuYWxlcnRNZXNzYWdlID0gXCJFcnJvcjogQWxsb3cgb25seSBmaWxlIHR5cGUgJ1wiICsgSlNPTi5zdHJpbmdpZnkodGhpcy5maWxlVHlwZXMpICsgXCInXCI7XG4gICAgICAgIHRoaXMuYWNjZXB0U3RhdHVzID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChmaWxlLnNpemUgPiB0aGlzLm1heEZpbGVzaXplKSB7XG4gICAgICAgIHRoaXMuYWxlcnRNZXNzYWdlID0gXCJFcnJvcjogVGhlIG1heGltdW4gc2l6ZSBmb3IgZmlsZSB1cGxvYWQgaXMgXCIgKyB0aGlzLm1heEZpbGVzaXplICsgXCIgS0JcIjtcbiAgICAgICAgdGhpcy5hY2NlcHRTdGF0dXMgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuYWNjZXB0U3RhdHVzID0gdHJ1ZTtcbiAgICB0aGlzLmFsZXJ0TWVzc2FnZSA9IFwiRG9uZSEgVXBsb2FkIG1vcmU/XCI7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0RGVmYXVsdFN0YXRlKCk6IHZvaWQge1xuICAgIHRoaXMuYWxlcnRNZXNzYWdlID0gbnVsbDtcbiAgICB0aGlzLmFjY2VwdFN0YXR1cyA9IHRydWU7XG4gIH1cblxuICBwdWJsaWMgaXNBY2NlcHRTdGF0dXMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuYWNjZXB0U3RhdHVzO1xuICB9XG5cbiAgcHVibGljIGdldEFsZXJ0TWVzc2FnZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmFsZXJ0TWVzc2FnZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRGaWxlcygpOiBGaWxlW10ge1xuICAgIHJldHVybiB0aGlzLmZpbGVzO1xuICB9XG5cbiAgcHVibGljIGdldEZpbGUoKTogRmlsZSB7XG4gICAgaWYgKHRoaXMuZmlsZXMgIT09IHVuZGVmaW5lZCAmJiB0aGlzLmZpbGVzICE9PSBudWxsICYmIHRoaXMuZmlsZXMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHRoaXMuZmlsZXNbMF07XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIHB1YmxpYyBnZXRGaWxlc0NvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZmlsZXMubGVuZ3RoO1xuICB9XG5cbiAgcHVibGljIGNsZWFyKCk6IHZvaWQge1xuICAgIHRoaXMuZmlsZXMgPSBbXTtcbiAgfVxuXG4gIHB1YmxpYyByZW1vdmVGaWxlKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmZpbGVzLnNwbGljZShpbmRleCwgMSk7XG4gIH1cblxuICBwdWJsaWMgYWRkRmlsZXMoZmlsZXM6IEZpbGVbXSwgJGV2ZW50PzogRXZlbnQsIGZpcmVFdmVudD86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAoZmlyZUV2ZW50ID09PSBudWxsIHx8IGZpcmVFdmVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBmaXJlRXZlbnQgPSB0cnVlO1xuICAgIH1cblxuICAgIEV2ZW50VXRpbHMuaGFuZGxlQnJvd3NlckV2ZW50KHRoaXMsICdiZWZvcmVTZWxlY3RFdmVudCcsICRldmVudCwgZmlyZUV2ZW50LCAoJGV2ZW50OiBFdmVudCkgPT4ge1xuICAgICAgLy8gZG9FdmVudFxuICAgICAgaWYgKHRoaXMuYWxsb3dNdWx0aXBsZVNlbGVjdCkge1xuICAgICAgICBmb3IgKGxldCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgICAgICAgdGhpcy5maWxlcy5wdXNoKGZpbGUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmZpbGVzWzBdID0gZmlsZXNbMF07XG4gICAgICB9XG4gICAgfSwgKCRldmVudDogRXZlbnQpID0+IHtcbiAgICAgIC8vIGVtaXRCZWZvcmVFdmVudFxuICAgICAgdGhpcy5lbWl0QmVmb3JlU2VsZWN0RXZlbnQoJGV2ZW50KTtcbiAgICB9LCAoJGV2ZW50OiBFdmVudCwgcmVzdWx0OiBhbnkpID0+IHtcbiAgICAgIC8vIGVtaXRBZnRlckV2ZW50XG4gICAgICB0aGlzLmVtaXRTZWxlY3RFdmVudCgkZXZlbnQpO1xuICAgIH0sICgkZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICAvLyBkb1ByZXZlbnRlZFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldEJlZm9yZVNlbGVjdEV2ZW50KCk6IEV2ZW50RW1pdHRlcjxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5iZWZvcmVTZWxlY3RFdmVudDtcbiAgfVxuXG4gIHB1YmxpYyBzZXRCZWZvcmVTZWxlY3RFdmVudChldmVudDogRXZlbnRFbWl0dGVyPGFueT4pOiB2b2lkIHtcbiAgICB0aGlzLmJlZm9yZVNlbGVjdEV2ZW50ID0gZXZlbnQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0U2VsZWN0RXZlbnQoKTogRXZlbnRFbWl0dGVyPGFueT4ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdEV2ZW50O1xuICB9XG5cbiAgcHVibGljIHNldFNlbGVjdEV2ZW50KGV2ZW50OiBFdmVudEVtaXR0ZXI8YW55Pik6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0RXZlbnQgPSBldmVudDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRBbGxvd011bHRpcGxlU2VsZWN0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmFsbG93TXVsdGlwbGVTZWxlY3Q7XG4gIH1cblxuICBwdWJsaWMgc2V0QWxsb3dNdWx0aXBsZVNlbGVjdChhbGxvd011bHRpcGxlU2VsZWN0OiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5hbGxvd011bHRpcGxlU2VsZWN0ID0gYWxsb3dNdWx0aXBsZVNlbGVjdDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRNYXhGaWxlc2l6ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLm1heEZpbGVzaXplO1xuICB9XG5cbiAgcHVibGljIHNldE1heEZpbGVzaXplKG1heEZpbGVzaXplOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLm1heEZpbGVzaXplID0gbWF4RmlsZXNpemU7XG4gIH1cblxuICBwdWJsaWMgZ2V0RmlsZVR5cGVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5maWxlVHlwZXM7XG4gIH1cblxuICBwdWJsaWMgc2V0RmlsZVR5cGVzKGZpbGVUeXBlczogc3RyaW5nW10pOiB2b2lkIHtcbiAgICB0aGlzLmZpbGVUeXBlcyA9IGZpbGVUeXBlcztcbiAgfVxufVxuIl19