UNPKG

com.phloxui

Version:

PhloxUI Ng2+ Framework

318 lines (317 loc) 27 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ import * as tslib_1 from "tslib"; import { Component, ElementRef, Input } from '@angular/core'; import { MenuModel } from './model/MenuModel'; import { AbstractMenu } from './AbstractMenu'; import { NeedFocusService } from '../service/NeedFocusService.service'; import { Option } from '../decorator/Option.decorator'; import { I18N } from '../decorator/I18N.decorator'; const /** @type {?} */ TYPE_NAME = "phx-context-menu"; export class ContextMenu extends AbstractMenu { /** * @param {?} elementRef * @param {?} needFocusService */ constructor(elementRef, needFocusService) { super(needFocusService); this.elementRef = elementRef; this._show = false; this.autoFocus = true; } /** * @return {?} */ ngOnInit() { this.init(); if (this.autoFocus === null || typeof this.autoFocus === 'undefined') { this.autoFocus = true; } } /** * @return {?} */ init() { if (this.context != null) { this.context.setContextMenu(this); } if (this.nativeElement === undefined) { // remove dom and save them in RAM this.nativeElement = $(this.elementRef.nativeElement).detach(); } this.showMenu(this._show); } /** * @param {?} isShow * @param {?=} widthSet * @return {?} */ showMenu(isShow, widthSet) { this._show = isShow; if (this.nativeElement === undefined) { // remove dom and save them in RAM this.nativeElement = $(this.elementRef.nativeElement).detach(); } if (this._show) { if (this.context != null && this.context.getMenuModelFactory() != null) { this.model = this.context.getMenuModelFactory().createMenuModel(this.context); } if (this.needFocusService != null) { if (this.autoFocus) { this.needFocusService.setFocusingComponent(this); } } $(this.elementRef.nativeElement).addClass('show'); setTimeout(() => { $(this.elementRef.nativeElement).css('opacity', 1); // append dom $("body").append(this.nativeElement); if (typeof widthSet !== "number") { let /** @type {?} */ left = $(this.elementRef.nativeElement).offset().left; let /** @type {?} */ width = $(this.elementRef.nativeElement).width(); $(this.nativeElement).css('left', (left - width) + "px"); } }, 1); } else { $(this.elementRef.nativeElement).removeClass('show'); $(this.elementRef.nativeElement).css('opacity', 0); if (this.needFocusService != null) { if (this.autoFocus && this.needFocusService.getFocusingComponent() === this) { this.needFocusService.resetFocusingComponent(); } } } } /** * @param {?} positionX * @param {?} positionY * @param {?=} width * @return {?} */ showAt(positionX, positionY, width) { if (positionX == null && positionY == null) { return; } if (positionX == null) { positionX = 0; } if (positionY == null) { positionY = 0; } if (this.nativeElement === undefined) { // remove dom and save them in RAM this.nativeElement = $(this.elementRef.nativeElement).detach(); } $(this.nativeElement).css('top', positionX + "px"); $(this.nativeElement).css('left', positionY + "px"); if (width !== null && width !== undefined) { $(this.nativeElement).css('width', width); } this.showMenu(true, width); } /** * @return {?} */ hide() { this.showMenu(false); } /** * @param {?} $event * @return {?} */ onItemClick($event) { if (this.autoFocus) { if (this.needFocusService !== null && this.needFocusService !== undefined) { this.needFocusService.setFocusingComponent(this); } } } /** * @return {?} */ isShow() { return this._show; } /** * @return {?} */ doRenderMenu() { // all item was cleared and items should be set here } /** * @param {?} dataParent * @return {?} */ setDataParent(dataParent) { this.dataParent = dataParent; } /** * @return {?} */ getDataParent() { return this.dataParent; } /** * @return {?} */ getContext() { return this.context; } /** * @param {?} context * @return {?} */ setContext(context) { this.context = context; } /** * @param {?} event * @return {?} */ onFocus(event) { if (this.focusTimeout !== undefined && this.focusTimeout !== null) { clearTimeout(this.focusTimeout); } this.focusTimeout = setTimeout(() => { $(this.elementRef.nativeElement).find(".fake").focus(); }, 20); } /** * @param {?} event * @return {?} */ onLostFocus(event) { if (this.lostFocusTimeout !== undefined && this.lostFocusTimeout !== null) { clearTimeout(this.lostFocusTimeout); } this.lostFocusTimeout = setTimeout(() => { this.showMenu(false); $(this.elementRef.nativeElement).find(".fake").blur(); }, 400); } /** * @param {?} autoFocus * @return {?} */ setAutoFocus(autoFocus) { this.autoFocus = autoFocus; } /** * @return {?} */ isAutoFocus() { return this.autoFocus; } /** * @param {?} $event * @return {?} */ _doFocus($event) { // do something when focus if (this.needFocusService !== null && this.needFocusService !== undefined) { this.needFocusService.setFocusingComponent(this); } } /** * @param {?} $event * @return {?} */ _doLostFocus($event) { if (this.needFocusService !== null && this.needFocusService.getFocusingComponent() === this) { this.needFocusService.resetFocusingComponent(); } } } ContextMenu.TYPE_NAME = TYPE_NAME; ContextMenu.decorators = [ { type: Component, args: [{ moduleId: module.id, selector: TYPE_NAME, template: `<div class="phx-context-menu"> <ul *ngIf="getModel() != null"> <li *ngFor="let item of getModel().items; let i = index" [class.disable]="!item.enable" (click)="onItemClick($event)"><phx-component-wrapper [type]="item.type" [handler]="getMenuItemHandler()" [model]="item" [class.disable]="!item.enable"></phx-component-wrapper></li> </ul> <button type="button" class="fake" (focusin)="_doFocus($event)" (blur)="_doLostFocus($event)"></button> </div> ` },] }, ]; /** @nocollapse */ ContextMenu.ctorParameters = () => [ { type: ElementRef, }, { type: NeedFocusService, }, ]; ContextMenu.propDecorators = { "model": [{ type: Input },], "items": [{ type: Input },], "dataParent": [{ type: Input },], "context": [{ type: Input },], "autoFocus": [{ type: Input },], }; tslib_1.__decorate([ Option(), I18N(), tslib_1.__metadata("design:type", MenuModel) ], ContextMenu.prototype, "model", void 0); tslib_1.__decorate([ Option(), I18N(), tslib_1.__metadata("design:type", Array) ], ContextMenu.prototype, "items", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Object) ], ContextMenu.prototype, "dataParent", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Object) ], ContextMenu.prototype, "context", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], ContextMenu.prototype, "autoFocus", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Function) ], ContextMenu.prototype, "menuItemHandler", void 0); function ContextMenu_tsickle_Closure_declarations() { /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */ ContextMenu.decorators; /** * @nocollapse * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>} */ ContextMenu.ctorParameters; /** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */ ContextMenu.propDecorators; /** @type {?} */ ContextMenu.TYPE_NAME; /** @type {?} */ ContextMenu.prototype.model; /** @type {?} */ ContextMenu.prototype.items; /** @type {?} */ ContextMenu.prototype.dataParent; /** @type {?} */ ContextMenu.prototype.context; /** @type {?} */ ContextMenu.prototype.autoFocus; /** @type {?} */ ContextMenu.prototype.menuItemHandler; /** @type {?} */ ContextMenu.prototype.elementRef; /** @type {?} */ ContextMenu.prototype._show; /** @type {?} */ ContextMenu.prototype.nativeElement; /** @type {?} */ ContextMenu.prototype.focusTimeout; /** @type {?} */ ContextMenu.prototype.lostFocusTimeout; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udGV4dE1lbnUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vY29tLnBobG94dWkvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50L0NvbnRleHRNZW51LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsVUFBVSxFQUFFLEtBQUssRUFBZ0IsTUFBTSxlQUFlLENBQUM7QUFDbkYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRTlDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQU05QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUV2RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDdkQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBSW5ELHVCQUFNLFNBQVMsR0FBVyxrQkFBa0IsQ0FBQztBQWU3QyxNQUFNLGtCQUFtQixTQUFRLFlBQVk7Ozs7O0lBc0MzQyxZQUFZLFVBQXNCLEVBQUUsZ0JBQWtDO1FBQ3BFLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1FBQzdCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0tBQ3ZCOzs7O0lBRU0sUUFBUTtRQUNiLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUVaLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEtBQUssSUFBSSxJQUFJLE9BQU8sSUFBSSxDQUFDLFNBQVMsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQ3JFLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1NBQ3ZCOzs7OztJQUlLLElBQUk7UUFDVixFQUFFLENBQUMsQ0FBQyxJQUFJ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Q0FBQyxnQkFBZ0IsQ0FBQyxvQkFBb0IsRUFBRSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDNUYsSUFBSSxDQUFDLGdCQUFnQixDQUFDLHNCQUFzQixFQUFFLENBQUM7U0FDaEQ7Ozt3QkFoTndDLFNBQVM7O1lBZnJELFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUU7Z0JBQ25CLFFBQVEsRUFBRSxTQUFTO2dCQUNuQixRQUFRLEVBQUU7Ozs7Ozs7O0NBUVg7YUFDQTs7OztZQTlCMkIsVUFBVTtZQVM3QixnQkFBZ0I7OztzQkE0QnRCLEtBQUs7c0JBSUwsS0FBSzsyQkFLTCxLQUFLO3dCQUdMLEtBQUs7MEJBR0wsS0FBSzs7O0lBZEwsTUFBTSxFQUFFO0lBQ1IsSUFBSSxFQUFFO3NDQUNVLFNBQVM7OztJQUV6QixNQUFNLEVBQUU7SUFDUixJQUFJLEVBQUU7Ozs7SUFJTixNQUFNLEVBQUU7Ozs7SUFHUixNQUFNLEVBQUU7Ozs7SUFHUixNQUFNLEVBQUU7Ozs7SUFNUixNQUFNLEVBQUU7c0NBQ2tCLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgRWxlbWVudFJlZiwgSW5wdXQsIEhvc3RMaXN0ZW5lciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWVudU1vZGVsIH0gZnJvbSAnLi9tb2RlbC9NZW51TW9kZWwnO1xuaW1wb3J0IHsgTWVudUl0ZW1Nb2RlbCB9IGZyb20gJy4vbW9kZWwvTWVudUl0ZW1Nb2RlbCc7XG5pbXBvcnQgeyBBYnN0cmFjdE1lbnUgfSBmcm9tICcuL0Fic3RyYWN0TWVudSc7XG5pbXBvcnQgeyBJSGFzQ29udGV4dCB9IGZyb20gJy4vSUhhc0NvbnRleHQnO1xuaW1wb3J0IHsgSUNvbnRleHQgfSBmcm9tICcuL0lDb250ZXh0JztcbmltcG9ydCB7IElOZWVkRm9jdXMgfSBmcm9tICcuL0lOZWVkRm9jdXMnO1xuaW1wb3J0IHsgSUhhc0RhdGFQYXJlbnQgfSBmcm9tICcuL0lIYXNEYXRhUGFyZW50JztcbmltcG9ydCB7IElIYXNEYXRhIH0gZnJvbSAnLi9JSGFzRGF0YSc7XG5pbXBvcnQgeyBOZWVkRm9jdXNTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZS9OZWVkRm9jdXNTZXJ2aWNlLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWJzdHJhY3RNZW51SXRlbSB9IGZyb20gJy4vQWJzdHJhY3RNZW51SXRlbSc7XG5pbXBvcnQgeyBPcHRpb24gfSBmcm9tICcuLi9kZWNvcmF0b3IvT3B0aW9uLmRlY29yYXRvcic7XG5pbXBvcnQgeyBJMThOIH0gZnJvbSAnLi4vZGVjb3JhdG9yL0kxOE4uZGVjb3JhdG9yJztcblxuZGVjbGFyZSB2YXIgJDogYW55O1xuXG5jb25zdCBUWVBFX05BTUU6IHN0cmluZyA9IFwicGh4LWNvbnRleHQtbWVudVwiO1xuXG5AQ29tcG9uZW50KHtcbiAgbW9kdWxlSWQ6IG1vZHVsZS5pZCxcbiAgc2VsZWN0b3I6IFRZUEVfTkFNRSxcbiAgdGVtcGxhdGU6IGA8ZGl2IGNsYXNzPVwicGh4LWNvbnRleHQtbWVudVwiPlxuXHQ8dWwgKm5nSWY9XCJnZXRNb2RlbCgpICE9IG51bGxcIj5cblx0XHQ8bGkgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZ2V0TW9kZWwoKS5pdGVtczsgbGV0IGkgPSBpbmRleFwiIFtjbGFzcy5kaXNhYmxlXT1cIiFpdGVtLmVuYWJsZVwiIChjbGljayk9XCJvbkl0ZW1DbGljaygkZXZlbnQpXCI+PHBoeC1jb21wb25lbnQtd3JhcHBlclxuXHRcdFx0XHRbdHlwZV09XCJpdGVtLnR5cGVcIiBbaGFuZGxlcl09XCJnZXRNZW51SXRlbUhhbmRsZXIoKVwiIFttb2RlbF09XCJpdGVtXCJcblx0XHRcdFx0W2NsYXNzLmRpc2FibGVdPVwiIWl0ZW0uZW5hYmxlXCI+PC9waHgtY29tcG9uZW50LXdyYXBwZXI+PC9saT5cblx0PC91bD5cblx0PGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJmYWtlXCIgKGZvY3VzaW4pPVwiX2RvRm9jdXMoJGV2ZW50KVwiIChibHVyKT1cIl9kb0xvc3RGb2N1cygkZXZlbnQpXCI+PC9idXR0b24+XG48L2Rpdj5cbmBcbn0pXG5leHBvcnQgY2xhc3MgQ29udGV4dE1lbnUgZXh0ZW5kcyBBYnN0cmFjdE1lbnUgaW1wbGVtZW50cyBPbkluaXQsIElIYXNDb250ZXh0LCBJTmVlZEZvY3VzLCBJSGFzRGF0YVBhcmVudCB7XG5cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBUWVBFX05BTUU6IHN0cmluZyA9IFRZUEVfTkFNRTtcblxuICAvLyBSZS1kZWNsYXJlIGZpZWxkIHRvIGRlY2xhcmUgbmcgQElucHV0LlxuICAvLyAtLS0gZnJvbSBBYnN0cmFjdE1lbnVcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIEBJMThOKClcbiAgcHJvdGVjdGVkIG1vZGVsOiBNZW51TW9kZWw7XG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oKVxuICBASTE4TigpXG4gIHByb3RlY3RlZCBpdGVtczogQWJzdHJhY3RNZW51SXRlbVtdO1xuICAvLyAtLS0gc2VsZlxuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIGRhdGFQYXJlbnQ6IElIYXNEYXRhO1xuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJpdmF0ZSBjb250ZXh0OiBJQ29udGV4dDtcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByaXZhdGUgYXV0b0ZvY3VzOiBib29sZWFuO1xuXG4gIC8vIFJlLWRlY2xhcmUgZmllbGQgdG8gZGVjbGFyZSBuZyBAT3V0cHV0LlxuICAvLyBSZS1kZWNsYXJlIGZpZWxkIHRvIGRlY2xhcmVcbiAgLy8gLS0tIGZyb20gQWJzdHJhY3RNZW51XG4gIEBPcHRpb24oKVxuICBwcm90ZWN0ZWQgbWVudUl0ZW1IYW5kbGVyOiBGdW5jdGlvbjtcblxuICAvLyAtLS0gc2VsZlxuICBwcm90ZWN0ZWQgZWxlbWVudFJlZjogRWxlbWVudFJlZjtcbiAgcHJpdmF0ZSBfc2hvdzogYm9vbGVhbjtcbiAgcHJpdmF0ZSBuYXRpdmVFbGVtZW50OiBhbnk7XG4gIHByaXZhdGUgZm9jdXNUaW1lb3V0OiBhbnk7XG4gIHByaXZhdGUgbG9zdEZvY3VzVGltZW91dDogYW55O1xuXG4gIGNvbnN0cnVjdG9yKGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsIG5lZWRGb2N1c1NlcnZpY2U6IE5lZWRGb2N1c1NlcnZpY2UpIHtcbiAgICBzdXBlcihuZWVkRm9jdXNTZXJ2aWNlKTtcbiAgICB0aGlzLmVsZW1lbnRSZWYgPSBlbGVtZW50UmVmO1xuICAgIHRoaXMuX3Nob3cgPSBmYWxzZTtcbiAgICB0aGlzLmF1dG9Gb2N1cyA9IHRydWU7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pbml0KCk7XG5cbiAgICBpZiAodGhpcy5hdXRvRm9jdXMgPT09IG51bGwgfHwgdHlwZW9mIHRoaXMuYXV0b0ZvY3VzID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhpcy5hdXRvRm9jdXMgPSB0cnVlO1xuICAgIH1cblxuICB9XG5cbiAgcHJpdmF0ZSBpbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNvbnRleHQgIT0gbnVsbCkge1xuICAgICAgdGhpcy5jb250ZXh0LnNldENvbnRleHRNZW51KHRoaXMpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm5hdGl2ZUVsZW1lbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gcmVtb3ZlIGRvbSBhbmQgc2F2ZSB0aGVtIGluIFJBTVxuICAgICAgdGhpcy5uYXRpdmVFbGVtZW50ID0gJCh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCkuZGV0YWNoKCk7XG4gICAgfVxuXG4gICAgdGhpcy5zaG93TWVudSh0aGlzLl9zaG93KTtcbiAgfVxuXG4gIHByaXZhdGUgc2hvd01lbnUoaXNTaG93OiBib29sZWFuLCB3aWR0aFNldD86IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX3Nob3cgPSBpc1Nob3c7XG5cbiAgICBpZiAodGhpcy5uYXRpdmVFbGVtZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIHJlbW92ZSBkb20gYW5kIHNhdmUgdGhlbSBpbiBSQU1cbiAgICAgIHRoaXMubmF0aXZlRWxlbWVudCA9ICQodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpLmRldGFjaCgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9zaG93KSB7XG4gICAgICBpZiAodGhpcy5jb250ZXh0ICE9IG51bGwgJiYgdGhpcy5jb250ZXh0LmdldE1lbnVNb2RlbEZhY3RvcnkoKSAhPSBudWxsKSB7XG4gICAgICAgIHRoaXMubW9kZWwgPSB0aGlzLmNvbnRleHQuZ2V0TWVudU1vZGVsRmFjdG9yeSgpLmNyZWF0ZU1lbnVNb2RlbCh0aGlzLmNvbnRleHQpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5uZWVkRm9jdXNTZXJ2aWNlICE9IG51bGwpIHtcbiAgICAgICAgaWYgKHRoaXMuYXV0b0ZvY3VzKSB7XG4gICAgICAgICAgdGhpcy5uZWVkRm9jdXNTZXJ2aWNlLnNldEZvY3VzaW5nQ29tcG9uZW50KHRoaXMpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICQodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpLmFkZENsYXNzKCdzaG93Jyk7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgJCh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCkuY3NzKCdvcGFjaXR5JywgMSk7XG4gICAgICAgIC8vIGFwcGVuZCBkb21cbiAgICAgICAgJChcImJvZHlcIikuYXBwZW5kKHRoaXMubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIGlmICh0eXBlb2Ygd2lkdGhTZXQgIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICBsZXQgbGVmdCA9ICQodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpLm9mZnNldCgpLmxlZnQ7XG4gICAgICAgICAgbGV0IHdpZHRoID0gJCh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCkud2lkdGgoKTtcbiAgICAgICAgICAkKHRoaXMubmF0aXZlRWxlbWVudCkuY3NzKCdsZWZ0JywgKGxlZnQgLSB3aWR0aCkgKyBcInB4XCIpO1xuICAgICAgICB9XG4gICAgICB9LCAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgJCh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCkucmVtb3ZlQ2xhc3MoJ3Nob3cnKTtcbiAgICAgICQodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpLmNzcygnb3BhY2l0eScsIDApO1xuXG4gICAgICBpZiAodGhpcy5uZWVkRm9jdXNTZXJ2aWNlICE9IG51bGwpIHtcbiAgICAgICAgaWYgKHRoaXMuYXV0b0ZvY3VzICYmIHRoaXMubmVlZEZvY3VzU2VydmljZS5nZXRGb2N1c2luZ0NvbXBvbmVudCgpID09PSB0aGlzKSB7XG4gICAgICAgICAgdGhpcy5uZWVkRm9jdXNTZXJ2aWNlLnJlc2V0Rm9jdXNpbmdDb21wb25lbnQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzaG93QXQocG9zaXRpb25YOiBudW1iZXIsIHBvc2l0aW9uWTogbnVtYmVyLCB3aWR0aD86IG51bWJlcik6IHZvaWQge1xuICAgIGlmIChwb3NpdGlvblggPT0gbnVsbCAmJiBwb3NpdGlvblkgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAocG9zaXRpb25YID09IG51bGwpIHtcbiAgICAgIHBvc2l0aW9uWCA9IDA7XG4gICAgfVxuICAgIGlmIChwb3NpdGlvblkgPT0gbnVsbCkge1xuICAgICAgcG9zaXRpb25ZID0gMDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5uYXRpdmVFbGVtZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIHJlbW92ZSBkb20gYW5kIHNhdmUgdGhlbSBpbiBSQU1cbiAgICAgIHRoaXMubmF0aXZlRWxlbWVudCA9ICQodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpLmRldGFjaCgpO1xuICAgIH1cblxuICAgICQodGhpcy5uYXRpdmVFbGVtZW50KS5jc3MoJ3RvcCcsIHBvc2l0aW9uWCArIFwicHhcIik7XG4gICAgJCh0aGlzLm5hdGl2ZUVsZW1lbnQpLmNzcygnbGVmdCcsIHBvc2l0aW9uWSArIFwicHhcIik7XG5cbiAgICBpZiAod2lkdGggIT09IG51bGwgJiYgd2lkdGggIT09IHVuZGVmaW5lZCkge1xuICAgICAgJCh0aGlzLm5hdGl2ZUVsZW1lbnQpLmNzcygnd2lkdGgnLCB3aWR0aCk7XG4gICAgfVxuXG4gICAgdGhpcy5zaG93TWVudSh0cnVlLCB3aWR0aCk7XG4gIH1cblxuICBwdWJsaWMgaGlkZSgpOiB2b2lkIHtcbiAgICB0aGlzLnNob3dNZW51KGZhbHNlKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkl0ZW1DbGljaygkZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYXV0b0ZvY3VzKSB7XG4gICAgICBpZiAodGhpcy5uZWVkRm9jdXNTZXJ2aWNlICE9PSBudWxsICYmIHRoaXMubmVlZEZvY3VzU2VydmljZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMubmVlZEZvY3VzU2VydmljZS5zZXRGb2N1c2luZ0NvbXBvbmVudCh0aGlzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaXNTaG93KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9zaG93O1xuICB9XG5cbiAgcHVibGljIGRvUmVuZGVyTWVudSgpOiB2b2lkIHtcbiAgICAvLyBhbGwgaXRlbSB3YXMgY2xlYXJlZCBhbmQgaXRlbXMgc2hvdWxkIGJlIHNldCBoZXJlXG4gIH1cblxuICBwdWJsaWMgc2V0RGF0YVBhcmVudChkYXRhUGFyZW50OiBJSGFzRGF0YSkge1xuICAgIHRoaXMuZGF0YVBhcmVudCA9IGRhdGFQYXJlbnQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0RGF0YVBhcmVudCgpOiBJSGFzRGF0YSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YVBhcmVudDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDb250ZXh0KCk6IElDb250ZXh0IHtcbiAgICByZXR1cm4gdGhpcy5jb250ZXh0O1xuICB9XG5cbiAgcHVibGljIHNldENvbnRleHQoY29udGV4dDogSUNvbnRleHQpOiB2b2lkIHtcbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICB9XG5cbiAgcHVibGljIG9uRm9jdXMoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIGlmICh0aGlzLmZvY3VzVGltZW91dCAhPT0gdW5kZWZpbmVkICYmIHRoaXMuZm9jdXNUaW1lb3V0ICE9PSBudWxsKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5mb2N1c1RpbWVvdXQpO1xuICAgIH1cblxuICAgIHRoaXMuZm9jdXNUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAkKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KS5maW5kKFwiLmZha2VcIikuZm9jdXMoKTtcbiAgICB9LCAyMCk7XG4gIH1cblxuICBwdWJsaWMgb25Mb3N0Rm9jdXMoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIGlmICh0aGlzLmxvc3RGb2N1c1RpbWVvdXQgIT09IHVuZGVmaW5lZCAmJiB0aGlzLmxvc3RGb2N1c1RpbWVvdXQgIT09IG51bGwpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLmxvc3RGb2N1c1RpbWVvdXQpO1xuICAgIH1cblxuICAgIHRoaXMubG9zdEZvY3VzVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5zaG93TWVudShmYWxzZSk7XG4gICAgICAkKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KS5maW5kKFwiLmZha2VcIikuYmx1cigpO1xuICAgIH0sIDQwMCk7XG4gIH1cblxuICBwdWJsaWMgc2V0QXV0b0ZvY3VzKGF1dG9Gb2N1czogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuYXV0b0ZvY3VzID0gYXV0b0ZvY3VzO1xuICB9XG5cbiAgcHVibGljIGlzQXV0b0ZvY3VzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmF1dG9Gb2N1cztcbiAgfVxuXG4gIHB1YmxpYyBfZG9Gb2N1cygkZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgLy8gZG8gc29tZXRoaW5nIHdoZW4gZm9jdXNcbiAgICBpZiAodGhpcy5uZWVkRm9jdXNTZXJ2aWNlICE9PSBudWxsICYmIHRoaXMubmVlZEZvY3VzU2VydmljZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLm5lZWRGb2N1c1NlcnZpY2Uuc2V0Rm9jdXNpbmdDb21wb25lbnQodGhpcyk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIF9kb0xvc3RGb2N1cygkZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMubmVlZEZvY3VzU2VydmljZSAhPT0gbnVsbCAmJiB0aGlzLm5lZWRGb2N1c1NlcnZpY2UuZ2V0Rm9jdXNpbmdDb21wb25lbnQoKSA9PT0gdGhpcykge1xuICAgICAgdGhpcy5uZWVkRm9jdXNTZXJ2aWNlLnJlc2V0Rm9jdXNpbmdDb21wb25lbnQoKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==