UNPKG

@duoduo-oba/ng-devui

Version:

DevUI components based on Angular

299 lines 28.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'; var DropDownMenuDirective = /** @class */ (function () { function DropDownMenuDirective(dropdown, el, render, windowRef, builder) { var _this = this; 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 {?} */ function (event) { return ((/** @type {?} */ (event))).keyCode === 27; }))); this.hide = (/** * @param {?} event * @return {?} */ function (event) { _this.dropdown.toggle(); }); this.dropdown.visibleSubject.subscribe((/** * @param {?} value * @return {?} */ function (value) { if (value !== _this.currentValue) { _this.currentValue = value; if (_this.keydownEscapeSub) { _this.keydownEscapeSub.unsubscribe(); } if (value) { _this.keydownEscapeSub = _this.keydownEscapeEvent$.subscribe((/** * @param {?} event * @return {?} */ function (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 {?} */ var direction = _this.calcPopDirection(value); /** @type {?} */ var metadata = value ? _this.fadeIn(direction) : _this.fadeOut(direction); /** @type {?} */ var factory = _this.builder.build(metadata); _this.player = factory.create(_this.el.nativeElement); _this.player.play(); _this.player.onDone((/** * @return {?} */ function () { if (!value) { _this.render.setStyle(_this.el.nativeElement, 'display', 'none'); } _this.player.destroy(); _this.player = undefined; })); } })); } /** * @return {?} */ DropDownMenuDirective.prototype.ngOnInit = /** * @return {?} */ function () { this.dropdown.dropDownMenu = this; }; /** * @param {?} value * @return {?} */ DropDownMenuDirective.prototype.calcPopDirection = /** * @param {?} value * @return {?} */ function (value) { /** @type {?} */ var dropdownMenuElement = this.el.nativeElement; /** @type {?} */ var elementHeight = dropdownMenuElement.offsetHeight; /** @type {?} */ var bottomDistance = this.windowRef.innerHeight - this.dropdown.el.nativeElement.getBoundingClientRect().bottom; /** @type {?} */ var 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 {?} */ DropDownMenuDirective.prototype.mouseLeave = /** * @param {?} event * @return {?} */ function (event) { var _this = this; 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 {?} */ function (children) { return 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 {?} */ var relatedTarget_1 = event['originEvent'] && event['originEvent'].relatedTarget; if (relatedTarget_1 && (this.dropdown.toggleEl.nativeElement.contains(relatedTarget_1) || this.dropdown.dropdownChildren.some((/** * @param {?} children * @return {?} */ function (children) { return children.menuEl.nativeElement.contains(relatedTarget_1); })))) { return; } this.dropdown.isOpen = false; } } } return false; }; /** * @private * @param {?} direction * @return {?} */ DropDownMenuDirective.prototype.fadeIn = /** * @private * @param {?} direction * @return {?} */ function (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 {?} */ DropDownMenuDirective.prototype.fadeOut = /** * @private * @param {?} direction * @return {?} */ function (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 = function () { return [ { 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'],] }] }; return DropDownMenuDirective; }()); export { DropDownMenuDirective }; 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24tbWVudS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZy1kZXZ1aS9kcm9wZG93bi8iLCJzb3VyY2VzIjpbImRyb3Bkb3duLW1lbnUuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQVUsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3hHLE9BQU8sRUFBQyxTQUFTLEVBQWUsTUFBTSxNQUFNLENBQUM7QUFDN0MsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3RDLE9BQU8sRUFBQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQXNDLEtBQUssRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3pHLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUM5QyxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUV2RDtJQWdCRSwrQkFBNEIsUUFBMkIsRUFBVSxFQUFjLEVBQVUsTUFBaUIsRUFDbEcsU0FBb0IsRUFBVSxPQUF5QjtRQUQvRCxpQkFzQ0M7UUF0QzJCLGFBQVEsR0FBUixRQUFRLENBQW1CO1FBQVUsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQUFVLFdBQU0sR0FBTixNQUFNLENBQVc7UUFDbEcsY0FBUyxHQUFULFNBQVMsQ0FBVztRQUFVLFlBQU8sR0FBUCxPQUFPLENBQWtCO1FBWGpDLFdBQU0sR0FBRyxNQUFNLENBQUM7UUFDaEIsYUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ0YsYUFBUSxHQUFHLElBQUksQ0FBQztRQUMxRCx3QkFBbUIsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQyxJQUFJO1FBQzVELHVEQUF1RDtRQUN2RCxNQUFNOzs7O1FBQUMsVUFBQSxLQUFLLElBQUksT0FBQSxD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LEtBQUssQ0FBQyxFQUFDLFNBQVMsRUFBRSx5QkFBeUIsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLGVBQWUsRUFBRSxPQUFPLEVBQUMsQ0FBQztvQkFDbkYsT0FBTyxDQUFDLDhDQUE4QyxFQUNwRCxLQUFLLENBQUMsRUFBQyxTQUFTLEVBQUUseUJBQXlCLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFDLENBQUMsQ0FDcEY7aUJBQ0YsQ0FBQztTQUNMO0lBQ0gsQ0FBQzs7Z0JBMUpGLFNBQVMsU0FBQztvQkFDVCxRQUFRLEVBQUUsaUJBQWlCO29CQUMzQixRQUFRLEVBQUUsaUJBQWlCO2lCQUM1Qjs7OztnQkFMTyxpQkFBaUIsdUJBa0JWLElBQUk7Z0JBdkJBLFVBQVU7Z0JBQTJDLFNBQVM7Z0JBSXpFLFNBQVM7Z0JBREEsZ0JBQWdCOzs7eUJBVTlCLFdBQVcsU0FBQyxlQUFlOzJCQUMzQixXQUFXLFNBQUMsZUFBZTsyQkFDM0IsV0FBVyxTQUFDLDJCQUEyQjs2QkEwRXZDLFlBQVksU0FBQyxZQUFZLEVBQUUsQ0FBQyxRQUFRLENBQUM7O0lBeUV4Qyw0QkFBQztDQUFBLEFBM0pELElBMkpDO1NBdkpZLHFCQUFxQjs7O0lBQ2hDLHVDQUF3Qjs7SUFDeEIsdUNBQThDOztJQUM5Qyx5Q0FBNEM7O0lBQzVDLHlDQUEwRDs7SUFDMUQsb0RBR0U7O0lBQ0YsaURBQStCOztJQUMvQixrREFBb0M7Ozs7O0lBQ3BDLDZDQUEwQjs7SUFxSDFCLHFDQUVDOzs7OztJQXRIVyx5Q0FBMkM7Ozs7O0lBQUUsbUNBQXNCOzs7OztJQUFFLHVDQUF5Qjs7Ozs7SUFDMUcsMENBQTRCOzs7OztJQUFFLHdDQUFpQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RGlyZWN0aXZlLCBFbGVtZW50UmVmLCBIb3N0LCBIb3N0QmluZGluZywgSG9zdExpc3RlbmVyLCBPbkluaXQsIFJlbmRlcmVyMn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7ZnJvbUV2ZW50LCBTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge2ZpbHRlcn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQge2FuaW1hdGUsIEFuaW1hdGlvbkJ1aWxkZXIsIEFuaW1hdGlvbk1ldGFkYXRhLCBBbmltYXRpb25QbGF5ZXIsIHN0eWxlfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcclxuaW1wb3J0IHtXaW5kb3dSZWZ9IGZyb20gJ25nLWRldnVpL3dpbmRvdy1yZWYnO1xyXG5pbXBvcnQge0Ryb3BEb3duRGlyZWN0aXZlfSBmcm9tICcuL2Ryb3Bkb3duLmRpcmVjdGl2ZSc7XHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICBzZWxlY3RvcjogJ1tkRHJvcERvd25NZW51XScsXHJcbiAgZXhwb3J0QXM6ICdkLWRyb3Bkb3duLW1lbnUnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRHJvcERvd25NZW51RGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0IHtcclxuICBwbGF5ZXI6IEFuaW1hdGlvblBsYXllcjtcclxuICBASG9zdEJpbmRpbmcoJ3N0eWxlLmRpc3BsYXknKSBkaXBsYXkgPSAnbm9uZSc7XHJcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLnRhYkluZGV4JykgdGFiSW5kZXggPSAtMTtcclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmRldnVpLWRyb3Bkb3duLW1lbnUnKSBhZGRDbGFzcyA9IHRydWU7XHJcbiAga2V5ZG93bkVzY2FwZUV2ZW50JCA9IGZyb21FdmVudChkb2N1bWVudC5ib2R5LCAna2V5ZG93bicpLnBpcGUoXHJcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IGRlcHJlY2F0aW9uIC8vIGllMTHkuI3mlK/mjIFjb2RlXHJcbiAgICBmaWx0ZXIoZXZlbnQgPT4gKDxLZXlib2FyZEV2ZW50PmV2ZW50KS5rZXlDb2RlID09PSAyNylcclxuICApO1xyXG4gIGtleWRvd25Fc2NhcGVTdWI6IFN1YnNjcmlwdGlvbjtcclxuICBwb3BEaXJlY3Rpb25DYWNoZTogJ3RvcCcgfCAnYm90dG9tJztcclxuICBwcml2YXRlIGN1cnJlbnRWYWx1ZTogYW55O1xyXG4gIGNvbnN0cnVjdG9yKEBIb3N0KCkgcHJpdmF0ZSBkcm9wZG93bjogRHJvcERvd25EaXJlY3RpdmUsIHByaXZhdGUgZWw6IEVsZW1lbnRSZWYsIHByaXZhdGUgcmVuZGVyOiBSZW5kZXJlcjIsXHJcbiAgcHJpdmF0ZSB3aW5kb3dSZWY6IFdpbmRvd1JlZiwgcHJpdmF0ZSBidWlsZGVyOiBBbmltYXRpb25CdWlsZGVyKSB7XHJcbiAgICB0aGlzLmRyb3Bkb3duLnZpc2libGVTdWJqZWN0LnN1YnNjcmliZSh2YWx1ZSA9PiB7XHJcbiAgICAgIGlmICh2YWx1ZSAhPT0gdGhpcy5jdXJyZW50VmFsdWUpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIGlmICh0aGlzLmtleWRvd25Fc2NhcGVTdWIpIHtcclxuICAgICAgICAgIHRoaXMua2V5ZG93bkVzY2FwZVN1Yi51bnN1YnNjcmliZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICAgIHRoaXMua2V5ZG93bkVzY2FwZVN1YiA9IHRoaXMua2V5ZG93bkVzY2FwZUV2ZW50JC5zdWJzY3JpYmUoZXZlbnQgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmhpZGUoZXZlbnQpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmRyb3Bkb3duLmFwcGVuZFRvQm9keSkge1xyXG4gICAgICAgICAgdGhpcy5yZW5kZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCAnZGlzcGxheScsICdibG9jaycpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5wbGF5ZXIpIHsgLy8g5q2k5aSE5L+d55WZ5LiA5Liq6Ziy5q2i54K55Ye76L+H5b+rXHJcbiAgICAgICAgICB0aGlzLnBsYXllci5kZXN0cm95KCk7XHJcbiAgICAgICAgICB0aGlzLnBsYXllciA9IHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICB0aGlzLnJlbmRlci5zZXRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsICdkaXNwbGF5JywgJ2Jsb2NrJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IHRoaXMuY2FsY1BvcERpcmVjdGlvbih2YWx1ZSk7XHJcbiAgICAgICAgY29uc3QgbWV0YWRhdGEgPSB2YWx1ZSA/IHRoaXMuZmFkZUluKGRpcmVjdGlvbikgOiB0aGlzLmZhZGVPdXQoZGlyZWN0aW9uKTtcclxuICAgICAgICBjb25zdCBmYWN0b3J5ID0gdGhpcy5idWlsZGVyLmJ1aWxkKG1ldGFkYXRhKTtcclxuICAgICAgICB0aGlzLnBsYXllciA9IGZhY3RvcnkuY3JlYXRlKHRoaXMuZWwubmF0aXZlRWxlbWVudCk7XHJcbiAgICAgICAgdGhpcy5wbGF5ZXIucGxheSgpO1xyXG4gICAgICAgIHRoaXMucGxheWVyLm9uRG9uZSgoKSA9PiB7XHJcbiAgICAgICAgICBpZiAoIXZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyLnNldFN0eWxlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwgJ2Rpc3BsYXknLCAnbm9uZScpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5wbGF5ZXIuZGVzdHJveSgpO1xyXG4gICAgICAgICAgdGhpcy5wbGF5ZXIgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmRyb3Bkb3duLmRyb3BEb3duTWVudSA9IHRoaXM7XHJcbiAgfVxyXG5cclxuICBjYWxjUG9wRGlyZWN0aW9uKHZhbHVlKSB7XHJcbiAgICBjb25zdCBkcm9wZG93bk1lbnVFbGVtZW50ID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50O1xyXG4gICAgY29uc3QgZWxlbWVudEhlaWdodCA9IGRyb3Bkb3duTWVudUVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xyXG4gICAgY29uc3QgYm90dG9tRGlzdGFuY2UgPSB0aGlzLndpbmRvd1JlZi5pbm5lckhlaWdodCAtIHRoaXMuZHJvcGRvd24uZWwubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5ib3R0b207XHJcbiAgICBjb25zdCBpc0JvdHRvbUVub3VnaCA9IGJvdHRvbURpc3RhbmNlID49IGVsZW1lbnRIZWlnaHQ7XHJcbiAgICBpZiAoIXZhbHVlKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnBvcERpcmVjdGlvbkNhY2hlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKCFpc0JvdHRvbUVub3VnaCkge1xyXG4gICAgICAgIHRoaXMucmVuZGVyLnNldFN0eWxlKGRyb3Bkb3duTWVudUVsZW1lbnQsICdib3R0b20nLCAnMTAwJScpO1xyXG4gICAgICAgIHRoaXMucmVuZGVyLnNldFN0eWxlKGRyb3Bkb3duTWVudUVsZW1lbnQsICd0b3AnLCAnYXV0bycpO1xyXG4gICAgICAgIHRoaXMucG9wRGlyZWN0aW9uQ2FjaGUgPSAndG9wJztcclxuICAgICAgICByZXR1cm4gJ3RvcCc7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5yZW5kZXIucmVtb3ZlU3R5bGUoZHJvcGRvd25NZW51RWxlbWVudCwgJ2JvdHRvbScpO1xyXG4gICAgICAgIHRoaXMucmVuZGVyLnJlbW92ZVN0eWxlKGRyb3Bkb3duTWVudUVsZW1lbnQsICd0b3AnKTtcclxuICAgICAgICB0aGlzLnBvcERpcmVjdGlvbkNhY2hlID0gJ2JvdHRvbSc7XHJcbiAgICAgICAgcmV0dXJuICdib3R0b20nO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCdtb3VzZWxlYXZlJywgWyckZXZlbnQnXSlcclxuICBwdWJsaWMgbW91c2VMZWF2ZShldmVudDogTW91c2VFdmVudCkge1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICBpZiAoKHRoaXMuZHJvcGRvd24uYXBwZW5kVG9Cb2R5ICYmIHRoaXMuZHJvcGRvd24udHJpZ2dlciA9PT0gJ2hvdmVyJylcclxuICAgIHx8ICh0aGlzLmRyb3Bkb3duLnRyaWdnZXIgPT09ICdjbGljaycgJiYgdGhpcy5kcm9wZG93bi5jbG9zZU9uTW91c2VMZWF2ZU1lbnUpKSB7XHJcbiAgICBpZiAodGhpcy5kcm9wZG93bi50b2dnbGVFbC5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnJlbGF0ZWRUYXJnZXQpXHJcbiAgICAgIHx8IHRoaXMuZHJvcGRvd24uZHJvcGRvd25DaGlsZHJlbi5zb21lKFxyXG4gICAgICAgIGNoaWxkcmVuID0+XHJcbiAgICAgICAgICBjaGlsZHJlbi5tZW51RWwgIT09IHRoaXMuZWxcclxuICAgICAgICAgICYmIGNoaWxkcmVuLm1lbnVFbC5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnRcclxuICAgICAgICAgICYmIGNoaWxkcmVuLm1lbnVFbC5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQuY29udGFpbnMoZXZlbnQucmVsYXRlZFRhcmdldCkpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmRyb3Bkb3duLnRyaWdnZXIgPT09ICdob3ZlcicpIHtcclxuICAgICAgICB0aGlzLmRyb3Bkb3duLnNpbXVsYXRlRXZlbnREaXNwYXRjaChldmVudCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3QgcmVsYXRlZFRhcmdldCA9IGV2ZW50WydvcmlnaW5FdmVudCddICYm44CAZXZlbnRbJ29yaWdpbkV2ZW50J10ucmVsYXRlZFRhcmdldDtcclxuICAgICAgICBpZiAocmVsYXRlZFRhcmdldCAmJiAoXHJcbiAgICAgICAgICAgIHRoaXMuZHJvcGRvd24udG9nZ2xlRWwubmF0aXZlRWxlbWVudC5jb250YWlucyhyZWxhdGVkVGFyZ2V0KVxyXG4gICAgICAgICAgICB8fCB0aGlzLmRyb3Bkb3duLmRyb3Bkb3duQ2hpbGRyZW4uc29tZShjaGlsZHJlbiA9PiBjaGlsZHJlbi5tZW51RWwubmF0aXZlRWxlbWVudC5jb250YWlucyhyZWxhdGVkVGFyZ2V0KSlcclxuICAgICAgICAgICkpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5kcm9wZG93bi5pc09wZW4gPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZmFkZUluKGRpcmVjdGlvbik6IEFuaW1hdGlvbk1ldGFkYXRhW10ge1xyXG4gICAgc3dpdGNoIChkaXJlY3Rpb24pIHtcclxuICAgICAgY2FzZSAndG9wJzpcclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgc3R5bGUoe3RyYW5zZm9ybTogJ3RyYW5zbGF0ZVooMCkgc2NhbGVZKDApJywgb3BhY2l0eTogMCwgdHJhbnNmb3JtT3JpZ2luOiAnMCUgMTAwJSd9KSxcclxuICAgICAgICAgIGFuaW1hdGUoJzIwMG1zIGN1YmljLWJlemllcigwLjIzLCAxLCAwLjMyLCAxKScsXHJcbiAgICAgICAgICAgIHN0eWxlKHt0cmFuc2Zvcm06ICd0cmFuc2xhdGVaKDApIHNjYWxlWSgxKScsIG9wYWNpdHk6IDEsIHRyYW5zZm9ybU9yaWdpbjogJzAlIDEwMCUnfSlcclxuICAgICAgICAgICksXHJcbiAgICAgICAgXTtcclxuICAgICAgY2FzZSAnYm90dG9tJzpcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgc3R5bGUoe3RyYW5zZm9ybTogJ3RyYW5zbGF0ZVooMCkgc2NhbGVZKDApJywgb3BhY2l0eTogMCwgdHJhbnNmb3JtT3JpZ2luOiAnMCUgMCUnfSksXHJcbiAgICAgICAgICBhbmltYXRlKCcyMDBtcyBjdWJpYy1iZXppZXIoMC4yMywgMSwgMC4zMiwgMSknLFxyXG4gICAgICAgICAgICBzdHlsZSh7dHJhbnNmb3JtOiAndHJhbnNsYXRlWigwKSBzY2FsZVkoMSknLCBvcGFjaXR5OiAxLCB0cmFuc2Zvcm1PcmlnaW46ICcwJSAwJSd9KVxyXG4gICAgICAgICAgKSxcclxuICAgICAgICBdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGhpZGUgPSAoZXZlbnQ6IEV2ZW50KSA9PiB7XHJcbiAgICB0aGlzLmRyb3Bkb3duLnRvZ2dsZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmYWRlT3V0KGRpcmVjdGlvbik6IEFuaW1hdGlvbk1ldGFkYXRhW10ge1xyXG4gICAgc3dpdGNoIChkaXJlY3Rpb24pIHtcclxuICAgICAgY2FzZSAndG9wJzpcclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgc3R5bGUoe3RyYW5zZm9ybTogJ3RyYW5zbGF0ZVooMCkgc2NhbGVZKDEpJywgb3BhY2l0eTogMSwgdHJhbnNmb3JtT3JpZ2luOiAnMCUgMTAwJSd9KSxcclxuICAgICAgICAgIGFuaW1hdGUoJzIwMG1zIGN1YmljLWJlemllcigwLjc1NSwgMC4wNSwgMC44NTUsIDAuMDYpJyxcclxuICAgICAgICAgICAgc3R5bGUoe3RyYW5zZm9ybTogJ3RyYW5zbGF0ZVooMCkgc2NhbGVZKDApJywgb3BhY2l0eTogMCwgdHJhbnNmb3JtT3JpZ2luOiAnMCUgMTAwJSd9KVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIF07XHJcbiAgICAgIGNhc2UgJ2JvdHRvbSc6XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgIHN0eWxlKHt0cmFuc2Zvcm06ICd0cmFuc2xhdGVaKDApIHNjYWxlWSgxKScsIG9wYWNpdHk6IDEsIHRyYW5zZm9ybU9yaWdpbjogJzAlIDAlJ30pLFxyXG4gICAgICAgICAgYW5pbWF0ZSgnMjAwbXMgY3ViaWMtYmV6aWVyKDAuNzU1LCAwLjA1LCAwLjg1NSwgMC4wNiknLFxyXG4gICAgICAgICAgICBzdHlsZSh7dHJhbnNmb3JtOiAndHJhbnNsYXRlWigwKSBzY2FsZVkoMCknLCBvcGFjaXR5OiAwLCB0cmFuc2Zvcm1PcmlnaW46ICcwJSAwJSd9KVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIF07XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==