UNPKG

ngx-beautiful-charts

Version:
199 lines 17.8 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Component, Input, ElementRef } from '@angular/core'; import { colorSchemes } from '../../constants/color-schemes'; import { BarChartService } from './bar-chart.service'; import { GlobalParametersService } from '../../global/global-parameters.service'; export class BarChartComponent { /** * @param {?} barChartService * @param {?} globalParametersService * @param {?} currentElement */ constructor(barChartService, globalParametersService, currentElement) { this.barChartService = barChartService; this.globalParametersService = globalParametersService; this.currentElement = currentElement; this.showGridLines = false; this.colorScheme = 'colorful'; this.customColorScheme = []; this.xPadding = 60; this.yPadding = this.xPadding / 2; } /** * @return {?} */ computeBarPaths() { this.barPaths = []; /** @type {?} */ const noOfXAxisValues = this.data.length; /** @type {?} */ const eachWidth = this.barChartService.rectWidth / noOfXAxisValues; /** @type {?} */ const barWidth = eachWidth * .25; /** @type {?} */ let cnt = -1; /** @type {?} */ let barPath = ''; for (const bcD of this.data) { cnt++; /** @type {?} */ const xPos = cnt * eachWidth + eachWidth / 2 + this.xPadding; /** @type {?} */ const yPos = this.barChartService.transformY(this.barChartService.maxY - bcD.value) + this.yPadding; /** @type {?} */ const xStart = xPos - barWidth / 2; /** @type {?} */ const xEnd = xPos + barWidth / 2; /** @type {?} */ const yStart = this.barChartService.rectHeight + this.yPadding; barPath = 'M '; barPath = barPath + ' ' + xStart + ' ' + yStart + ' L ' + xStart + ' ' + yPos + ' ' + xEnd + ' ' + yPos + ' ' + xEnd + ' ' + yStart + ' Z'; this.barPaths.push(barPath); } } /** * @return {?} */ setColor() { if (!this.color) { if (this.customColorScheme.length > 0) { this.color = this.customColorScheme[0]; } else { this.color = colorSchemes[this.colorScheme][0]; } } } /** * @return {?} */ setDimensions() { if (this.width && !this.height) this.height = this.width / 3; else if (!this.width && this.height) this.width = this.height * 3; else if (!this.width && !this.height) { /** @type {?} */ const host = this.currentElement.nativeElement; if (host.parentNode != null) { /** @type {?} */ const dims = host.parentNode.getBoundingClientRect(); this.width = dims.width; this.height = dims.width / 3; } } // console.log('---set dimensions---'); // console.log('width: ' + this.width); // console.log('height: ' + this.height); // console.log('--------------------'); } /** * @return {?} */ ngOnInit() { this.componentID = this.globalParametersService.addNewComponent(); // console.log('init..'); this.setDimensions(); this.dataCopy = JSON.parse(JSON.stringify(this.data)); this.barChartService.setValues({ componentID: this.componentID, width: this.width, height: this.height, xPadding: this.xPadding, yPadding: this.yPadding, data: this.data }); this.setColor(); // console.log(this.color); this.computeBarPaths(); } /** * @return {?} */ ngOnChanges() { this.dataCopy = JSON.parse(JSON.stringify(this.data)); this.barChartService.setValues({ componentID: this.componentID, width: this.width, height: this.height, xPadding: this.xPadding, yPadding: this.yPadding, data: this.data }); this.setColor(); // console.log(this.color); this.computeBarPaths(); } } BarChartComponent.decorators = [ { type: Component, args: [{ selector: 'ngx-bar-chart', template: "<svg [attr.width]=\"width\" [attr.height]=\"height\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\">\n\n <g ngx-bc-chart-base\n [showGridLines]=\"showGridLines\"\n [xAxisTitle]=\"xAxisTitle\" [yAxisTitle]=\"yAxisTitle\"\n />\n\n <g *ngFor=\"let barPath of barPaths\">\n <path class=\"chart-bar\"\n [attr.d]=\"barPath\" [attr.fill]=\"color\" />\n </g>\n\n</svg>", providers: [BarChartService], styles: [".chart-bar:hover{stroke-width:1;stroke:#444}"] }] } ]; /** @nocollapse */ BarChartComponent.ctorParameters = () => [ { type: BarChartService }, { type: GlobalParametersService }, { type: ElementRef } ]; BarChartComponent.propDecorators = { data: [{ type: Input }], width: [{ type: Input }], height: [{ type: Input }], xAxisTitle: [{ type: Input }], yAxisTitle: [{ type: Input }], showGridLines: [{ type: Input }], color: [{ type: Input }], colorScheme: [{ type: Input }], customColorScheme: [{ type: Input }] }; if (false) { /** @type {?} */ BarChartComponent.prototype.data; /** @type {?} */ BarChartComponent.prototype.width; /** @type {?} */ BarChartComponent.prototype.height; /** @type {?} */ BarChartComponent.prototype.xAxisTitle; /** @type {?} */ BarChartComponent.prototype.yAxisTitle; /** @type {?} */ BarChartComponent.prototype.showGridLines; /** @type {?} */ BarChartComponent.prototype.color; /** @type {?} */ BarChartComponent.prototype.colorScheme; /** @type {?} */ BarChartComponent.prototype.customColorScheme; /** @type {?} */ BarChartComponent.prototype.componentID; /** @type {?} */ BarChartComponent.prototype.xPadding; /** @type {?} */ BarChartComponent.prototype.yPadding; /** @type {?} */ BarChartComponent.prototype.barPaths; /** @type {?} */ BarChartComponent.prototype.dataCopy; /** @type {?} */ BarChartComponent.prototype.barChartService; /** * @type {?} * @private */ BarChartComponent.prototype.globalParametersService; /** * @type {?} * @private */ BarChartComponent.prototype.currentElement; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFyLWNoYXJ0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1iZWF1dGlmdWwtY2hhcnRzLyIsInNvdXJjZXMiOlsibGliL2Jhci1jaGFydC9iYXItY2hhcnQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBYSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzdELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQVFqRixNQUFNLE9BQU8saUJBQWlCOzs7Ozs7SUFtRDVCLFlBQW1CLGVBQWdDLEVBQy9CLHVCQUFnRCxFQUNoRCxjQUEwQjtRQUYzQixvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDL0IsNEJBQXVCLEdBQXZCLHVCQUF1QixDQUF5QjtRQUNoRCxtQkFBYyxHQUFkLGNBQWMsQ0FBWTtRQXJDckMsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFFdEIsZ0JBQVcsR0FBRyxVQUFVLENBQUM7UUFDekIsc0JBQWlCLEdBQWEsRUFBRSxDQUFDO1FBRzFDLGFBQVEsR0FBRyxFQUFFLENBQUM7UUFDZCxhQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7SUE4QnFCLENBQUM7Ozs7SUExQm5ELGVBQWU7UUFDYixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQzs7Y0FDYixlQUFlLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNOztjQUNsQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLEdBQUcsZUFBZTs7Y0FDNUQsUUFBUSxHQUFHLFNBQVMsR0FBRyxHQUFHOztZQUM1QixHQUFHLEdBQUcsQ0FBQyxDQUFDOztZQUNSLE9BQU8sR0FBRyxFQUFFO1FBQ2hCLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtZQUMzQixHQUFHLEVBQUcsQ0FBQzs7a0JBQ0QsSUFBSSxHQUFHLEdBQUcsR0FBRyxTQUFTLEdBQUcsU0FBUyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUTs7a0JBQ3RELElBQUksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVE7O2tCQUU3RixNQUFNLEdBQUcsSUFBSSxHQUFHLFFBQVEsR0FBRyxDQUFDOztrQkFDNUIsSUFBSSxHQUFHLElBQUksR0FBRyxRQUFRLEdBQUcsQ0FBQzs7a0JBQzFCLE1BQU0sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUTtZQUM5RCxPQUFPLEdBQUcsSUFBSSxDQUFDO1lBQ2YsT0FBTyxHQUFHLE9BQU8sR0FBRyxHQUFHLEdBQUcsTUFBTSxHQUFHLEdBQUcsR0FBRyxNQUFNLEdBQUcsS0FBSyxHQUFHLE1BQU07a0JBQzlELEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUM7WUFFMUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDN0I7SUFFSCxDQUFDOzs7O0lBTUQsUUFBUTtRQUNOLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ2YsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDckMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDeEM7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLEtBQUssR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2hEO1NBQ0Y7SUFDSCxDQUFDOzs7O0lBRUQsYUFBYTtRQUNYLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNO1lBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQzthQUN4RCxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTTtZQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7YUFDN0QsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFOztrQkFDOUIsSUFBSSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYTtZQUM5QyxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxFQUFFOztzQkFDckIsSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMscUJBQXFCLEVBQUU7Z0JBQ3BELElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztnQkFDeEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQzthQUM5QjtTQUNGO1FBQ0QsdUNBQXVDO1FBQ3ZDLHVDQUF1QztRQUN2Qyx5Q0FBeUM7UUFDekMsdUNBQXVDO0lBQ3pDLENBQUM7Ozs7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDbEUseUJBQXlCO1FBQ3pCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQztZQUM3QixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7WUFDN0IsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO1lBQ2pCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtZQUNuQixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDdkIsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQ3ZCLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtTQUNoQixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDaEIsMkJBQTJCO1FBQzNCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUN6QixDQUFDOzs7O0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDO1lBQzdCLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztZQUM3QixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7WUFDakIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN2QixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDdkIsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1NBQ2hCLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNoQiwyQkFBMkI7UUFDM0IsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ3pCLENBQUM7OztZQXZIRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLGVBQWU7Z0JBQ3pCLHNZQUF5QztnQkFFekMsU0FBUyxFQUFFLENBQUMsZUFBZSxDQUFDOzthQUM3Qjs7OztZQVJRLGVBQWU7WUFDZix1QkFBdUI7WUFIYyxVQUFVOzs7bUJBc0JyRCxLQUFLO29CQUNMLEtBQUs7cUJBQ0wsS0FBSzt5QkFDTCxLQUFLO3lCQUNMLEtBQUs7NEJBQ0wsS0FBSztvQkFDTCxLQUFLOzBCQUNMLEtBQUs7Z0NBQ0wsS0FBSzs7OztJQVJOLGlDQUFnRDs7SUFDaEQsa0NBQXVCOztJQUN2QixtQ0FBd0I7O0lBQ3hCLHVDQUE0Qjs7SUFDNUIsdUNBQTRCOztJQUM1QiwwQ0FBK0I7O0lBQy9CLGtDQUF1Qjs7SUFDdkIsd0NBQWtDOztJQUNsQyw4Q0FBMEM7O0lBRTFDLHdDQUFvQjs7SUFDcEIscUNBQWM7O0lBQ2QscUNBQTZCOztJQUM3QixxQ0FBbUI7O0lBQ25CLHFDQUFTOztJQTBCRyw0Q0FBdUM7Ozs7O0lBQ3ZDLG9EQUF3RDs7Ozs7SUFDeEQsMkNBQWtDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBPbkNoYW5nZXMsIEVsZW1lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGNvbG9yU2NoZW1lcyB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9jb2xvci1zY2hlbWVzJztcbmltcG9ydCB7IEJhckNoYXJ0U2VydmljZSB9IGZyb20gJy4vYmFyLWNoYXJ0LnNlcnZpY2UnO1xuaW1wb3J0IHsgR2xvYmFsUGFyYW1ldGVyc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9nbG9iYWwvZ2xvYmFsLXBhcmFtZXRlcnMuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25neC1iYXItY2hhcnQnLFxuICB0ZW1wbGF0ZVVybDogJy4vYmFyLWNoYXJ0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYmFyLWNoYXJ0LmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW0JhckNoYXJ0U2VydmljZV1cbn0pXG5leHBvcnQgY2xhc3MgQmFyQ2hhcnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG5cbiAgLy8gPGg0PkJhciBDaGFydDwvaDQ+XG4gIC8vIDxuZ3gtYmVhdXRpZnVsLWNoYXJ0cyBbd2lkdGhdPVwiMTEwMFwiIFtoZWlnaHRdPVwiNDAwXCJcbiAgLy8gW2Rpc3BsYXlYQXhpc109XCJ0cnVlXCJcbiAgLy8gW2Rpc3BsYXlZQXhpc109XCJ0cnVlXCJcbiAgLy8geEF4aXNUaXRsZT1cIkNpdHlcIlxuICAvLyB5QXhpc1RpdGxlPVwiVmFsdWVcIlxuICAvLyBbZGF0YV09XCJiYXJDaGFydERhdGFcIlxuICAvLyBjaGFydFR5cGU9XCJiYXItY2hhcnRcIiBbc2hvd0dyaWRMaW5lc109XCJ0cnVlXCI+PC9uZ3gtYmVhdXRpZnVsLWNoYXJ0cz5cblxuICBASW5wdXQoKSBkYXRhOiBbe25hbWU6IHN0cmluZywgdmFsdWU6IG51bWJlciB9XTtcbiAgQElucHV0KCkgd2lkdGg6IG51bWJlcjtcbiAgQElucHV0KCkgaGVpZ2h0OiBudW1iZXI7XG4gIEBJbnB1dCgpIHhBeGlzVGl0bGU6IHN0cmluZztcbiAgQElucHV0KCkgeUF4aXNUaXRsZTogc3RyaW5nO1xuICBASW5wdXQoKSBzaG93R3JpZExpbmVzID0gZmFsc2U7XG4gIEBJbnB1dCgpIGNvbG9yOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGNvbG9yU2NoZW1lID0gJ2NvbG9yZnVsJztcbiAgQElucHV0KCkgY3VzdG9tQ29sb3JTY2hlbWU6IHN0cmluZ1tdID0gW107XG5cbiAgY29tcG9uZW50SUQ6IG51bWJlcjtcbiAgeFBhZGRpbmcgPSA2MDtcbiAgeVBhZGRpbmcgPSB0aGlzLnhQYWRkaW5nIC8gMjtcbiAgYmFyUGF0aHM6IHN0cmluZ1tdO1xuICBkYXRhQ29weTtcblxuICBjb21wdXRlQmFyUGF0aHMoKSB7XG4gICAgdGhpcy5iYXJQYXRocyA9IFtdO1xuICAgIGNvbnN0IG5vT2ZYQXhpc1ZhbHVlcyA9IHRoaXMuZGF0YS5sZW5ndGg7XG4gICAgY29uc3QgZWFjaFdpZHRoID0gdGhpcy5iYXJDaGFydFNlcnZpY2UucmVjdFdpZHRoIC8gbm9PZlhBeGlzVmFsdWVzO1xuICAgIGNvbnN0IGJhcldpZHRoID0gZWFjaFdpZHRoICogLjI1O1xuICAgIGxldCBjbnQgPSAtMTtcbiAgICBsZXQgYmFyUGF0aCA9ICcnO1xuICAgIGZvciAoY29uc3QgYmNEIG9mIHRoaXMuZGF0YSkge1xuICAgICAgY250ICsrO1xuICAgICAgY29uc3QgeFBvcyA9IGNudCAqIGVhY2hXaWR0aCArIGVhY2hXaWR0aCAvIDIgKyB0aGlzLnhQYWRkaW5nO1xuICAgICAgY29uc3QgeVBvcyA9IHRoaXMuYmFyQ2hhcnRTZXJ2aWNlLnRyYW5zZm9ybVkodGhpcy5iYXJDaGFydFNlcnZpY2UubWF4WSAtIGJjRC52YWx1ZSkgKyB0aGlzLnlQYWRkaW5nO1xuXG4gICAgICBjb25zdCB4U3RhcnQgPSB4UG9zIC0gYmFyV2lkdGggLyAyO1xuICAgICAgY29uc3QgeEVuZCA9IHhQb3MgKyBiYXJXaWR0aCAvIDI7XG4gICAgICBjb25zdCB5U3RhcnQgPSB0aGlzLmJhckNoYXJ0U2VydmljZS5yZWN0SGVpZ2h0ICsgdGhpcy55UGFkZGluZztcbiAgICAgIGJhclBhdGggPSAnTSAnO1xuICAgICAgYmFyUGF0aCA9IGJhclBhdGggKyAnICcgKyB4U3RhcnQgKyAnICcgKyB5U3RhcnQgKyAnIEwgJyArIHhTdGFydFxuICAgICAgKyAnICcgKyB5UG9zICsgJyAnICsgeEVuZCArICcgJyArIHlQb3MgKyAnICcgKyB4RW5kICsgJyAnICsgeVN0YXJ0ICsgJyBaJztcblxuICAgICAgdGhpcy5iYXJQYXRocy5wdXNoKGJhclBhdGgpO1xuICAgIH1cblxuICB9XG5cbiAgY29uc3RydWN0b3IocHVibGljIGJhckNoYXJ0U2VydmljZTogQmFyQ2hhcnRTZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIGdsb2JhbFBhcmFtZXRlcnNTZXJ2aWNlOiBHbG9iYWxQYXJhbWV0ZXJzU2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBjdXJyZW50RWxlbWVudDogRWxlbWVudFJlZikgeyB9XG5cbiAgc2V0Q29sb3IoKSB7XG4gICAgaWYgKCF0aGlzLmNvbG9yKSB7XG4gICAgICBpZiAodGhpcy5jdXN0b21Db2xvclNjaGVtZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuY29sb3IgPSB0aGlzLmN1c3RvbUNvbG9yU2NoZW1lWzBdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jb2xvciA9IGNvbG9yU2NoZW1lc1t0aGlzLmNvbG9yU2NoZW1lXVswXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzZXREaW1lbnNpb25zKCkge1xuICAgIGlmICh0aGlzLndpZHRoICYmICF0aGlzLmhlaWdodCkgdGhpcy5oZWlnaHQgPSB0aGlzLndpZHRoIC8gMztcbiAgICBlbHNlIGlmICghdGhpcy53aWR0aCAmJiB0aGlzLmhlaWdodCkgdGhpcy53aWR0aCA9IHRoaXMuaGVpZ2h0ICogMztcbiAgICBlbHNlIGlmICghdGhpcy53aWR0aCAmJiAhdGhpcy5oZWlnaHQpIHtcbiAgICAgIGNvbnN0IGhvc3QgPSB0aGlzLmN1cnJlbnRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICBpZiAoaG9zdC5wYXJlbnROb2RlICE9IG51bGwpIHtcbiAgICAgICAgY29uc3QgZGltcyA9IGhvc3QucGFyZW50Tm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgdGhpcy53aWR0aCA9IGRpbXMud2lkdGg7XG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gZGltcy53aWR0aCAvIDM7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIGNvbnNvbGUubG9nKCctLS1zZXQgZGltZW5zaW9ucy0tLScpO1xuICAgIC8vIGNvbnNvbGUubG9nKCd3aWR0aDogJyArIHRoaXMud2lkdGgpO1xuICAgIC8vIGNvbnNvbGUubG9nKCdoZWlnaHQ6ICcgKyB0aGlzLmhlaWdodCk7XG4gICAgLy8gY29uc29sZS5sb2coJy0tLS0tLS0tLS0tLS0tLS0tLS0tJyk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmNvbXBvbmVudElEID0gdGhpcy5nbG9iYWxQYXJhbWV0ZXJzU2VydmljZS5hZGROZXdDb21wb25lbnQoKTtcbiAgICAvLyBjb25zb2xlLmxvZygnaW5pdC4uJyk7XG4gICAgdGhpcy5zZXREaW1lbnNpb25zKCk7XG4gICAgdGhpcy5kYXRhQ29weSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5kYXRhKSk7XG4gICAgdGhpcy5iYXJDaGFydFNlcnZpY2Uuc2V0VmFsdWVzKHtcbiAgICAgIGNvbXBvbmVudElEOiB0aGlzLmNvbXBvbmVudElELFxuICAgICAgd2lkdGg6IHRoaXMud2lkdGgsXG4gICAgICBoZWlnaHQ6IHRoaXMuaGVpZ2h0LFxuICAgICAgeFBhZGRpbmc6IHRoaXMueFBhZGRpbmcsXG4gICAgICB5UGFkZGluZzogdGhpcy55UGFkZGluZyxcbiAgICAgIGRhdGE6IHRoaXMuZGF0YVxuICAgIH0pO1xuICAgIHRoaXMuc2V0Q29sb3IoKTtcbiAgICAvLyBjb25zb2xlLmxvZyh0aGlzLmNvbG9yKTtcbiAgICB0aGlzLmNvbXB1dGVCYXJQYXRocygpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoKSB7XG4gICAgdGhpcy5kYXRhQ29weSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5kYXRhKSk7XG4gICAgdGhpcy5iYXJDaGFydFNlcnZpY2Uuc2V0VmFsdWVzKHtcbiAgICAgIGNvbXBvbmVudElEOiB0aGlzLmNvbXBvbmVudElELFxuICAgICAgd2lkdGg6IHRoaXMud2lkdGgsXG4gICAgICBoZWlnaHQ6IHRoaXMuaGVpZ2h0LFxuICAgICAgeFBhZGRpbmc6IHRoaXMueFBhZGRpbmcsXG4gICAgICB5UGFkZGluZzogdGhpcy55UGFkZGluZyxcbiAgICAgIGRhdGE6IHRoaXMuZGF0YVxuICAgIH0pO1xuICAgIHRoaXMuc2V0Q29sb3IoKTtcbiAgICAvLyBjb25zb2xlLmxvZyh0aGlzLmNvbG9yKTtcbiAgICB0aGlzLmNvbXB1dGVCYXJQYXRocygpO1xuICB9XG5cbn1cbiJdfQ==