UNPKG

com.phloxui

Version:

PhloxUI Ng2+ Framework

166 lines (165 loc) 25.7 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ import * as tslib_1 from "tslib"; import { Component, ElementRef } from '@angular/core'; import { DomSanitizer } from '@angular/platform-browser'; import { PhloxAppService } from '../service/PhloxAppService.service'; import { AbstractWizardPane } from './AbstractWizardPane'; var /** @type {?} */ TYPE_NAME = "phx-scroll-wizard-pane"; var /** @type {?} */ CLASS_NAME = "scroll-wizard-pane-div-"; var ScrollWizardPane = /** @class */ (function (_super) { tslib_1.__extends(ScrollWizardPane, _super); function ScrollWizardPane(appSvc, sanitizer, elementRef) { var _this = _super.call(this, appSvc, elementRef) || this; _this.className = CLASS_NAME; _this.sanitizer = sanitizer; return _this; } /** * @return {?} */ ScrollWizardPane.prototype.ngOnInit = /** * @return {?} */ function () { _super.prototype.ngOnInit.call(this); }; /** * @param {?} event * @return {?} */ ScrollWizardPane.prototype.onScroll = /** * @param {?} event * @return {?} */ function (event) { var _this = this; if (this.delayScrollTimer !== null && typeof this.delayScrollTimer !== 'undefined') { clearTimeout(this.delayScrollTimer); this.delayScrollTimer = null; } this.delayScrollTimer = setTimeout(function () { var /** @type {?} */ anchorIndex = _this.currentStep; var /** @type {?} */ stepsCount = _this.getModel().steps.length; var /** @type {?} */ lastIndex; if (stepsCount === 0) { lastIndex = 0; } else { lastIndex = _this.getModel().steps.length - 1; } var /** @type {?} */ rightDom; if (typeof $(_this.elementRef.nativeElement).find('.scroll-wizard-pane') !== 'undefined') { if (typeof $(_this.elementRef.nativeElement).find('.scroll-wizard-pane').find('.right') !== 'undefined') { rightDom = $(_this.elementRef.nativeElement).find('.scroll-wizard-pane').find('.right'); } } for (var /** @type {?} */ index = 0; index < stepsCount; index++) { var /** @type {?} */ classNameIndex = _this.className + index; var /** @type {?} */ classNameDom = void 0; if (rightDom !== null && rightDom !== undefined) { if (typeof $(_this.elementRef.nativeElement).find('.scroll-wizard-pane').find('.right').find('.' + classNameIndex) !== undefined) { classNameDom = $(_this.elementRef.nativeElement).find('.scroll-wizard-pane').find('.right').find('.' + classNameIndex); if (rightDom.scrollTop() === 0) { //scrolling start anchorIndex = 0; break; } if (Math.ceil(rightDom.scrollTop() + rightDom.innerHeight()) >= rightDom[0].scrollHeight) { //scrolling end anchorIndex = lastIndex; break; } if ((rightDom.scrollTop() + rightDom.offset().top) >= (rightDom.scrollTop() + classNameDom.offset().top)) { // find index of stepMenu scrolling anchorIndex = index; } } } } _this.currentStep = anchorIndex; event.preventDefault(); }, 50); }; /** * @param {?} index * @return {?} */ ScrollWizardPane.prototype.getClassName = /** * @param {?} index * @return {?} */ function (index) { return this.className + index; }; /** * @param {?} index * @return {?} */ ScrollWizardPane.prototype.showStepContent = /** * @param {?} index * @return {?} */ function (index) { if (this.delayScrollClickTimer !== null && typeof this.delayScrollClickTimer !== 'undefined') { clearTimeout(this.delayScrollClickTimer); this.delayScrollClickTimer = null; } var /** @type {?} */ rightDom; var /** @type {?} */ classNameIndex = this.className + index; var /** @type {?} */ classNameDom; if (typeof $(this.elementRef.nativeElement).find('.scroll-wizard-pane') !== 'undefined') { if (typeof $(this.elementRef.nativeElement).find('.scroll-wizard-pane').find('.right') !== 'undefined') { rightDom = $(this.elementRef.nativeElement).find('.scroll-wizard-pane').find('.right'); } } if (typeof $(this.elementRef.nativeElement).find('.scroll-wizard-pane').find('.right').find('.' + classNameIndex) !== 'undefined') { classNameDom = $(this.elementRef.nativeElement).find('.scroll-wizard-pane').find('.right').find('.' + classNameIndex); } this.delayScrollClickTimer = setTimeout(function () { if ((rightDom !== null && rightDom !== undefined) && (classNameDom !== null && classNameDom !== undefined)) { if ((classNameDom.offset() !== null && classNameDom.offset() !== undefined) && (rightDom.scrollTop() !== null && rightDom.scrollTop() !== undefined)) { rightDom.stop().animate({ scrollTop: (classNameDom.offset().top - rightDom.offset().top + rightDom.scrollTop()) + 0.7 }, 'slow'); } } }, 5); }; ScrollWizardPane.TYPE_NAME = TYPE_NAME; ScrollWizardPane.decorators = [ { type: Component, args: [{ moduleId: module.id, selector: TYPE_NAME, template: "<div class=\"phx-scroll-wizard-pane\">\n\t<div class=\"left\" [style.padding-top]=\"getHeaderHeight() + 'pt'\" [style.padding-bottom]=\"getFooterHeight() + 'pt'\">\n\t\t<div class=\"header\" [style.height]=\"getHeaderHeight() + 'pt'\">\n\t\t\t<ng-template [ngIf]=\"getModel() !== null && getModel().header !== null\">\n\t\t\t\t<ng-template [ngIf]=\"getModel().header.type === null\">\n\t\t\t\t\t<div *ngIf=\"getModel().header.imageURL !== null && getModel().header.imageURL !== ''\" class=\"header-image\">\n\t\t\t\t\t\t<img src=\"{{getModel().header.imageURL}}\">\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"header-label\">{{getModel().header.label}}</div>\n\t\t\t\t</ng-template>\n\t\t\t\t<ng-template [ngIf]=\"getModel().header.type !== null\">\n\t\t\t\t\t<phx-component-wrapper [type]=\"getModel().header.type\" [data]=\"getModel().header.model\"></phx-component-wrapper>\n\t\t\t\t</ng-template>\n\t\t\t</ng-template>\n\t\t</div>\n\t\t<div class=\"body\">\n\t\t\t<ng-template [ngIf]=\"getModel() !== null && getModel().steps !== null\">\n\t\t\t\t<div *ngFor=\"let item of getModel().steps; let i = index;\" class=\"step\" [class.active]=\"isStepSelected(i)\">\n\t\t\t\t\t<ng-template [ngIf]=\"item.type === null\">\n\t\t\t\t\t\t<div (click)=\"stepSelected(i)\"> {{item.label}} </div>\n\t\t\t\t\t</ng-template>\n\t\t\t\t\t<ng-template [ngIf]=\"item.type !== null\">\n\t\t\t\t\t\t<phx-component-wrapper [type]=\"item.type\" [data]=\"item.model\" (click)=\"stepSelected(i)\"></phx-component-wrapper>\n\t\t\t\t\t</ng-template>\n\t\t\t\t</div>\n\t\t\t</ng-template>\n\t\t</div>\n\t\t<div class=\"footer\" [style.height]=\"getFooterHeight() + 'pt'\">\n\t\t\t<ng-template [ngIf]=\"getModel() !== null && getModel().footer !== null\">\n\t\t\t\t<ng-template [ngIf]=\"getModel().footer.type === null\">\n\t\t\t\t\t{{getModel().footer.label}}\n\t\t\t\t</ng-template>\n\t\t\t\t<ng-template [ngIf]=\"getModel().footer.type !== null\">\n\t\t\t\t\t<phx-component-wrapper [type]=\"getModel().footer.type\" [data]=\"getModel().footer.model\"></phx-component-wrapper>\n\t\t\t\t</ng-template>\n\t\t\t</ng-template>\n\t\t</div>\n\t</div>\n\t<div class=\"right\" (scroll)=\"onScroll($event)\">\n\t\t\t<div *ngFor=\"let item of getModel().steps; let i = index;\" [class]=\"getClassName(i)\">\n\t\t\t\t<phx-component-wrapper [class.active]=\"isStepSelected(i)\" [type]=\"item.componentType\"\n\t\t\t\t\t[data]=\"getData()\" [model]=\"item.componentModel\" [dataParent]=\"this\" [handler]=\"getStepsComponentHandler()\">\n\t\t\t\t</phx-component-wrapper>\n\t\t\t</div>\n\t</div>\n</div>\n", },] }, ]; /** @nocollapse */ ScrollWizardPane.ctorParameters = function () { return [ { type: PhloxAppService, }, { type: DomSanitizer, }, { type: ElementRef, }, ]; }; return ScrollWizardPane; }(AbstractWizardPane)); export { ScrollWizardPane }; function ScrollWizardPane_tsickle_Closure_declarations() { /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */ ScrollWizardPane.decorators; /** * @nocollapse * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>} */ ScrollWizardPane.ctorParameters; /** @type {?} */ ScrollWizardPane.TYPE_NAME; /** @type {?} */ ScrollWizardPane.prototype.delayScrollTimer; /** @type {?} */ ScrollWizardPane.prototype.delayScrollClickTimer; /** @type {?} */ ScrollWizardPane.prototype.sanitizer; /** @type {?} */ ScrollWizardPane.prototype.className; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2Nyb2xsV2l6YXJkUGFuZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9jb20ucGhsb3h1aS8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnQvU2Nyb2xsV2l6YXJkUGFuZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUF3QixVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUUsT0FBTyxFQUFFLFlBQVksRUFBYSxNQUFNLDJCQUEyQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUVyRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUsxRCxxQkFBTSxTQUFTLEdBQVcsd0JBQXdCLENBQUM7QUFFbkQscUJBQU0sVUFBVSxHQUFRLHlCQUF5QixDQUFDOztJQXNEWiw0Q0FBa0I7SUFVdEQsMEJBQVksTUFBdUIsRUFBRSxTQUF1QixFQUFFLFVBQXNCO1FBQXBGLFlBQ0Usa0JBQU0sTUFBTSxFQUFFLFVBQVUsQ0FBQyxTQUcxQjswQkFOMkIsVUFBVTtRQUtwQyxLQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQzs7S0FDNUI7Ozs7SUFFTSxtQ0FBUTs7OztRQUNiLGlCQUFNLFFBQVEsV0FBRSxDQUFDOzs7Ozs7SUFHWixtQ0FBUTs7OztjQUFDLEtBQVU7O1FBQ3hCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsS0FBSyxJQUFJLElBQUksT0FBTyxJQUFJLENBQUMsZ0JBQWdCLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQztZQUNuRixZQUFZLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDcEMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztTQUM5QjtRQUVELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxVQUFVLENBQUM7WUFDakMscUJBQUksV0FBVyxHQUFRLEtBQUksQ0FB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U0FBUyxTQUFDO29CQUNULFFBQVEsRUFBRSxNQUFNLENBQUMsRUFBRTtvQkFDbkIsUUFBUSxFQUFFLFNBQVM7b0JBQ25CLFFBQVEsRUFBRSx3Z0ZBOENYO2lCQUNBOzs7O2dCQTdEUSxlQUFlO2dCQURmLFlBQVk7Z0JBRHFCLFVBQVU7OzJCQUFwRDtFQWlFc0Msa0JBQWtCO1NBQTNDLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBIb3N0TGlzdGVuZXIsIEVsZW1lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRG9tU2FuaXRpemVyLCBTYWZlU3R5bGUgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcclxuaW1wb3J0IHsgUGhsb3hBcHBTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZS9QaGxveEFwcFNlcnZpY2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IElIYXNNb2RlbCB9IGZyb20gJy4vSUhhc01vZGVsJztcclxuaW1wb3J0IHsgQWJzdHJhY3RXaXphcmRQYW5lIH0gZnJvbSAnLi9BYnN0cmFjdFdpemFyZFBhbmUnO1xyXG5pbXBvcnQgeyBJQ2hhbmdlYWJsZSB9IGZyb20gJy4vSUNoYW5nZWFibGUnO1xyXG5cclxuZGVjbGFyZSB2YXIgJDogYW55O1xyXG5cclxuY29uc3QgVFlQRV9OQU1FOiBzdHJpbmcgPSBcInBoeC1zY3JvbGwtd2l6YXJkLXBhbmVcIjtcclxuXHJcbmNvbnN0IENMQVNTX05BTUU6IGFueSA9IFwic2Nyb2xsLXdpemFyZC1wYW5lLWRpdi1cIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIG1vZHVsZUlkOiBtb2R1bGUuaWQsXHJcbiAgc2VsZWN0b3I6IFRZUEVfTkFNRSxcclxuICB0ZW1wbGF0ZTogYDxkaXYgY2xhc3M9XCJwaHgtc2Nyb2xsLXdpemFyZC1wYW5lXCI+XG5cdDxkaXYgY2xhc3M9XCJsZWZ0XCIgW3N0eWxlLnBhZGRpbmctdG9wXT1cImdldEhlYWRlckhlaWdodCgpICsgJ3B0J1wiIFtzdHlsZS5wYWRkaW5nLWJvdHRvbV09XCJnZXRGb290ZXJIZWlnaHQoKSArICdwdCdcIj5cblx0XHQ8ZGl2IGNsYXNzPVwiaGVhZGVyXCIgW3N0eWxlLmhlaWdodF09XCJnZXRIZWFkZXJIZWlnaHQoKSArICdwdCdcIj5cblx0XHRcdDxuZy10ZW1wbGF0ZSBbbmdJZl09XCJnZXRNb2RlbCgpICE9PSBudWxsICYmIGdldE1vZGVsKCkuaGVhZGVyICE9PSBudWxsXCI+XG5cdFx0XHRcdDxuZy10ZW1wbGF0ZSBbbmdJZl09XCJnZXRNb2RlbCgpLmhlYWRlci50eXBlID09PSBudWxsXCI+XG5cdFx0XHRcdFx0PGRpdiAqbmdJZj1cImdldE1vZGVsKCkuaGVhZGVyLmltYWdlVVJMICE9PSBudWxsICYmIGdldE1vZGVsKCkuaGVhZGVyLmltYWdlVVJMICE9PSAnJ1wiIGNsYXNzPVwiaGVhZGVyLWltYWdlXCI+XG5cdFx0XHRcdFx0XHQ8aW1nIHNyYz1cInt7Z2V0TW9kZWwoKS5oZWFkZXIuaW1hZ2VVUkx9fVwiPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJoZWFkZXItbGFiZWxcIj57e2dldE1vZGVsKCkuaGVhZGVyLmxhYmVsfX08L2Rpdj5cblx0XHRcdFx0PC9uZy10ZW1wbGF0ZT5cblx0XHRcdFx0PG5nLXRlbXBsYXRlIFtuZ0lmXT1cImdldE1vZGVsKCkuaGVhZGVyLnR5cGUgIT09IG51bGxcIj5cblx0XHRcdFx0XHQ8cGh4LWNvbXBvbmVudC13cmFwcGVyIFt0eXBlXT1cImdldE1vZGVsKCkuaGVhZGVyLnR5cGVcIiBbZGF0YV09XCJnZXRNb2RlbCgpLmhlYWRlci5tb2RlbFwiPjwvcGh4LWNvbXBvbmVudC13cmFwcGVyPlxuXHRcdFx0XHQ8L25nLXRlbXBsYXRlPlxuXHRcdFx0PC9uZy10ZW1wbGF0ZT5cblx0XHQ8L2Rpdj5cblx0XHQ8ZGl2IGNsYXNzPVwiYm9keVwiPlxuXHRcdFx0PG5nLXRlbXBsYXRlIFtuZ0lmXT1cImdldE1vZGVsKCkgIT09IG51bGwgJiYgZ2V0TW9kZWwoKS5zdGVwcyAhPT0gbnVsbFwiPlxuXHRcdFx0XHQ8ZGl2ICpuZ0Zvcj1cImxldCBpdGVtIG9mIGdldE1vZGVsKCkuc3RlcHM7IGxldCBpID0gaW5kZXg7XCIgY2xhc3M9XCJzdGVwXCIgW2NsYXNzLmFjdGl2ZV09XCJpc1N0ZXBTZWxlY3RlZChpKVwiPlxuXHRcdFx0XHRcdDxuZy10ZW1wbGF0ZSBbbmdJZl09XCJpdGVtLnR5cGUgPT09IG51bGxcIj5cblx0XHRcdFx0XHRcdDxkaXYgKGNsaWNrKT1cInN0ZXBTZWxlY3RlZChpKVwiPiB7e2l0ZW0ubGFiZWx9fSA8L2Rpdj5cblx0XHRcdFx0XHQ8L25nLXRlbXBsYXRlPlxuXHRcdFx0XHRcdDxuZy10ZW1wbGF0ZSBbbmdJZl09XCJpdGVtLnR5cGUgIT09IG51bGxcIj5cblx0XHRcdFx0XHRcdDxwaHgtY29tcG9uZW50LXdyYXBwZXIgW3R5cGVdPVwiaXRlbS50eXBlXCIgW2RhdGFdPVwiaXRlbS5tb2RlbFwiIChjbGljayk9XCJzdGVwU2VsZWN0ZWQoaSlcIj48L3BoeC1jb21wb25lbnQtd3JhcHBlcj5cblx0XHRcdFx0XHQ8L25nLXRlbXBsYXRlPlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdDwvbmctdGVtcGxhdGU+XG5cdFx0PC9kaXY+XG5cdFx0PGRpdiBjbGFzcz1cImZvb3RlclwiIFtzdHlsZS5oZWlnaHRdPVwiZ2V0Rm9vdGVySGVpZ2h0KCkgKyAncHQnXCI+XG5cdFx0XHQ8bmctdGVtcGxhdGUgW25nSWZdPVwiZ2V0TW9kZWwoKSAhPT0gbnVsbCAmJiBnZXRNb2RlbCgpLmZvb3RlciAhPT0gbnVsbFwiPlxuXHRcdFx0XHQ8bmctdGVtcGxhdGUgW25nSWZdPVwiZ2V0TW9kZWwoKS5mb290ZXIudHlwZSA9PT0gbnVsbFwiPlxuXHRcdFx0XHRcdHt7Z2V0TW9kZWwoKS5mb290ZXIubGFiZWx9fVxuXHRcdFx0XHQ8L25nLXRlbXBsYXRlPlxuXHRcdFx0XHQ8bmctdGVtcGxhdGUgW25nSWZdPVwiZ2V0TW9kZWwoKS5mb290ZXIudHlwZSAhPT0gbnVsbFwiPlxuXHRcdFx0XHRcdDxwaHgtY29tcG9uZW50LXdyYXBwZXIgW3R5cGVdPVwiZ2V0TW9kZWwoKS5mb290ZXIudHlwZVwiIFtkYXRhXT1cImdldE1vZGVsKCkuZm9vdGVyLm1vZGVsXCI+PC9waHgtY29tcG9uZW50LXdyYXBwZXI+XG5cdFx0XHRcdDwvbmctdGVtcGxhdGU+XG5cdFx0XHQ8L25nLXRlbXBsYXRlPlxuXHRcdDwvZGl2PlxuXHQ8L2Rpdj5cblx0PGRpdiBjbGFzcz1cInJpZ2h0XCIgKHNjcm9sbCk9XCJvblNjcm9sbCgkZXZlbnQpXCI+XG5cdFx0XHQ8ZGl2ICpuZ0Zvcj1cImxldCBpdGVtIG9mIGdldE1vZGVsKCkuc3RlcHM7IGxldCBpID0gaW5kZXg7XCIgW2NsYXNzXT1cImdldENsYXNzTmFtZShpKVwiPlxuXHRcdFx0XHQ8cGh4LWNvbXBvbmVudC13cmFwcGVyIFtjbGFzcy5hY3RpdmVdPVwiaXNTdGVwU2VsZWN0ZWQoaSlcIiBbdHlwZV09XCJpdGVtLmNvbXBvbmVudFR5cGVcIlxuXHRcdFx0XHRcdFtkYXRhXT1cImdldERhdGEoKVwiIFttb2RlbF09XCJpdGVtLmNvbXBvbmVudE1vZGVsXCIgW2RhdGFQYXJlbnRdPVwidGhpc1wiIFtoYW5kbGVyXT1cImdldFN0ZXBzQ29tcG9uZW50SGFuZGxlcigpXCI+XG5cdFx0XHRcdDwvcGh4LWNvbXBvbmVudC13cmFwcGVyPlxuXHRcdFx0PC9kaXY+XG5cdDwvZGl2PlxuPC9kaXY+XG5gLFxufSlcclxuXHJcbmV4cG9ydCBjbGFzcyBTY3JvbGxXaXphcmRQYW5lIGV4dGVuZHMgQWJzdHJhY3RXaXphcmRQYW5lIGltcGxlbWVudHMgT25Jbml0LCBJSGFzTW9kZWwsIElDaGFuZ2VhYmxlIHtcclxuXHJcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBUWVBFX05BTUU6IHN0cmluZyA9IFRZUEVfTkFNRTtcclxuXHJcbiAgcHJpdmF0ZSBkZWxheVNjcm9sbFRpbWVyOiBhbnk7XHJcbiAgcHJpdmF0ZSBkZWxheVNjcm9sbENsaWNrVGltZXI6IGFueTtcclxuICBwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyO1xuXG4gIHByaXZhdGUgY2xhc3NOYW1lOiBzdHJpbmcgPSBDTEFTU19OQU1FO1xuXG4gIGNvbnN0cnVjdG9yKGFwcFN2YzogUGhsb3hBcHBTZXJ2aWNlLCBzYW5pdGl6ZXI6IERvbVNhbml0aXplciwgZWxlbWVudFJlZjogRWxlbWVudFJlZikge1xyXG4gICAgc3VwZXIoYXBwU3ZjLCBlbGVtZW50UmVmKTtcclxuXHJcbiAgICB0aGlzLnNhbml0aXplciA9IHNhbml0aXplcjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcbiAgfVxyXG5cbiAgcHVibGljIG9uU2Nyb2xsKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kZWxheVNjcm9sbFRpbWVyICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLmRlbGF5U2Nyb2xsVGltZXIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5kZWxheVNjcm9sbFRpbWVyKTtcbiAgICAgIHRoaXMuZGVsYXlTY3JvbGxUaW1lciA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5kZWxheVNjcm9sbFRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBsZXQgYW5jaG9ySW5kZXg6IGFueSA9IHRoaXMuY3VycmVudFN0ZXA7XG4gICAgICBsZXQgc3RlcHNDb3VudDogbnVtYmVyID0gdGhpcy5nZXRNb2RlbCgpLnN0ZXBzLmxlbmd0aDtcbiAgICAgIGxldCBsYXN0SW5kZXg6IG51bWJlcjtcblxuICAgICAgaWYgKHN0ZXBzQ291bnQgPT09IDApIHtcbiAgICAgICAgbGFzdEluZGV4ID0gMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxhc3RJbmRleCA9IHRoaXMuZ2V0TW9kZWwoKS5zdGVwcy5sZW5ndGggLSAxO1xuICAgICAgfVxuXG4gICAgICBsZXQgcmlnaHREb206IGFueTtcblxuICAgICAgaWYgKHR5cGVvZiAkKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KS5maW5kKCcuc2Nyb2xsLXdpemFyZC1wYW5lJykgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGlmICh0eXBlb2YgJCh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCkuZmluZCgnLnNjcm9sbC13aXphcmQtcGFuZScpLmZpbmQoJy5yaWdodCcpICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHJpZ2h0RG9tID0gJCh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCkuZmluZCgnLnNjcm9sbC13aXphcmQtcGFuZScpLmZpbmQoJy5yaWdodCcpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBzdGVwc0NvdW50OyBpbmRleCsrKSB7XG4gICAgICAgIGxldCBjbGFzc05hbWVJbmRleDogYW55ID0gdGhpcy5jbGFzc05hbWUgKyBpbmRleDtcbiAgICAgICAgbGV0IGNsYXNzTmFtZURvbTogYW55O1xuXG4gICAgICAgIGlmIChyaWdodERvbSAhPT0gbnVsbCAmJiByaWdodERvbSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiAkKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KS5maW5kKCcuc2Nyb2xsLXdpemFyZC1wYW5lJykuZmluZCgnLnJpZ2h0JykuZmluZCgnLicgKyBjbGFzc05hbWVJbmRleCkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY2xhc3NOYW1lRG9tID0gJCh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCkuZmluZCgnLnNjcm9sbC13aXphcmQtcGFuZScpLmZpbmQoJy5yaWdodCcpLmZpbmQoJy4nICsgY2xhc3NOYW1lSW5kZXgpO1xuXG4gICAgICAgICAgICBpZiAocmlnaHREb20uc2Nyb2xsVG9wKCkgPT09IDApIHsgLy9zY3JvbGxpbmcgc3RhcnRcbiAgICAgICAgICAgICAgYW5jaG9ySW5kZXggPSAwO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKE1hdGguY2VpbChyaWdodERvbS5zY3JvbGxUb3AoKSArIHJpZ2h0RG9tLmlubmVySGVpZ2h0KCkpID49IHJpZ2h0RG9tWzBdLnNjcm9sbEhlaWdodCkgeyAvL3Njcm9sbGluZyBlbmRcbiAgICAgICAgICAgICAgYW5jaG9ySW5kZXggPSBsYXN0SW5kZXg7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoKHJpZ2h0RG9tLnNjcm9sbFRvcCgpICsgcmlnaHREb20ub2Zmc2V0KCkudG9wKSA+PSAocmlnaHREb20uc2Nyb2xsVG9wKCkgKyBjbGFzc05hbWVEb20ub2Zmc2V0KCkudG9wKSkgeyAvLyBmaW5kIGluZGV4IG9mIHN0ZXBNZW51ICBzY3JvbGxpbmdcbiAgICAgICAgICAgICAgYW5jaG9ySW5kZXggPSBpbmRleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5jdXJyZW50U3RlcCA9IGFuY2hvckluZGV4O1xuXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH0sIDUwKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDbGFzc05hbWUoaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY2xhc3NOYW1lICsgaW5kZXg7XG4gIH1cblxuICBwdWJsaWMgc2hvd1N0ZXBDb250ZW50KGluZGV4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmRlbGF5U2Nyb2xsQ2xpY2tUaW1lciAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5kZWxheVNjcm9sbENsaWNrVGltZXIgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLmRlbGF5U2Nyb2xsQ2xpY2tUaW1lcik7XHJcbiAgICAgIHRoaXMuZGVsYXlTY3JvbGxDbGlja1RpbWVyID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgcmlnaHREb206IGFueTtcclxuICAgIGxldCBjbGFzc05hbWVJbmRleDogYW55ID0gdGhpcy5jbGFzc05hbWUgKyBpbmRleDtcclxuICAgIGxldCBjbGFzc05hbWVEb206IGFueTtcclxuXHJcbiAgICBpZiAodHlwZW9mICQodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpLmZpbmQoJy5zY3JvbGwtd2l6YXJkLXBhbmUnKSAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgaWYgKHR5cGVvZiAkKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KS5maW5kKCcuc2Nyb2xsLXdpemFyZC1wYW5lJykuZmluZCgnLnJpZ2h0JykgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgcmlnaHREb20gPSAkKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KS5maW5kKCcuc2Nyb2xsLXdpemFyZC1wYW5lJykuZmluZCgnLnJpZ2h0Jyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodHlwZW9mICQodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpLmZpbmQoJy5zY3JvbGwtd2l6YXJkLXBhbmUnKS5maW5kKCcucmlnaHQnKS5maW5kKCcuJyArIGNsYXNzTmFtZUluZGV4KSAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgY2xhc3NOYW1lRG9tID0gJCh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCkuZmluZCgnLnNjcm9sbC13aXphcmQtcGFuZScpLmZpbmQoJy5yaWdodCcpLmZpbmQoJy4nICsgY2xhc3NOYW1lSW5kZXgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZGVsYXlTY3JvbGxDbGlja1RpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGlmICgocmlnaHREb20gIT09IG51bGwgJiYgcmlnaHREb20gIT09IHVuZGVmaW5lZCkgJiYgKGNsYXNzTmFtZURvbSAhPT0gbnVsbCAmJiBjbGFzc05hbWVEb20gIT09IHVuZGVmaW5lZCkpIHtcclxuICAgICAgICBpZiAoKGNsYXNzTmFtZURvbS5vZmZzZXQoKSAhPT0gbnVsbCAmJiBjbGFzc05hbWVEb20ub2Zmc2V0KCkgIT09IHVuZGVmaW5lZCkgJiYgKHJpZ2h0RG9tLnNjcm9sbFRvcCgpICE9PSBudWxsICYmIHJpZ2h0RG9tLnNjcm9sbFRvcCgpICE9PSB1bmRlZmluZWQpKSB7XHJcbiAgICAgICAgICByaWdodERvbS5zdG9wKCkuYW5pbWF0ZSh7IHNjcm9sbFRvcDogKGNsYXNzTmFtZURvbS5vZmZzZXQoKS50b3AgLSByaWdodERvbS5vZmZzZXQoKS50b3AgKyByaWdodERvbS5zY3JvbGxUb3AoKSkgKyAwLjcgfSwgJ3Nsb3cnKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0sIDUpO1xyXG4gIH1cclxufVxyXG4iXX0=