UNPKG

mgx-circular-progress-bar

Version:

A library for circular progress bars components, an elegant way to rappresent your percentages.

132 lines (131 loc) 16 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ import { Component, Input, ViewChild, ElementRef, TemplateRef } from '@angular/core'; var MgxCircularProgressFullBarComponent = /** @class */ (function () { function MgxCircularProgressFullBarComponent() { this.total = 1; this.barValue = 0; this.percentage = 0; this.diameter = 150; this.color = '#3282b8'; this.bgColor = '#eee'; this.contentSize = 83; this.pathPosition = 90; this.mgxPrefix = 'mgx-circular-progress-full-bar'; this.percentual = 0; this.context = { percentual: 0, $implicit: 0 }; } /** * @return {?} */ MgxCircularProgressFullBarComponent.prototype.ngOnChanges = /** * @return {?} */ function () { /** @type {?} */ var circle = this.circlePath.nativeElement; /** @type {?} */ var len = 2 * Math.PI * this.pathPosition; circle.style.strokeDasharray = len; this.showWarnings(); this.percentual = +this.percentage || (+this.barValue / +this.total) * 100; this.percentual = isNaN(this.percentual) ? 0 : +this.percentual.toFixed(2); if (this.percentual > 100) { circle.style.strokeDashoffset = 0; this.percentual = 100; } else { circle.style.strokeDashoffset = len - (this.percentual / 100) * len; } this.context.percentual = this.percentual; this.context.$implicit = this.percentual; }; /** * @return {?} */ MgxCircularProgressFullBarComponent.prototype.showWarnings = /** * @return {?} */ function () { if (!this.percentual || isNaN(this.percentual)) { if (isNaN(this.barValue)) { console.warn(this.mgxPrefix + " barValue: " + this.barValue); } else if (isNaN(this.total)) { console.warn(this.mgxPrefix + " total: " + this.total); } else if (this.barValue > this.total) { console.warn(this.mgxPrefix + " barValue: " + this.barValue + " is more than total: " + this.total); } } }; /** * @param {?=} reducer * @return {?} */ MgxCircularProgressFullBarComponent.prototype.getFontSize = /** * @param {?=} reducer * @return {?} */ function (reducer) { if (reducer === void 0) { reducer = 1; } return (this.fontSize || (this.diameter / 4)) / reducer + "px"; }; MgxCircularProgressFullBarComponent.decorators = [ { type: Component, args: [{ selector: 'mgx-circular-progress-full-bar', template: "<div class=\"contain\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" x=\"0\" y=\"0\" [ngStyle]=\"{'width.px': diameter, 'height.px': diameter }\"\n viewBox=\"0 0 200 200\">\n <circle id=\"base-circle\" [attr.fill]=\"bgColor\" stroke-width=\"15\" cx=\"100\" cy=\"100\" [attr.r]=\"contentSize\" />\n <circle id=\"path\" #circlePath [attr.stroke]=\"color\" fill=\"none\" stroke-width=\"15\" cx=\"100\" cy=\"100\"\n [attr.r]=\"pathPosition\" rotate=\"50\" />\n </svg>\n <div class=\"label\">\n <ng-container *ngIf=\"contentTemplate; else projectContent\">\n <ng-template *ngTemplateOutlet=\"contentTemplate; context: context\"></ng-template>\n </ng-container>\n <ng-template #projectContent>\n <div #contentRef>\n <ng-content></ng-content>\n </div>\n <div *ngIf=\"!contentRef?.childNodes?.length\" [style.font-size]=\"getFontSize()\">{{percentual}}<span\n [style.font-size]=\"getFontSize(1.2)\">&#37;</span></div>\n </ng-template>\n </div>\n</div>", styles: [".contain{display:-webkit-box;display:flex;-webkit-box-pack:center;justify-content:center;-webkit-box-align:center;align-items:center;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;box-sizing:border-box;position:relative}#path{transform:rotate(-90deg);-webkit-transform:rotate(-90deg);-ms-transform:rotate(-90deg);-moz-transform:rotate(-90deg);transform-origin:center center;-webkit-transform-origin:center center;-ms-transform-origin:center center;-moz-transform-origin:center center;transition:stroke-dashoffset .3s ease-in-out;-webkit-transition:stroke-dashoffset .3s ease-in-out;-ms-transition:stroke-dashoffset .3s ease-in-out;-moz-transition:stroke-dashoffset .3s ease-in-out}#pie-path{transform:rotate(-90deg);-webkit-transform:rotate(-90deg);-ms-transform:rotate(-90deg);-moz-transform:rotate(-90deg)}.label{position:absolute;top:0;right:0;bottom:0;left:0;display:-webkit-box;display:flex;flex-wrap:wrap;-webkit-box-pack:center;justify-content:center;-webkit-box-align:center;align-items:center;font-family:Kreon VariableFont;color:#7f8c8d}"] },] }, ]; /** @nocollapse */ MgxCircularProgressFullBarComponent.ctorParameters = function () { return []; }; MgxCircularProgressFullBarComponent.propDecorators = { total: [{ type: Input }], barValue: [{ type: Input }], percentage: [{ type: Input }], contentTemplate: [{ type: Input }], diameter: [{ type: Input }], fontSize: [{ type: Input }], color: [{ type: Input }], bgColor: [{ type: Input }], contentSize: [{ type: Input }], pathPosition: [{ type: Input }], circlePath: [{ type: ViewChild, args: ['circlePath',] }] }; return MgxCircularProgressFullBarComponent; }()); export { MgxCircularProgressFullBarComponent }; if (false) { /** @type {?} */ MgxCircularProgressFullBarComponent.prototype.total; /** @type {?} */ MgxCircularProgressFullBarComponent.prototype.barValue; /** @type {?} */ MgxCircularProgressFullBarComponent.prototype.percentage; /** @type {?} */ MgxCircularProgressFullBarComponent.prototype.contentTemplate; /** @type {?} */ MgxCircularProgressFullBarComponent.prototype.diameter; /** @type {?} */ MgxCircularProgressFullBarComponent.prototype.fontSize; /** @type {?} */ MgxCircularProgressFullBarComponent.prototype.color; /** @type {?} */ MgxCircularProgressFullBarComponent.prototype.bgColor; /** @type {?} */ MgxCircularProgressFullBarComponent.prototype.contentSize; /** @type {?} */ MgxCircularProgressFullBarComponent.prototype.pathPosition; /** @type {?} */ MgxCircularProgressFullBarComponent.prototype.circlePath; /** @type {?} */ MgxCircularProgressFullBarComponent.prototype.mgxPrefix; /** @type {?} */ MgxCircularProgressFullBarComponent.prototype.percentual; /** @type {?} */ MgxCircularProgressFullBarComponent.prototype.context; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWd4LWNpcmN1bGFyLXByb2dyZXNzLWZ1bGwtYmFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL21neC1jaXJjdWxhci1wcm9ncmVzcy1iYXIvIiwic291cmNlcyI6WyJsaWIvbWd4LWNpcmN1bGFyLXByb2dyZXNzLWZ1bGwtYmFyL21neC1jaXJjdWxhci1wcm9ncmVzcy1mdWxsLWJhci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFhLFNBQVMsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDOztJQThDOUY7cUJBbEJ5QixDQUFDO3dCQUNFLENBQUM7MEJBQ0MsQ0FBQzt3QkFJSCxHQUFHO3FCQUVOLFNBQVM7dUJBQ1AsTUFBTTsyQkFDRixFQUFFOzRCQUNELEVBQUU7eUJBR2QsZ0NBQWdDOzBCQUMvQixDQUFDO3VCQUNQLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFO0tBRTdCOzs7O0lBRWpCLHlEQUFXOzs7SUFBWDs7UUFDRSxJQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQzs7UUFDN0MsSUFBTSxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztRQUM1QyxNQUFNLENBQUMsS0FBSyxDQUFDLGVBQWUsR0FBRyxHQUFHLENBQUM7UUFFbkMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRXBCLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUUzRSxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUUzRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDMUIsTUFBTSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7WUFDbEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7U0FDdkI7UUFBQyxJQUFJLENBQUMsQ0FBQztZQUNOLE1BQU0sQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEdBQUcsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7U0FDckU7UUFFRCxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQzFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7S0FFMUM7Ozs7SUFFTywwREFBWTs7OztRQUNsQixFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDL0MsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3pCLE9BQU8sQ0FBQyxJQUFJLENBQUksSUFBSSxDQUFDLFNBQVMsbUJBQWMsSUFBSSxDQUFDLFFBQVUsQ0FBQyxDQUFDO2FBQzlEO1lBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM3QixPQUFPLENBQUMsSUFBSSxDQUFJLElBQUksQ0FBQyxTQUFTLGdCQUFXLElBQUksQ0FBQyxLQUFPLENBQUMsQ0FBQzthQUN4RDtZQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUN0QyxPQUFPLENBQUMsSUFBSSxDQUFJLElBQUksQ0FBQyxTQUFTLG1CQUFjLElBQUksQ0FBQyxRQUFRLDZCQUF3QixJQUFJLENBQUMsS0FBTyxDQUFDLENBQUM7YUFDaEc7U0FDRjs7Ozs7O0lBR0gseURBQVc7Ozs7SUFBWCxVQUFZLE9BQW1CO1FBQW5CLHdCQUFBLEVBQUEsV0FBbUI7UUFDN0IsTUFBTSxDQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLE9BQUksQ0FBQztLQUNoRTs7Z0JBbkZGLFNBQVMsU0FBQztvQkFDVCxRQUFRLEVBQUUsZ0NBQWdDO29CQUMxQyxRQUFRLEVBQUUsc2tDQW1CTDtvQkFDTCxNQUFNLEVBQUUsQ0FBQyx5akNBQXlqQyxDQUFDO2lCQUNwa0M7Ozs7O3dCQUdFLEtBQUs7MkJBQ0wsS0FBSzs2QkFDTCxLQUFLO2tDQUdMLEtBQUs7MkJBQ0wsS0FBSzsyQkFDTCxLQUFLO3dCQUNMLEtBQUs7MEJBQ0wsS0FBSzs4QkFDTCxLQUFLOytCQUNMLEtBQUs7NkJBQ0wsU0FBUyxTQUFDLFlBQVk7OzhDQXhDekI7O1NBMEJhLG1DQUFtQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uQ2hhbmdlcywgVmlld0NoaWxkLCBFbGVtZW50UmVmLCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtZ3gtY2lyY3VsYXItcHJvZ3Jlc3MtZnVsbC1iYXInLFxuICB0ZW1wbGF0ZTogYDxkaXYgY2xhc3M9XCJjb250YWluXCI+XG4gICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgeD1cIjBcIiB5PVwiMFwiIFtuZ1N0eWxlXT1cInsnd2lkdGgucHgnOiBkaWFtZXRlciwgJ2hlaWdodC5weCc6IGRpYW1ldGVyIH1cIlxuICAgICAgICB2aWV3Qm94PVwiMCAwIDIwMCAyMDBcIj5cbiAgICAgICAgPGNpcmNsZSBpZD1cImJhc2UtY2lyY2xlXCIgW2F0dHIuZmlsbF09XCJiZ0NvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMTVcIiBjeD1cIjEwMFwiIGN5PVwiMTAwXCIgW2F0dHIucl09XCJjb250ZW50U2l6ZVwiIC8+XG4gICAgICAgIDxjaXJjbGUgaWQ9XCJwYXRoXCIgI2NpcmNsZVBhdGggW2F0dHIuc3Ryb2tlXT1cImNvbG9yXCIgZmlsbD1cIm5vbmVcIiBzdHJva2Utd2lkdGg9XCIxNVwiIGN4PVwiMTAwXCIgY3k9XCIxMDBcIlxuICAgICAgICAgICAgW2F0dHIucl09XCJwYXRoUG9zaXRpb25cIiByb3RhdGU9XCI1MFwiIC8+XG4gICAgPC9zdmc+XG4gICAgPGRpdiBjbGFzcz1cImxhYmVsXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb250ZW50VGVtcGxhdGU7IGVsc2UgcHJvamVjdENvbnRlbnRcIj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdUZW1wbGF0ZU91dGxldD1cImNvbnRlbnRUZW1wbGF0ZTsgY29udGV4dDogY29udGV4dFwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctdGVtcGxhdGUgI3Byb2plY3RDb250ZW50PlxuICAgICAgICAgICAgPGRpdiAjY29udGVudFJlZj5cbiAgICAgICAgICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhY29udGVudFJlZj8uY2hpbGROb2Rlcz8ubGVuZ3RoXCIgW3N0eWxlLmZvbnQtc2l6ZV09XCJnZXRGb250U2l6ZSgpXCI+e3twZXJjZW50dWFsfX08c3BhblxuICAgICAgICAgICAgICAgICAgICBbc3R5bGUuZm9udC1zaXplXT1cImdldEZvbnRTaXplKDEuMilcIj4mIzM3Ozwvc3Bhbj48L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L2Rpdj5cbjwvZGl2PmAsXG4gIHN0eWxlczogW2AuY29udGFpbntkaXNwbGF5Oi13ZWJraXQtYm94O2Rpc3BsYXk6ZmxleDstd2Via2l0LWJveC1wYWNrOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOy13ZWJraXQtYm94LWFsaWduOmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7LXdlYmtpdC1ib3gtb3JpZW50OnZlcnRpY2FsOy13ZWJraXQtYm94LWRpcmVjdGlvbjpub3JtYWw7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2JveC1zaXppbmc6Ym9yZGVyLWJveDtwb3NpdGlvbjpyZWxhdGl2ZX0jcGF0aHt0cmFuc2Zvcm06cm90YXRlKC05MGRlZyk7LXdlYmtpdC10cmFuc2Zvcm06cm90YXRlKC05MGRlZyk7LW1zLXRyYW5zZm9ybTpyb3RhdGUoLTkwZGVnKTstbW96LXRyYW5zZm9ybTpyb3RhdGUoLTkwZGVnKTt0cmFuc2Zvcm0tb3JpZ2luOmNlbnRlciBjZW50ZXI7LXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOmNlbnRlciBjZW50ZXI7LW1zLXRyYW5zZm9ybS1vcmlnaW46Y2VudGVyIGNlbnRlcjstbW96LXRyYW5zZm9ybS1vcmlnaW46Y2VudGVyIGNlbnRlcjt0cmFuc2l0aW9uOnN0cm9rZS1kYXNob2Zmc2V0IC4zcyBlYXNlLWluLW91dDstd2Via2l0LXRyYW5zaXRpb246c3Ryb2tlLWRhc2hvZmZzZXQgLjNzIGVhc2UtaW4tb3V0Oy1tcy10cmFuc2l0aW9uOnN0cm9rZS1kYXNob2Zmc2V0IC4zcyBlYXNlLWluLW91dDstbW96LXRyYW5zaXRpb246c3Ryb2tlLWRhc2hvZmZzZXQgLjNzIGVhc2UtaW4tb3V0fSNwaWUtcGF0aHt0cmFuc2Zvcm06cm90YXRlKC05MGRlZyk7LXdlYmtpdC10cmFuc2Zvcm06cm90YXRlKC05MGRlZyk7LW1zLXRyYW5zZm9ybTpyb3RhdGUoLTkwZGVnKTstbW96LXRyYW5zZm9ybTpyb3RhdGUoLTkwZGVnKX0ubGFiZWx7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7cmlnaHQ6MDtib3R0b206MDtsZWZ0OjA7ZGlzcGxheTotd2Via2l0LWJveDtkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7LXdlYmtpdC1ib3gtcGFjazpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjstd2Via2l0LWJveC1hbGlnbjpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2ZvbnQtZmFtaWx5OktyZW9uIFZhcmlhYmxlRm9udDtjb2xvcjojN2Y4YzhkfWBdXG59KVxuZXhwb3J0IGNsYXNzIE1neENpcmN1bGFyUHJvZ3Jlc3NGdWxsQmFyQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcblxuICBASW5wdXQoKSB0b3RhbDogbnVtYmVyID0gMTtcbiAgQElucHV0KCkgYmFyVmFsdWU6IG51bWJlciA9IDA7XG4gIEBJbnB1dCgpIHBlcmNlbnRhZ2U6IG51bWJlciA9IDA7XG5cbiAgLyogRGlzcGxheSBzZWN0aW9uICovXG4gIEBJbnB1dCgpIGNvbnRlbnRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgQElucHV0KCkgZGlhbWV0ZXI6IG51bWJlciA9IDE1MDtcbiAgQElucHV0KCkgZm9udFNpemU6IG51bWJlcjtcbiAgQElucHV0KCkgY29sb3I6IHN0cmluZyA9ICcjMzI4MmI4JztcbiAgQElucHV0KCkgYmdDb2xvcjogc3RyaW5nID0gJyNlZWUnO1xuICBASW5wdXQoKSBjb250ZW50U2l6ZTogbnVtYmVyID0gODM7XG4gIEBJbnB1dCgpIHBhdGhQb3NpdGlvbjogbnVtYmVyID0gOTA7XG4gIEBWaWV3Q2hpbGQoJ2NpcmNsZVBhdGgnKSBjaXJjbGVQYXRoOiBFbGVtZW50UmVmO1xuXG4gIHByaXZhdGUgbWd4UHJlZml4ID0gJ21neC1jaXJjdWxhci1wcm9ncmVzcy1mdWxsLWJhcic7XG4gIHBlcmNlbnR1YWw6IG51bWJlciA9IDA7XG4gIGNvbnRleHQ6IGFueSA9IHsgcGVyY2VudHVhbDogMCwgJGltcGxpY2l0OiAwIH07XG5cbiAgY29uc3RydWN0b3IoKSB7IH1cblxuICBuZ09uQ2hhbmdlcygpIHtcbiAgICBjb25zdCBjaXJjbGUgPSB0aGlzLmNpcmNsZVBhdGgubmF0aXZlRWxlbWVudDtcbiAgICBjb25zdCBsZW4gPSAyICogTWF0aC5QSSAqIHRoaXMucGF0aFBvc2l0aW9uO1xuICAgIGNpcmNsZS5zdHlsZS5zdHJva2VEYXNoYXJyYXkgPSBsZW47XG5cbiAgICB0aGlzLnNob3dXYXJuaW5ncygpO1xuXG4gICAgdGhpcy5wZXJjZW50dWFsID0gK3RoaXMucGVyY2VudGFnZSB8fCAoK3RoaXMuYmFyVmFsdWUgLyArdGhpcy50b3RhbCkgKiAxMDA7XG5cbiAgICB0aGlzLnBlcmNlbnR1YWwgPSBpc05hTih0aGlzLnBlcmNlbnR1YWwpID8gMCA6ICt0aGlzLnBlcmNlbnR1YWwudG9GaXhlZCgyKTtcblxuICAgIGlmICh0aGlzLnBlcmNlbnR1YWwgPiAxMDApIHtcbiAgICAgIGNpcmNsZS5zdHlsZS5zdHJva2VEYXNob2Zmc2V0ID0gMDtcbiAgICAgIHRoaXMucGVyY2VudHVhbCA9IDEwMDtcbiAgICB9IGVsc2Uge1xuICAgICAgY2lyY2xlLnN0eWxlLnN0cm9rZURhc2hvZmZzZXQgPSBsZW4gLSAodGhpcy5wZXJjZW50dWFsIC8gMTAwKSAqIGxlbjtcbiAgICB9XG5cbiAgICB0aGlzLmNvbnRleHQucGVyY2VudHVhbCA9IHRoaXMucGVyY2VudHVhbDtcbiAgICB0aGlzLmNvbnRleHQuJGltcGxpY2l0ID0gdGhpcy5wZXJjZW50dWFsO1xuXG4gIH1cblxuICBwcml2YXRlIHNob3dXYXJuaW5ncygpIHtcbiAgICBpZiAoIXRoaXMucGVyY2VudHVhbCB8fCBpc05hTih0aGlzLnBlcmNlbnR1YWwpKSB7XG4gICAgICBpZiAoaXNOYU4odGhpcy5iYXJWYWx1ZSkpIHtcbiAgICAgICAgY29uc29sZS53YXJuKGAke3RoaXMubWd4UHJlZml4fSBiYXJWYWx1ZTogJHt0aGlzLmJhclZhbHVlfWApO1xuICAgICAgfSBlbHNlIGlmIChpc05hTih0aGlzLnRvdGFsKSkge1xuICAgICAgICBjb25zb2xlLndhcm4oYCR7dGhpcy5tZ3hQcmVmaXh9IHRvdGFsOiAke3RoaXMudG90YWx9YCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuYmFyVmFsdWUgPiB0aGlzLnRvdGFsKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgJHt0aGlzLm1neFByZWZpeH0gYmFyVmFsdWU6ICR7dGhpcy5iYXJWYWx1ZX0gaXMgbW9yZSB0aGFuIHRvdGFsOiAke3RoaXMudG90YWx9YCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0Rm9udFNpemUocmVkdWNlcjogbnVtYmVyID0gMSkge1xuICAgIHJldHVybiBgJHsodGhpcy5mb250U2l6ZSB8fCAodGhpcy5kaWFtZXRlciAvIDQpKSAvIHJlZHVjZXJ9cHhgO1xuICB9XG5cbn1cbiJdfQ==