UNPKG

@duoduo-oba/ng-devui

Version:

DevUI components based on Angular

365 lines 29.3 kB
/** * @fileoverview added by tsickle * Generated from: dropdown.directive.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Directive, Input, Output, HostBinding, EventEmitter, ElementRef, Optional, SkipSelf, ContentChildren, QueryList } from '@angular/core'; import { CdkOverlayOrigin } from '@angular/cdk/overlay'; import { Subject, merge, fromEvent } from 'rxjs'; import { debounceTime, mapTo, filter, tap } from 'rxjs/operators'; import { DropDownService } from './dropdown.service'; var DropDownDirective = /** @class */ (function () { function DropDownDirective(dropdownService, el, parentDropdown) { this.dropdownService = dropdownService; this.el = el; this.parentDropdown = parentDropdown; this.addClass = true; this.disabled = false; /** * dropdown触发方式 */ this.trigger = 'click'; /** * 关闭区域,默认点击菜单链接也会关闭,blank点击其他空白区域才关闭 */ this.closeScope = 'all'; this.closeOnMouseLeaveMenu = false; this.toggleEvent = new EventEmitter(); this.visibleSubject = new Subject(); this._isOpen = false; } Object.defineProperty(DropDownDirective.prototype, "isOpen", { /** * 控制是否打开dropdown,绑定一个devui-dropdown-open class */ get: /** * 控制是否打开dropdown,绑定一个devui-dropdown-open class * @return {?} */ function () { return this._isOpen; }, set: /** * @param {?} value * @return {?} */ function (value) { this._isOpen = !!value; if (this.disabled) { return; } if (this.isOpen) { this.visibleSubject.next(true); this.focusToggleElement(); this.dropdownService.open(this); } else { this.visibleSubject.next(false); this.dropdownService.close(this); } this.toggleEvent.emit(this.isOpen); }, enumerable: true, configurable: true }); Object.defineProperty(DropDownDirective.prototype, "appendToBody", { get: /** * @return {?} */ function () { return this._appendToBody; }, set: /** * @param {?} bool * @return {?} */ function (bool) { this._appendToBody = (bool === true); this.updateCdkConnectedOverlayOrigin(); }, enumerable: true, configurable: true }); Object.defineProperty(DropDownDirective.prototype, "dropDownMenu", { set: /** * @param {?} dropdownMenu * @return {?} */ function (dropdownMenu) { // init drop down menu this.menuEl = dropdownMenu.el; }, enumerable: true, configurable: true }); Object.defineProperty(DropDownDirective.prototype, "dropDownToggle", { set: /** * @param {?} dropdownToggle * @return {?} */ function (dropdownToggle) { // init toggle element this.toggleEl = dropdownToggle.el; this.updateCdkConnectedOverlayOrigin(); }, enumerable: true, configurable: true }); /** * @param {?} changes * @return {?} */ DropDownDirective.prototype.ngOnChanges = /** * @param {?} changes * @return {?} */ function (changes) { if (changes.hasOwnProperty('trigger')) { this.handleHoverSubscriptionIfTriggerIsHover(); } }; /** * @return {?} */ DropDownDirective.prototype.ngOnDestroy = /** * @return {?} */ function () { this.dropdownService.close(this); this.unsubscribeHoverAction(); }; /** * @return {?} */ DropDownDirective.prototype.ngAfterContentInit = /** * @return {?} */ function () { this.handleHoverSubscriptionIfTriggerIsHover(); }; /** * @return {?} */ DropDownDirective.prototype.toggle = /** * @return {?} */ function () { return this.isOpen = !this.isOpen; }; /** * @return {?} */ DropDownDirective.prototype.focusToggleElement = /** * @return {?} */ function () { if (this.toggleEl) { this.toggleEl.nativeElement.focus(); } }; /** * @return {?} */ DropDownDirective.prototype.updateCdkConnectedOverlayOrigin = /** * @return {?} */ function () { if (this.toggleEl && this.appendToBody === true) { this.cdkConnectedOverlayOrigin = new CdkOverlayOrigin(this.toggleEl); } else { this.cdkConnectedOverlayOrigin = undefined; } }; /** * @param {?} observable * @return {?} */ DropDownDirective.prototype.subscribeHoverAction = /** * @param {?} observable * @return {?} */ function (observable) { var _this = this; if (!!!this.hoverSubscription) { this.hoverSubscription = observable.pipe(debounceTime(50)).subscribe((/** * @param {?} isOpen * @return {?} */ function (isOpen) { if (!_this.disabled && _this.isOpen !== isOpen) { _this.isOpen = isOpen; } })); } }; /** * @private * @return {?} */ DropDownDirective.prototype.unsubscribeHoverAction = /** * @private * @return {?} */ function () { if (this.hoverSubscription) { this.hoverSubscription.unsubscribe(); this.hoverSubscription = null; } }; /** * @return {?} */ DropDownDirective.prototype.handleHoverSubscriptionIfTriggerIsHover = /** * @return {?} */ function () { var _this = this; if (this.trigger === 'hover') { /** @type {?} */ var states = merge(fromEvent(this.el.nativeElement, 'mouseenter').pipe(mapTo(true)), fromEvent(this.el.nativeElement, 'mouseleave').pipe(filter((/** * @param {?} event * @return {?} */ function (event) { if (_this.isOpen && _this.appendToBody === true) { // 冒泡模拟的relatedTarget, 和作用于dropdown本身event.relatedTarget // menu(子) -> toggle(父) 冒泡模拟的用于离开菜单的时候判断不判断overlay的div层,即只判断menuEl.nativeElement // toggle(父) -> menu(子) 离开元素本身的需要判断是否落入了overlay的div层,即只判断menuEl.nativeElement.parentElement /** @type {?} */ var relatedTarget_1 = event.relatedTarget || (event['originEvent'] && event['originEvent'].relatedTarget); return !(_this.menuEl.nativeElement && relatedTarget_1 && (_this.menuEl.nativeElement.parentElement.contains(event.relatedTarget) || _this.menuEl.nativeElement.parentElement.parentElement.contains(event.relatedTarget) // 套了两层div增加判断 || _this.menuEl.nativeElement.contains(relatedTarget_1) || _this.dropdownChildren.some((/** * @param {?} children * @return {?} */ function (children) { return children !== _this // appendToBody的时候可能会没有实例化不在document上需要做判断有没有parentElement && (children.menuEl.nativeElement.parentElement && children.menuEl.nativeElement.parentElement.contains(event.relatedTarget) || children.menuEl.nativeElement.contains(relatedTarget_1)); })))); } else { return true; } })), tap((/** * @param {?} event * @return {?} */ function (event) { if (_this.parentDropdown) { _this.simulateEventDispatch(event, _this.parentDropdown.el.nativeElement); } })), mapTo(false))); this.subscribeHoverAction(states); } else { this.unsubscribeHoverAction(); } }; /** * @param {?} $event * @param {?=} target * @return {?} */ DropDownDirective.prototype.simulateEventDispatch = /** * @param {?} $event * @param {?=} target * @return {?} */ function ($event, target) { /** @type {?} */ var event = document.createEvent('MouseEvents'); event.initEvent($event.type, true, true); event['originEvent'] = $event['originEvent'] || $event; if (!target) { target = this.el.nativeElement; } target.dispatchEvent(event); }; DropDownDirective.decorators = [ { type: Directive, args: [{ selector: '[dDropDown]', exportAs: 'd-dropdown', providers: [DropDownService] },] } ]; /** @nocollapse */ DropDownDirective.ctorParameters = function () { return [ { type: DropDownService }, { type: ElementRef }, { type: DropDownDirective, decorators: [{ type: Optional }, { type: SkipSelf }] } ]; }; DropDownDirective.propDecorators = { dropdownChildren: [{ type: ContentChildren, args: [DropDownDirective, { descendants: true },] }], isOpen: [{ type: HostBinding, args: ['class.devui-dropdown-open',] }, { type: Input }], addClass: [{ type: HostBinding, args: ['class.devui-dropdown',] }], disabled: [{ type: Input }], trigger: [{ type: Input }], closeScope: [{ type: Input }], closeOnMouseLeaveMenu: [{ type: Input }], toggleEvent: [{ type: Output }] }; return DropDownDirective; }()); export { DropDownDirective }; if (false) { /** @type {?} */ DropDownDirective.prototype.dropdownChildren; /** * @type {?} * @private */ DropDownDirective.prototype.hoverSubscription; /** @type {?} */ DropDownDirective.prototype.addClass; /** @type {?} */ DropDownDirective.prototype.disabled; /** * dropdown触发方式 * @type {?} */ DropDownDirective.prototype.trigger; /** * 关闭区域,默认点击菜单链接也会关闭,blank点击其他空白区域才关闭 * @type {?} */ DropDownDirective.prototype.closeScope; /** @type {?} */ DropDownDirective.prototype.closeOnMouseLeaveMenu; /** @type {?} */ DropDownDirective.prototype.toggleEvent; /** @type {?} */ DropDownDirective.prototype.visibleSubject; /** * @type {?} * @private */ DropDownDirective.prototype._isOpen; /** @type {?} */ DropDownDirective.prototype.menuEl; /** @type {?} */ DropDownDirective.prototype.toggleEl; /** @type {?} */ DropDownDirective.prototype.cdkConnectedOverlayOrigin; /** * @type {?} * @private */ DropDownDirective.prototype._appendToBody; /** * @type {?} * @private */ DropDownDirective.prototype.dropdownService; /** @type {?} */ DropDownDirective.prototype.el; /** @type {?} */ DropDownDirective.prototype.parentDropdown; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24uZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmctZGV2dWkvZHJvcGRvd24vIiwic291cmNlcyI6WyJkcm9wZG93bi5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFhLEtBQUssRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQ3JDLFFBQVEsRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUMvRSxTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDdkQsT0FBTyxFQUFFLE9BQU8sRUFBYyxLQUFLLEVBQUUsU0FBUyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUMzRSxPQUFPLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXJEO0lBNkVFLDJCQUFvQixlQUFnQyxFQUFTLEVBQWMsRUFDMUMsY0FBaUM7UUFEOUMsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQVMsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQUMxQyxtQkFBYyxHQUFkLGNBQWMsQ0FBbUI7UUFoRDdCLGFBQVEsR0FBRyxJQUFJLENBQUM7UUFDNUMsYUFBUSxHQUFHLEtBQUssQ0FBQzs7OztRQUtqQixZQUFPLEdBQXNCLE9BQU8sQ0FBQzs7OztRQUlyQyxlQUFVLEdBQTZCLEtBQUssQ0FBQztRQUM3QywwQkFBcUIsR0FBRyxLQUFLLENBQUM7UUFFN0IsZ0JBQVcsR0FBMEIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUVsRSxtQkFBYyxHQUFHLElBQUksT0FBTyxFQUFXLENBQUM7UUFFaEMsWUFBTyxHQUFHLEtBQUssQ0FBQztJQWdDeEIsQ0FBQztJQXBFRCxzQkFDYSxxQ0FB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dUM7O0lBRXZDLHdDQUFrRTs7SUFFbEUsMkNBQXdDOzs7OztJQUV4QyxvQ0FBd0I7O0lBR3hCLG1DQUEwQjs7SUFFMUIscUNBQTRCOztJQUU1QixzREFBbUQ7Ozs7O0lBRW5ELDBDQUErQjs7Ozs7SUFxQm5CLDRDQUF3Qzs7SUFBRSwrQkFBcUI7O0lBQ3pFLDJDQUFnRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgT25EZXN0cm95LCBJbnB1dCwgT3V0cHV0LCBIb3N0QmluZGluZywgRXZlbnRFbWl0dGVyLCBFbGVtZW50UmVmLFxyXG4gIFNpbXBsZUNoYW5nZXMsIE9uQ2hhbmdlcywgQWZ0ZXJDb250ZW50SW5pdCwgT3B0aW9uYWwsIFNraXBTZWxmLCBDb250ZW50Q2hpbGRyZW4sXHJcbiAgUXVlcnlMaXN0XHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENka092ZXJsYXlPcmlnaW59IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcclxuaW1wb3J0IHsgU3ViamVjdCwgT2JzZXJ2YWJsZSwgbWVyZ2UsIGZyb21FdmVudCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgbWFwVG8sIGZpbHRlciwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBEcm9wRG93blNlcnZpY2UgfSBmcm9tICcuL2Ryb3Bkb3duLnNlcnZpY2UnO1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6ICdbZERyb3BEb3duXScsXHJcbiAgZXhwb3J0QXM6ICdkLWRyb3Bkb3duJyxcclxuICBwcm92aWRlcnM6IFtEcm9wRG93blNlcnZpY2VdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEcm9wRG93bkRpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uRGVzdHJveSwgT25DaGFuZ2VzLCBBZnRlckNvbnRlbnRJbml0IHtcclxuICBAQ29udGVudENoaWxkcmVuKERyb3BEb3duRGlyZWN0aXZlLCB7ZGVzY2VuZGFudHM6IHRydWV9KSBkcm9wZG93bkNoaWxkcmVuOiBRdWVyeUxpc3Q8RHJvcERvd25EaXJlY3RpdmU+O1xyXG4gIHByaXZhdGUgaG92ZXJTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuICAvKipcclxuICAgKiDmjqfliLbmmK/lkKbmiZPlvIBkcm9wZG93bu+8jOe7keWumuS4gOS4qmRldnVpLWRyb3Bkb3duLW9wZW4gY2xhc3NcclxuICAgKi9cclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmRldnVpLWRyb3Bkb3duLW9wZW4nKVxyXG4gIEBJbnB1dCgpIGdldCBpc09wZW4oKTogYm9vbGVhbiB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9pc09wZW47XHJcbiAgfVxyXG4gIHNldCBpc09wZW4odmFsdWUpIHtcclxuICAgIHRoaXMuX2lzT3BlbiA9ICEhdmFsdWU7XHJcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5pc09wZW4pIHtcclxuICAgICAgdGhpcy52aXNpYmxlU3ViamVjdC5uZXh0KHRydWUpO1xyXG4gICAgICB0aGlzLmZvY3VzVG9nZ2xlRWxlbWVudCgpO1xyXG4gICAgICB0aGlzLmRyb3Bkb3duU2VydmljZS5vcGVuKHRoaXMpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy52aXNpYmxlU3ViamVjdC5uZXh0KGZhbHNlKTtcclxuICAgICAgdGhpcy5kcm9wZG93blNlcnZpY2UuY2xvc2UodGhpcyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnRvZ2dsZUV2ZW50LmVtaXQodGhpcy5pc09wZW4pO1xyXG4gIH1cclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmRldnVpLWRyb3Bkb3duJykgYWRkQ2xhc3MgPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIGRyb3Bkb3du6Kem5Y+R5pa55byPXHJcbiAgICovXHJcbiAgQElucHV0KCkgdHJpZ2dlcjogJ2NsaWNrJyB8ICdob3ZlcicgPSAnY2xpY2snO1xyXG4gIC8qKlxyXG4gICAqIOWFs+mXreWMuuWfn++8jOm7mOiupOeCueWHu+iPnOWNlemTvuaOpeS5n+S8muWFs+mXre+8jGJsYW5r54K55Ye75YW25LuW56m655m95Yy65Z+f5omN5YWz6ZetXHJcbiAgICovXHJcbiAgQElucHV0KCkgY2xvc2VTY29wZTogJ2FsbCcgfCAnYmxhbmsnIHwgJ25vbmUnID0gJ2FsbCc7XHJcbiAgQElucHV0KCkgY2xvc2VPbk1vdXNlTGVhdmVNZW51ID0gZmFsc2U7XHJcblxyXG4gIEBPdXRwdXQoKSB0b2dnbGVFdmVudDogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICB2aXNpYmxlU3ViamVjdCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XHJcblxyXG4gIHByaXZhdGUgX2lzT3BlbiA9IGZhbHNlO1xyXG5cclxuICAvLyBkcm9wIG1lbnUgaHRtbFxyXG4gIHB1YmxpYyBtZW51RWw6IEVsZW1lbnRSZWY7XHJcbiAgLy8gZHJvcCBkb3duIHRvZ2dsZSBlbGVtZW50XHJcbiAgcHVibGljIHRvZ2dsZUVsOiBFbGVtZW50UmVmO1xyXG5cclxuICBwdWJsaWMgY2RrQ29ubmVjdGVkT3ZlcmxheU9yaWdpbjogQ2RrT3ZlcmxheU9yaWdpbjtcclxuXHJcbiAgcHJpdmF0ZSBfYXBwZW5kVG9Cb2R5OiBib29sZWFuO1xyXG5cclxuICBwdWJsaWMgc2V0IGFwcGVuZFRvQm9keShib29sOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9hcHBlbmRUb0JvZHkgPSAoYm9vbCA9PT0gdHJ1ZSk7XHJcbiAgICB0aGlzLnVwZGF0ZUNka0Nvbm5lY3RlZE92ZXJsYXlPcmlnaW4oKTtcclxuICB9XHJcbiAgcHVibGljIGdldCBhcHBlbmRUb0JvZHkoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fYXBwZW5kVG9Cb2R5O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBkcm9wRG93bk1lbnUoZHJvcGRvd25NZW51KSB7XHJcbiAgICAvLyBpbml0IGRyb3AgZG93biBtZW51XHJcbiAgICB0aGlzLm1lbnVFbCA9IGRyb3Bkb3duTWVudS5lbDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgZHJvcERvd25Ub2dnbGUoZHJvcGRvd25Ub2dnbGUpIHtcclxuICAgIC8vIGluaXQgdG9nZ2xlIGVsZW1lbnRcclxuICAgIHRoaXMudG9nZ2xlRWwgPSBkcm9wZG93blRvZ2dsZS5lbDtcclxuICAgIHRoaXMudXBkYXRlQ2RrQ29ubmVjdGVkT3ZlcmxheU9yaWdpbigpO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBkcm9wZG93blNlcnZpY2U6IERyb3BEb3duU2VydmljZSwgcHVibGljIGVsOiBFbGVtZW50UmVmLFxyXG4gICAgQE9wdGlvbmFsKCkgQFNraXBTZWxmKCkgcHVibGljIHBhcmVudERyb3Bkb3duOiBEcm9wRG93bkRpcmVjdGl2ZSkge1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ3RyaWdnZXInKSkge1xyXG4gICAgICB0aGlzLmhhbmRsZUhvdmVyU3Vic2NyaXB0aW9uSWZUcmlnZ2VySXNIb3ZlcigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLmRyb3Bkb3duU2VydmljZS5jbG9zZSh0aGlzKTtcclxuICAgIHRoaXMudW5zdWJzY3JpYmVIb3ZlckFjdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xyXG4gICAgdGhpcy5oYW5kbGVIb3ZlclN1YnNjcmlwdGlvbklmVHJpZ2dlcklzSG92ZXIoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB0b2dnbGUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5pc09wZW4gPSAhdGhpcy5pc09wZW47XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZm9jdXNUb2dnbGVFbGVtZW50KCkge1xyXG4gICAgaWYgKHRoaXMudG9nZ2xlRWwpIHtcclxuICAgICAgdGhpcy50b2dnbGVFbC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGVDZGtDb25uZWN0ZWRPdmVybGF5T3JpZ2luKCkge1xyXG4gICAgaWYgKHRoaXMudG9nZ2xlRWwgJiYgdGhpcy5hcHBlbmRUb0JvZHkgPT09IHRydWUpIHtcclxuICAgICAgdGhpcy5jZGtDb25uZWN0ZWRPdmVybGF5T3JpZ2luID0gbmV3IENka092ZXJsYXlPcmlnaW4odGhpcy50b2dnbGVFbCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNka0Nvbm5lY3RlZE92ZXJsYXlPcmlnaW4gPSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdWJzY3JpYmVIb3ZlckFjdGlvbihvYnNlcnZhYmxlOiBPYnNlcnZhYmxlPGJvb2xlYW4+KTogdm9pZCB7XHJcbiAgICBpZiAoISEhdGhpcy5ob3ZlclN1YnNjcmlwdGlvbikge1xyXG4gICAgICB0aGlzLmhvdmVyU3Vic2NyaXB0aW9uID0gb2JzZXJ2YWJsZS5waXBlKFxyXG4gICAgICAgIGRlYm91bmNlVGltZSg1MCksXHJcbiAgICAgICkuc3Vic2NyaWJlKGlzT3BlbiA9PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmRpc2FibGVkICYmIHRoaXMuaXNPcGVuICE9PSBpc09wZW4pIHtcclxuICAgICAgICAgIHRoaXMuaXNPcGVuID0gaXNPcGVuO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVuc3Vic2NyaWJlSG92ZXJBY3Rpb24oKSB7XHJcbiAgICBpZiAodGhpcy5ob3ZlclN1YnNjcmlwdGlvbikge1xyXG4gICAgICB0aGlzLmhvdmVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgIHRoaXMuaG92ZXJTdWJzY3JpcHRpb24gPSBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlSG92ZXJTdWJzY3JpcHRpb25JZlRyaWdnZXJJc0hvdmVyICgpIHtcclxuICAgIGlmICh0aGlzLnRyaWdnZXIgPT09ICdob3ZlcicpIHtcclxuICAgICAgY29uc3Qgc3RhdGVzOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gbWVyZ2UoXHJcbiAgICAgICAgZnJvbUV2ZW50KHRoaXMuZWwubmF0aXZlRWxlbWVudCwgJ21vdXNlZW50ZXInKS5waXBlKG1hcFRvKHRydWUpKSxcclxuICAgICAgICBmcm9tRXZlbnQodGhpcy5lbC5uYXRpdmVFbGVtZW50LCAnbW91c2VsZWF2ZScpLnBpcGUoXHJcbiAgICAgICAgICBmaWx0ZXIoKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzT3BlbiAmJiB0aGlzLmFwcGVuZFRvQm9keSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgIC8vIOWGkuazoeaooeaLn+eahHJlbGF0ZWRUYXJnZXTvvIwg5ZKM5L2c55So5LqOZHJvcGRvd27mnKzouqtldmVudC5yZWxhdGVkVGFyZ2V0XHJcbiAgICAgICAgICAgICAgLy8gbWVude+8iOWtkO+8iSAtPiB0b2dnbGXvvIjniLbvvIkg5YaS5rOh5qih5ouf55qE55So5LqO56a75byA6I+c5Y2V55qE5pe25YCZ5Yik5pat5LiN5Yik5patb3ZlcmxheeeahGRpduWxgu+8jOWNs+WPquWIpOaWrW1lbnVFbC5uYXRpdmVFbGVtZW50XHJcbiAgICAgICAgICAgICAgLy8gdG9nZ2xl77yI54i277yJIC0+IG1lbnXvvIjlrZDvvIkg56a75byA5YWD57Sg5pys6Lqr55qE6ZyA6KaB5Yik5pat5piv5ZCm6JC95YWl5LqGb3ZlcmxheeeahGRpduWxgu+8jOWNs+WPquWIpOaWrW1lbnVFbC5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnRcclxuICAgICAgICAgICAgICBjb25zdCByZWxhdGVkVGFyZ2V0ID0gZXZlbnQucmVsYXRlZFRhcmdldCB8fCAoZXZlbnRbJ29yaWdpbkV2ZW50J10gJiYgZXZlbnRbJ29yaWdpbkV2ZW50J10ucmVsYXRlZFRhcmdldCk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuICAhKHRoaXMubWVudUVsLm5hdGl2ZUVsZW1lbnQgJiYgcmVsYXRlZFRhcmdldCAmJlxyXG4gICAgICAgICAgICAgICAgICAodGhpcy5tZW51RWwubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnJlbGF0ZWRUYXJnZXQpXHJcbiAgICAgICAgICAgICAgICAgIHx8IHRoaXMubWVudUVsLm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnJlbGF0ZWRUYXJnZXQpIC8vIOWll+S6huS4pOWxgmRpduWinuWKoOWIpOaWrVxyXG4gICAgICAgICAgICAgICAgICB8fCB0aGlzLm1lbnVFbC5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKHJlbGF0ZWRUYXJnZXQpXHJcbiAgICAgICAgICAgICAgICAgIHx8IHRoaXMuZHJvcGRvd25DaGlsZHJlbi5zb21lKFxyXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbiAhPT0gdGhpc1xyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gYXBwZW5kVG9Cb2R555qE5pe25YCZ5Y+v6IO95Lya5rKh5pyJ5a6e5L6L5YyW5LiN5ZyoZG9jdW1lbnTkuIrpnIDopoHlgZrliKTmlq3mnInmsqHmnIlwYXJlbnRFbGVtZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAmJiAoIGNoaWxkcmVuLm1lbnVFbC5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnRcclxuICAgICAgICAgICAgICAgICAgICAgICYmIGNoaWxkcmVuLm1lbnVFbC5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQuY29udGFpbnMoZXZlbnQucmVsYXRlZFRhcmdldClcclxuICAgICAgICAgICAgICAgICAgICAgIHx8IGNoaWxkcmVuLm1lbnVFbC5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKHJlbGF0ZWRUYXJnZXQpKVxyXG4gICAgICAgICAgICAgICAgICApKVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgdGFwKGV2ZW50ID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMucGFyZW50RHJvcGRvd24pIHtcclxuICAgICAgICAgICAgICB0aGlzLnNpbXVsYXRlRXZlbnREaXNwYXRjaChldmVudCwgdGhpcy5wYXJlbnREcm9wZG93bi5lbC5uYXRpdmVFbGVtZW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgICBtYXBUbyhmYWxzZSkpXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuc3Vic2NyaWJlSG92ZXJBY3Rpb24oc3RhdGVzKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudW5zdWJzY3JpYmVIb3ZlckFjdGlvbigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2ltdWxhdGVFdmVudERpc3BhdGNoKCRldmVudCwgdGFyZ2V0PyApIHtcclxuICAgIGNvbnN0IGV2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ01vdXNlRXZlbnRzJyk7XHJcbiAgICBldmVudC5pbml0RXZlbnQoJGV2ZW50LnR5cGUsIHRydWUsIHRydWUpO1xyXG4gICAgZXZlbnRbJ29yaWdpbkV2ZW50J10gPSAkZXZlbnRbJ29yaWdpbkV2ZW50J10gfHwgJGV2ZW50O1xyXG5cclxuICAgIGlmICghdGFyZ2V0KSB7XHJcbiAgICAgIHRhcmdldCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudDtcclxuICAgIH1cclxuXHJcbiAgICB0YXJnZXQuZGlzcGF0Y2hFdmVudChldmVudCk7XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=