@duoduo-oba/ng-devui
Version:
DevUI components based on Angular
344 lines • 31.3 kB
JavaScript
/**
* @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';
var SplitterBarComponent = /** @class */ (function () {
function SplitterBarComponent(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 {?}
*/
function (_a) {
var event = _a.originalEvent;
event.stopPropagation();
if (event.cancelable) {
event.preventDefault();
}
});
// 处理移动过程中的数据流, 合并到pressEvent事件流中
this.moveStream = (/**
* @param {?} resize
* @return {?}
*/
function (resize) { return (/**
* @param {?} mouseDown
* @return {?}
*/
function (mouseDown) {
return resize.dragEvent.pipe(takeUntil(resize.releaseEvent), map((/**
* @param {?} __0
* @return {?}
*/
function (_a) {
var pageX = _a.pageX, pageY = _a.pageY;
return ({
originalX: mouseDown.pageX,
originalY: mouseDown.pageY,
pageX: pageX,
pageY: pageY
});
})));
}); });
}
Object.defineProperty(SplitterBarComponent.prototype, "splitBarSize", {
get: /**
* @return {?}
*/
function () {
return this._splitBarSize;
},
set: /**
* @param {?} size
* @return {?}
*/
function (size) {
this._splitBarSize = size;
this.renderer.setStyle(this.el.nativeElement, 'flex-basis', size);
},
enumerable: true,
configurable: true
});
Object.defineProperty(SplitterBarComponent.prototype, "class", {
get: /**
* @return {?}
*/
function () {
/** @type {?} */
var 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;
},
enumerable: true,
configurable: true
});
/**
* @return {?}
*/
SplitterBarComponent.prototype.ngOnInit = /**
* @return {?}
*/
function () {
var _this = this;
/** @type {?} */
var state;
/** @type {?} */
var resizeListener = this.resize.pressEvent
.pipe(tap(this.stopPropagation), filter((/**
* @return {?}
*/
function () { return _this.splitter.isResizable(_this.index); })), tap((/**
* @return {?}
*/
function () { return state = _this.splitter.dragState(_this.index); })), switchMap(this.moveStream(this.resize)))
.subscribe((/**
* @param {?} __0
* @return {?}
*/
function (_a) {
var pageX = _a.pageX, pageY = _a.pageY, originalX = _a.originalX, originalY = _a.originalY;
/** @type {?} */
var distance;
if (_this.orientation === 'vertical') {
distance = pageY - originalY;
}
else {
distance = pageX - originalX;
}
_this.splitter.setSize(state, distance);
}));
this.subscriptions.add(resizeListener);
};
/**
* @return {?}
*/
SplitterBarComponent.prototype.collapsePrePane = /**
* @return {?}
*/
function () {
/** @type {?} */
var nearIndex = this.index + 1;
this.splitter.togglePane(this.index, nearIndex);
this.toggleResize(this.index);
};
/**
* @return {?}
*/
SplitterBarComponent.prototype.collapseNextPane = /**
* @return {?}
*/
function () {
this.splitter.togglePane(this.index + 1, this.index);
this.toggleResize(this.index + 1);
};
// 切换是否允许拖拽,收起时不能拖拽
// 切换是否允许拖拽,收起时不能拖拽
/**
* @param {?} paneIndex
* @return {?}
*/
SplitterBarComponent.prototype.toggleResize =
// 切换是否允许拖拽,收起时不能拖拽
/**
* @param {?} paneIndex
* @return {?}
*/
function (paneIndex) {
/** @type {?} */
var pane = this.splitter.getPane(paneIndex);
/** @type {?} */
var isCollapsed = pane.collapsed;
if (isCollapsed) {
this.renderer.addClass(this.el.nativeElement, 'none-resizable');
}
else {
this.renderer.removeClass(this.el.nativeElement, 'none-resizable');
}
};
Object.defineProperty(SplitterBarComponent.prototype, "prevClass", {
// 计算前面板收起操作样式
get:
// 计算前面板收起操作样式
/**
* @return {?}
*/
function () {
/** @type {?} */
var pane = this.splitter.getPane(this.index);
/** @type {?} */
var nearPane = this.splitter.getPane(this.index + 1);
// 第一个面板或者其它面板折叠方向不是向后的显示操作按钮
/** @type {?} */
var showIcon = (pane.collapseDirection !== 'after' || this.index === 0);
return this.generateCollapseClass(pane, nearPane, showIcon);
},
enumerable: true,
configurable: true
});
Object.defineProperty(SplitterBarComponent.prototype, "nextClass", {
// 计算相邻面板收起操作样式
get:
// 计算相邻面板收起操作样式
/**
* @return {?}
*/
function () {
/** @type {?} */
var pane = this.splitter.getPane(this.index + 1);
/** @type {?} */
var nearPane = this.splitter.getPane(this.index);
// 最后一个面板或者其它面板折叠方向不是向前的显示操作按钮
/** @type {?} */
var showIcon = (pane.collapseDirection !== 'before' || this.index + 1 === this.splitter.paneCount - 1);
return this.generateCollapseClass(pane, nearPane, showIcon);
},
enumerable: true,
configurable: true
});
// 生成拼接样式
// 生成拼接样式
/**
* @param {?} classes
* @return {?}
*/
SplitterBarComponent.prototype.generateClass =
// 生成拼接样式
/**
* @param {?} classes
* @return {?}
*/
function (classes) {
return Object.keys(classes).filter((/**
* @param {?} c
* @return {?}
*/
function (c) { return classes[c]; })).join(' ');
};
// 根据当前状态生成收起按钮样式
// 根据当前状态生成收起按钮样式
/**
* @param {?} pane
* @param {?} nearPane
* @param {?} showIcon
* @return {?}
*/
SplitterBarComponent.prototype.generateCollapseClass =
// 根据当前状态生成收起按钮样式
/**
* @param {?} pane
* @param {?} nearPane
* @param {?} showIcon
* @return {?}
*/
function (pane, nearPane, showIcon) {
// 是否允许收起
/** @type {?} */
var isCollapsible = pane.collapsible && showIcon;
// 当前收起状态
/** @type {?} */
var isCollapsed = pane.collapsed;
// 是否是固定pane
/** @type {?} */
var isStaticBar = this.splitter.isStaticBar(this.index);
// 一个pane收起的时候,隐藏相邻pane的收起按钮
/** @type {?} */
var isNearPaneCollapsed = nearPane.collapsed;
return this.generateClass({
'devui-collapse': isCollapsible,
'collapsed': isCollapsed,
'hidden': isNearPaneCollapsed
});
};
/**
* @return {?}
*/
SplitterBarComponent.prototype.ngOnDestroy = /**
* @return {?}
*/
function () {
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 = function () { return [
{ 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',] }]
};
return SplitterBarComponent;
}());
export { SplitterBarComponent };
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BsaXR0ZXItYmFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLWRldnVpL3NwbGl0dGVyLyIsInNvdXJjZXMiOlsic3BsaXR0ZXItYmFyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLElBQUksRUFDMUQsV0FBVyxFQUFFLEtBQUssRUFBVSxTQUFTLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDM0UsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwQyxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFHckQ7SUFzREUsOEJBQW9CLEVBQWMsRUFDeEIsUUFBeUIsRUFDekIsUUFBbUIsRUFDWCxNQUF1QjtRQUhyQixPQUFFLEdBQUYsRUFBRSxDQUFZO1FBQ3hCLGFBQVEsR0FBUixRQUFRLENBQWlCO1FBQ3pCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDWCxXQUFNLEdBQU4sTUFBTSxDQUFpQjtRQXhCekMsa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDOztRQUUzQixvQkFBZTs7OztRQUFHLFVBQUMsRUFBd0I7Z0JBQXRCLHdCQUFvQjtZQUMvQyxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDeEIsSUFBSSxLQUFLLENBQUMsVUFBVSxFQUFFO2dCQUNwQixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7YUFDeEI7UUFDSCxDQUFDLEVBQUE7O1FBR08sZUFBVTs7OztRQUFHLFVBQUEsTUFBTTs7OztRQUFJLFVBQUEsU0FBUztZQUN0QyxPQUFBLE1BQU0sQ0FBQyxT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VztZQUN4QixRQUFRLEVBQUUsbUJBQW1CO1NBQzlCLENBQUMsQ0FBQztJQUNMLENBQUM7Ozs7SUFFRCwwQ0FBVzs7O0lBQVg7UUFDRSxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ25DLENBQUM7O2dCQWxKRixTQUFTLFNBQUM7b0JBQ1QsUUFBUSxFQUFFLGdCQUFnQjtvQkFDMUIseVNBQTRDO29CQUU1QyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTs7aUJBQ2hEOzs7O2dCQWI0QyxVQUFVO2dCQUs5QyxlQUFlO2dCQUpPLFNBQVM7Z0JBRy9CLGVBQWUsdUJBNkRuQixJQUFJOzs7d0JBakROLEtBQUs7OEJBRUwsS0FBSzsrQkFHTCxLQUFLO2tDQVFMLEtBQUs7d0JBRUwsV0FBVyxTQUFDLE9BQU87O0lBNEh0QiwyQkFBQztDQUFBLEFBbkpELElBbUpDO1NBN0lZLG9CQUFvQjs7O0lBRS9CLHFDQUF1Qjs7SUFFdkIsMkNBQTBDOztJQUUxQyw2Q0FBYzs7SUFTZCwrQ0FBeUI7O0lBWXpCLDZDQUFtQzs7Ozs7SUFFbkMsK0NBS0M7Ozs7O0lBR0QsMENBU0M7Ozs7O0lBRVcsa0NBQXNCOzs7OztJQUNoQyx3Q0FBaUM7Ozs7O0lBQ2pDLHdDQUEyQjs7Ozs7SUFDM0Isc0NBQXVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRWxlbWVudFJlZiwgSG9zdCxcclxuICAgSG9zdEJpbmRpbmcsIElucHV0LCBPbkluaXQsIFJlbmRlcmVyMiwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBtYXAsIHN3aXRjaE1hcCwgdGFrZVVudGlsLCB0YXAsIGZpbHRlciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgUmVzaXplRGlyZWN0aXZlIH0gZnJvbSAnLi9yZXNpemUuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgU3BsaXR0ZXJTZXJ2aWNlIH0gZnJvbSAnLi9zcGxpdHRlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU3BsaXR0ZXJPcmllbnRhdGlvbiB9IGZyb20gJy4vc3BsaXR0ZXIudHlwZXMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdkLXNwbGl0dGVyLWJhcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3NwbGl0dGVyLWJhci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vc3BsaXR0ZXItYmFyLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcclxufSlcclxuZXhwb3J0IGNsYXNzIFNwbGl0dGVyQmFyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIC8vIOW9k+WJjXBhbmXntKLlvJVcclxuICBASW5wdXQoKSBpbmRleDogbnVtYmVyO1xyXG4gIC8vIOeql+agvOaOkuWIl+aWueWQkVxyXG4gIEBJbnB1dCgpIG9yaWVudGF0aW9uOiBTcGxpdHRlck9yaWVudGF0aW9uO1xyXG4gIC8vIOWIhumalOadoeWkp+Wwj1xyXG4gIF9zcGxpdEJhclNpemU7XHJcbiAgQElucHV0KClcclxuICBzZXQgc3BsaXRCYXJTaXplKHNpemUpIHtcclxuICAgIHRoaXMuX3NwbGl0QmFyU2l6ZSA9IHNpemU7XHJcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwgJ2ZsZXgtYmFzaXMnLCBzaXplKTtcclxuICB9XHJcbiAgZ2V0IHNwbGl0QmFyU2l6ZSgpIHtcclxuICAgIHJldHVybiB0aGlzLl9zcGxpdEJhclNpemU7XHJcbiAgfVxyXG4gIEBJbnB1dCgpIGRpc2FibGVkQmFyU2l6ZTtcclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcycpIGdldCBjbGFzcygpIHtcclxuICAgIGxldCBiaW5kQ2xhc3MgPSAnZGV2dWktc3BsaXR0ZXItYmFyIGRldnVpLXNwbGl0dGVyLWJhci0nICsgdGhpcy5vcmllbnRhdGlvbjtcclxuICAgIGlmICghdGhpcy5zcGxpdHRlci5pc1N0YXRpY0Jhcih0aGlzLmluZGV4KSkge1xyXG4gICAgICBiaW5kQ2xhc3MgKz0gJyByZXNpemFibGUnO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsICdmbGV4LWJhc2lzJywgdGhpcy5kaXNhYmxlZEJhclNpemUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGJpbmRDbGFzcztcclxuICB9XHJcblxyXG4gIHN1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XHJcbiAgLy8g56e75Yqo55qE5pe25YCZ77yM6Zi75q2i5LqL5Lu25YaS5rOhXHJcbiAgcHJpdmF0ZSBzdG9wUHJvcGFnYXRpb24gPSAoeyBvcmlnaW5hbEV2ZW50OiBldmVudCB9KSA9PiB7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIGlmIChldmVudC5jYW5jZWxhYmxlKSB7XHJcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyDlpITnkIbnp7vliqjov4fnqIvkuK3nmoTmlbDmja7mtYEsIOWQiOW5tuWIsHByZXNzRXZlbnTkuovku7bmtYHkuK1cclxuICBwcml2YXRlIG1vdmVTdHJlYW0gPSByZXNpemUgPT4gbW91c2VEb3duID0+XHJcbiAgICByZXNpemUuZHJhZ0V2ZW50LnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbChyZXNpemUucmVsZWFzZUV2ZW50KSxcclxuICAgICAgbWFwKCh7IHBhZ2VYLCBwYWdlWSB9KSA9PiAoe1xyXG4gICAgICAgIG9yaWdpbmFsWDogbW91c2VEb3duLnBhZ2VYLFxyXG4gICAgICAgIG9yaWdpbmFsWTogbW91c2VEb3duLnBhZ2VZLFxyXG4gICAgICAgIHBhZ2VYLFxyXG4gICAgICAgIHBhZ2VZXHJcbiAgICAgIH0pKVxyXG4gIClcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBlbDogRWxlbWVudFJlZixcclxuICAgIHByaXZhdGUgc3BsaXR0ZXI6IFNwbGl0dGVyU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcclxuICAgIEBIb3N0KCkgcHJpdmF0ZSByZXNpemU6IFJlc2l6ZURpcmVjdGl2ZVxyXG4gICkge31cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBsZXQgc3RhdGU7XHJcbiAgICBjb25zdCByZXNpemVMaXN0ZW5lciA9IHRoaXMucmVzaXplLnByZXNzRXZlbnRcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgdGFwKHRoaXMuc3RvcFByb3BhZ2F0aW9uKSxcclxuICAgICAgICBmaWx0ZXIoKCkgPT4gdGhpcy5zcGxpdHRlci5pc1Jlc2l6YWJsZSh0aGlzLmluZGV4KSksXHJcbiAgICAgICAgdGFwKCgpID0+IHN0YXRlID0gdGhpcy5zcGxpdHRlci5kcmFnU3RhdGUodGhpcy5pbmRleCkpLFxyXG4gICAgICAgIHN3aXRjaE1hcCh0aGlzLm1vdmVTdHJlYW0odGhpcy5yZXNpemUpKVxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoKHsgcGFnZVgsIHBhZ2VZLCBvcmlnaW5hbFgsIG9yaWdpbmFsWSB9KSA9PiB7XHJcbiAgICAgICAgbGV0IGRpc3RhbmNlO1xyXG4gICAgICAgIGlmICh0aGlzLm9yaWVudGF0aW9uID09PSAndmVydGljYWwnKSB7XHJcbiAgICAgICAgICBkaXN0YW5jZSA9IHBhZ2VZIC0gb3JpZ2luYWxZO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBkaXN0YW5jZSA9IHBhZ2VYIC0gb3JpZ2luYWxYO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNwbGl0dGVyLnNldFNpemUoc3RhdGUsIGRpc3RhbmNlKTtcclxuICAgICAgfSk7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHJlc2l6ZUxpc3RlbmVyKTtcclxuICB9XHJcblxyXG5cclxuICBjb2xsYXBzZVByZVBhbmUoKSB7XHJcbiAgICBjb25zdCBuZWFySW5kZXggPSB0aGlzLmluZGV4ICsgMTtcclxuICAgIHRoaXMuc3BsaXR0ZXIudG9nZ2xlUGFuZSh0aGlzLmluZGV4LCBuZWFySW5kZXgpO1xyXG4gICAgdGhpcy50b2dnbGVSZXNpemUodGhpcy5pbmRleCk7XHJcbiAgfVxyXG5cclxuICBjb2xsYXBzZU5leHRQYW5lKCkge1xyXG4gICAgdGhpcy5zcGxpdHRlci50b2dnbGVQYW5lKHRoaXMuaW5kZXggKyAxLCB0aGlzLmluZGV4KTtcclxuICAgIHRoaXMudG9nZ2xlUmVzaXplKHRoaXMuaW5kZXggKyAxKTtcclxuICB9XHJcblxyXG4gIC8vIOWIh+aNouaYr+WQpuWFgeiuuOaLluaLve+8jOaUtui1t+aXtuS4jeiDveaLluaLvVxyXG4gIHRvZ2dsZVJlc2l6ZShwYW5lSW5kZXgpIHtcclxuICAgIGNvbnN0IHBhbmUgPSB0aGlzLnNwbGl0dGVyLmdldFBhbmUocGFuZUluZGV4KTtcclxuICAgIGNvbnN0IGlzQ29sbGFwc2VkID0gcGFuZS5jb2xsYXBzZWQ7XHJcbiAgICBpZiAoaXNDb2xsYXBzZWQpIHtcclxuICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsICdub25lLXJlc2l6YWJsZScpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsICdub25lLXJlc2l6YWJsZScpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8g6K6h566X5YmN6Z2i5p2/5pS26LW35pON5L2c5qC35byPXHJcbiAgZ2V0IHByZXZDbGFzcygpIHtcclxuICAgIGNvbnN0IHBhbmUgPSB0aGlzLnNwbGl0dGVyLmdldFBhbmUodGhpcy5pbmRleCk7XHJcbiAgICBjb25zdCBuZWFyUGFuZSA9IHRoaXMuc3BsaXR0ZXIuZ2V0UGFuZSh0aGlzLmluZGV4ICsgMSk7XHJcbiAgICAvLyDnrKzkuIDkuKrpnaLmnb/miJbogIXlhbblroPpnaLmnb/mipjlj6DmlrnlkJHkuI3mmK/lkJHlkI7nmoTmmL7npLrmk43kvZzmjInpkq5cclxuICAgIGNvbnN0IHNob3dJY29uID0gKHBhbmUuY29sbGFwc2VEaXJlY3Rpb24gIT09ICdhZnRlcicgfHwgdGhpcy5pbmRleCA9PT0gMCk7XHJcbiAgICByZXR1cm4gdGhpcy5nZW5lcmF0ZUNvbGxhcHNlQ2xhc3MocGFuZSwgbmVhclBhbmUsIHNob3dJY29uKTtcclxuICB9XHJcblxyXG4gIC8vIOiuoeeul+ebuOmCu+mdouadv+aUtui1t+aTjeS9nOagt+W8j1xyXG4gIGdldCBuZXh0Q2xhc3MoKSB7XHJcbiAgICBjb25zdCBwYW5lID0gdGhpcy5zcGxpdHRlci5nZXRQYW5lKHRoaXMuaW5kZXggKyAxKTtcclxuICAgIGNvbnN0IG5lYXJQYW5lID0gdGhpcy5zcGxpdHRlci5nZXRQYW5lKHRoaXMuaW5kZXgpO1xyXG4gICAgLy8g5pyA5ZCO5LiA5Liq6Z2i5p2/5oiW6ICF5YW25a6D6Z2i5p2/5oqY5Y+g5pa55ZCR5LiN5piv5ZCR5YmN55qE5pi+56S65pON5L2c5oyJ6ZKuXHJcbiAgICBjb25zdCBzaG93SWNvbiA9IChwYW5lLmNvbGxhcHNlRGlyZWN0aW9uICE9PSAnYmVmb3JlJyB8fCB0aGlzLmluZGV4ICsgMSA9PT0gdGhpcy5zcGxpdHRlci5wYW5lQ291bnQgLSAxKTtcclxuICAgIHJldHVybiB0aGlzLmdlbmVyYXRlQ29sbGFwc2VDbGFzcyhwYW5lLCBuZWFyUGFuZSwgc2hvd0ljb24pO1xyXG4gIH1cclxuXHJcbiAgLy8g55Sf5oiQ5ou85o6l5qC35byPXHJcbiAgZ2VuZXJhdGVDbGFzcyhjbGFzc2VzKSB7XHJcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoY2xhc3NlcykuZmlsdGVyKGMgPT4gY2xhc3Nlc1tjXSkuam9pbignICcpO1xyXG4gIH1cclxuXHJcbiAgLy8g5qC55o2u5b2T5YmN54q25oCB55Sf5oiQ5pS26LW35oyJ6ZKu5qC35byPXHJcbiAgZ2VuZXJhdGVDb2xsYXBzZUNsYXNzKHBhbmUsIG5lYXJQYW5lLCBzaG93SWNvbikge1xyXG4gICAgIC8vIOaYr+WQpuWFgeiuuOaUtui1t1xyXG4gICAgY29uc3QgaXNDb2xsYXBzaWJsZSA9IHBhbmUuY29sbGFwc2libGUgJiYgc2hvd0ljb247XHJcbiAgICAvLyDlvZPliY3mlLbotbfnirbmgIFcclxuICAgIGNvbnN0IGlzQ29sbGFwc2VkID0gcGFuZS5jb2xsYXBzZWQ7XHJcbiAgICAvLyDmmK/lkKbmmK/lm7rlrppwYW5lXHJcbiAgICBjb25zdCBpc1N0YXRpY0JhciA9IHRoaXMuc3BsaXR0ZXIuaXNTdGF0aWNCYXIodGhpcy5pbmRleCk7XHJcbiAgICAvLyDkuIDkuKpwYW5l5pS26LW355qE5pe25YCZ77yM6ZqQ6JeP55u46YK7cGFuZeeahOaUtui1t+aMiemSrlxyXG4gICAgY29uc3QgaXNOZWFyUGFuZUNvbGxhcHNlZCA9IG5lYXJQYW5lLmNvbGxhcHNlZDtcclxuICAgIHJldHVybiB0aGlzLmdlbmVyYXRlQ2xhc3Moe1xyXG4gICAgICAnZGV2dWktY29sbGFwc2UnOiBpc0NvbGxhcHNpYmxlLFxyXG4gICAgICAnY29sbGFwc2VkJzogaXNDb2xsYXBzZWQsXHJcbiAgICAgICdoaWRkZW4nOiBpc05lYXJQYW5lQ29sbGFwc2VkXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==