UNPKG

@duoduo-oba/ng-devui

Version:

DevUI components based on Angular

285 lines 28.5 kB
/** * @fileoverview added by tsickle * Generated from: splitter-bar.component.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { ChangeDetectionStrategy, Component, ElementRef, Host, HostBinding, Input, Renderer2 } from '@angular/core'; import { Subscription } from 'rxjs'; import { map, switchMap, takeUntil, tap, filter } from 'rxjs/operators'; import { ResizeDirective } from './resize.directive'; import { SplitterService } from './splitter.service'; export class SplitterBarComponent { /** * @param {?} el * @param {?} splitter * @param {?} renderer * @param {?} resize */ constructor(el, splitter, renderer, resize) { this.el = el; this.splitter = splitter; this.renderer = renderer; this.resize = resize; this.subscriptions = new Subscription(); // 移动的时候,阻止事件冒泡 this.stopPropagation = (/** * @param {?} __0 * @return {?} */ ({ originalEvent: event }) => { event.stopPropagation(); if (event.cancelable) { event.preventDefault(); } }); // 处理移动过程中的数据流, 合并到pressEvent事件流中 this.moveStream = (/** * @param {?} resize * @return {?} */ resize => (/** * @param {?} mouseDown * @return {?} */ mouseDown => resize.dragEvent.pipe(takeUntil(resize.releaseEvent), map((/** * @param {?} __0 * @return {?} */ ({ pageX, pageY }) => ({ originalX: mouseDown.pageX, originalY: mouseDown.pageY, pageX, pageY })))))); } /** * @param {?} size * @return {?} */ set splitBarSize(size) { this._splitBarSize = size; this.renderer.setStyle(this.el.nativeElement, 'flex-basis', size); } /** * @return {?} */ get splitBarSize() { return this._splitBarSize; } /** * @return {?} */ get class() { /** @type {?} */ let bindClass = 'devui-splitter-bar devui-splitter-bar-' + this.orientation; if (!this.splitter.isStaticBar(this.index)) { bindClass += ' resizable'; } else { this.renderer.setStyle(this.el.nativeElement, 'flex-basis', this.disabledBarSize); } return bindClass; } /** * @return {?} */ ngOnInit() { /** @type {?} */ let state; /** @type {?} */ const resizeListener = this.resize.pressEvent .pipe(tap(this.stopPropagation), filter((/** * @return {?} */ () => this.splitter.isResizable(this.index))), tap((/** * @return {?} */ () => state = this.splitter.dragState(this.index))), switchMap(this.moveStream(this.resize))) .subscribe((/** * @param {?} __0 * @return {?} */ ({ pageX, pageY, originalX, originalY }) => { /** @type {?} */ let distance; if (this.orientation === 'vertical') { distance = pageY - originalY; } else { distance = pageX - originalX; } this.splitter.setSize(state, distance); })); this.subscriptions.add(resizeListener); } /** * @return {?} */ collapsePrePane() { /** @type {?} */ const nearIndex = this.index + 1; this.splitter.togglePane(this.index, nearIndex); this.toggleResize(this.index); } /** * @return {?} */ collapseNextPane() { this.splitter.togglePane(this.index + 1, this.index); this.toggleResize(this.index + 1); } // 切换是否允许拖拽,收起时不能拖拽 /** * @param {?} paneIndex * @return {?} */ toggleResize(paneIndex) { /** @type {?} */ const pane = this.splitter.getPane(paneIndex); /** @type {?} */ const isCollapsed = pane.collapsed; if (isCollapsed) { this.renderer.addClass(this.el.nativeElement, 'none-resizable'); } else { this.renderer.removeClass(this.el.nativeElement, 'none-resizable'); } } // 计算前面板收起操作样式 /** * @return {?} */ get prevClass() { /** @type {?} */ const pane = this.splitter.getPane(this.index); /** @type {?} */ const nearPane = this.splitter.getPane(this.index + 1); // 第一个面板或者其它面板折叠方向不是向后的显示操作按钮 /** @type {?} */ const showIcon = (pane.collapseDirection !== 'after' || this.index === 0); return this.generateCollapseClass(pane, nearPane, showIcon); } // 计算相邻面板收起操作样式 /** * @return {?} */ get nextClass() { /** @type {?} */ const pane = this.splitter.getPane(this.index + 1); /** @type {?} */ const nearPane = this.splitter.getPane(this.index); // 最后一个面板或者其它面板折叠方向不是向前的显示操作按钮 /** @type {?} */ const showIcon = (pane.collapseDirection !== 'before' || this.index + 1 === this.splitter.paneCount - 1); return this.generateCollapseClass(pane, nearPane, showIcon); } // 生成拼接样式 /** * @param {?} classes * @return {?} */ generateClass(classes) { return Object.keys(classes).filter((/** * @param {?} c * @return {?} */ c => classes[c])).join(' '); } // 根据当前状态生成收起按钮样式 /** * @param {?} pane * @param {?} nearPane * @param {?} showIcon * @return {?} */ generateCollapseClass(pane, nearPane, showIcon) { // 是否允许收起 /** @type {?} */ const isCollapsible = pane.collapsible && showIcon; // 当前收起状态 /** @type {?} */ const isCollapsed = pane.collapsed; // 是否是固定pane /** @type {?} */ const isStaticBar = this.splitter.isStaticBar(this.index); // 一个pane收起的时候,隐藏相邻pane的收起按钮 /** @type {?} */ const isNearPaneCollapsed = nearPane.collapsed; return this.generateClass({ 'devui-collapse': isCollapsible, 'collapsed': isCollapsed, 'hidden': isNearPaneCollapsed }); } /** * @return {?} */ ngOnDestroy() { this.subscriptions.unsubscribe(); } } SplitterBarComponent.decorators = [ { type: Component, args: [{ selector: 'd-splitter-bar', template: "<div class=\"prev\" [ngClass]=\"prevClass\" (click)=\"collapsePrePane()\" (touchstart)=\"collapsePrePane()\"></div>\r\n<div class=\"devui-resize-handle\"></div>\r\n<div class=\"next\" [ngClass]=\"nextClass\" (click)=\"collapseNextPane()\" (touchstart)=\"collapseNextPane()\"></div>\r\n", changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host.devui-splitter-bar{background-color:#dfe1e6;display:-webkit-box;display:flex;position:relative;-webkit-box-align:center;align-items:center;-webkit-box-pack:center;justify-content:center;-webkit-box-flex:0;flex-grow:0;flex-shrink:0}:host.devui-splitter-bar .devui-collapse{background-color:#dfe1e6;position:absolute;z-index:15;cursor:pointer}:host.devui-splitter-bar .devui-collapse::after,:host.devui-splitter-bar .devui-collapse::before{content:'';width:10px;height:2px;background:#fff;display:block;position:absolute}:host.devui-splitter-bar .devui-collapse:hover{background-color:#344899}:host.devui-splitter-bar-horizontal .devui-collapse{width:12px;height:30px}:host.devui-splitter-bar-horizontal .devui-collapse.next.hidden,:host.devui-splitter-bar-horizontal .devui-collapse.prev.hidden{display:none}:host.devui-splitter-bar-horizontal .devui-collapse.prev{border-radius:0 4px 4px 0;left:1px}:host.devui-splitter-bar-horizontal .devui-collapse.prev.collapsed::before,:host.devui-splitter-bar-horizontal .devui-collapse.prev::before{top:9px;left:1px}:host.devui-splitter-bar-horizontal .devui-collapse.prev::before{-webkit-transform:rotate(-70deg);transform:rotate(-70deg)}:host.devui-splitter-bar-horizontal .devui-collapse.prev.collapsed::before{-webkit-transform:rotate(70deg);transform:rotate(70deg)}:host.devui-splitter-bar-horizontal .devui-collapse.prev.collapsed::after,:host.devui-splitter-bar-horizontal .devui-collapse.prev::after{top:18px;left:1px}:host.devui-splitter-bar-horizontal .devui-collapse.prev::after{-webkit-transform:rotate(70deg);transform:rotate(70deg)}:host.devui-splitter-bar-horizontal .devui-collapse.prev.collapsed::after{-webkit-transform:rotate(-70deg);transform:rotate(-70deg)}:host.devui-splitter-bar-horizontal .devui-collapse.next{border-radius:4px 0 0 4px;right:1px}:host.devui-splitter-bar-horizontal .devui-collapse.next.collapsed::before,:host.devui-splitter-bar-horizontal .devui-collapse.next::before{top:9px;right:1px}:host.devui-splitter-bar-horizontal .devui-collapse.next::before{-webkit-transform:rotate(70deg);transform:rotate(70deg)}:host.devui-splitter-bar-horizontal .devui-collapse.next.collapsed::before{-webkit-transform:rotate(-70deg);transform:rotate(-70deg)}:host.devui-splitter-bar-horizontal .devui-collapse.next.collapsed::after,:host.devui-splitter-bar-horizontal .devui-collapse.next::after{top:18px;right:1px}:host.devui-splitter-bar-horizontal .devui-collapse.next::after{-webkit-transform:rotate(-70deg);transform:rotate(-70deg)}:host.devui-splitter-bar-horizontal .devui-collapse.next.collapsed::after{-webkit-transform:rotate(70deg);transform:rotate(70deg)}:host.devui-splitter-bar-vertical .devui-collapse{height:12px;width:30px}:host.devui-splitter-bar-vertical .devui-collapse.next.hidden,:host.devui-splitter-bar-vertical .devui-collapse.prev.hidden{display:none}:host.devui-splitter-bar-vertical .devui-collapse.prev{border-radius:0 0 4px 4px;top:1px}:host.devui-splitter-bar-vertical .devui-collapse.prev.collapsed::before,:host.devui-splitter-bar-vertical .devui-collapse.prev::before{bottom:5px;left:5px}:host.devui-splitter-bar-vertical .devui-collapse.prev::before{-webkit-transform:rotate(-20deg);transform:rotate(-20deg)}:host.devui-splitter-bar-vertical .devui-collapse.prev.collapsed::before{-webkit-transform:rotate(20deg);transform:rotate(20deg)}:host.devui-splitter-bar-vertical .devui-collapse.prev.collapsed::after,:host.devui-splitter-bar-vertical .devui-collapse.prev::after{bottom:5px;left:14px}:host.devui-splitter-bar-vertical .devui-collapse.prev::after{-webkit-transform:rotate(20deg);transform:rotate(20deg)}:host.devui-splitter-bar-vertical .devui-collapse.prev.collapsed::after{-webkit-transform:rotate(-20deg);transform:rotate(-20deg)}:host.devui-splitter-bar-vertical .devui-collapse.next{border-radius:4px 4px 0 0;bottom:1px}:host.devui-splitter-bar-vertical .devui-collapse.next.collapsed::before,:host.devui-splitter-bar-vertical .devui-collapse.next::before{top:5px;left:5px}:host.devui-splitter-bar-vertical .devui-collapse.next::before{-webkit-transform:rotate(20deg);transform:rotate(20deg)}:host.devui-splitter-bar-vertical .devui-collapse.next.collapsed::before{-webkit-transform:rotate(-20deg);transform:rotate(-20deg);top:5px;left:5px}:host.devui-splitter-bar-vertical .devui-collapse.next.collapsed::after,:host.devui-splitter-bar-vertical .devui-collapse.next::after{top:5px;left:14px}:host.devui-splitter-bar-vertical .devui-collapse.next::after{-webkit-transform:rotate(-20deg);transform:rotate(-20deg)}:host.devui-splitter-bar-vertical .devui-collapse.next.collapsed::after{-webkit-transform:rotate(20deg);transform:rotate(20deg)}:host.devui-splitter-bar-horizontal.resizable:not(.none-resizable):active,:host.devui-splitter-bar-horizontal.resizable:not(.none-resizable):focus,:host.devui-splitter-bar-horizontal.resizable:not(.none-resizable):hover,:host.devui-splitter-bar-vertical.resizable:not(.none-resizable):active,:host.devui-splitter-bar-vertical.resizable:not(.none-resizable):focus,:host.devui-splitter-bar-vertical.resizable:not(.none-resizable):hover{background-color:#344899}:host.devui-splitter-bar-horizontal.resizable:not(.none-resizable)::after,:host.devui-splitter-bar-vertical.resizable:not(.none-resizable)::after{content:'';display:block;position:absolute;z-index:10}:host.devui-splitter-bar-horizontal.resizable{cursor:col-resize}:host.devui-splitter-bar-horizontal.resizable::after{cursor:col-resize;height:100%;width:10px;top:0}:host.devui-splitter-bar-vertical.resizable{cursor:row-resize}:host.devui-splitter-bar-vertical.resizable::after{cursor:row-resize;width:100%;height:10px;left:0}"] }] } ]; /** @nocollapse */ SplitterBarComponent.ctorParameters = () => [ { type: ElementRef }, { type: SplitterService }, { type: Renderer2 }, { type: ResizeDirective, decorators: [{ type: Host }] } ]; SplitterBarComponent.propDecorators = { index: [{ type: Input }], orientation: [{ type: Input }], splitBarSize: [{ type: Input }], disabledBarSize: [{ type: Input }], class: [{ type: HostBinding, args: ['class',] }] }; if (false) { /** @type {?} */ SplitterBarComponent.prototype.index; /** @type {?} */ SplitterBarComponent.prototype.orientation; /** @type {?} */ SplitterBarComponent.prototype._splitBarSize; /** @type {?} */ SplitterBarComponent.prototype.disabledBarSize; /** @type {?} */ SplitterBarComponent.prototype.subscriptions; /** * @type {?} * @private */ SplitterBarComponent.prototype.stopPropagation; /** * @type {?} * @private */ SplitterBarComponent.prototype.moveStream; /** * @type {?} * @private */ SplitterBarComponent.prototype.el; /** * @type {?} * @private */ SplitterBarComponent.prototype.splitter; /** * @type {?} * @private */ SplitterBarComponent.prototype.renderer; /** * @type {?} * @private */ SplitterBarComponent.prototype.resize; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BsaXR0ZXItYmFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLWRldnVpL3NwbGl0dGVyLyIsInNvdXJjZXMiOlsic3BsaXR0ZXItYmFyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLElBQUksRUFDMUQsV0FBVyxFQUFFLEtBQUssRUFBVSxTQUFTLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDM0UsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwQyxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFTckQsTUFBTSxPQUFPLG9CQUFvQjs7Ozs7OztJQWdEL0IsWUFBb0IsRUFBYyxFQUN4QixRQUF5QixFQUN6QixRQUFtQixFQUNYLE1BQXVCO1FBSHJCLE9BQUUsR0FBRixFQUFFLENBQVk7UUFDeEIsYUFBUSxHQUFSLFFBQVEsQ0FBaUI7UUFDekIsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNYLFdBQU0sR0FBTixNQUFNLENBQWlCO1FBeEJ6QyxrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7O1FBRTNCLG9CQUFlOzs7O1FBQUcsQ0FBQyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQ3JELEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN4QixJQUFJLEtBQUssQ0FBQyxVQUFVLEVBQUU7Z0JBQ3BCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQzthQUN4QjtRQUNILENBQUMsRUFBQTs7UUFHTyxlQUFVOzs7O1FBQUcsTUFBTSxDQUFDLEVB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O2FBQ2hEOzs7O1lBYjRDLFVBQVU7WUFLOUMsZUFBZTtZQUpPLFNBQVM7WUFHL0IsZUFBZSx1QkE2RG5CLElBQUk7OztvQkFqRE4sS0FBSzswQkFFTCxLQUFLOzJCQUdMLEtBQUs7OEJBUUwsS0FBSztvQkFFTCxXQUFXLFNBQUMsT0FBTzs7OztJQWZwQixxQ0FBdUI7O0lBRXZCLDJDQUEwQzs7SUFFMUMsNkNBQWM7O0lBU2QsK0NBQXlCOztJQVl6Qiw2Q0FBbUM7Ozs7O0lBRW5DLCtDQUtDOzs7OztJQUdELDBDQVNDOzs7OztJQUVXLGtDQUFzQjs7Ozs7SUFDaEMsd0NBQWlDOzs7OztJQUNqQyx3Q0FBMkI7Ozs7O0lBQzNCLHNDQUF1QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEhvc3QsXHJcbiAgIEhvc3RCaW5kaW5nLCBJbnB1dCwgT25Jbml0LCBSZW5kZXJlcjIsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgbWFwLCBzd2l0Y2hNYXAsIHRha2VVbnRpbCwgdGFwLCBmaWx0ZXIgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IFJlc2l6ZURpcmVjdGl2ZSB9IGZyb20gJy4vcmVzaXplLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFNwbGl0dGVyU2VydmljZSB9IGZyb20gJy4vc3BsaXR0ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IFNwbGl0dGVyT3JpZW50YXRpb24gfSBmcm9tICcuL3NwbGl0dGVyLnR5cGVzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZC1zcGxpdHRlci1iYXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zcGxpdHRlci1iYXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3NwbGl0dGVyLWJhci5jb21wb25lbnQuc2NzcyddLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTcGxpdHRlckJhckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICAvLyDlvZPliY1wYW5l57Si5byVXHJcbiAgQElucHV0KCkgaW5kZXg6IG51bWJlcjtcclxuICAvLyDnqpfmoLzmjpLliJfmlrnlkJFcclxuICBASW5wdXQoKSBvcmllbnRhdGlvbjogU3BsaXR0ZXJPcmllbnRhdGlvbjtcclxuICAvLyDliIbpmpTmnaHlpKflsI9cclxuICBfc3BsaXRCYXJTaXplO1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNwbGl0QmFyU2l6ZShzaXplKSB7XHJcbiAgICB0aGlzLl9zcGxpdEJhclNpemUgPSBzaXplO1xyXG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsICdmbGV4LWJhc2lzJywgc2l6ZSk7XHJcbiAgfVxyXG4gIGdldCBzcGxpdEJhclNpemUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc3BsaXRCYXJTaXplO1xyXG4gIH1cclxuICBASW5wdXQoKSBkaXNhYmxlZEJhclNpemU7XHJcblxyXG4gIEBIb3N0QmluZGluZygnY2xhc3MnKSBnZXQgY2xhc3MoKSB7XHJcbiAgICBsZXQgYmluZENsYXNzID0gJ2RldnVpLXNwbGl0dGVyLWJhciBkZXZ1aS1zcGxpdHRlci1iYXItJyArIHRoaXMub3JpZW50YXRpb247XHJcbiAgICBpZiAoIXRoaXMuc3BsaXR0ZXIuaXNTdGF0aWNCYXIodGhpcy5pbmRleCkpIHtcclxuICAgICAgYmluZENsYXNzICs9ICcgcmVzaXphYmxlJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCAnZmxleC1iYXNpcycsIHRoaXMuZGlzYWJsZWRCYXJTaXplKTtcclxuICAgIH1cclxuICAgIHJldHVybiBiaW5kQ2xhc3M7XHJcbiAgfVxyXG5cclxuICBzdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigpO1xyXG4gIC8vIOenu+WKqOeahOaXtuWAme+8jOmYu+atouS6i+S7tuWGkuazoVxyXG4gIHByaXZhdGUgc3RvcFByb3BhZ2F0aW9uID0gKHsgb3JpZ2luYWxFdmVudDogZXZlbnQgfSkgPT4ge1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICBpZiAoZXZlbnQuY2FuY2VsYWJsZSkge1xyXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8g5aSE55CG56e75Yqo6L+H56iL5Lit55qE5pWw5o2u5rWBLCDlkIjlubbliLBwcmVzc0V2ZW505LqL5Lu25rWB5LitXHJcbiAgcHJpdmF0ZSBtb3ZlU3RyZWFtID0gcmVzaXplID0+IG1vdXNlRG93biA9PlxyXG4gICAgcmVzaXplLmRyYWdFdmVudC5waXBlKFxyXG4gICAgICB0YWtlVW50aWwocmVzaXplLnJlbGVhc2VFdmVudCksXHJcbiAgICAgIG1hcCgoeyBwYWdlWCwgcGFnZVkgfSkgPT4gKHtcclxuICAgICAgICBvcmlnaW5hbFg6IG1vdXNlRG93bi5wYWdlWCxcclxuICAgICAgICBvcmlnaW5hbFk6IG1vdXNlRG93bi5wYWdlWSxcclxuICAgICAgICBwYWdlWCxcclxuICAgICAgICBwYWdlWVxyXG4gICAgICB9KSlcclxuICApXHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZWw6IEVsZW1lbnRSZWYsXHJcbiAgICBwcml2YXRlIHNwbGl0dGVyOiBTcGxpdHRlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXHJcbiAgICBASG9zdCgpIHByaXZhdGUgcmVzaXplOiBSZXNpemVEaXJlY3RpdmVcclxuICApIHt9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgbGV0IHN0YXRlO1xyXG4gICAgY29uc3QgcmVzaXplTGlzdGVuZXIgPSB0aGlzLnJlc2l6ZS5wcmVzc0V2ZW50XHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIHRhcCh0aGlzLnN0b3BQcm9wYWdhdGlvbiksXHJcbiAgICAgICAgZmlsdGVyKCgpID0+IHRoaXMuc3BsaXR0ZXIuaXNSZXNpemFibGUodGhpcy5pbmRleCkpLFxyXG4gICAgICAgIHRhcCgoKSA9PiBzdGF0ZSA9IHRoaXMuc3BsaXR0ZXIuZHJhZ1N0YXRlKHRoaXMuaW5kZXgpKSxcclxuICAgICAgICBzd2l0Y2hNYXAodGhpcy5tb3ZlU3RyZWFtKHRoaXMucmVzaXplKSlcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKCh7IHBhZ2VYLCBwYWdlWSwgb3JpZ2luYWxYLCBvcmlnaW5hbFkgfSkgPT4ge1xyXG4gICAgICAgIGxldCBkaXN0YW5jZTtcclxuICAgICAgICBpZiAodGhpcy5vcmllbnRhdGlvbiA9PT0gJ3ZlcnRpY2FsJykge1xyXG4gICAgICAgICAgZGlzdGFuY2UgPSBwYWdlWSAtIG9yaWdpbmFsWTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgZGlzdGFuY2UgPSBwYWdlWCAtIG9yaWdpbmFsWDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zcGxpdHRlci5zZXRTaXplKHN0YXRlLCBkaXN0YW5jZSk7XHJcbiAgICAgIH0pO1xyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChyZXNpemVMaXN0ZW5lcik7XHJcbiAgfVxyXG5cclxuXHJcbiAgY29sbGFwc2VQcmVQYW5lKCkge1xyXG4gICAgY29uc3QgbmVhckluZGV4ID0gdGhpcy5pbmRleCArIDE7XHJcbiAgICB0aGlzLnNwbGl0dGVyLnRvZ2dsZVBhbmUodGhpcy5pbmRleCwgbmVhckluZGV4KTtcclxuICAgIHRoaXMudG9nZ2xlUmVzaXplKHRoaXMuaW5kZXgpO1xyXG4gIH1cclxuXHJcbiAgY29sbGFwc2VOZXh0UGFuZSgpIHtcclxuICAgIHRoaXMuc3BsaXR0ZXIudG9nZ2xlUGFuZSh0aGlzLmluZGV4ICsgMSwgdGhpcy5pbmRleCk7XHJcbiAgICB0aGlzLnRvZ2dsZVJlc2l6ZSh0aGlzLmluZGV4ICsgMSk7XHJcbiAgfVxyXG5cclxuICAvLyDliIfmjaLmmK/lkKblhYHorrjmi5bmi73vvIzmlLbotbfml7bkuI3og73mi5bmi71cclxuICB0b2dnbGVSZXNpemUocGFuZUluZGV4KSB7XHJcbiAgICBjb25zdCBwYW5lID0gdGhpcy5zcGxpdHRlci5nZXRQYW5lKHBhbmVJbmRleCk7XHJcbiAgICBjb25zdCBpc0NvbGxhcHNlZCA9IHBhbmUuY29sbGFwc2VkO1xyXG4gICAgaWYgKGlzQ29sbGFwc2VkKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LCAnbm9uZS1yZXNpemFibGUnKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LCAnbm9uZS1yZXNpemFibGUnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIOiuoeeul+WJjemdouadv+aUtui1t+aTjeS9nOagt+W8j1xyXG4gIGdldCBwcmV2Q2xhc3MoKSB7XHJcbiAgICBjb25zdCBwYW5lID0gdGhpcy5zcGxpdHRlci5nZXRQYW5lKHRoaXMuaW5kZXgpO1xyXG4gICAgY29uc3QgbmVhclBhbmUgPSB0aGlzLnNwbGl0dGVyLmdldFBhbmUodGhpcy5pbmRleCArIDEpO1xyXG4gICAgLy8g56ys5LiA5Liq6Z2i5p2/5oiW6ICF5YW25a6D6Z2i5p2/5oqY5Y+g5pa55ZCR5LiN5piv5ZCR5ZCO55qE5pi+56S65pON5L2c5oyJ6ZKuXHJcbiAgICBjb25zdCBzaG93SWNvbiA9IChwYW5lLmNvbGxhcHNlRGlyZWN0aW9uICE9PSAnYWZ0ZXInIHx8IHRoaXMuaW5kZXggPT09IDApO1xyXG4gICAgcmV0dXJuIHRoaXMuZ2VuZXJhdGVDb2xsYXBzZUNsYXNzKHBhbmUsIG5lYXJQYW5lLCBzaG93SWNvbik7XHJcbiAgfVxyXG5cclxuICAvLyDorqHnrpfnm7jpgrvpnaLmnb/mlLbotbfmk43kvZzmoLflvI9cclxuICBnZXQgbmV4dENsYXNzKCkge1xyXG4gICAgY29uc3QgcGFuZSA9IHRoaXMuc3BsaXR0ZXIuZ2V0UGFuZSh0aGlzLmluZGV4ICsgMSk7XHJcbiAgICBjb25zdCBuZWFyUGFuZSA9IHRoaXMuc3BsaXR0ZXIuZ2V0UGFuZSh0aGlzLmluZGV4KTtcclxuICAgIC8vIOacgOWQjuS4gOS4qumdouadv+aIluiAheWFtuWug+mdouadv+aKmOWPoOaWueWQkeS4jeaYr+WQkeWJjeeahOaYvuekuuaTjeS9nOaMiemSrlxyXG4gICAgY29uc3Qgc2hvd0ljb24gPSAocGFuZS5jb2xsYXBzZURpcmVjdGlvbiAhPT0gJ2JlZm9yZScgfHwgdGhpcy5pbmRleCArIDEgPT09IHRoaXMuc3BsaXR0ZXIucGFuZUNvdW50IC0gMSk7XHJcbiAgICByZXR1cm4gdGhpcy5nZW5lcmF0ZUNvbGxhcHNlQ2xhc3MocGFuZSwgbmVhclBhbmUsIHNob3dJY29uKTtcclxuICB9XHJcblxyXG4gIC8vIOeUn+aIkOaLvOaOpeagt+W8j1xyXG4gIGdlbmVyYXRlQ2xhc3MoY2xhc3Nlcykge1xyXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGNsYXNzZXMpLmZpbHRlcihjID0+IGNsYXNzZXNbY10pLmpvaW4oJyAnKTtcclxuICB9XHJcblxyXG4gIC8vIOagueaNruW9k+WJjeeKtuaAgeeUn+aIkOaUtui1t+aMiemSruagt+W8j1xyXG4gIGdlbmVyYXRlQ29sbGFwc2VDbGFzcyhwYW5lLCBuZWFyUGFuZSwgc2hvd0ljb24pIHtcclxuICAgICAvLyDmmK/lkKblhYHorrjmlLbotbdcclxuICAgIGNvbnN0IGlzQ29sbGFwc2libGUgPSBwYW5lLmNvbGxhcHNpYmxlICYmIHNob3dJY29uO1xyXG4gICAgLy8g5b2T5YmN5pS26LW354q25oCBXHJcbiAgICBjb25zdCBpc0NvbGxhcHNlZCA9IHBhbmUuY29sbGFwc2VkO1xyXG4gICAgLy8g5piv5ZCm5piv5Zu65a6acGFuZVxyXG4gICAgY29uc3QgaXNTdGF0aWNCYXIgPSB0aGlzLnNwbGl0dGVyLmlzU3RhdGljQmFyKHRoaXMuaW5kZXgpO1xyXG4gICAgLy8g5LiA5LiqcGFuZeaUtui1t+eahOaXtuWAme+8jOmakOiXj+ebuOmCu3BhbmXnmoTmlLbotbfmjInpkq5cclxuICAgIGNvbnN0IGlzTmVhclBhbmVDb2xsYXBzZWQgPSBuZWFyUGFuZS5jb2xsYXBzZWQ7XHJcbiAgICByZXR1cm4gdGhpcy5nZW5lcmF0ZUNsYXNzKHtcclxuICAgICAgJ2RldnVpLWNvbGxhcHNlJzogaXNDb2xsYXBzaWJsZSxcclxuICAgICAgJ2NvbGxhcHNlZCc6IGlzQ29sbGFwc2VkLFxyXG4gICAgICAnaGlkZGVuJzogaXNOZWFyUGFuZUNvbGxhcHNlZFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxufVxyXG4iXX0=