UNPKG

@duoduo-oba/ng-devui

Version:

DevUI components based on Angular

279 lines 27.2 kB
/** * @fileoverview added by tsickle * Generated from: dropdown-menu.directive.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Directive, ElementRef, Host, HostBinding, HostListener, Renderer2 } from '@angular/core'; import { fromEvent } from 'rxjs'; import { filter } from 'rxjs/operators'; import { animate, AnimationBuilder, style } from '@angular/animations'; import { WindowRef } from '@duoduo-oba/ng-devui/window-ref'; import { DropDownDirective } from './dropdown.directive'; export class DropDownMenuDirective { /** * @param {?} dropdown * @param {?} el * @param {?} render * @param {?} windowRef * @param {?} builder */ constructor(dropdown, el, render, windowRef, builder) { this.dropdown = dropdown; this.el = el; this.render = render; this.windowRef = windowRef; this.builder = builder; this.diplay = 'none'; this.tabIndex = -1; this.addClass = true; this.keydownEscapeEvent$ = fromEvent(document.body, 'keydown').pipe( // tslint:disable-next-line: deprecation // ie11不支持code filter((/** * @param {?} event * @return {?} */ event => ((/** @type {?} */ (event))).keyCode === 27))); this.hide = (/** * @param {?} event * @return {?} */ (event) => { this.dropdown.toggle(); }); this.dropdown.visibleSubject.subscribe((/** * @param {?} value * @return {?} */ value => { if (value !== this.currentValue) { this.currentValue = value; if (this.keydownEscapeSub) { this.keydownEscapeSub.unsubscribe(); } if (value) { this.keydownEscapeSub = this.keydownEscapeEvent$.subscribe((/** * @param {?} event * @return {?} */ event => { this.hide(event); })); } if (this.dropdown.appendToBody) { this.render.setStyle(this.el.nativeElement, 'display', 'block'); return; } if (this.player) { // 此处保留一个防止点击过快 this.player.destroy(); this.player = undefined; } if (value) { this.render.setStyle(this.el.nativeElement, 'display', 'block'); } /** @type {?} */ const direction = this.calcPopDirection(value); /** @type {?} */ const metadata = value ? this.fadeIn(direction) : this.fadeOut(direction); /** @type {?} */ const factory = this.builder.build(metadata); this.player = factory.create(this.el.nativeElement); this.player.play(); this.player.onDone((/** * @return {?} */ () => { if (!value) { this.render.setStyle(this.el.nativeElement, 'display', 'none'); } this.player.destroy(); this.player = undefined; })); } })); } /** * @return {?} */ ngOnInit() { this.dropdown.dropDownMenu = this; } /** * @param {?} value * @return {?} */ calcPopDirection(value) { /** @type {?} */ const dropdownMenuElement = this.el.nativeElement; /** @type {?} */ const elementHeight = dropdownMenuElement.offsetHeight; /** @type {?} */ const bottomDistance = this.windowRef.innerHeight - this.dropdown.el.nativeElement.getBoundingClientRect().bottom; /** @type {?} */ const isBottomEnough = bottomDistance >= elementHeight; if (!value) { return this.popDirectionCache; } else { if (!isBottomEnough) { this.render.setStyle(dropdownMenuElement, 'bottom', '100%'); this.render.setStyle(dropdownMenuElement, 'top', 'auto'); this.popDirectionCache = 'top'; return 'top'; } else { this.render.removeStyle(dropdownMenuElement, 'bottom'); this.render.removeStyle(dropdownMenuElement, 'top'); this.popDirectionCache = 'bottom'; return 'bottom'; } } } /** * @param {?} event * @return {?} */ mouseLeave(event) { event.stopPropagation(); if ((this.dropdown.appendToBody && this.dropdown.trigger === 'hover') || (this.dropdown.trigger === 'click' && this.dropdown.closeOnMouseLeaveMenu)) { if (this.dropdown.toggleEl.nativeElement.contains(event.relatedTarget) || this.dropdown.dropdownChildren.some((/** * @param {?} children * @return {?} */ children => children.menuEl !== this.el && children.menuEl.nativeElement.parentElement && children.menuEl.nativeElement.parentElement.contains(event.relatedTarget)))) { return; } else { if (this.dropdown.trigger === 'hover') { this.dropdown.simulateEventDispatch(event); } else { /** @type {?} */ const relatedTarget = event['originEvent'] && event['originEvent'].relatedTarget; if (relatedTarget && (this.dropdown.toggleEl.nativeElement.contains(relatedTarget) || this.dropdown.dropdownChildren.some((/** * @param {?} children * @return {?} */ children => children.menuEl.nativeElement.contains(relatedTarget))))) { return; } this.dropdown.isOpen = false; } } } return false; } /** * @private * @param {?} direction * @return {?} */ fadeIn(direction) { switch (direction) { case 'top': return [ style({ transform: 'translateZ(0) scaleY(0)', opacity: 0, transformOrigin: '0% 100%' }), animate('200ms cubic-bezier(0.23, 1, 0.32, 1)', style({ transform: 'translateZ(0) scaleY(1)', opacity: 1, transformOrigin: '0% 100%' })), ]; case 'bottom': default: return [ style({ transform: 'translateZ(0) scaleY(0)', opacity: 0, transformOrigin: '0% 0%' }), animate('200ms cubic-bezier(0.23, 1, 0.32, 1)', style({ transform: 'translateZ(0) scaleY(1)', opacity: 1, transformOrigin: '0% 0%' })), ]; } } /** * @private * @param {?} direction * @return {?} */ fadeOut(direction) { switch (direction) { case 'top': return [ style({ transform: 'translateZ(0) scaleY(1)', opacity: 1, transformOrigin: '0% 100%' }), animate('200ms cubic-bezier(0.755, 0.05, 0.855, 0.06)', style({ transform: 'translateZ(0) scaleY(0)', opacity: 0, transformOrigin: '0% 100%' })) ]; case 'bottom': default: return [ style({ transform: 'translateZ(0) scaleY(1)', opacity: 1, transformOrigin: '0% 0%' }), animate('200ms cubic-bezier(0.755, 0.05, 0.855, 0.06)', style({ transform: 'translateZ(0) scaleY(0)', opacity: 0, transformOrigin: '0% 0%' })) ]; } } } DropDownMenuDirective.decorators = [ { type: Directive, args: [{ selector: '[dDropDownMenu]', exportAs: 'd-dropdown-menu', },] } ]; /** @nocollapse */ DropDownMenuDirective.ctorParameters = () => [ { type: DropDownDirective, decorators: [{ type: Host }] }, { type: ElementRef }, { type: Renderer2 }, { type: WindowRef }, { type: AnimationBuilder } ]; DropDownMenuDirective.propDecorators = { diplay: [{ type: HostBinding, args: ['style.display',] }], tabIndex: [{ type: HostBinding, args: ['attr.tabIndex',] }], addClass: [{ type: HostBinding, args: ['class.devui-dropdown-menu',] }], mouseLeave: [{ type: HostListener, args: ['mouseleave', ['$event'],] }] }; if (false) { /** @type {?} */ DropDownMenuDirective.prototype.player; /** @type {?} */ DropDownMenuDirective.prototype.diplay; /** @type {?} */ DropDownMenuDirective.prototype.tabIndex; /** @type {?} */ DropDownMenuDirective.prototype.addClass; /** @type {?} */ DropDownMenuDirective.prototype.keydownEscapeEvent$; /** @type {?} */ DropDownMenuDirective.prototype.keydownEscapeSub; /** @type {?} */ DropDownMenuDirective.prototype.popDirectionCache; /** * @type {?} * @private */ DropDownMenuDirective.prototype.currentValue; /** @type {?} */ DropDownMenuDirective.prototype.hide; /** * @type {?} * @private */ DropDownMenuDirective.prototype.dropdown; /** * @type {?} * @private */ DropDownMenuDirective.prototype.el; /** * @type {?} * @private */ DropDownMenuDirective.prototype.render; /** * @type {?} * @private */ DropDownMenuDirective.prototype.windowRef; /** * @type {?} * @private */ DropDownMenuDirective.prototype.builder; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24tbWVudS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZy1kZXZ1aS9kcm9wZG93bi8iLCJzb3VyY2VzIjpbImRyb3Bkb3duLW1lbnUuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQVUsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3hHLE9BQU8sRUFBQyxTQUFTLEVBQWUsTUFBTSxNQUFNLENBQUM7QUFDN0MsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3RDLE9BQU8sRUFBQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQXNDLEtBQUssRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3pHLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUM5QyxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQU12RCxNQUFNLE9BQU8scUJBQXFCOzs7Ozs7OztJQVloQyxZQUE0QixRQUEyQixFQUFVLEVBQWMsRUFBVSxNQUFpQixFQUNsRyxTQUFvQixFQUFVLE9BQXlCO1FBRG5DLGFBQVEsR0FBUixRQUFRLENBQW1CO1FBQVUsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQUFVLFdBQU0sR0FBTixNQUFNLENBQVc7UUFDbEcsY0FBUyxHQUFULFNBQVMsQ0FBVztRQUFVLFlBQU8sR0FBUCxPQUFPLENBQWtCO1FBWGpDLFdBQU0sR0FBRyxNQUFNLENBQUM7UUFDaEIsYUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ0YsYUFBUSxHQUFHLElBQUksQ0FBQztRQUMxRCx3QkFBbUIsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQyxJQUFJO1FBQzVELHVEQUF1RDtRQUN2RCxNQUFNOzs7O1FBQUMsS0FBSyxDQUFDLEVB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LEVBQUUsT0FBTyxFQUFDLENBQUM7b0JBQ25GLE9BQU8sQ0FBQyw4Q0FBOEMsRUFDcEQsS0FBSyxDQUFDLEVBQUMsU0FBUyxFQUFFLHlCQUF5QixFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBQyxDQUFDLENBQ3BGO2lCQUNGLENBQUM7U0FDTDtJQUNILENBQUM7OztZQTFKRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLGlCQUFpQjtnQkFDM0IsUUFBUSxFQUFFLGlCQUFpQjthQUM1Qjs7OztZQUxPLGlCQUFpQix1QkFrQlYsSUFBSTtZQXZCQSxVQUFVO1lBQTJDLFNBQVM7WUFJekUsU0FBUztZQURBLGdCQUFnQjs7O3FCQVU5QixXQUFXLFNBQUMsZUFBZTt1QkFDM0IsV0FBVyxTQUFDLGVBQWU7dUJBQzNCLFdBQVcsU0FBQywyQkFBMkI7eUJBMEV2QyxZQUFZLFNBQUMsWUFBWSxFQUFFLENBQUMsUUFBUSxDQUFDOzs7O0lBN0V0Qyx1Q0FBd0I7O0lBQ3hCLHVDQUE4Qzs7SUFDOUMseUNBQTRDOztJQUM1Qyx5Q0FBMEQ7O0lBQzFELG9EQUdFOztJQUNGLGlEQUErQjs7SUFDL0Isa0RBQW9DOzs7OztJQUNwQyw2Q0FBMEI7O0lBcUgxQixxQ0FFQzs7Ozs7SUF0SFcseUNBQTJDOzs7OztJQUFFLG1DQUFzQjs7Ozs7SUFBRSx1Q0FBeUI7Ozs7O0lBQzFHLDBDQUE0Qjs7Ozs7SUFBRSx3Q0FBaUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0RpcmVjdGl2ZSwgRWxlbWVudFJlZiwgSG9zdCwgSG9zdEJpbmRpbmcsIEhvc3RMaXN0ZW5lciwgT25Jbml0LCBSZW5kZXJlcjJ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge2Zyb21FdmVudCwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtmaWx0ZXJ9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHthbmltYXRlLCBBbmltYXRpb25CdWlsZGVyLCBBbmltYXRpb25NZXRhZGF0YSwgQW5pbWF0aW9uUGxheWVyLCBzdHlsZX0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XHJcbmltcG9ydCB7V2luZG93UmVmfSBmcm9tICduZy1kZXZ1aS93aW5kb3ctcmVmJztcclxuaW1wb3J0IHtEcm9wRG93bkRpcmVjdGl2ZX0gZnJvbSAnLi9kcm9wZG93bi5kaXJlY3RpdmUnO1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6ICdbZERyb3BEb3duTWVudV0nLFxyXG4gIGV4cG9ydEFzOiAnZC1kcm9wZG93bi1tZW51JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIERyb3BEb3duTWVudURpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgcGxheWVyOiBBbmltYXRpb25QbGF5ZXI7XHJcbiAgQEhvc3RCaW5kaW5nKCdzdHlsZS5kaXNwbGF5JykgZGlwbGF5ID0gJ25vbmUnO1xyXG4gIEBIb3N0QmluZGluZygnYXR0ci50YWJJbmRleCcpIHRhYkluZGV4ID0gLTE7XHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5kZXZ1aS1kcm9wZG93bi1tZW51JykgYWRkQ2xhc3MgPSB0cnVlO1xyXG4gIGtleWRvd25Fc2NhcGVFdmVudCQgPSBmcm9tRXZlbnQoZG9jdW1lbnQuYm9keSwgJ2tleWRvd24nKS5waXBlKFxyXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBkZXByZWNhdGlvbiAvLyBpZTEx5LiN5pSv5oyBY29kZVxyXG4gICAgZmlsdGVyKGV2ZW50ID0+ICg8S2V5Ym9hcmRFdmVudD5ldmVudCkua2V5Q29kZSA9PT0gMjcpXHJcbiAgKTtcclxuICBrZXlkb3duRXNjYXBlU3ViOiBTdWJzY3JpcHRpb247XHJcbiAgcG9wRGlyZWN0aW9uQ2FjaGU6ICd0b3AnIHwgJ2JvdHRvbSc7XHJcbiAgcHJpdmF0ZSBjdXJyZW50VmFsdWU6IGFueTtcclxuICBjb25zdHJ1Y3RvcihASG9zdCgpIHByaXZhdGUgZHJvcGRvd246IERyb3BEb3duRGlyZWN0aXZlLCBwcml2YXRlIGVsOiBFbGVtZW50UmVmLCBwcml2YXRlIHJlbmRlcjogUmVuZGVyZXIyLFxyXG4gIHByaXZhdGUgd2luZG93UmVmOiBXaW5kb3dSZWYsIHByaXZhdGUgYnVpbGRlcjogQW5pbWF0aW9uQnVpbGRlcikge1xyXG4gICAgdGhpcy5kcm9wZG93bi52aXNpYmxlU3ViamVjdC5zdWJzY3JpYmUodmFsdWUgPT4ge1xyXG4gICAgICBpZiAodmFsdWUgIT09IHRoaXMuY3VycmVudFZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICBpZiAodGhpcy5rZXlkb3duRXNjYXBlU3ViKSB7XHJcbiAgICAgICAgICB0aGlzLmtleWRvd25Fc2NhcGVTdWIudW5zdWJzY3JpYmUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICB0aGlzLmtleWRvd25Fc2NhcGVTdWIgPSB0aGlzLmtleWRvd25Fc2NhcGVFdmVudCQuc3Vic2NyaWJlKGV2ZW50ID0+IHtcclxuICAgICAgICAgICAgdGhpcy5oaWRlKGV2ZW50KTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5kcm9wZG93bi5hcHBlbmRUb0JvZHkpIHtcclxuICAgICAgICAgIHRoaXMucmVuZGVyLnNldFN0eWxlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwgJ2Rpc3BsYXknLCAnYmxvY2snKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMucGxheWVyKSB7IC8vIOatpOWkhOS/neeVmeS4gOS4qumYsuatoueCueWHu+i/h+W/q1xyXG4gICAgICAgICAgdGhpcy5wbGF5ZXIuZGVzdHJveSgpO1xyXG4gICAgICAgICAgdGhpcy5wbGF5ZXIgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgICAgdGhpcy5yZW5kZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCAnZGlzcGxheScsICdibG9jaycpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBkaXJlY3Rpb24gPSB0aGlzLmNhbGNQb3BEaXJlY3Rpb24odmFsdWUpO1xyXG4gICAgICAgIGNvbnN0IG1ldGFkYXRhID0gdmFsdWUgPyB0aGlzLmZhZGVJbihkaXJlY3Rpb24pIDogdGhpcy5mYWRlT3V0KGRpcmVjdGlvbik7XHJcbiAgICAgICAgY29uc3QgZmFjdG9yeSA9IHRoaXMuYnVpbGRlci5idWlsZChtZXRhZGF0YSk7XHJcbiAgICAgICAgdGhpcy5wbGF5ZXIgPSBmYWN0b3J5LmNyZWF0ZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgICAgIHRoaXMucGxheWVyLnBsYXkoKTtcclxuICAgICAgICB0aGlzLnBsYXllci5vbkRvbmUoKCkgPT4ge1xyXG4gICAgICAgICAgaWYgKCF2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLnJlbmRlci5zZXRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsICdkaXNwbGF5JywgJ25vbmUnKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMucGxheWVyLmRlc3Ryb3koKTtcclxuICAgICAgICAgIHRoaXMucGxheWVyID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5kcm9wZG93bi5kcm9wRG93bk1lbnUgPSB0aGlzO1xyXG4gIH1cclxuXHJcbiAgY2FsY1BvcERpcmVjdGlvbih2YWx1ZSkge1xyXG4gICAgY29uc3QgZHJvcGRvd25NZW51RWxlbWVudCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudDtcclxuICAgIGNvbnN0IGVsZW1lbnRIZWlnaHQgPSBkcm9wZG93bk1lbnVFbGVtZW50Lm9mZnNldEhlaWdodDtcclxuICAgIGNvbnN0IGJvdHRvbURpc3RhbmNlID0gdGhpcy53aW5kb3dSZWYuaW5uZXJIZWlnaHQgLSB0aGlzLmRyb3Bkb3duLmVsLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuYm90dG9tO1xyXG4gICAgY29uc3QgaXNCb3R0b21Fbm91Z2ggPSBib3R0b21EaXN0YW5jZSA+PSBlbGVtZW50SGVpZ2h0O1xyXG4gICAgaWYgKCF2YWx1ZSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5wb3BEaXJlY3Rpb25DYWNoZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICghaXNCb3R0b21Fbm91Z2gpIHtcclxuICAgICAgICB0aGlzLnJlbmRlci5zZXRTdHlsZShkcm9wZG93bk1lbnVFbGVtZW50LCAnYm90dG9tJywgJzEwMCUnKTtcclxuICAgICAgICB0aGlzLnJlbmRlci5zZXRTdHlsZShkcm9wZG93bk1lbnVFbGVtZW50LCAndG9wJywgJ2F1dG8nKTtcclxuICAgICAgICB0aGlzLnBvcERpcmVjdGlvbkNhY2hlID0gJ3RvcCc7XHJcbiAgICAgICAgcmV0dXJuICd0b3AnO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucmVuZGVyLnJlbW92ZVN0eWxlKGRyb3Bkb3duTWVudUVsZW1lbnQsICdib3R0b20nKTtcclxuICAgICAgICB0aGlzLnJlbmRlci5yZW1vdmVTdHlsZShkcm9wZG93bk1lbnVFbGVtZW50LCAndG9wJyk7XHJcbiAgICAgICAgdGhpcy5wb3BEaXJlY3Rpb25DYWNoZSA9ICdib3R0b20nO1xyXG4gICAgICAgIHJldHVybiAnYm90dG9tJztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignbW91c2VsZWF2ZScsIFsnJGV2ZW50J10pXHJcbiAgcHVibGljIG1vdXNlTGVhdmUoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgaWYgKCh0aGlzLmRyb3Bkb3duLmFwcGVuZFRvQm9keSAmJiB0aGlzLmRyb3Bkb3duLnRyaWdnZXIgPT09ICdob3ZlcicpXHJcbiAgICB8fCAodGhpcy5kcm9wZG93bi50cmlnZ2VyID09PSAnY2xpY2snICYmIHRoaXMuZHJvcGRvd24uY2xvc2VPbk1vdXNlTGVhdmVNZW51KSkge1xyXG4gICAgaWYgKHRoaXMuZHJvcGRvd24udG9nZ2xlRWwubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC5yZWxhdGVkVGFyZ2V0KVxyXG4gICAgICB8fCB0aGlzLmRyb3Bkb3duLmRyb3Bkb3duQ2hpbGRyZW4uc29tZShcclxuICAgICAgICBjaGlsZHJlbiA9PlxyXG4gICAgICAgICAgY2hpbGRyZW4ubWVudUVsICE9PSB0aGlzLmVsXHJcbiAgICAgICAgICAmJiBjaGlsZHJlbi5tZW51RWwubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50XHJcbiAgICAgICAgICAmJiBjaGlsZHJlbi5tZW51RWwubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnJlbGF0ZWRUYXJnZXQpKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5kcm9wZG93bi50cmlnZ2VyID09PSAnaG92ZXInKSB7XHJcbiAgICAgICAgdGhpcy5kcm9wZG93bi5zaW11bGF0ZUV2ZW50RGlzcGF0Y2goZXZlbnQpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IHJlbGF0ZWRUYXJnZXQgPSBldmVudFsnb3JpZ2luRXZlbnQnXSAmJuOAgGV2ZW50WydvcmlnaW5FdmVudCddLnJlbGF0ZWRUYXJnZXQ7XHJcbiAgICAgICAgaWYgKHJlbGF0ZWRUYXJnZXQgJiYgKFxyXG4gICAgICAgICAgICB0aGlzLmRyb3Bkb3duLnRvZ2dsZUVsLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMocmVsYXRlZFRhcmdldClcclxuICAgICAgICAgICAgfHwgdGhpcy5kcm9wZG93bi5kcm9wZG93bkNoaWxkcmVuLnNvbWUoY2hpbGRyZW4gPT4gY2hpbGRyZW4ubWVudUVsLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMocmVsYXRlZFRhcmdldCkpXHJcbiAgICAgICAgICApKSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZHJvcGRvd24uaXNPcGVuID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZhZGVJbihkaXJlY3Rpb24pOiBBbmltYXRpb25NZXRhZGF0YVtdIHtcclxuICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7XHJcbiAgICAgIGNhc2UgJ3RvcCc6XHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgIHN0eWxlKHt0cmFuc2Zvcm06ICd0cmFuc2xhdGVaKDApIHNjYWxlWSgwKScsIG9wYWNpdHk6IDAsIHRyYW5zZm9ybU9yaWdpbjogJzAlIDEwMCUnfSksXHJcbiAgICAgICAgICBhbmltYXRlKCcyMDBtcyBjdWJpYy1iZXppZXIoMC4yMywgMSwgMC4zMiwgMSknLFxyXG4gICAgICAgICAgICBzdHlsZSh7dHJhbnNmb3JtOiAndHJhbnNsYXRlWigwKSBzY2FsZVkoMSknLCBvcGFjaXR5OiAxLCB0cmFuc2Zvcm1PcmlnaW46ICcwJSAxMDAlJ30pXHJcbiAgICAgICAgICApLFxyXG4gICAgICAgIF07XHJcbiAgICAgIGNhc2UgJ2JvdHRvbSc6XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgIHN0eWxlKHt0cmFuc2Zvcm06ICd0cmFuc2xhdGVaKDApIHNjYWxlWSgwKScsIG9wYWNpdHk6IDAsIHRyYW5zZm9ybU9yaWdpbjogJzAlIDAlJ30pLFxyXG4gICAgICAgICAgYW5pbWF0ZSgnMjAwbXMgY3ViaWMtYmV6aWVyKDAuMjMsIDEsIDAuMzIsIDEpJyxcclxuICAgICAgICAgICAgc3R5bGUoe3RyYW5zZm9ybTogJ3RyYW5zbGF0ZVooMCkgc2NhbGVZKDEpJywgb3BhY2l0eTogMSwgdHJhbnNmb3JtT3JpZ2luOiAnMCUgMCUnfSlcclxuICAgICAgICAgICksXHJcbiAgICAgICAgXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBoaWRlID0gKGV2ZW50OiBFdmVudCkgPT4ge1xyXG4gICAgdGhpcy5kcm9wZG93bi50b2dnbGUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZmFkZU91dChkaXJlY3Rpb24pOiBBbmltYXRpb25NZXRhZGF0YVtdIHtcclxuICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7XHJcbiAgICAgIGNhc2UgJ3RvcCc6XHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgIHN0eWxlKHt0cmFuc2Zvcm06ICd0cmFuc2xhdGVaKDApIHNjYWxlWSgxKScsIG9wYWNpdHk6IDEsIHRyYW5zZm9ybU9yaWdpbjogJzAlIDEwMCUnfSksXHJcbiAgICAgICAgICBhbmltYXRlKCcyMDBtcyBjdWJpYy1iZXppZXIoMC43NTUsIDAuMDUsIDAuODU1LCAwLjA2KScsXHJcbiAgICAgICAgICAgIHN0eWxlKHt0cmFuc2Zvcm06ICd0cmFuc2xhdGVaKDApIHNjYWxlWSgwKScsIG9wYWNpdHk6IDAsIHRyYW5zZm9ybU9yaWdpbjogJzAlIDEwMCUnfSlcclxuICAgICAgICAgIClcclxuICAgICAgICBdO1xyXG4gICAgICBjYXNlICdib3R0b20nOlxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICBzdHlsZSh7dHJhbnNmb3JtOiAndHJhbnNsYXRlWigwKSBzY2FsZVkoMSknLCBvcGFjaXR5OiAxLCB0cmFuc2Zvcm1PcmlnaW46ICcwJSAwJSd9KSxcclxuICAgICAgICAgIGFuaW1hdGUoJzIwMG1zIGN1YmljLWJlemllcigwLjc1NSwgMC4wNSwgMC44NTUsIDAuMDYpJyxcclxuICAgICAgICAgICAgc3R5bGUoe3RyYW5zZm9ybTogJ3RyYW5zbGF0ZVooMCkgc2NhbGVZKDApJywgb3BhY2l0eTogMCwgdHJhbnNmb3JtT3JpZ2luOiAnMCUgMCUnfSlcclxuICAgICAgICAgIClcclxuICAgICAgICBdO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=