@microsoft/windows-admin-center-sdk
Version:
Microsoft - Windows Admin Center Shell
175 lines • 22.4 kB
JavaScript
import { Component, EventEmitter, Input, isDevMode, Output, QueryList, ViewChild, ViewChildren } from '@angular/core';
import { take } from 'rxjs/operators';
import { DialogService } from '../../controls/dialog/dialog.service';
import { SchemaUtilities } from '../schema/schema-utilities';
import { SchemaFormEditorComponent } from './schema-form-editor.component';
import * as i0 from "@angular/core";
import * as i1 from "../../controls/dialog/dialog.service";
import * as i2 from "@angular/common";
import * as i3 from "./schema-form-content.component";
import * as i4 from "./schema-form-editor.component";
const _c0 = ["editor"];
const _c1 = ["formContent"];
const _c2 = ["schema", ""];
function SchemaFormComponent_sme_schema_form_content_0_Template(rf, ctx) { if (rf & 1) {
const _r6 = i0.ɵɵgetCurrentView();
i0.ɵɵelementStart(0, "sme-schema-form-content", 4, 5);
i0.ɵɵlistener("dataChange", function SchemaFormComponent_sme_schema_form_content_0_Template_sme_schema_form_content_dataChange_0_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r5 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r5.data = $event); })("formActionExecuted", function SchemaFormComponent_sme_schema_form_content_0_Template_sme_schema_form_content_formActionExecuted_0_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r7 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r7.onFormActionExecuted($event.action, $event.data)); });
i0.ɵɵelementEnd();
} if (rf & 2) {
const ctx_r0 = i0.ɵɵnextContext();
i0.ɵɵproperty("schema", ctx_r0.schema)("data", ctx_r0.data)("isEditorMode", !!(ctx_r0.editor && ctx_r0.editor.isOpen))("formController", ctx_r0.formController);
} }
function SchemaFormComponent_div_1_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "div", 6)(1, "p");
i0.ɵɵtext(2);
i0.ɵɵelementEnd();
i0.ɵɵelementStart(3, "p");
i0.ɵɵtext(4);
i0.ɵɵelementEnd();
i0.ɵɵelementStart(5, "p");
i0.ɵɵtext(6);
i0.ɵɵelementEnd()();
} if (rf & 2) {
const ctx_r1 = i0.ɵɵnextContext();
i0.ɵɵadvance(2);
i0.ɵɵtextInterpolate(ctx_r1.strings.NoSchemaMessage.Row1);
i0.ɵɵadvance(2);
i0.ɵɵtextInterpolate(ctx_r1.strings.NoSchemaMessage.Row2);
i0.ɵɵadvance(2);
i0.ɵɵtextInterpolate(ctx_r1.strings.NoSchemaMessage.Row3);
} }
function SchemaFormComponent_div_2_Template(rf, ctx) { if (rf & 1) {
const _r9 = i0.ɵɵgetCurrentView();
i0.ɵɵelementStart(0, "div", 7)(1, "button", 8);
i0.ɵɵlistener("click", function SchemaFormComponent_div_2_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r9); const ctx_r8 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r8.showEditor()); });
i0.ɵɵtext(2);
i0.ɵɵelementEnd()();
} if (rf & 2) {
const ctx_r2 = i0.ɵɵnextContext();
i0.ɵɵadvance(2);
i0.ɵɵtextInterpolate(ctx_r2.strings.EditButton.Text);
} }
function SchemaFormComponent_sme_schema_form_editor_3_Template(rf, ctx) { if (rf & 1) {
const _r12 = i0.ɵɵgetCurrentView();
i0.ɵɵelementStart(0, "sme-schema-form-editor", 9, 10);
i0.ɵɵlistener("schemaChange", function SchemaFormComponent_sme_schema_form_editor_3_Template_sme_schema_form_editor_schemaChange_0_listener($event) { i0.ɵɵrestoreView(_r12); const ctx_r11 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r11.schema = $event); })("dataChange", function SchemaFormComponent_sme_schema_form_editor_3_Template_sme_schema_form_editor_dataChange_0_listener($event) { i0.ɵɵrestoreView(_r12); const ctx_r13 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r13.data = $event); });
i0.ɵɵelementEnd();
} if (rf & 2) {
const ctx_r3 = i0.ɵɵnextContext();
i0.ɵɵproperty("schema", ctx_r3.schema)("data", ctx_r3.data)("formController", ctx_r3.formController);
} }
/**
* Schema Form Component
* It takes the schema and data and other necessary inputs then dynamically renders the form UI.
*/
export class SchemaFormComponent {
constructor(dialogService) {
this.dialogService = dialogService;
this.strings = MsftSme.getStrings().MsftSmeShell.Angular.SchemaForm;
this.dataChange = new EventEmitter();
this.formActionExecuted = new EventEmitter();
}
/**
* It gets and sets the schema.
*/
get schema() {
return this.internalSchema;
}
set schema(value) {
this.internalSchema = value;
}
/**
* It gets and sets the form data.
*/
get data() {
return this.internalData;
}
set data(value) {
this.internalData = value;
this.dataChange.emit(value);
}
get isFormValid() {
return this.getFormContentComponent() && this.getFormContentComponent().isFormValid;
}
get isFormDirty() {
return this.getFormContentComponent() && this.getFormContentComponent().isFormDirty;
}
get isFormReadyToSubmit() {
return this.isFormValid && this.isFormDirty;
}
/**
* Angular life cycle hooks.
*/
ngOnInit() {
if (isDevMode()) {
this.isDevMode = true;
}
if (!this.data) {
this.data = SchemaUtilities.generateDataBasedOnSchema(this.schema);
}
}
showEditor() {
this.dialogService.show(this.editor.id, {})
.pipe(take(1))
.subscribe();
}
markAsPristine() {
this.getFormContainerLoaderComponent().markAsPristine();
}
onFormActionExecuted(action, data) {
this.formActionExecuted.emit({ action: action, data: data });
}
getFormContainer() {
return this.getFormContentComponent().getFormContainerLoaderComponent();
}
getFormContentComponent() {
return this.formContentQueryList && this.formContentQueryList.first;
}
getFormContainerLoaderComponent() {
return this.getFormContentComponent().fieldHostComponent.getFormFieldLoaderComponent();
}
}
/** @nocollapse */ SchemaFormComponent.ɵfac = function SchemaFormComponent_Factory(t) { return new (t || SchemaFormComponent)(i0.ɵɵdirectiveInject(i1.DialogService)); };
/** @nocollapse */ SchemaFormComponent.ɵcmp = /** @pureOrBreakMyCode */ i0.ɵɵdefineComponent({ type: SchemaFormComponent, selectors: [["sme-form", "schema", ""], ["sme-schema-form"]], viewQuery: function SchemaFormComponent_Query(rf, ctx) { if (rf & 1) {
i0.ɵɵviewQuery(_c0, 5);
i0.ɵɵviewQuery(_c1, 5);
} if (rf & 2) {
let _t;
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.editor = _t.first);
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.formContentQueryList = _t);
} }, inputs: { schema: "schema", data: "data", formController: "formController" }, outputs: { dataChange: "dataChange", formActionExecuted: "formActionExecuted" }, attrs: _c2, decls: 4, vars: 4, consts: [[3, "schema", "data", "isEditorMode", "formController", "dataChange", "formActionExecuted", 4, "ngIf"], ["class", "sme-padding-inset-sm sme-border-inset-sm sme-border-color-white-90", 4, "ngIf"], ["class", "editor sme-layout-relative sme-position-right-inline sme-padding-right-xl sme-layout-float-right", 4, "ngIf"], [3, "schema", "data", "formController", "schemaChange", "dataChange", 4, "ngIf"], [3, "schema", "data", "isEditorMode", "formController", "dataChange", "formActionExecuted"], ["formContent", ""], [1, "sme-padding-inset-sm", "sme-border-inset-sm", "sme-border-color-white-90"], [1, "editor", "sme-layout-relative", "sme-position-right-inline", "sme-padding-right-xl", "sme-layout-float-right"], [1, "sme-button-trigger", "sme-button-auto-width", "sme-button-align-left", "sme-icon", "sme-icon-edit", "sme-icon", "sme-icon-edit", 3, "click"], [3, "schema", "data", "formController", "schemaChange", "dataChange"], ["editor", ""]], template: function SchemaFormComponent_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵtemplate(0, SchemaFormComponent_sme_schema_form_content_0_Template, 2, 4, "sme-schema-form-content", 0);
i0.ɵɵtemplate(1, SchemaFormComponent_div_1_Template, 7, 3, "div", 1);
i0.ɵɵtemplate(2, SchemaFormComponent_div_2_Template, 3, 1, "div", 2);
i0.ɵɵtemplate(3, SchemaFormComponent_sme_schema_form_editor_3_Template, 2, 3, "sme-schema-form-editor", 3);
} if (rf & 2) {
i0.ɵɵproperty("ngIf", ctx.schema);
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngIf", !ctx.schema || ctx.schema.properties && ctx.schema.properties.length === 0 && !ctx.schema.options);
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngIf", ctx.isDevMode);
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngIf", ctx.isDevMode);
} }, dependencies: [i2.NgIf, i3.SchemaFormContentComponent, i4.SchemaFormEditorComponent], encapsulation: 2 });
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SchemaFormComponent, [{
type: Component,
args: [{ selector: 'sme-form[schema], sme-schema-form', template: "<sme-schema-form-content #formContent *ngIf=\"schema\" [schema]=\"schema\" [(data)]=\"data\" [isEditorMode]=\"!!(editor&&editor.isOpen)\" [formController]=\"formController\" (formActionExecuted)=\"onFormActionExecuted($event.action, $event.data)\"></sme-schema-form-content>\r\n<div *ngIf=\"!schema || ((schema.properties && schema.properties.length===0)&&!schema.options)\" class=\"sme-padding-inset-sm sme-border-inset-sm sme-border-color-white-90\">\r\n <p>{{strings.NoSchemaMessage.Row1}}</p>\r\n <p>{{strings.NoSchemaMessage.Row2}}</p>\r\n <p>{{strings.NoSchemaMessage.Row3}}</p>\r\n</div>\r\n<div class=\"editor sme-layout-relative sme-position-right-inline sme-padding-right-xl sme-layout-float-right\" *ngIf=\"isDevMode\">\r\n <button class=\"sme-button-trigger sme-button-auto-width sme-button-align-left sme-icon sme-icon-edit sme-icon sme-icon-edit\" (click)=\"showEditor()\">{{strings.EditButton.Text}}</button>\r\n</div>\r\n<sme-schema-form-editor *ngIf=\"isDevMode\" #editor [(schema)]=\"schema\" [(data)]=\"data\" [formController]=\"formController\"></sme-schema-form-editor>" }]
}], function () { return [{ type: i1.DialogService }]; }, { editor: [{
type: ViewChild,
args: ['editor']
}], formContentQueryList: [{
type: ViewChildren,
args: ['formContent']
}], schema: [{
type: Input
}], data: [{
type: Input
}], dataChange: [{
type: Output
}], formActionExecuted: [{
type: Output
}], formController: [{
type: Input
}] }); })();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYW5ndWxhci9zcmMvY29udHJvbHMvc2NoZW1hLWZvcm0vc2NoZW1hLWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYW5ndWxhci9zcmMvY29udHJvbHMvc2NoZW1hLWZvcm0vc2NoZW1hLWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQ2hHLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV0QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFJckUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRTdELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDOzs7Ozs7Ozs7OztJQ1gzRSxxREFBNE87SUFBckssNlBBQWUsd05BQW9HLGVBQUEsdURBQWdELENBQUEsSUFBcEo7SUFBc0osaUJBQTBCOzs7SUFBak4sc0NBQWlCLHFCQUFBLDJEQUFBLHlDQUFBOzs7SUFDdEUsOEJBQTBLLFFBQUE7SUFDbkssWUFBZ0M7SUFBQSxpQkFBSTtJQUN2Qyx5QkFBRztJQUFBLFlBQWdDO0lBQUEsaUJBQUk7SUFDdkMseUJBQUc7SUFBQSxZQUFnQztJQUFBLGlCQUFJLEVBQUE7OztJQUZwQyxlQUFnQztJQUFoQyx5REFBZ0M7SUFDaEMsZUFBZ0M7SUFBaEMseURBQWdDO0lBQ2hDLGVBQWdDO0lBQWhDLHlEQUFnQzs7OztJQUV2Qyw4QkFBZ0ksZ0JBQUE7SUFDRCxnS0FBUyxlQUFBLG1CQUFZ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QTJCLEVBQUUsQ0FBQztJQUMzRixDQUFDOzt5R0F2R1EsbUJBQW1CO3FHQUFuQixtQkFBbUI7Ozs7Ozs7O1FDckJoQyw0R0FBc1E7UUFDdFEsb0VBSU07UUFDTixvRUFFTTtRQUNOLDBHQUFpSjs7UUFUMUcsaUNBQVk7UUFDN0MsZUFBdUY7UUFBdkYsd0hBQXVGO1FBS2tCLGVBQWU7UUFBZixvQ0FBZTtRQUdyRyxlQUFlO1FBQWYsb0NBQWU7O3VGRFkzQixtQkFBbUI7Y0FKL0IsU0FBUzsyQkFDSSxtQ0FBbUM7Z0VBVXRDLE1BQU07a0JBRFosU0FBUzttQkFBQyxRQUFRO1lBSVgsb0JBQW9CO2tCQUQzQixZQUFZO21CQUFDLGFBQWE7WUFPaEIsTUFBTTtrQkFEaEIsS0FBSztZQVlLLElBQUk7a0JBRGQsS0FBSztZQVVDLFVBQVU7a0JBRGhCLE1BQU07WUFJQSxrQkFBa0I7a0JBRHhCLE1BQU07WUFRQSxjQUFjO2tCQURwQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgaXNEZXZNb2RlLCBPbkluaXQsIE91dHB1dCwgUXVlcnlMaXN0LCBWaWV3Q2hpbGQsIFZpZXdDaGlsZHJlblxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBEaWFsb2dPcHRpb25zLCBEaWFsb2dSZXN1bHQgfSBmcm9tICcuLi8uLi9jb250cm9scy9kaWFsb2cvYmFzZS1kaWFsb2cuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gJy4uLy4uL2NvbnRyb2xzL2RpYWxvZy9kaWFsb2cuc2VydmljZSc7XHJcbmltcG9ydCB7IFN0cmluZ3MgfSBmcm9tICcuLi8uLi9nZW5lcmF0ZWQvc3RyaW5ncyc7XHJcbmltcG9ydCB7IFNjaGVtYUZpZWxkTG9hZGVyQ29tcG9uZW50QmFzZSB9IGZyb20gJy4uL3NjaGVtYS9zY2hlbWEtZmllbGQtaG9zdC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBEYXRhU2NoZW1hLCBGb3JtRGF0YSB9IGZyb20gJy4uL3NjaGVtYS9zY2hlbWEtbW9kZWxzJztcclxuaW1wb3J0IHsgU2NoZW1hVXRpbGl0aWVzIH0gZnJvbSAnLi4vc2NoZW1hL3NjaGVtYS11dGlsaXRpZXMnO1xyXG5pbXBvcnQgeyBTY2hlbWFGb3JtQ29udGVudENvbXBvbmVudCB9IGZyb20gJy4vc2NoZW1hLWZvcm0tY29udGVudC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBTY2hlbWFGb3JtRWRpdG9yQ29tcG9uZW50IH0gZnJvbSAnLi9zY2hlbWEtZm9ybS1lZGl0b3IuY29tcG9uZW50JztcclxuXHJcbi8qKlxyXG4gKiBTY2hlbWEgRm9ybSBDb21wb25lbnRcclxuICogSXQgdGFrZXMgdGhlIHNjaGVtYSBhbmQgZGF0YSBhbmQgb3RoZXIgbmVjZXNzYXJ5IGlucHV0cyB0aGVuIGR5bmFtaWNhbGx5IHJlbmRlcnMgdGhlIGZvcm0gVUkuXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnc21lLWZvcm1bc2NoZW1hXSwgc21lLXNjaGVtYS1mb3JtJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9zY2hlbWEtZm9ybS5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFNjaGVtYUZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gICAgcHVibGljIHN0cmluZ3MgPSBNc2Z0U21lLmdldFN0cmluZ3M8U3RyaW5ncz4oKS5Nc2Z0U21lU2hlbGwuQW5ndWxhci5TY2hlbWFGb3JtO1xyXG5cclxuICAgIHByaXZhdGUgaW50ZXJuYWxTY2hlbWE6IERhdGFTY2hlbWE7XHJcbiAgICBwcml2YXRlIGludGVybmFsRGF0YTogRm9ybURhdGE7XHJcblxyXG4gICAgQFZpZXdDaGlsZCgnZWRpdG9yJylcclxuICAgIHB1YmxpYyBlZGl0b3I6IFNjaGVtYUZvcm1FZGl0b3JDb21wb25lbnQ7XHJcblxyXG4gICAgQFZpZXdDaGlsZHJlbignZm9ybUNvbnRlbnQnKVxyXG4gICAgcHJpdmF0ZSBmb3JtQ29udGVudFF1ZXJ5TGlzdDogUXVlcnlMaXN0PFNjaGVtYUZvcm1Db250ZW50Q29tcG9uZW50PjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEl0IGdldHMgYW5kIHNldHMgdGhlIHNjaGVtYS5cclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBnZXQgc2NoZW1hKCk6IERhdGFTY2hlbWEge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmludGVybmFsU2NoZW1hO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldCBzY2hlbWEodmFsdWU6IERhdGFTY2hlbWEpIHtcclxuICAgICAgICB0aGlzLmludGVybmFsU2NoZW1hID0gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJdCBnZXRzIGFuZCBzZXRzIHRoZSBmb3JtIGRhdGEuXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgZ2V0IGRhdGEoKTogRm9ybURhdGEge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmludGVybmFsRGF0YTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZXQgZGF0YSh2YWx1ZTogRm9ybURhdGEpIHtcclxuICAgICAgICB0aGlzLmludGVybmFsRGF0YSA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMuZGF0YUNoYW5nZS5lbWl0KHZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyBkYXRhQ2hhbmdlOiBFdmVudEVtaXR0ZXI8Rm9ybURhdGE+ID0gbmV3IEV2ZW50RW1pdHRlcjxGb3JtRGF0YT4oKTtcclxuXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyBmb3JtQWN0aW9uRXhlY3V0ZWQ6IEV2ZW50RW1pdHRlcjx7IGFjdGlvbjogc3RyaW5nLCBkYXRhOiBhbnkgfT4gPSBuZXcgRXZlbnRFbWl0dGVyPHsgYWN0aW9uOiBzdHJpbmcsIGRhdGE6IGFueSB9PigpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGhvc3QgY29udGV4dCB3aGljaCBpcyB1c2VkIHRvIHByb3ZpZGUgc29tZSBiZWhhdmlvcnMgZnJvbSB0aGUgaG9zdCBvZiB0aGUgZm9ybS5cclxuICAgICAqIEN1c3RvbSB2YWxpZGF0aW9uIG1ldGhvZHMgd2lsbCBiZSBwcm92aWRlZCBieSBpdC5cclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBmb3JtQ29udHJvbGxlcjogYW55O1xyXG5cclxuICAgIHB1YmxpYyBnZXQgaXNGb3JtVmFsaWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Rm9ybUNvbnRlbnRDb21wb25lbnQoKSAmJiB0aGlzLmdldEZvcm1Db250ZW50Q29tcG9uZW50KCkuaXNGb3JtVmFsaWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBpc0Zvcm1EaXJ0eSgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRGb3JtQ29udGVudENvbXBvbmVudCgpICYmIHRoaXMuZ2V0Rm9ybUNvbnRlbnRDb21wb25lbnQoKS5pc0Zvcm1EaXJ0eTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IGlzRm9ybVJlYWR5VG9TdWJtaXQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNGb3JtVmFsaWQgJiYgdGhpcy5pc0Zvcm1EaXJ0eTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEl0IGluZGljYXRlcyB3aGV0aGVyIHRoZSBmb3JtIGlzIHJlbmRlcmVkIGFzIGRldiBtb2RlLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgaXNEZXZNb2RlOiBib29sZWFuO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSkge1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQW5ndWxhciBsaWZlIGN5Y2xlIGhvb2tzLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEZXZNb2RlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5kYXRhKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IFNjaGVtYVV0aWxpdGllcy5nZW5lcmF0ZURhdGFCYXNlZE9uU2NoZW1hKHRoaXMuc2NoZW1hKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNob3dFZGl0b3IoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnNob3c8RGlhbG9nT3B0aW9ucywgRGlhbG9nUmVzdWx0Pih0aGlzLmVkaXRvci5pZCwge30pXHJcbiAgICAgICAgICAgIC5waXBlKHRha2UoMSkpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbWFya0FzUHJpc3RpbmUoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5nZXRGb3JtQ29udGFpbmVyTG9hZGVyQ29tcG9uZW50KCkubWFya0FzUHJpc3RpbmUoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25Gb3JtQWN0aW9uRXhlY3V0ZWQoYWN0aW9uOiBzdHJpbmcsIGRhdGE6IGFueSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZm9ybUFjdGlvbkV4ZWN1dGVkLmVtaXQoeyBhY3Rpb246IGFjdGlvbiwgZGF0YTogZGF0YSB9KTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXRGb3JtQ29udGFpbmVyKCk6IFNjaGVtYUZpZWxkTG9hZGVyQ29tcG9uZW50QmFzZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Rm9ybUNvbnRlbnRDb21wb25lbnQoKS5nZXRGb3JtQ29udGFpbmVyTG9hZGVyQ29tcG9uZW50KCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0Rm9ybUNvbnRlbnRDb21wb25lbnQoKTogU2NoZW1hRm9ybUNvbnRlbnRDb21wb25lbnQge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1Db250ZW50UXVlcnlMaXN0ICYmIHRoaXMuZm9ybUNvbnRlbnRRdWVyeUxpc3QuZmlyc3Q7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEZvcm1Db250YWluZXJMb2FkZXJDb21wb25lbnQoKTogU2NoZW1hRmllbGRMb2FkZXJDb21wb25lbnRCYXNlIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRGb3JtQ29udGVudENvbXBvbmVudCgpLmZpZWxkSG9zdENvbXBvbmVudC5nZXRGb3JtRmllbGRMb2FkZXJDb21wb25lbnQoKTtcclxuICAgIH1cclxufVxyXG4iLCI8c21lLXNjaGVtYS1mb3JtLWNvbnRlbnQgI2Zvcm1Db250ZW50ICpuZ0lmPVwic2NoZW1hXCIgW3NjaGVtYV09XCJzY2hlbWFcIiBbKGRhdGEpXT1cImRhdGFcIiBbaXNFZGl0b3JNb2RlXT1cIiEhKGVkaXRvciYmZWRpdG9yLmlzT3BlbilcIiBbZm9ybUNvbnRyb2xsZXJdPVwiZm9ybUNvbnRyb2xsZXJcIiAoZm9ybUFjdGlvbkV4ZWN1dGVkKT1cIm9uRm9ybUFjdGlvbkV4ZWN1dGVkKCRldmVudC5hY3Rpb24sICRldmVudC5kYXRhKVwiPjwvc21lLXNjaGVtYS1mb3JtLWNvbnRlbnQ+XHJcbjxkaXYgKm5nSWY9XCIhc2NoZW1hIHx8ICgoc2NoZW1hLnByb3BlcnRpZXMgJiYgc2NoZW1hLnByb3BlcnRpZXMubGVuZ3RoPT09MCkmJiFzY2hlbWEub3B0aW9ucylcIiBjbGFzcz1cInNtZS1wYWRkaW5nLWluc2V0LXNtIHNtZS1ib3JkZXItaW5zZXQtc20gc21lLWJvcmRlci1jb2xvci13aGl0ZS05MFwiPlxyXG4gICAgPHA+e3tzdHJpbmdzLk5vU2NoZW1hTWVzc2FnZS5Sb3cxfX08L3A+XHJcbiAgICA8cD57e3N0cmluZ3MuTm9TY2hlbWFNZXNzYWdlLlJvdzJ9fTwvcD5cclxuICAgIDxwPnt7c3RyaW5ncy5Ob1NjaGVtYU1lc3NhZ2UuUm93M319PC9wPlxyXG48L2Rpdj5cclxuPGRpdiBjbGFzcz1cImVkaXRvciBzbWUtbGF5b3V0LXJlbGF0aXZlIHNtZS1wb3NpdGlvbi1yaWdodC1pbmxpbmUgc21lLXBhZGRpbmctcmlnaHQteGwgc21lLWxheW91dC1mbG9hdC1yaWdodFwiICpuZ0lmPVwiaXNEZXZNb2RlXCI+XHJcbiAgPGJ1dHRvbiBjbGFzcz1cInNtZS1idXR0b24tdHJpZ2dlciBzbWUtYnV0dG9uLWF1dG8td2lkdGggc21lLWJ1dHRvbi1hbGlnbi1sZWZ0IHNtZS1pY29uIHNtZS1pY29uLWVkaXQgc21lLWljb24gc21lLWljb24tZWRpdFwiIChjbGljayk9XCJzaG93RWRpdG9yKClcIj57e3N0cmluZ3MuRWRpdEJ1dHRvbi5UZXh0fX08L2J1dHRvbj5cclxuPC9kaXY+XHJcbjxzbWUtc2NoZW1hLWZvcm0tZWRpdG9yICpuZ0lmPVwiaXNEZXZNb2RlXCIgI2VkaXRvciBbKHNjaGVtYSldPVwic2NoZW1hXCIgWyhkYXRhKV09XCJkYXRhXCIgW2Zvcm1Db250cm9sbGVyXT1cImZvcm1Db250cm9sbGVyXCI+PC9zbWUtc2NoZW1hLWZvcm0tZWRpdG9yPiJdfQ==