UNPKG

ngx-pluto

Version:
189 lines 19 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Component, ViewEncapsulation, Input, ContentChildren, QueryList, ElementRef } from "@angular/core"; import { NpStep } from "./step"; /** * @ignore */ var NpStepperComponent = /** @class */ (function () { function NpStepperComponent(elemRef) { this.elemRef = elemRef; this._selectedIndex = 0; } Object.defineProperty(NpStepperComponent.prototype, "selectedIndex", { get: /** * @return {?} */ function () { return this._selectedIndex; }, set: /** * @param {?} index * @return {?} */ function (index) { /** @type {?} */ var idx = +index; if (idx < 0) { this._selectedIndex = 0; this.setStatus(idx); return; } if (this.steps && this.steps.length > 0 && idx > this.steps.length - 1) { this._selectedIndex = this.steps.length - 1; this.setStatus(idx); return; } this._selectedIndex = idx; this.setStatus(idx); }, enumerable: true, configurable: true }); /** * @return {?} */ NpStepperComponent.prototype.ngOnInit = /** * @return {?} */ function () { }; /** * @return {?} */ NpStepperComponent.prototype.ngAfterContentInit = /** * @return {?} */ function () { this.selectedIndex = this._selectedIndex; }; /** * @return {?} */ NpStepperComponent.prototype.ngAfterViewInit = /** * @return {?} */ function () { this.adjustStepHeaderTitlePosition(); }; // Adjust first and last step header title position // Adjust first and last step header title position /** * @private * @return {?} */ NpStepperComponent.prototype.adjustStepHeaderTitlePosition = // Adjust first and last step header title position /** * @private * @return {?} */ function () { /** @type {?} */ var progressContainer = (/** @type {?} */ (this.elemRef.nativeElement.querySelector('.progress-container'))); /** @type {?} */ var headerIcon = (/** @type {?} */ (this.elemRef.nativeElement.querySelector('.progress-circle-template'))); /** @type {?} */ var headerCircle = (/** @type {?} */ (this.elemRef.nativeElement.querySelector('.progress-circle'))); /** @type {?} */ var headerTitleFirst = (/** @type {?} */ (this.elemRef.nativeElement.querySelector('.step-title-first'))); /** @type {?} */ var headerTitleLast = (/** @type {?} */ (this.elemRef.nativeElement.querySelector('.step-title-last'))); if (progressContainer && (headerIcon || headerCircle) && headerTitleFirst && headerTitleLast) { /** @type {?} */ var progressContainerWidth = progressContainer.offsetWidth; /** @type {?} */ var headerWidth = headerIcon ? headerIcon.offsetWidth : headerCircle.offsetWidth; headerTitleFirst.style.marginLeft = '-' + Math.abs(progressContainerWidth - headerWidth) + 'px'; headerTitleLast.style.marginRight = '-' + Math.abs(progressContainerWidth - headerWidth) + 'px'; } }; /** * @return {?} */ NpStepperComponent.prototype.next = /** * @return {?} */ function () { this.selectedIndex = Math.min(this._selectedIndex + 1, this.steps.length - 1); }; /** * @return {?} */ NpStepperComponent.prototype.previous = /** * @return {?} */ function () { this.selectedIndex = Math.max(this._selectedIndex - 1, 0); }; /** * @return {?} */ NpStepperComponent.prototype.reset = /** * @return {?} */ function () { this.selectedIndex = 0; }; /** * @param {?} idx * @return {?} */ NpStepperComponent.prototype.setStatus = /** * @param {?} idx * @return {?} */ function (idx) { if (this.steps) { this.steps.toArray().forEach((/** * @param {?} v * @param {?} i * @return {?} */ function (v, i) { if (i < idx) { v.status = 'finish'; } if (i === idx) { v.status = 'process'; } if (i > idx) { v.status = 'wait'; } })); } }; NpStepperComponent.decorators = [ { type: Component, args: [{ selector: "np-stepper", template: "<div class=\"np-stepper-wrapper\">\r\n <!-- Step header -->\r\n <div class=\"flex-wrap row-flex\" style=\"align-items: center;\">\r\n <ng-container *ngFor=\"let step of steps; let i = index; let isFirst = first; let isLast = last;\">\r\n <div class=\"flex-wrap col-flex\" style=\"align-items: center;\">\r\n <div class=\"progress-container flex-wrap row-flex\">\r\n <!-- \u7B2C\u4E00\u6B65\u4E0D\u663E\u793A\u5DE6\u4FA7\u8FDE\u63A5\u7EBF -->\r\n <span class=\"progress-line\" *ngIf=\"!isFirst\"\r\n [ngClass]=\"{'progress-line-unselected': selectedIndex < i}\"></span>\r\n\r\n <!-- \u6839\u636Estep\u72B6\u6001\u548C\u662F\u5426\u6709\u81EA\u5B9A\u4E49\u5185\u5BB9\u663E\u793A -->\r\n\r\n <!-- wait\u7B49\u5F85\u4E2D -->\r\n <span *ngIf=\"step.status ==='wait'\" class=\"progress-circle\"\r\n [ngClass]=\"{'progress-circle-unselected': selectedIndex < i}\">\r\n </span>\r\n\r\n <!-- \u8FDB\u884C\u4E2D -->\r\n <ng-container *ngIf=\"step.status ==='process'\">\r\n <ng-container *ngIf=\"step.processContent\">\r\n <span class=\"progress-circle-template\" [ngClass]=\"{'progress-circle-unselected': selectedIndex < i}\">\r\n <ng-container *ngTemplateOutlet=\"step.processContent.template\"></ng-container>\r\n </span>\r\n </ng-container>\r\n <ng-container *ngIf=\"!step.processContent\">\r\n <span class=\"progress-circle\" [ngClass]=\"{'progress-circle-unselected': selectedIndex < i}\">\r\n </span>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <!-- \u5DF2\u5B8C\u6210 -->\r\n <ng-container *ngIf=\"step.status ==='finish'\">\r\n <ng-container *ngIf=\"step.finishContent\">\r\n <span class=\"progress-circle-template\" [ngClass]=\"{'progress-circle-unselected': selectedIndex < i}\">\r\n <ng-container *ngTemplateOutlet=\"step.finishContent.template\"></ng-container>\r\n </span>\r\n </ng-container>\r\n <ng-container *ngIf=\"!step.finishContent\">\r\n <span class=\"progress-circle\" [ngClass]=\"{'progress-circle-unselected': selectedIndex < i}\">\r\n </span>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <!-- \u6700\u540E\u4E00\u6B65\u4E0D\u663E\u793A\u53F3\u4FA7\u8FDE\u63A5\u7EBF -->\r\n <span class=\"progress-line\" *ngIf=\"!isLast\"\r\n [ngClass]=\"{'progress-line-unselected': selectedIndex < i}\"></span>\r\n </div>\r\n <div class=\"step-title\" *ngIf=\"!step.headerContent\"\r\n [ngClass]=\"{'step-title-first': isFirst, 'step-title-last': isLast, 'step-title-unselected': selectedIndex < i}\">\r\n {{ step.title }}\r\n </div>\r\n <div class=\"step-title\" *ngIf=\"step.headerContent\"\r\n [ngClass]=\"{'step-title-first': isFirst, 'step-title-last': isLast, 'step-title-unselected': selectedIndex < i}\">\r\n <ng-container *ngTemplateOutlet=\"step.headerContent.template\"></ng-container>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <!-- Step content -->\r\n <ng-container *ngFor=\"let step of steps; let i = index; let isFirst = first; let isLast = last;\">\r\n <div class=\"flex-wrap row-flex\" *ngIf=\"step.content && selectedIndex === i\">\r\n <ng-container *ngTemplateOutlet=\"step.content\"></ng-container>\r\n </div>\r\n </ng-container>\r\n</div>\r\n", encapsulation: ViewEncapsulation.None, styles: [".backdrop-transparent{opacity:0}.flex-wrap{display:flex}.wrap{flex-wrap:wrap}.col-flex{flex-direction:column}.row-flex{flex-direction:row}.middle-flex{justify-content:center;align-items:center}.space-between{justify-content:space-between;align-items:center}.align-center{align-items:center}.np-row{display:flex;flex-direction:row;flex-wrap:wrap;width:100%}.np-column{display:flex;flex-direction:column;flex-basis:100%;flex:1}.np-stepper-wrapper .progress-container{width:100%;min-width:100px;align-items:center;margin-bottom:5px}.np-stepper-wrapper .progress-container .progress-circle,.np-stepper-wrapper .progress-container .progress-circle-template{min-width:20px;min-height:20px;border-radius:50%;display:inline-block}.np-stepper-wrapper .progress-container .progress-circle img,.np-stepper-wrapper .progress-container .progress-circle-template img{width:40px;height:40px;display:block}.np-stepper-wrapper .progress-container .progress-line{width:auto;margin:auto;min-width:80px;height:3px}.np-stepper-wrapper .step-title-first,.np-stepper-wrapper .step-title-last{width:100%;max-width:100px;text-align:center}"] }] } ]; /** @nocollapse */ NpStepperComponent.ctorParameters = function () { return [ { type: ElementRef } ]; }; NpStepperComponent.propDecorators = { steps: [{ type: ContentChildren, args: [NpStep,] }], selectedIndex: [{ type: Input }] }; return NpStepperComponent; }()); export { NpStepperComponent }; if (false) { /** @type {?} */ NpStepperComponent.prototype.steps; /** * @type {?} * @private */ NpStepperComponent.prototype._selectedIndex; /** * @type {?} * @private */ NpStepperComponent.prototype.elemRef; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcHBlci5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1wbHV0by8iLCJzb3VyY2VzIjpbImxpYi9zdGVwcGVyL3N0ZXBwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQTJCLEtBQUssRUFBaUYsZUFBZSxFQUFFLFNBQVMsRUFBb0IsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXRPLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxRQUFRLENBQUM7Ozs7QUFLaEM7SUFnQ0UsNEJBQW9CLE9BQW1CO1FBQW5CLFlBQU8sR0FBUCxPQUFPLENBQVk7UUFyQi9CLG1CQUFjLEdBQUcsQ0FBQyxDQUFDO0lBcUJnQixDQUFDO0lBcEI1QyxzQkFBYSw2Q0FBYTs7OztRQUExQixjQUErQixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDOzs7OztRQUU1RCxVQUFrQixLQUFhOztnQkFDekIsR0FBRyxHQUFHLENBQUMsS0FBSztZQUNoQixJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUU7Z0JBQ1gsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3BCLE9BQU87YUFDUjtZQUVELElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDdEUsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7Z0JBQzVDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3BCLE9BQU87YUFDUjtZQUVELElBQUksQ0FBQyxjQUFjLEdBQUcsR0FBRyxDQUFDO1lBQzFCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdEIsQ0FBQzs7O09BbEIyRDs7OztJQXNCNUQscUNBQVE7OztJQUFSO0lBRUEsQ0FBQzs7OztJQUVELCtDQUFrQjs7O0lBQWxCO1FBQ0UsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQzNDLENBQUM7Ozs7SUFFRCw0Q0FBZTs7O0lBQWY7UUFDRSxJQUFJLENBQUMsNkJBQTZCLEVBQUUsQ0FBQztJQUN2QyxDQUFDO0lBRUQsbURBQW1EOzs7Ozs7SUFDM0MsMERBQTZCOzs7Ozs7SUFBckM7O1lBQ00saUJBQWlCLEdBQUcsbUJBQUEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLHFCQUFxQixDQUFDLEVBQWU7O1lBQ2xHLFVBQVUsR0FBRyxtQkFBQSxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsMkJBQTJCLENBQUMsRUFBZTs7WUFDakcsWUFBWSxHQUFHLG1CQUFBLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFlOztZQUMxRixnQkFBZ0IsR0FBRyxtQkFBQSxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsbUJBQW1CLENBQUMsRUFBZTs7WUFDL0YsZUFBZSxHQUFHLG1CQUFBLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFlO1FBRWpHLElBQUksaUJBQWlCLElBQUksQ0FBQyxVQUFVLElBQUksWUFBWSxDQUFDLElBQUksZ0JBQWdCLElBQUksZUFBZSxFQUFFOztnQkFDeEYsc0JBQXNCLEdBQUcsaUJBQWlCLENBQUMsV0FBVzs7Z0JBQ3RELFdBQVcsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxXQUFXO1lBQ2hGLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsc0JBQXNCLEdBQUcsV0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDO1lBQ2hHLGVBQWUsQ0FBQyxLQUFLLENBQUMsV0FBVyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLHNCQUFzQixHQUFHLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQztTQUNqRztJQUNILENBQUM7Ozs7SUFFRCxpQ0FBSTs7O0lBQUo7UUFDRSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDaEYsQ0FBQzs7OztJQUVELHFDQUFROzs7SUFBUjtRQUNFLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM1RCxDQUFDOzs7O0lBRUQsa0NBQUs7OztJQUFMO1FBQ0UsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUM7SUFDekIsQ0FBQzs7Ozs7SUFFRCxzQ0FBUzs7OztJQUFULFVBQVUsR0FBRztRQUNYLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNkLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTzs7Ozs7WUFBQyxVQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNoQyxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUU7b0JBQ1gsQ0FBQyxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUM7aUJBQ3JCO2dCQUNELElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRTtvQkFDYixDQUFDLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQztpQkFDdEI7Z0JBQ0QsSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFO29CQUNYLENBQUMsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO2lCQUNuQjtZQUNILENBQUMsRUFBQyxDQUFBO1NBQ0g7SUFDSCxDQUFDOztnQkF4RkYsU0FBUyxTQUFDO29CQUNULFFBQVEsRUFBRSxZQUFZO29CQUN0Qix1Z0hBQTJCO29CQUUzQixhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTs7aUJBQ3RDOzs7O2dCQVptTSxVQUFVOzs7d0JBZ0IzTSxlQUFlLFNBQUMsTUFBTTtnQ0FHdEIsS0FBSzs7SUE2RVIseUJBQUM7Q0FBQSxBQXpGRCxJQXlGQztTQWxGWSxrQkFBa0I7OztJQUU3QixtQ0FBa0Q7Ozs7O0lBRWxELDRDQUEyQjs7Ozs7SUFxQmYscUNBQTJCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBWaWV3RW5jYXBzdWxhdGlvbiwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIElucHV0LCBPbkluaXQsIGZvcndhcmRSZWYsIENoYW5nZURldGVjdG9yUmVmLCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMsIEhvc3RMaXN0ZW5lciwgQ29udGVudENoaWxkcmVuLCBRdWVyeUxpc3QsIEFmdGVyQ29udGVudEluaXQsIEVsZW1lbnRSZWYgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBOR19WQUxVRV9BQ0NFU1NPUiwgTkdfVkFMSURBVE9SUywgQ29udHJvbFZhbHVlQWNjZXNzb3IsIFZhbGlkYXRvciwgVmFsaWRhdGlvbkVycm9ycywgQWJzdHJhY3RDb250cm9sIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7IE5wU3RlcCB9IGZyb20gXCIuL3N0ZXBcIjtcclxuXHJcbi8qKlxyXG4gKiBAaWdub3JlXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogYG5wLXN0ZXBwZXJgLFxyXG4gIHRlbXBsYXRlVXJsOiAnc3RlcHBlci5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnc3RlcHBlci5zY3NzJ10sXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIE5wU3RlcHBlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJDb250ZW50SW5pdCB7XHJcblxyXG4gIEBDb250ZW50Q2hpbGRyZW4oTnBTdGVwKSBzdGVwczogUXVlcnlMaXN0PE5wU3RlcD47XHJcblxyXG4gIHByaXZhdGUgX3NlbGVjdGVkSW5kZXggPSAwO1xyXG4gIEBJbnB1dCgpIGdldCBzZWxlY3RlZEluZGV4KCkgeyByZXR1cm4gdGhpcy5fc2VsZWN0ZWRJbmRleDsgfVxyXG5cclxuICBzZXQgc2VsZWN0ZWRJbmRleChpbmRleDogbnVtYmVyKSB7XHJcbiAgICBsZXQgaWR4ID0gK2luZGV4O1xyXG4gICAgaWYgKGlkeCA8IDApIHtcclxuICAgICAgdGhpcy5fc2VsZWN0ZWRJbmRleCA9IDA7XHJcbiAgICAgIHRoaXMuc2V0U3RhdHVzKGlkeCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zdGVwcyAmJiB0aGlzLnN0ZXBzLmxlbmd0aCA+IDAgJiYgaWR4ID4gdGhpcy5zdGVwcy5sZW5ndGggLSAxKSB7XHJcbiAgICAgIHRoaXMuX3NlbGVjdGVkSW5kZXggPSB0aGlzLnN0ZXBzLmxlbmd0aCAtIDE7XHJcbiAgICAgIHRoaXMuc2V0U3RhdHVzKGlkeCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9zZWxlY3RlZEluZGV4ID0gaWR4O1xyXG4gICAgdGhpcy5zZXRTdGF0dXMoaWR4KTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZWxlbVJlZjogRWxlbWVudFJlZikgeyB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG5cclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IHRoaXMuX3NlbGVjdGVkSW5kZXg7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmFkanVzdFN0ZXBIZWFkZXJUaXRsZVBvc2l0aW9uKCk7XHJcbiAgfVxyXG5cclxuICAvLyBBZGp1c3QgZmlyc3QgYW5kIGxhc3Qgc3RlcCBoZWFkZXIgdGl0bGUgcG9zaXRpb25cclxuICBwcml2YXRlIGFkanVzdFN0ZXBIZWFkZXJUaXRsZVBvc2l0aW9uKCkge1xyXG4gICAgbGV0IHByb2dyZXNzQ29udGFpbmVyID0gdGhpcy5lbGVtUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLnByb2dyZXNzLWNvbnRhaW5lcicpIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgbGV0IGhlYWRlckljb24gPSB0aGlzLmVsZW1SZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcucHJvZ3Jlc3MtY2lyY2xlLXRlbXBsYXRlJykgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICBsZXQgaGVhZGVyQ2lyY2xlID0gdGhpcy5lbGVtUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLnByb2dyZXNzLWNpcmNsZScpIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgbGV0IGhlYWRlclRpdGxlRmlyc3QgPSB0aGlzLmVsZW1SZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuc3RlcC10aXRsZS1maXJzdCcpIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgbGV0IGhlYWRlclRpdGxlTGFzdCA9IHRoaXMuZWxlbVJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5zdGVwLXRpdGxlLWxhc3QnKSBhcyBIVE1MRWxlbWVudDtcclxuXHJcbiAgICBpZiAocHJvZ3Jlc3NDb250YWluZXIgJiYgKGhlYWRlckljb24gfHwgaGVhZGVyQ2lyY2xlKSAmJiBoZWFkZXJUaXRsZUZpcnN0ICYmIGhlYWRlclRpdGxlTGFzdCkge1xyXG4gICAgICBsZXQgcHJvZ3Jlc3NDb250YWluZXJXaWR0aCA9IHByb2dyZXNzQ29udGFpbmVyLm9mZnNldFdpZHRoO1xyXG4gICAgICBsZXQgaGVhZGVyV2lkdGggPSBoZWFkZXJJY29uID8gaGVhZGVySWNvbi5vZmZzZXRXaWR0aCA6IGhlYWRlckNpcmNsZS5vZmZzZXRXaWR0aDtcclxuICAgICAgaGVhZGVyVGl0bGVGaXJzdC5zdHlsZS5tYXJnaW5MZWZ0ID0gJy0nICsgTWF0aC5hYnMocHJvZ3Jlc3NDb250YWluZXJXaWR0aCAtIGhlYWRlcldpZHRoKSArICdweCc7XHJcbiAgICAgIGhlYWRlclRpdGxlTGFzdC5zdHlsZS5tYXJnaW5SaWdodCA9ICctJyArIE1hdGguYWJzKHByb2dyZXNzQ29udGFpbmVyV2lkdGggLSBoZWFkZXJXaWR0aCkgKyAncHgnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmV4dCgpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IE1hdGgubWluKHRoaXMuX3NlbGVjdGVkSW5kZXggKyAxLCB0aGlzLnN0ZXBzLmxlbmd0aCAtIDEpO1xyXG4gIH1cclxuXHJcbiAgcHJldmlvdXMoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSBNYXRoLm1heCh0aGlzLl9zZWxlY3RlZEluZGV4IC0gMSwgMCk7XHJcbiAgfVxyXG5cclxuICByZXNldCgpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IDA7XHJcbiAgfVxyXG5cclxuICBzZXRTdGF0dXMoaWR4KSB7XHJcbiAgICBpZiAodGhpcy5zdGVwcykge1xyXG4gICAgICB0aGlzLnN0ZXBzLnRvQXJyYXkoKS5mb3JFYWNoKCh2LCBpKSA9PiB7XHJcbiAgICAgICAgaWYgKGkgPCBpZHgpIHtcclxuICAgICAgICAgIHYuc3RhdHVzID0gJ2ZpbmlzaCc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpID09PSBpZHgpIHtcclxuICAgICAgICAgIHYuc3RhdHVzID0gJ3Byb2Nlc3MnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaSA+IGlkeCkge1xyXG4gICAgICAgICAgdi5zdGF0dXMgPSAnd2FpdCc7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuXHJcbiJdfQ==