@microsoft/windows-admin-center-sdk
Version:
Microsoft - Windows Admin Center Shell
186 lines • 20.4 kB
JavaScript
import { Component, EventEmitter, Injector, Input, Output } from '@angular/core';
import { Chart } from 'chart.js';
import { CoreBaseComponent } from '../common/base.component';
import * as i0 from "@angular/core";
import * as i1 from "@angular/common";
function ChartComponent_canvas_1_Template(rf, ctx) { if (rf & 1) {
const _r3 = i0.ɵɵgetCurrentView();
i0.ɵɵelementStart(0, "canvas", 3);
i0.ɵɵlistener("click", function ChartComponent_canvas_1_Template_canvas_click_0_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.onCanvasClick($event)); });
i0.ɵɵelementEnd();
} }
function ChartComponent_canvas_2_Template(rf, ctx) { if (rf & 1) {
const _r5 = i0.ɵɵgetCurrentView();
i0.ɵɵelementStart(0, "canvas", 4);
i0.ɵɵlistener("click", function ChartComponent_canvas_2_Template_canvas_click_0_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r4 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r4.onCanvasClick($event)); });
i0.ɵɵelementEnd();
} }
export class ChartComponent extends CoreBaseComponent {
/**
* Constructs a new instance of @see ChartComponent
* @param injector the injector service for the base class of this component
*/
constructor(injector) {
super(injector);
/**
* Input for chart.js configuration options
*/
this.options = {};
/**
* Indicates that this chart should use responsive sizing.
*/
this.responsive = true;
this.dataSelected = new EventEmitter();
/**
* use width="100%" and height="100%" on the canvas
* required for doughnut chartss
*/
this.useParentHeightAndWidth = false;
}
/**
* The source name to use for logging
*/
get logSourceName() {
return 'ChartComponent';
}
/**
* Gets the configured width or null if the chart is responsive.
*/
get setWidth() {
return this.responsive ? null : this.width;
}
/**
* Gets the configured height or null if the chart is responsive.
*/
get setHeight() {
return this.responsive ? null : this.height;
}
/**
* Output that emits when a data element is selected in the chart
* @deprecated since 9/25/2019. Please use 'dataSelected' instead
*/
// eslint-disable-next-line @angular-eslint/no-output-on-prefix
get onDataSelect() {
return this.dataSelected;
}
/**
* Surfaces the internal chart canvas for direct modification
*/
get canvas() {
return this.hostElement.nativeElement.querySelector('canvas');
}
/**
* Input for data for the chart
*/
get data() {
return this.internalData;
}
set data(val) {
this.internalData = val;
this.initialize();
}
/**
* Implementation of angular ngOnInit interface
* sets height and width settings
*/
ngOnInit() {
if (this.type === 'doughnut') {
this.useParentHeightAndWidth = true;
}
}
/**
* Implementation of angular ngAfterViewInit interface
*/
ngAfterViewInit() {
super.ngAfterViewInit();
this.initialize();
this.initialized = true;
}
/**
* Implementation of angular ngOnDestroy interface
*/
ngOnDestroy() {
super.ngOnDestroy();
if (this.chart) {
this.chart.destroy();
this.initialized = false;
this.chart = null;
}
}
/**
* Occurs when the canvas is clicked.
* Emits dataSelected if a data element was clicked.
*/
onCanvasClick(event) {
if (this.chart) {
const element = this.chart.getElementAtEvent(event);
const dataset = this.chart.getDatasetAtEvent(event);
if (element && element[0] && dataset) {
this.dataSelected.emit({ originalEvent: event, element: element[0], dataset: dataset });
}
}
}
/**
* Initializes the chart. If the chart was previously initialized, it is first destroyed.
*/
initialize() {
// destroy chart if previously created
if (this.chart) {
this.chart.destroy();
}
// preserve options referential integrety
const originalOptions = this.options || {};
const options = MsftSme.deepCopy(originalOptions);
MsftSme.deepAssign(originalOptions, { responsive: this.responsive }, options);
// create new
if (this.canvas) {
this.chart = new Chart(this.canvas, {
type: this.type,
data: this.data,
options: originalOptions
});
}
}
/**
* Refreshes and redraws the chart
*/
refresh() {
if (this.chart) {
this.chart.update();
}
}
}
/** @nocollapse */ ChartComponent.ɵfac = function ChartComponent_Factory(t) { return new (t || ChartComponent)(i0.ɵɵdirectiveInject(i0.Injector)); };
/** @nocollapse */ ChartComponent.ɵcmp = /** @pureOrBreakMyCode */ i0.ɵɵdefineComponent({ type: ChartComponent, selectors: [["sme-chart"]], inputs: { type: "type", options: "options", width: "width", height: "height", responsive: "responsive", data: "data" }, outputs: { onDataSelect: "onDataSelect", dataSelected: "dataSelected" }, features: [i0.ɵɵInheritDefinitionFeature], decls: 3, vars: 6, consts: [["sme-lint-disable", "", 1, "sme-layout-relative"], ["aria-hidden", "true", "width", "100%", "height", "100%", 3, "click", 4, "ngIf"], ["aria-hidden", "true", 3, "click", 4, "ngIf"], ["aria-hidden", "true", "width", "100%", "height", "100%", 3, "click"], ["aria-hidden", "true", 3, "click"]], template: function ChartComponent_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "div", 0);
i0.ɵɵtemplate(1, ChartComponent_canvas_1_Template, 1, 0, "canvas", 1);
i0.ɵɵtemplate(2, ChartComponent_canvas_2_Template, 1, 0, "canvas", 2);
i0.ɵɵelementEnd();
} if (rf & 2) {
i0.ɵɵstyleProp("width", ctx.setWidth)("height", ctx.setHeight);
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngIf", ctx.useParentHeightAndWidth);
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngIf", !ctx.useParentHeightAndWidth);
} }, dependencies: [i1.NgIf], encapsulation: 2 });
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ChartComponent, [{
type: Component,
args: [{ selector: 'sme-chart', template: "<div sme-lint-disable class=\"sme-layout-relative\" [style.width]=\"setWidth\" [style.height]=\"setHeight\">\r\n <canvas aria-hidden=\"true\" *ngIf=\"useParentHeightAndWidth\" width=\"100%\" height=\"100%\" (click)=\"onCanvasClick($event)\"></canvas>\r\n <canvas aria-hidden=\"true\" *ngIf=\"!useParentHeightAndWidth\" (click)=\"onCanvasClick($event)\"></canvas>\r\n</div>\r\n" }]
}], function () { return [{ type: i0.Injector }]; }, { type: [{
type: Input
}], options: [{
type: Input
}], width: [{
type: Input
}], height: [{
type: Input
}], responsive: [{
type: Input
}], onDataSelect: [{
type: Output
}], dataSelected: [{
type: Output
}], data: [{
type: Input
}] }); })();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYW5ndWxhci9zcmMvY29udHJvbHMvY2hhcnQvY2hhcnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYW5ndWxhci9zcmMvY29udHJvbHMvY2hhcnQvY2hhcnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILFNBQVMsRUFDVCxZQUFZLEVBQ1osUUFBUSxFQUNSLEtBQUssRUFHTCxNQUFNLEVBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLEtBQUssRUFBZ0IsTUFBTSxVQUFVLENBQUM7QUFDL0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7Ozs7O0lDVjNELGlDQUFzSDtJQUFoQyxvS0FBUyxlQUFBLDRCQUFxQixDQUFBLElBQUM7SUFBQyxpQkFBUzs7OztJQUMvSCxpQ0FBNEY7SUFBaEMsb0tBQVMsZUFBQSw0QkFBcUIsQ0FBQSxJQUFDO0lBQUMsaUJBQVM7O0FEZXZHLE1BQU0sT0FBTyxjQUFlLFNBQVEsaUJBQWlCO0lBdUdqRDs7O09BR0c7SUFDSCxZQUFZLFFBQWtCO1FBQzFCLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQTdGcEI7O1dBRUc7UUFFSSxZQUFPLEdBQWlCLEVBQUUsQ0FBQztRQTRCbEM7O1dBRUc7UUFFSSxlQUFVLEdBQUcsSUFBSSxDQUFDO1FBVVIsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBb0N4RDs7O1dBR0c7UUFDSSw0QkFBdUIsR0FBRyxLQUFLLENBQUM7SUFRdkMsQ0FBQztJQTNHRDs7T0FFRztJQUNILElBQWMsYUFBYTtRQUN2QixPQUFPLGdCQUFnQixDQUFDO0lBQzVCLENBQUM7SUFvQkQ7O09BRUc7SUFDSCxJQUFXLFFBQVE7UUFDZixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztJQUMvQyxDQUFDO0lBUUQ7O09BRUc7SUFDSCxJQUFXLFNBQVM7UUFDaEIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDaEQsQ0FBQztJQVFEOzs7T0FHRztJQUNILCtEQUErRDtJQUMvRCxJQUFxQixZQUFZO1FBQzdCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUM3QixDQUFDO0lBR0Q7O09BRUc7SUFDSCxJQUFXLE1BQU07UUFDYixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBT0Q7O09BRUc7SUFDSCxJQUNXLElBQUk7UUFDWCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDN0IsQ0FBQztJQUNELElBQVcsSUFBSSxDQUFDLEdBQVE7UUFDcEIsSUFBSSxDQUFDLFlBQVksR0FBRyxHQUFHLENBQUM7UUFDeEIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUEwQkQ7OztPQUdHO0lBQ0ksUUFBUTtRQUNYLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxVQUFVLEVBQUU7WUFDMUIsSUFBSSxDQUFDLHVCQUF1QixHQUFHLElBQUksQ0FBQztTQUN2QztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNJLGVBQWU7UUFDbEIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNsQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztJQUM1QixDQUFDO0lBRUQ7O09BRUc7SUFDSSxXQUFXO1FBQ2QsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3BCLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNaLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7WUFDekIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7U0FDckI7SUFDTCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksYUFBYSxDQUFDLEtBQUs7UUFDdEIsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ1osTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNwRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3BELElBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxPQUFPLEVBQUU7Z0JBQ2xDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO2FBQzNGO1NBQ0o7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxVQUFVO1FBQ2Isc0NBQXNDO1FBQ3RDLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNaLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDeEI7UUFDRCx5Q0FBeUM7UUFDekMsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUM7UUFDM0MsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNsRCxPQUFPLENBQUMsVUFBVSxDQUFDLGVBQWUsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFOUUsYUFBYTtRQUNiLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNiLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQ2xCLElBQUksQ0FBQyxNQUFNLEVBQ1g7Z0JBQ0ksSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO2dCQUNmLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtnQkFDZixPQUFPLEVBQUUsZUFBZTthQUMzQixDQUNKLENBQUM7U0FDTDtJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNJLE9BQU87UUFDVixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDWixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1NBQ3ZCO0lBQ0wsQ0FBQzs7K0ZBN0xRLGNBQWM7Z0dBQWQsY0FBYztRQ2pCM0IsOEJBQXNHO1FBQ3BHLHFFQUErSDtRQUMvSCxxRUFBcUc7UUFDdkcsaUJBQU07O1FBSDRDLHFDQUF3Qix5QkFBQTtRQUM1QyxlQUE2QjtRQUE3QixrREFBNkI7UUFDN0IsZUFBOEI7UUFBOUIsbURBQThCOzt1RkRlL0MsY0FBYztjQUoxQixTQUFTOzJCQUNJLFdBQVc7MkRBZ0JkLElBQUk7a0JBRFYsS0FBSztZQU9DLE9BQU87a0JBRGIsS0FBSztZQU9DLEtBQUs7a0JBRFgsS0FBSztZQWNDLE1BQU07a0JBRFosS0FBSztZQWNDLFVBQVU7a0JBRGhCLEtBQUs7WUFRZSxZQUFZO2tCQUFoQyxNQUFNO1lBR1UsWUFBWTtrQkFBNUIsTUFBTTtZQWtCSSxJQUFJO2tCQURkLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gICAgQWZ0ZXJWaWV3SW5pdCxcclxuICAgIENvbXBvbmVudCxcclxuICAgIEV2ZW50RW1pdHRlcixcclxuICAgIEluamVjdG9yLFxyXG4gICAgSW5wdXQsXHJcbiAgICBPbkRlc3Ryb3ksXHJcbiAgICBPbkluaXQsXHJcbiAgICBPdXRwdXRcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ2hhcnQsIENoYXJ0T3B0aW9ucyB9IGZyb20gJ2NoYXJ0LmpzJztcclxuaW1wb3J0IHsgQ29yZUJhc2VDb21wb25lbnQgfSBmcm9tICcuLi9jb21tb24vYmFzZS5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ3NtZS1jaGFydCcsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vY2hhcnQuY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDaGFydENvbXBvbmVudCBleHRlbmRzIENvcmVCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBPbkluaXQge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHNvdXJjZSBuYW1lIHRvIHVzZSBmb3IgbG9nZ2luZ1xyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgZ2V0IGxvZ1NvdXJjZU5hbWUoKSB7XHJcbiAgICAgICAgcmV0dXJuICdDaGFydENvbXBvbmVudCc7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnB1dCBmb3IgY2hhcnQuanMgY2hhcnQgdHlwZS5cclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyB0eXBlOiBzdHJpbmc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnB1dCBmb3IgY2hhcnQuanMgY29uZmlndXJhdGlvbiBvcHRpb25zXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgb3B0aW9uczogQ2hhcnRPcHRpb25zID0ge307XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIGNoYXJ0LiBVc2VkIG9ubHkgaWYgcmVzcG9uc2l2ZSBpcyBmYWxzZS5cclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyB3aWR0aDogc3RyaW5nO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgY29uZmlndXJlZCB3aWR0aCBvciBudWxsIGlmIHRoZSBjaGFydCBpcyByZXNwb25zaXZlLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IHNldFdpZHRoKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlc3BvbnNpdmUgPyBudWxsIDogdGhpcy53aWR0aDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIGNoYXJ0LiBVc2VkIG9ubHkgaWYgcmVzcG9uc2l2ZSBpcyBmYWxzZS5cclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBoZWlnaHQ6IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIGNvbmZpZ3VyZWQgaGVpZ2h0IG9yIG51bGwgaWYgdGhlIGNoYXJ0IGlzIHJlc3BvbnNpdmUuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgc2V0SGVpZ2h0KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlc3BvbnNpdmUgPyBudWxsIDogdGhpcy5oZWlnaHQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGlzIGNoYXJ0IHNob3VsZCB1c2UgcmVzcG9uc2l2ZSBzaXppbmcuXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgcmVzcG9uc2l2ZSA9IHRydWU7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBPdXRwdXQgdGhhdCBlbWl0cyB3aGVuIGEgZGF0YSBlbGVtZW50IGlzIHNlbGVjdGVkIGluIHRoZSBjaGFydFxyXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgOS8yNS8yMDE5LiBQbGVhc2UgdXNlICdkYXRhU2VsZWN0ZWQnIGluc3RlYWRcclxuICAgICAqL1xyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtb24tcHJlZml4XHJcbiAgICBAT3V0cHV0KCkgcHVibGljIGdldCBvbkRhdGFTZWxlY3QoKTogRXZlbnRFbWl0dGVyPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGFTZWxlY3RlZDtcclxuICAgIH1cclxuICAgIEBPdXRwdXQoKSBwdWJsaWMgZGF0YVNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdXJmYWNlcyB0aGUgaW50ZXJuYWwgY2hhcnQgY2FudmFzIGZvciBkaXJlY3QgbW9kaWZpY2F0aW9uXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgY2FudmFzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmhvc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignY2FudmFzJyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdXJmYWNlcyB0aGUgaW50ZXJuYWwgY2hhcnQuanMgY29udHJvbCBmb3IgZGlyZWN0IG1vZGlmaWNhdGlvblxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgY2hhcnQ6IENoYXJ0O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5wdXQgZm9yIGRhdGEgZm9yIHRoZSBjaGFydFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGdldCBkYXRhKCk6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaW50ZXJuYWxEYXRhO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldCBkYXRhKHZhbDogYW55KSB7XHJcbiAgICAgICAgdGhpcy5pbnRlcm5hbERhdGEgPSB2YWw7XHJcbiAgICAgICAgdGhpcy5pbml0aWFsaXplKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgY2hhcnQgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgYW5kIGlzIHJlYWR5IGZvciBjb25zdW1wdGlvblxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgaW5pdGlhbGl6ZWQ6IGJvb2xlYW47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcm5hbCBiYWNraW5nIGZvciB0aGUgZGF0YSBwcm9wZXJ0eVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGludGVybmFsRGF0YTogYW55O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogdXNlIHdpZHRoPVwiMTAwJVwiIGFuZCBoZWlnaHQ9XCIxMDAlXCIgb24gdGhlIGNhbnZhc1xyXG4gICAgICogcmVxdWlyZWQgZm9yIGRvdWdobnV0IGNoYXJ0c3NcclxuICAgICAqL1xyXG4gICAgcHVibGljIHVzZVBhcmVudEhlaWdodEFuZFdpZHRoID0gZmFsc2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IGluc3RhbmNlIG9mIEBzZWUgQ2hhcnRDb21wb25lbnRcclxuICAgICAqIEBwYXJhbSBpbmplY3RvciB0aGUgaW5qZWN0b3Igc2VydmljZSBmb3IgdGhlIGJhc2UgY2xhc3Mgb2YgdGhpcyBjb21wb25lbnRcclxuICAgICAqL1xyXG4gICAgY29uc3RydWN0b3IoaW5qZWN0b3I6IEluamVjdG9yKSB7XHJcbiAgICAgICAgc3VwZXIoaW5qZWN0b3IpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW1wbGVtZW50YXRpb24gb2YgYW5ndWxhciBuZ09uSW5pdCBpbnRlcmZhY2VcclxuICAgICAqIHNldHMgaGVpZ2h0IGFuZCB3aWR0aCBzZXR0aW5nc1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gJ2RvdWdobnV0Jykge1xyXG4gICAgICAgICAgICB0aGlzLnVzZVBhcmVudEhlaWdodEFuZFdpZHRoID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbXBsZW1lbnRhdGlvbiBvZiBhbmd1bGFyIG5nQWZ0ZXJWaWV3SW5pdCBpbnRlcmZhY2VcclxuICAgICAqL1xyXG4gICAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgICAgICBzdXBlci5uZ0FmdGVyVmlld0luaXQoKTtcclxuICAgICAgICB0aGlzLmluaXRpYWxpemUoKTtcclxuICAgICAgICB0aGlzLmluaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEltcGxlbWVudGF0aW9uIG9mIGFuZ3VsYXIgbmdPbkRlc3Ryb3kgaW50ZXJmYWNlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xyXG4gICAgICAgIGlmICh0aGlzLmNoYXJ0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2hhcnQuZGVzdHJveSgpO1xyXG4gICAgICAgICAgICB0aGlzLmluaXRpYWxpemVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuY2hhcnQgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE9jY3VycyB3aGVuIHRoZSBjYW52YXMgaXMgY2xpY2tlZC5cclxuICAgICAqIEVtaXRzIGRhdGFTZWxlY3RlZCBpZiBhIGRhdGEgZWxlbWVudCB3YXMgY2xpY2tlZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIG9uQ2FudmFzQ2xpY2soZXZlbnQpIHtcclxuICAgICAgICBpZiAodGhpcy5jaGFydCkge1xyXG4gICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5jaGFydC5nZXRFbGVtZW50QXRFdmVudChldmVudCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGFzZXQgPSB0aGlzLmNoYXJ0LmdldERhdGFzZXRBdEV2ZW50KGV2ZW50KTtcclxuICAgICAgICAgICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudFswXSAmJiBkYXRhc2V0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFTZWxlY3RlZC5lbWl0KHsgb3JpZ2luYWxFdmVudDogZXZlbnQsIGVsZW1lbnQ6IGVsZW1lbnRbMF0sIGRhdGFzZXQ6IGRhdGFzZXQgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbml0aWFsaXplcyB0aGUgY2hhcnQuIElmIHRoZSBjaGFydCB3YXMgcHJldmlvdXNseSBpbml0aWFsaXplZCwgaXQgaXMgZmlyc3QgZGVzdHJveWVkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgaW5pdGlhbGl6ZSgpIHtcclxuICAgICAgICAvLyBkZXN0cm95IGNoYXJ0IGlmIHByZXZpb3VzbHkgY3JlYXRlZFxyXG4gICAgICAgIGlmICh0aGlzLmNoYXJ0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2hhcnQuZGVzdHJveSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBwcmVzZXJ2ZSBvcHRpb25zIHJlZmVyZW50aWFsIGludGVncmV0eVxyXG4gICAgICAgIGNvbnN0IG9yaWdpbmFsT3B0aW9ucyA9IHRoaXMub3B0aW9ucyB8fCB7fTtcclxuICAgICAgICBjb25zdCBvcHRpb25zID0gTXNmdFNtZS5kZWVwQ29weShvcmlnaW5hbE9wdGlvbnMpO1xyXG4gICAgICAgIE1zZnRTbWUuZGVlcEFzc2lnbihvcmlnaW5hbE9wdGlvbnMsIHsgcmVzcG9uc2l2ZTogdGhpcy5yZXNwb25zaXZlIH0sIG9wdGlvbnMpO1xyXG5cclxuICAgICAgICAvLyBjcmVhdGUgbmV3XHJcbiAgICAgICAgaWYgKHRoaXMuY2FudmFzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2hhcnQgPSBuZXcgQ2hhcnQoXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcyxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiB0aGlzLnR5cGUsXHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogdGhpcy5kYXRhLFxyXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IG9yaWdpbmFsT3B0aW9uc1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlZnJlc2hlcyBhbmQgcmVkcmF3cyB0aGUgY2hhcnRcclxuICAgICAqL1xyXG4gICAgcHVibGljIHJlZnJlc2goKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY2hhcnQpIHtcclxuICAgICAgICAgICAgdGhpcy5jaGFydC51cGRhdGUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIiwiPGRpdiBzbWUtbGludC1kaXNhYmxlIGNsYXNzPVwic21lLWxheW91dC1yZWxhdGl2ZVwiIFtzdHlsZS53aWR0aF09XCJzZXRXaWR0aFwiIFtzdHlsZS5oZWlnaHRdPVwic2V0SGVpZ2h0XCI+XHJcbiAgPGNhbnZhcyBhcmlhLWhpZGRlbj1cInRydWVcIiAqbmdJZj1cInVzZVBhcmVudEhlaWdodEFuZFdpZHRoXCIgd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiMTAwJVwiIChjbGljayk9XCJvbkNhbnZhc0NsaWNrKCRldmVudClcIj48L2NhbnZhcz5cclxuICA8Y2FudmFzIGFyaWEtaGlkZGVuPVwidHJ1ZVwiICpuZ0lmPVwiIXVzZVBhcmVudEhlaWdodEFuZFdpZHRoXCIgKGNsaWNrKT1cIm9uQ2FudmFzQ2xpY2soJGV2ZW50KVwiPjwvY2FudmFzPlxyXG48L2Rpdj5cclxuIl19