@duoduo-oba/ng-devui
Version:
DevUI components based on Angular
242 lines • 19.1 kB
JavaScript
/**
* @fileoverview added by tsickle
* Generated from: auto-complete-popup.component.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Component, ElementRef, Input, TemplateRef, ViewChild } from '@angular/core';
import { fadeInOut } from '@duoduo-oba/ng-devui/utils';
export class AutoCompletePopupComponent {
constructor() {
this.activeIndex = 0;
this.showLoading = false;
this.labelMinHeight = 20; // position.top小于20px时候,表示光标在第一行
// position.top小于20px时候,表示光标在第一行
this.onChange = (/**
* @param {?} _
* @return {?}
*/
(_) => null);
this.onTouched = (/**
* @return {?}
*/
() => null);
this.formatter = (/**
* @param {?} item
* @return {?}
*/
(item) => item ? (item.label || item.toString()) : '');
this.maxHeight = 300;
}
/**
* @param {?} obj
* @return {?}
*/
writeValue(obj) {
this.value = obj;
}
/**
* @param {?} isDisabled
* @return {?}
*/
setDisabledState(isDisabled) {
this.disabled = isDisabled;
}
/**
* @param {?} fn
* @return {?}
*/
registerOnChange(fn) {
this.onChange = fn;
}
/**
* @param {?} fn
* @return {?}
*/
registerOnTouched(fn) {
this.onTouched = fn;
}
/**
* @param {?} event
* @param {?} item
* @return {?}
*/
onSelect(event, item) {
if (this.disabledKey && item[this.disabledKey]) {
event.preventDefault();
event.stopPropagation();
return;
}
if (this.overview === 'single') { // 单选场景和单行场景不需要冒泡
event.preventDefault();
event.stopPropagation();
}
this.value = item;
this.onTouched();
this.onChange({ type: 'select', value: this.value });
}
/**
* @param {?} event
* @return {?}
*/
selectCurrentItem(event) {
this.onSelect(event, this.source[this.activeIndex]);
}
/**
* @param {?} index
* @return {?}
*/
onActiveIndexChange(index) {
this.activeIndex = index;
}
/**
* @return {?}
*/
reset() {
this.activeIndex = 0;
}
/**
* @return {?}
*/
next() {
if (this.isOpen && this.source && this.source.length) {
if (this.activeIndex === this.source.length - 1) {
this.activeIndex = 0;
return;
}
this.activeIndex = this.activeIndex + 1;
}
}
/**
* @return {?}
*/
prev() {
if (this.isOpen && this.source && this.source.length) {
if (this.activeIndex === 0) {
this.activeIndex = this.source.length - 1;
return;
}
this.activeIndex = this.activeIndex - 1;
}
}
/**
* @param {?} index
* @param {?} item
* @return {?}
*/
trackByFn(index, item) {
return index;
}
/**
* @param {?} $event
* @return {?}
*/
animationEnd($event) {
if (!this.isOpen) {
/** @type {?} */
const targetElement = this.selectMenuElement.nativeElement;
targetElement.style.display = 'none';
}
}
/**
* @param {?} $event
* @return {?}
*/
loadMoreEvent($event) {
this.showLoading = true;
this.onChange({ type: 'loadMore', value: this });
}
/**
* @param {?} $event
* @return {?}
*/
loadFinish($event) {
this.showLoading = false;
}
}
AutoCompletePopupComponent.decorators = [
{ type: Component, args: [{
selector: 'd-auto-complete-popup',
template: "<div\r\n class=\"devui-dropdown-menu\"\r\n [style.display]=\"isOpen && (source?.length || noResultItemTemplate) ? 'inline-block' : 'none'\"\r\n [style.top]=\"overview === 'multiline' ? (position?.top < labelMinHeight ? '50%' : '100%') : '100%'\"\r\n [style.left]=\"overview === 'multiline' ? position?.left + 'px' : '0'\"\r\n [@fadeInOut]=\"isOpen ? 'bottom' : 'void'\"\r\n (@fadeInOut.done)=\"animationEnd($event)\"\r\n #selectMenuElement\r\n dLoading\r\n [showLoading]=\"showLoading\"\r\n [backdrop]=\"true\"\r\n>\r\n <ul\r\n class=\"devui-list-unstyled scroll-height\"\r\n [style.maxHeight]=\"maxHeight + 'px'\"\r\n dLazyLoad\r\n [enableLazyLoad]=\"enableLazyLoad\"\r\n (loadMore)=\"loadMoreEvent($event)\"\r\n >\r\n <li *ngIf=\"popTipsText && popTipsText.length > 0\" class=\"devui-popup-tips\">\r\n {{ popTipsText }}\r\n </li>\r\n <li\r\n *ngFor=\"let item of source; let $index = index; trackBy: trackByFn\"\r\n class=\"devui-dropdown-item\"\r\n [title]=\"formatter(item)\"\r\n [ngClass]=\"{\r\n 'devui-dropdown-bg': $index == activeIndex,\r\n disabled: disabledKey && item[disabledKey]\r\n }\"\r\n (click)=\"onSelect($event, item)\"\r\n (mouseenter)=\"onActiveIndexChange($index)\"\r\n >\r\n <ng-template\r\n [ngTemplateOutlet]=\"itemTemplate || defaultItemTemplate\"\r\n [ngTemplateOutletContext]=\"{\r\n formatter: formatter,\r\n term: term,\r\n source: source,\r\n item: item,\r\n $index: $index\r\n }\"\r\n >\r\n </ng-template>\r\n </li>\r\n <li class=\"devui-dropdown-item devui-no-result-template\" *ngIf=\"!source?.length && noResultItemTemplate != null\">\r\n <ng-template [ngTemplateOutlet]=\"noResultItemTemplate\" [ngTemplateOutletContext]=\"{ term: term, source: source }\"> </ng-template>\r\n </li>\r\n </ul>\r\n</div>\r\n\r\n<ng-template #defaultItemTemplate let-item=\"item\" let-term=\"term\">\r\n <d-highlight [value]=\"formatter(item)\" [term]=\"term\"></d-highlight>\r\n</ng-template>\r\n",
animations: [fadeInOut],
styles: ["@charset \"UTF-8\";.devui-dropdown-menu{width:100%;display:block}.devui-dropdown-item{cursor:pointer;display:block;width:100%;padding:8px 1rem;clear:both;border:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.devui-no-result-template{cursor:not-allowed}.devui-no-result-template:hover{background:0 0!important}.devui-dropdown-item.disabled,.devui-dropdown-item.disabled:hover{cursor:not-allowed;opacity:.3;color:#252b3a;background:#fff}ul.devui-list-unstyled{margin:0;overflow-y:auto}:host(.devui-dropdown-menu){width:100%;margin:0;padding:5px 0}.devui-dropdown-bg{background:#f2f5fc}.devui-popup-tips{color:#adb0b8;padding:3px 1rem}"]
}] }
];
/** @nocollapse */
AutoCompletePopupComponent.ctorParameters = () => [];
AutoCompletePopupComponent.propDecorators = {
cssClass: [{ type: Input }],
maxHeight: [{ type: Input }],
disabled: [{ type: Input }],
disabledKey: [{ type: Input }],
source: [{ type: Input }],
position: [{ type: Input }],
isOpen: [{ type: Input }],
term: [{ type: Input }],
popTipsText: [{ type: Input }],
overview: [{ type: Input }],
itemTemplate: [{ type: Input }],
noResultItemTemplate: [{ type: Input }],
formatter: [{ type: Input }],
dropdown: [{ type: Input }],
selectWidth: [{ type: Input }],
enableLazyLoad: [{ type: Input }],
selectMenuElement: [{ type: ViewChild, args: ['selectMenuElement', { static: true },] }]
};
if (false) {
/** @type {?} */
AutoCompletePopupComponent.prototype.activeIndex;
/** @type {?} */
AutoCompletePopupComponent.prototype.cssClass;
/** @type {?} */
AutoCompletePopupComponent.prototype.maxHeight;
/** @type {?} */
AutoCompletePopupComponent.prototype.disabled;
/** @type {?} */
AutoCompletePopupComponent.prototype.disabledKey;
/** @type {?} */
AutoCompletePopupComponent.prototype.source;
/** @type {?} */
AutoCompletePopupComponent.prototype.position;
/** @type {?} */
AutoCompletePopupComponent.prototype.isOpen;
/** @type {?} */
AutoCompletePopupComponent.prototype.term;
/** @type {?} */
AutoCompletePopupComponent.prototype.popTipsText;
/** @type {?} */
AutoCompletePopupComponent.prototype.overview;
/** @type {?} */
AutoCompletePopupComponent.prototype.itemTemplate;
/** @type {?} */
AutoCompletePopupComponent.prototype.noResultItemTemplate;
/** @type {?} */
AutoCompletePopupComponent.prototype.formatter;
/** @type {?} */
AutoCompletePopupComponent.prototype.dropdown;
/** @type {?} */
AutoCompletePopupComponent.prototype.selectWidth;
/** @type {?} */
AutoCompletePopupComponent.prototype.enableLazyLoad;
/** @type {?} */
AutoCompletePopupComponent.prototype.selectMenuElement;
/** @type {?} */
AutoCompletePopupComponent.prototype.showLoading;
/**
* @type {?}
* @private
*/
AutoCompletePopupComponent.prototype.value;
/** @type {?} */
AutoCompletePopupComponent.prototype.labelMinHeight;
/**
* @type {?}
* @private
*/
AutoCompletePopupComponent.prototype.onChange;
/**
* @type {?}
* @private
*/
AutoCompletePopupComponent.prototype.onTouched;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0by1jb21wbGV0ZS1wb3B1cC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZy1kZXZ1aS9hdXRvLWNvbXBsZXRlLyIsInNvdXJjZXMiOlsiYXV0by1jb21wbGV0ZS1wb3B1cC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFVBQVUsRUFDVixLQUFLLEVBQ0wsV0FBVyxFQUNYLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFRM0MsTUFBTSxPQUFPLDBCQUEwQjtJQXlCckM7UUF4QkEsZ0JBQVcsR0FBRyxDQUFDLENBQUM7UUFrQmhCLGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBRXBCLG1CQUFjLEdBQUcsRUFBRSxDQUFDLENBQUMsZ0NBQWdDOztRQUM3QyxhQUFROzs7O1FBQUcsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBQztRQUM1QixjQUFTOzs7UUFBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUM7UUFHN0IsSUFBSSxDQUFDLFNBQVM7Ozs7UUFBRyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQSxDQUFDO1FBQzVFLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO0lBQ3ZCLENBQUM7Ozs7O0lBRUQsVUFBVSxDQUFDLEdBQVE7UUFDakIsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7SUFDbkIsQ0FBQzs7Ozs7SUFFRCxnQkFBZ0IsQ0FBQyxVQUFtQjtRQUNsQyxJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztJQUM3QixDQUFDOzs7OztJQUVELGdCQUFnQixDQUFDLEVBQU87UUFDdEIsSUFB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QUVELFVBQVUsQ0FBQyxNQUFXO1FBQ3BCLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO0lBQzNCLENBQUM7OztZQXRIRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLHVCQUF1QjtnQkFDakMsb2tFQUFtRDtnQkFFbkQsVUFBVSxFQUFFLENBQUMsU0FBUyxDQUFDOzthQUN4Qjs7Ozs7dUJBR0UsS0FBSzt3QkFDTCxLQUFLO3VCQUNMLEtBQUs7MEJBQ0wsS0FBSztxQkFDTCxLQUFLO3VCQUNMLEtBQUs7cUJBQ0wsS0FBSzttQkFDTCxLQUFLOzBCQUNMLEtBQUs7dUJBQ0wsS0FBSzsyQkFDTCxLQUFLO21DQUNMLEtBQUs7d0JBQ0wsS0FBSzt1QkFDTCxLQUFLOzBCQUNMLEtBQUs7NkJBQ0wsS0FBSztnQ0FDTCxTQUFTLFNBQUMsbUJBQW1CLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFOzs7O0lBakJoRCxpREFBZ0I7O0lBQ2hCLDhDQUEwQjs7SUFDMUIsK0NBQTJCOztJQUMzQiw4Q0FBMkI7O0lBQzNCLGlEQUE2Qjs7SUFDN0IsNENBQXVCOztJQUN2Qiw4Q0FBdUI7O0lBQ3ZCLDRDQUF5Qjs7SUFDekIsMENBQXNCOztJQUN0QixpREFBNkI7O0lBQzdCLDhDQUEwQjs7SUFDMUIsa0RBQXdDOztJQUN4QywwREFBZ0Q7O0lBQ2hELCtDQUEwQzs7SUFDMUMsOENBQTJCOztJQUMzQixpREFBMEI7O0lBQzFCLG9EQUFpQzs7SUFDakMsdURBQWdGOztJQUNoRixpREFBb0I7Ozs7O0lBQ3BCLDJDQUFtQjs7SUFDbkIsb0RBQW9COzs7OztJQUNwQiw4Q0FBb0M7Ozs7O0lBQ3BDLCtDQUErQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgSW5wdXQsXHJcbiAgVGVtcGxhdGVSZWYsXHJcbiAgVmlld0NoaWxkXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBmYWRlSW5PdXQgfSBmcm9tICduZy1kZXZ1aS91dGlscyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2QtYXV0by1jb21wbGV0ZS1wb3B1cCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2F1dG8tY29tcGxldGUtcG9wdXAuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWydhdXRvLWNvbXBsZXRlLXBvcHVwLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgYW5pbWF0aW9uczogW2ZhZGVJbk91dF1cclxufSlcclxuZXhwb3J0IGNsYXNzIEF1dG9Db21wbGV0ZVBvcHVwQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xyXG4gIGFjdGl2ZUluZGV4ID0gMDtcclxuICBASW5wdXQoKSBjc3NDbGFzczogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIG1heEhlaWdodDogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIGRpc2FibGVkOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGRpc2FibGVkS2V5OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgc291cmNlOiBhbnlbXTtcclxuICBASW5wdXQoKSBwb3NpdGlvbjogYW55O1xyXG4gIEBJbnB1dCgpIGlzT3BlbjogYm9vbGVhbjtcclxuICBASW5wdXQoKSB0ZXJtOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgcG9wVGlwc1RleHQ6IHN0cmluZztcclxuICBASW5wdXQoKSBvdmVydmlldzogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGl0ZW1UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuICBASW5wdXQoKSBub1Jlc3VsdEl0ZW1UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuICBASW5wdXQoKSBmb3JtYXR0ZXI6IChpdGVtOiBhbnkpID0+IHN0cmluZztcclxuICBASW5wdXQoKSBkcm9wZG93bjogYm9vbGVhbjtcclxuICBASW5wdXQoKSBzZWxlY3RXaWR0aDogYW55O1xyXG4gIEBJbnB1dCgpIGVuYWJsZUxhenlMb2FkOiBib29sZWFuO1xyXG4gIEBWaWV3Q2hpbGQoJ3NlbGVjdE1lbnVFbGVtZW50JywgeyBzdGF0aWM6IHRydWUgfSkgc2VsZWN0TWVudUVsZW1lbnQ6IEVsZW1lbnRSZWY7XHJcbiAgc2hvd0xvYWRpbmcgPSBmYWxzZTtcclxuICBwcml2YXRlIHZhbHVlOiBhbnk7XHJcbiAgbGFiZWxNaW5IZWlnaHQgPSAyMDsgLy8gcG9zaXRpb24udG9w5bCP5LqOMjBweOaXtuWAme+8jOihqOekuuWFieagh+WcqOesrOS4gOihjFxyXG4gIHByaXZhdGUgb25DaGFuZ2UgPSAoXzogYW55KSA9PiBudWxsO1xyXG4gIHByaXZhdGUgb25Ub3VjaGVkID0gKCkgPT4gbnVsbDtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB0aGlzLmZvcm1hdHRlciA9IChpdGVtOiBhbnkpID0+IGl0ZW0gPyAoaXRlbS5sYWJlbCB8fCBpdGVtLnRvU3RyaW5nKCkpIDogJyc7XHJcbiAgICB0aGlzLm1heEhlaWdodCA9IDMwMDtcclxuICB9XHJcblxyXG4gIHdyaXRlVmFsdWUob2JqOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMudmFsdWUgPSBvYmo7XHJcbiAgfVxyXG5cclxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XHJcbiAgfVxyXG5cclxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xyXG4gIH1cclxuXHJcbiAgb25TZWxlY3QoZXZlbnQ6IGFueSwgaXRlbTogYW55KSB7XHJcbiAgICBpZiAodGhpcy5kaXNhYmxlZEtleSAmJiBpdGVtW3RoaXMuZGlzYWJsZWRLZXldKSB7XHJcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5vdmVydmlldyA9PT0gJ3NpbmdsZScpIHsgLy8g5Y2V6YCJ5Zy65pmv5ZKM5Y2V6KGM5Zy65pmv5LiN6ZyA6KaB5YaS5rOhXHJcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudmFsdWUgPSBpdGVtO1xyXG4gICAgdGhpcy5vblRvdWNoZWQoKTtcclxuICAgIHRoaXMub25DaGFuZ2UoeyB0eXBlOiAnc2VsZWN0JywgdmFsdWU6IHRoaXMudmFsdWUgfSk7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RDdXJyZW50SXRlbShldmVudDogYW55KSB7XHJcbiAgICB0aGlzLm9uU2VsZWN0KGV2ZW50LCB0aGlzLnNvdXJjZVt0aGlzLmFjdGl2ZUluZGV4XSk7XHJcbiAgfVxyXG5cclxuICBvbkFjdGl2ZUluZGV4Q2hhbmdlKGluZGV4OiBhbnkpIHtcclxuICAgIHRoaXMuYWN0aXZlSW5kZXggPSBpbmRleDtcclxuICB9XHJcblxyXG4gIHJlc2V0KCkge1xyXG4gICAgdGhpcy5hY3RpdmVJbmRleCA9IDA7XHJcbiAgfVxyXG5cclxuICBuZXh0KCkge1xyXG4gICAgaWYgKHRoaXMuaXNPcGVuICYmIHRoaXMuc291cmNlICYmIHRoaXMuc291cmNlLmxlbmd0aCkge1xyXG4gICAgICBpZiAodGhpcy5hY3RpdmVJbmRleCA9PT0gdGhpcy5zb3VyY2UubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgIHRoaXMuYWN0aXZlSW5kZXggPSAwO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmFjdGl2ZUluZGV4ID0gdGhpcy5hY3RpdmVJbmRleCArIDE7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcmV2KCkge1xyXG4gICAgaWYgKHRoaXMuaXNPcGVuICYmIHRoaXMuc291cmNlICYmIHRoaXMuc291cmNlLmxlbmd0aCkge1xyXG4gICAgICBpZiAodGhpcy5hY3RpdmVJbmRleCA9PT0gMCkge1xyXG4gICAgICAgIHRoaXMuYWN0aXZlSW5kZXggPSB0aGlzLnNvdXJjZS5sZW5ndGggLSAxO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmFjdGl2ZUluZGV4ID0gdGhpcy5hY3RpdmVJbmRleCAtIDE7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0cmFja0J5Rm4oaW5kZXg6IGFueSwgaXRlbTogYW55KSB7XHJcbiAgICByZXR1cm4gaW5kZXg7XHJcbiAgfVxyXG5cclxuICBhbmltYXRpb25FbmQoJGV2ZW50OiBhbnkpIHtcclxuICAgIGlmICghdGhpcy5pc09wZW4pIHtcclxuICAgICAgY29uc3QgdGFyZ2V0RWxlbWVudCA9IHRoaXMuc2VsZWN0TWVudUVsZW1lbnQubmF0aXZlRWxlbWVudDtcclxuICAgICAgdGFyZ2V0RWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbG9hZE1vcmVFdmVudCgkZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5zaG93TG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLm9uQ2hhbmdlKHsgdHlwZTogJ2xvYWRNb3JlJywgdmFsdWU6IHRoaXMgfSk7XHJcbiAgfVxyXG5cclxuICBsb2FkRmluaXNoKCRldmVudDogYW55KSB7XHJcbiAgICB0aGlzLnNob3dMb2FkaW5nID0gZmFsc2U7XHJcbiAgfVxyXG59XHJcbiJdfQ==