com.phloxui
Version:
PhloxUI Ng2+ Framework
318 lines (317 loc) • 27 kB
JavaScript
/**
* @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==