mgx-circular-progress-bar
Version:
A library for circular progress bars components, an elegant way to rappresent your percentages.
128 lines (127 loc) • 15.7 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
import { Component, Input, ViewChild, ElementRef, TemplateRef } from '@angular/core';
var MgxCircularProgressBarComponent = /** @class */ (function () {
function MgxCircularProgressBarComponent() {
/* Data section */
this.total = 1;
this.barValue = 0;
this.percentage = 0;
this.diameter = 150;
this.color = '#3282b8';
this.bgColor = '#eee';
this.radius = 90;
this.mgxPrefix = 'mgx-circular-progress-bar';
this.percentual = 0;
this.context = { percentual: 0, $implicit: 0 };
}
/**
* @return {?}
*/
MgxCircularProgressBarComponent.prototype.ngOnChanges = /**
* @return {?}
*/
function () {
/** @type {?} */
var circle = this.circlePath.nativeElement;
/** @type {?} */
var len = 2 * Math.PI * this.radius;
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 {?}
*/
MgxCircularProgressBarComponent.prototype.showWarnings = /**
* @return {?}
*/
function () {
if (!this.percentage || isNaN(this.percentage)) {
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 {?}
*/
MgxCircularProgressBarComponent.prototype.getFontSize = /**
* @param {?=} reducer
* @return {?}
*/
function (reducer) {
if (reducer === void 0) { reducer = 1; }
return (this.fontSize || (this.diameter / 4)) / reducer + "px";
};
MgxCircularProgressBarComponent.decorators = [
{ type: Component, args: [{
selector: 'mgx-circular-progress-bar',
template: "\n <div class=\"contain\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" x=\"0\" y=\"0\" [ngStyle]=\"{'width.px': diameter, 'height.px': diameter }\" viewBox=\"0 0 200 200\">\n <circle id=\"base-circle\" [attr.stroke]=\"bgColor\" fill=\"none\" stroke-width=\"15\" cx=\"100\" cy=\"100\"\n [attr.r]=\"radius\" />\n <circle id=\"path\" #circlePath [attr.stroke]=\"color\" fill=\"none\" stroke-width=\"15\" cx=\"100\" cy=\"100\"\n [attr.r]=\"radius\" 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()\">\n {{percentual}}<span [style.font-size]=\"getFontSize(1.2)\">%</span>\n </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 */
MgxCircularProgressBarComponent.ctorParameters = function () { return []; };
MgxCircularProgressBarComponent.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 }],
circlePath: [{ type: ViewChild, args: ['circlePath',] }]
};
return MgxCircularProgressBarComponent;
}());
export { MgxCircularProgressBarComponent };
if (false) {
/** @type {?} */
MgxCircularProgressBarComponent.prototype.total;
/** @type {?} */
MgxCircularProgressBarComponent.prototype.barValue;
/** @type {?} */
MgxCircularProgressBarComponent.prototype.percentage;
/** @type {?} */
MgxCircularProgressBarComponent.prototype.contentTemplate;
/** @type {?} */
MgxCircularProgressBarComponent.prototype.diameter;
/** @type {?} */
MgxCircularProgressBarComponent.prototype.fontSize;
/** @type {?} */
MgxCircularProgressBarComponent.prototype.color;
/** @type {?} */
MgxCircularProgressBarComponent.prototype.bgColor;
/** @type {?} */
MgxCircularProgressBarComponent.prototype.radius;
/** @type {?} */
MgxCircularProgressBarComponent.prototype.mgxPrefix;
/** @type {?} */
MgxCircularProgressBarComponent.prototype.percentual;
/** @type {?} */
MgxCircularProgressBarComponent.prototype.context;
/** @type {?} */
MgxCircularProgressBarComponent.prototype.circlePath;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWd4LWNpcmN1bGFyLXByb2dyZXNzLWJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9tZ3gtY2lyY3VsYXItcHJvZ3Jlc3MtYmFyLyIsInNvdXJjZXMiOlsibGliL21neC1jaXJjdWxhci1wcm9ncmVzcy1iYXIvbWd4LWNpcmN1bGFyLXByb2dyZXNzLWJhci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFhLFNBQVMsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDOztJQWdEOUY7O3FCQWpCeUIsQ0FBQzt3QkFDRSxDQUFDOzBCQUNDLENBQUM7d0JBSUgsR0FBRztxQkFFTixTQUFTO3VCQUNQLE1BQU07c0JBQ1QsRUFBRTt5QkFDTiwyQkFBMkI7MEJBQzFCLENBQUM7dUJBQ1AsRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUU7S0FJN0I7Ozs7SUFFakIscURBQVc7OztJQUFYOztRQUNFLElBQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDOztRQUM3QyxJQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ3RDLE1BQU0sQ0FBQyxLQUFLLENBQUMsZUFBZSxHQUFHLEdBQUcsQ0FBQztRQUVuQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFcEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBRTNFLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUMxQixNQUFNLENBQUMsS0FBSyxDQUFDLGdCQUFnQixHQUFHLENBQUMsQ0FBQztZQUNsQyxJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztTQUN2QjtRQUFDLElBQUksQ0FBQyxDQUFDO1lBQ04sTUFBTSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsR0FBRyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztTQUNyRTtRQUVELElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDMUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztLQUUxQzs7OztJQUVPLHNEQUFZOzs7O1FBQ2xCLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMvQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDekIsT0FBTyxDQUFDLElBQUksQ0FBSSxJQUFJLENBQUMsU0FBUyxtQkFBYyxJQUFJLENBQUMsUUFBVSxDQUFDLENBQUM7YUFDOUQ7WUFBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzdCLE9BQU8sQ0FBQyxJQUFJLENBQUksSUFBSSxDQUFDLFNBQVMsZ0JBQVcsSUFBSSxDQUFDLEtBQU8sQ0FBQyxDQUFDO2FBQ3hEO1lBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQ3RDLE9BQU8sQ0FBQyxJQUFJLENBQUksSUFBSSxDQUFDLFNBQVMsbUJBQWMsSUFBSSxDQUFDLFFBQVEsNkJBQXdCLElBQUksQ0FBQyxLQUFPLENBQUMsQ0FBQzthQUNoRztTQUNGOzs7Ozs7SUFHSCxxREFBVzs7OztJQUFYLFVBQVksT0FBbUI7UUFBbkIsd0JBQUEsRUFBQSxXQUFtQjtRQUM3QixNQUFNLENBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sT0FBSSxDQUFDO0tBQ2hFOztnQkFwRkYsU0FBUyxTQUFDO29CQUNULFFBQVEsRUFBRSwyQkFBMkI7b0JBQ3JDLFFBQVEsRUFBRSwrbENBcUJMO29CQUNMLE1BQU0sRUFBRSxDQUFDLHlqQ0FBeWpDLENBQUM7aUJBQ3BrQzs7Ozs7d0JBSUUsS0FBSzsyQkFDTCxLQUFLOzZCQUNMLEtBQUs7a0NBR0wsS0FBSzsyQkFDTCxLQUFLOzJCQUNMLEtBQUs7d0JBQ0wsS0FBSzswQkFDTCxLQUFLOzZCQU1MLFNBQVMsU0FBQyxZQUFZOzswQ0E5Q3pCOztTQTRCYSwrQkFBK0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkNoYW5nZXMsIFZpZXdDaGlsZCwgRWxlbWVudFJlZiwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbWd4LWNpcmN1bGFyLXByb2dyZXNzLWJhcicsXG4gIHRlbXBsYXRlOiBgXG4gIDxkaXYgY2xhc3M9XCJjb250YWluXCI+XG4gICAgPHN2ZyAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHg9XCIwXCIgeT1cIjBcIiBbbmdTdHlsZV09XCJ7J3dpZHRoLnB4JzogZGlhbWV0ZXIsICdoZWlnaHQucHgnOiBkaWFtZXRlciB9XCIgdmlld0JveD1cIjAgMCAyMDAgMjAwXCI+XG4gICAgICAgIDxjaXJjbGUgaWQ9XCJiYXNlLWNpcmNsZVwiIFthdHRyLnN0cm9rZV09XCJiZ0NvbG9yXCIgZmlsbD1cIm5vbmVcIiBzdHJva2Utd2lkdGg9XCIxNVwiIGN4PVwiMTAwXCIgY3k9XCIxMDBcIlxuICAgICAgICAgICAgW2F0dHIucl09XCJyYWRpdXNcIiAvPlxuICAgICAgICA8Y2lyY2xlIGlkPVwicGF0aFwiICNjaXJjbGVQYXRoIFthdHRyLnN0cm9rZV09XCJjb2xvclwiIGZpbGw9XCJub25lXCIgc3Ryb2tlLXdpZHRoPVwiMTVcIiBjeD1cIjEwMFwiIGN5PVwiMTAwXCJcbiAgICAgICAgICAgIFthdHRyLnJdPVwicmFkaXVzXCIgcm90YXRlPVwiNTBcIiAvPlxuICAgIDwvc3ZnPlxuICAgIDxkaXYgY2xhc3M9XCJsYWJlbFwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29udGVudFRlbXBsYXRlOyBlbHNlIHByb2plY3RDb250ZW50XCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb250ZW50VGVtcGxhdGU7IGNvbnRleHQ6IGNvbnRleHRcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNwcm9qZWN0Q29udGVudD5cbiAgICAgICAgICAgIDxkaXYgI2NvbnRlbnRSZWY+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWNvbnRlbnRSZWY/LmNoaWxkTm9kZXM/Lmxlbmd0aFwiIFtzdHlsZS5mb250LXNpemVdPVwiZ2V0Rm9udFNpemUoKVwiPlxuICAgICAgICAgICAgICAgIHt7cGVyY2VudHVhbH19PHNwYW4gW3N0eWxlLmZvbnQtc2l6ZV09XCJnZXRGb250U2l6ZSgxLjIpXCI+JiMzNzs8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L2Rpdj5cbjwvZGl2PmAsXG4gIHN0eWxlczogW2AuY29udGFpbntkaXNwbGF5Oi13ZWJraXQtYm94O2Rpc3BsYXk6ZmxleDstd2Via2l0LWJveC1wYWNrOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOy13ZWJraXQtYm94LWFsaWduOmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7LXdlYmtpdC1ib3gtb3JpZW50OnZlcnRpY2FsOy13ZWJraXQtYm94LWRpcmVjdGlvbjpub3JtYWw7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2JveC1zaXppbmc6Ym9yZGVyLWJveDtwb3NpdGlvbjpyZWxhdGl2ZX0jcGF0aHt0cmFuc2Zvcm06cm90YXRlKC05MGRlZyk7LXdlYmtpdC10cmFuc2Zvcm06cm90YXRlKC05MGRlZyk7LW1zLXRyYW5zZm9ybTpyb3RhdGUoLTkwZGVnKTstbW96LXRyYW5zZm9ybTpyb3RhdGUoLTkwZGVnKTt0cmFuc2Zvcm0tb3JpZ2luOmNlbnRlciBjZW50ZXI7LXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOmNlbnRlciBjZW50ZXI7LW1zLXRyYW5zZm9ybS1vcmlnaW46Y2VudGVyIGNlbnRlcjstbW96LXRyYW5zZm9ybS1vcmlnaW46Y2VudGVyIGNlbnRlcjt0cmFuc2l0aW9uOnN0cm9rZS1kYXNob2Zmc2V0IC4zcyBlYXNlLWluLW91dDstd2Via2l0LXRyYW5zaXRpb246c3Ryb2tlLWRhc2hvZmZzZXQgLjNzIGVhc2UtaW4tb3V0Oy1tcy10cmFuc2l0aW9uOnN0cm9rZS1kYXNob2Zmc2V0IC4zcyBlYXNlLWluLW91dDstbW96LXRyYW5zaXRpb246c3Ryb2tlLWRhc2hvZmZzZXQgLjNzIGVhc2UtaW4tb3V0fSNwaWUtcGF0aHt0cmFuc2Zvcm06cm90YXRlKC05MGRlZyk7LXdlYmtpdC10cmFuc2Zvcm06cm90YXRlKC05MGRlZyk7LW1zLXRyYW5zZm9ybTpyb3RhdGUoLTkwZGVnKTstbW96LXRyYW5zZm9ybTpyb3RhdGUoLTkwZGVnKX0ubGFiZWx7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7cmlnaHQ6MDtib3R0b206MDtsZWZ0OjA7ZGlzcGxheTotd2Via2l0LWJveDtkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7LXdlYmtpdC1ib3gtcGFjazpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjstd2Via2l0LWJveC1hbGlnbjpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2ZvbnQtZmFtaWx5OktyZW9uIFZhcmlhYmxlRm9udDtjb2xvcjojN2Y4YzhkfWBdXG59KVxuZXhwb3J0IGNsYXNzIE1neENpcmN1bGFyUHJvZ3Jlc3NCYXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuXG4gIC8qIERhdGEgc2VjdGlvbiAqL1xuICBASW5wdXQoKSB0b3RhbDogbnVtYmVyID0gMTtcbiAgQElucHV0KCkgYmFyVmFsdWU6IG51bWJlciA9IDA7XG4gIEBJbnB1dCgpIHBlcmNlbnRhZ2U6IG51bWJlciA9IDA7XG5cbiAgLyogRGlzcGxheSBzZWN0aW9uICovXG4gIEBJbnB1dCgpIGNvbnRlbnRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgQElucHV0KCkgZGlhbWV0ZXI6IG51bWJlciA9IDE1MDtcbiAgQElucHV0KCkgZm9udFNpemU6IG51bWJlcjtcbiAgQElucHV0KCkgY29sb3I6IHN0cmluZyA9ICcjMzI4MmI4JztcbiAgQElucHV0KCkgYmdDb2xvcjogc3RyaW5nID0gJyNlZWUnO1xuICBwdWJsaWMgcmFkaXVzOiBudW1iZXIgPSA5MDtcbiAgcHJpdmF0ZSBtZ3hQcmVmaXggPSAnbWd4LWNpcmN1bGFyLXByb2dyZXNzLWJhcic7XG4gIHBlcmNlbnR1YWw6IG51bWJlciA9IDA7XG4gIGNvbnRleHQ6IGFueSA9IHsgcGVyY2VudHVhbDogMCwgJGltcGxpY2l0OiAwIH07XG5cbiAgQFZpZXdDaGlsZCgnY2lyY2xlUGF0aCcpIGNpcmNsZVBhdGg6IEVsZW1lbnRSZWY7XG5cbiAgY29uc3RydWN0b3IoKSB7IH1cblxuICBuZ09uQ2hhbmdlcygpIHtcbiAgICBjb25zdCBjaXJjbGUgPSB0aGlzLmNpcmNsZVBhdGgubmF0aXZlRWxlbWVudDtcbiAgICBjb25zdCBsZW4gPSAyICogTWF0aC5QSSAqIHRoaXMucmFkaXVzO1xuICAgIGNpcmNsZS5zdHlsZS5zdHJva2VEYXNoYXJyYXkgPSBsZW47XG5cbiAgICB0aGlzLnNob3dXYXJuaW5ncygpO1xuXG4gICAgdGhpcy5wZXJjZW50dWFsID0gK3RoaXMucGVyY2VudGFnZSB8fCAoK3RoaXMuYmFyVmFsdWUgLyArdGhpcy50b3RhbCkgKiAxMDA7XG5cbiAgICB0aGlzLnBlcmNlbnR1YWwgPSBpc05hTih0aGlzLnBlcmNlbnR1YWwpID8gMCA6ICt0aGlzLnBlcmNlbnR1YWwudG9GaXhlZCgyKTtcbiAgICBpZiAodGhpcy5wZXJjZW50dWFsID4gMTAwKSB7XG4gICAgICBjaXJjbGUuc3R5bGUuc3Ryb2tlRGFzaG9mZnNldCA9IDA7XG4gICAgICB0aGlzLnBlcmNlbnR1YWwgPSAxMDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNpcmNsZS5zdHlsZS5zdHJva2VEYXNob2Zmc2V0ID0gbGVuIC0gKHRoaXMucGVyY2VudHVhbCAvIDEwMCkgKiBsZW47XG4gICAgfVxuXG4gICAgdGhpcy5jb250ZXh0LnBlcmNlbnR1YWwgPSB0aGlzLnBlcmNlbnR1YWw7XG4gICAgdGhpcy5jb250ZXh0LiRpbXBsaWNpdCA9IHRoaXMucGVyY2VudHVhbDtcblxuICB9XG5cbiAgcHJpdmF0ZSBzaG93V2FybmluZ3MoKSB7XG4gICAgaWYgKCF0aGlzLnBlcmNlbnRhZ2UgfHwgaXNOYU4odGhpcy5wZXJjZW50YWdlKSkge1xuICAgICAgaWYgKGlzTmFOKHRoaXMuYmFyVmFsdWUpKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgJHt0aGlzLm1neFByZWZpeH0gYmFyVmFsdWU6ICR7dGhpcy5iYXJWYWx1ZX1gKTtcbiAgICAgIH0gZWxzZSBpZiAoaXNOYU4odGhpcy50b3RhbCkpIHtcbiAgICAgICAgY29uc29sZS53YXJuKGAke3RoaXMubWd4UHJlZml4fSB0b3RhbDogJHt0aGlzLnRvdGFsfWApO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmJhclZhbHVlID4gdGhpcy50b3RhbCkge1xuICAgICAgICBjb25zb2xlLndhcm4oYCR7dGhpcy5tZ3hQcmVmaXh9IGJhclZhbHVlOiAke3RoaXMuYmFyVmFsdWV9IGlzIG1vcmUgdGhhbiB0b3RhbDogJHt0aGlzLnRvdGFsfWApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldEZvbnRTaXplKHJlZHVjZXI6IG51bWJlciA9IDEpIHtcbiAgICByZXR1cm4gYCR7KHRoaXMuZm9udFNpemUgfHwgKHRoaXMuZGlhbWV0ZXIgLyA0KSkgLyByZWR1Y2VyfXB4YDtcbiAgfVxuXG59XG4iXX0=