@microsoft/windows-admin-center-sdk
Version:
Microsoft - Windows Admin Center Shell
160 lines • 22.5 kB
JavaScript
import { __decorate, __metadata } from "tslib";
import { Component, HostBinding, Injector, Input } from '@angular/core';
import { SmeSchemaProperty } from '../../../schema/schema-decorator';
import { SimplePropertySchemaFieldLoaderComponent } from '../../../schema/schema-field-host.component';
import { SchemaPrimitiveType } from '../../../schema/schema-models';
import { SmeInternalFormFieldComponent } from '../form-field.component';
import * as i0 from "@angular/core";
import * as i1 from "@angular/forms";
import * as i2 from "../form-field-accessor.directive";
import * as i3 from "../form-field-validator.directive";
import * as i4 from "../form-field-async-validator.directive";
import * as i5 from "../../validation-alert/validation-alert.component";
import * as i6 from "../../form-field-layout/form-field-layout.component";
const _c0 = ["type", "toggle-switch"];
/* eslint-disable max-len */
/* eslint-enable max-len */
export class ToggleSwitchFormFieldLoaderComponent extends SimplePropertySchemaFieldLoaderComponent {
}
/** @nocollapse */ ToggleSwitchFormFieldLoaderComponent.ɵfac = /** @pureOrBreakMyCode */ function () { let ɵToggleSwitchFormFieldLoaderComponent_BaseFactory; return function ToggleSwitchFormFieldLoaderComponent_Factory(t) { return (ɵToggleSwitchFormFieldLoaderComponent_BaseFactory || (ɵToggleSwitchFormFieldLoaderComponent_BaseFactory = i0.ɵɵgetInheritedFactory(ToggleSwitchFormFieldLoaderComponent)))(t || ToggleSwitchFormFieldLoaderComponent); }; }();
/** @nocollapse */ ToggleSwitchFormFieldLoaderComponent.ɵcmp = /** @pureOrBreakMyCode */ i0.ɵɵdefineComponent({ type: ToggleSwitchFormFieldLoaderComponent, selectors: [["ng-component"]], features: [i0.ɵɵInheritDefinitionFeature], decls: 2, vars: 10, consts: [["type", "toggle-switch", 3, "ngModel", "name", "label", "description", "required", "readonly", "disabled", "pendingMessage", "customAsyncValidateDisabled", "customAsyncValidateDebounceTime", "ngModelChange", "customValidate", "customAsyncValidate"], ["field", ""]], template: function ToggleSwitchFormFieldLoaderComponent_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "sme-form-field", 0, 1);
i0.ɵɵlistener("ngModelChange", function ToggleSwitchFormFieldLoaderComponent_Template_sme_form_field_ngModelChange_0_listener($event) { return ctx.data = $event; })("customValidate", function ToggleSwitchFormFieldLoaderComponent_Template_sme_form_field_customValidate_0_listener($event) { return ctx.resolveFunction(ctx.propertySchema.customValidation)($event); })("customAsyncValidate", function ToggleSwitchFormFieldLoaderComponent_Template_sme_form_field_customAsyncValidate_0_listener($event) { return ctx.propertySchema.customAsyncValidation && ctx.resolveFunction(ctx.propertySchema.customAsyncValidation.handler)($event); });
i0.ɵɵelementEnd();
} if (rf & 2) {
i0.ɵɵproperty("ngModel", ctx.data)("name", ctx.propertySchema.name)("label", ctx.localize(ctx.propertySchema.label))("description", ctx.localize(ctx.propertySchema.description))("required", ctx.propertySchema.required)("readonly", !!ctx.evalExpression(ctx.propertySchema.readonlyCondition))("disabled", !!(ctx.propertySchema.disabledCondition && ctx.evalExpression(ctx.propertySchema.disabledCondition)))("pendingMessage", ctx.propertySchema.customAsyncValidation && ctx.localize(ctx.propertySchema.customAsyncValidation.pendingMessage))("customAsyncValidateDisabled", ctx.shouldCustomAsyncValidationBeDisabled())("customAsyncValidateDebounceTime", ctx.propertySchema.customAsyncValidation && +ctx.propertySchema.customAsyncValidation.handler);
} }, dependencies: function () { return [i1.NgControlStatus, i1.RequiredValidator, i1.NgModel, ToggleSwitchFormFieldComponent, i2.FormFieldAccessorDirective, i3.FormFieldValidatorDirective, i4.FormFieldAsyncValidatorDirective]; }, encapsulation: 2 });
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ToggleSwitchFormFieldLoaderComponent, [{
type: Component,
args: [{
template: `
<sme-form-field #field type="toggle-switch" [(ngModel)]="data" [name]="propertySchema.name" [label]="localize(propertySchema.label)"
[description]="localize(propertySchema.description)" [required]="propertySchema.required"
[readonly]="!!evalExpression(propertySchema.readonlyCondition)"
[disabled]="!!(propertySchema.disabledCondition && evalExpression(propertySchema.disabledCondition))"
(customValidate)="resolveFunction(propertySchema.customValidation)($event)"
(customAsyncValidate)="propertySchema.customAsyncValidation && resolveFunction(propertySchema.customAsyncValidation.handler)($event)"
[pendingMessage]="propertySchema.customAsyncValidation && localize(propertySchema.customAsyncValidation.pendingMessage)"
[customAsyncValidateDisabled]="shouldCustomAsyncValidationBeDisabled()"
[customAsyncValidateDebounceTime]="propertySchema.customAsyncValidation && +propertySchema.customAsyncValidation.handler"
></sme-form-field>
`
}]
}], null, null); })();
let ToggleSwitchFormFieldComponent = class ToggleSwitchFormFieldComponent extends SmeInternalFormFieldComponent {
/**
* Initializes a new instance of the ToggleSwitchFormFieldComponent
*/
constructor(injector) {
super(injector);
this.labelOn = this.strings.MsftSmeShell.Angular.Common.on;
this.labelOff = this.strings.MsftSmeShell.Angular.Common.off;
}
/**
* The source name to use for logging
*/
get logSourceName() {
return 'ToggleSwitchFormFieldComponent';
}
/**
* Indicates the default value for immediateValidation.
* This is meant to be overridden by derived classes
*/
get defaultImmediateValidation() {
return true;
}
/**
* The aria label for this instance
*/
get ariaLabel() {
return this.getMergedDescriptionLabel();
}
/**
* Implementation of angular OnInit interface
*/
ngOnInit() {
super.ngOnInit();
this.setAttribute('role', 'group');
}
/**
* Gets the initial host classes to be applied to this element
* When called in the @see BaseComponent super class initialization, These classes will be automatically assigned to the host element.
*/
getInitialHostClasses() {
return super.getInitialHostClasses().concat([
'sme-form-field-auto-height'
]);
}
/**
* Creates the idBag used by this component to store unique element ids.
* id values will be assigned be the @see BaseComponent super class.
*/
createIdBag() {
return {
stateLabelSpan: '',
detailsSpan: ''
};
}
/**
* We only truly disable the switch if not in accessibility mode
*/
getDisabledStatus() {
return this.loadingOrDisabled && !MsftSme.self().Resources.accessibilityMode;
}
/**
* We disabled event propagation for disabled toggle switch
*/
toggleChanged(event) {
if (this.loadingOrDisabled) {
event.preventDefault();
event.stopPropagation();
event.stopImmediatePropagation();
}
}
};
/** @nocollapse */ ToggleSwitchFormFieldComponent.ɵfac = function ToggleSwitchFormFieldComponent_Factory(t) { return new (t || ToggleSwitchFormFieldComponent)(i0.ɵɵdirectiveInject(i0.Injector)); };
/** @nocollapse */ ToggleSwitchFormFieldComponent.ɵcmp = /** @pureOrBreakMyCode */ i0.ɵɵdefineComponent({ type: ToggleSwitchFormFieldComponent, selectors: [["sme-form-field", "type", "toggle-switch"]], hostVars: 1, hostBindings: function ToggleSwitchFormFieldComponent_HostBindings(rf, ctx) { if (rf & 2) {
i0.ɵɵattribute("aria-label", ctx.ariaLabel);
} }, inputs: { labelOn: "labelOn", labelOff: "labelOff" }, features: [i0.ɵɵInheritDefinitionFeature], attrs: _c0, decls: 7, vars: 9, consts: [[3, "formField"], [1, "sme-toggle-switch", "sme-form-field-editor"], [1, "sme-arrange-stack-h"], ["role", "switch", "type", "checkbox", 3, "ngModel", "disabled", "ngModelChange", "keyup.Space"], [1, "sme-position-flex-auto", 3, "id"], [3, "alert"]], template: function ToggleSwitchFormFieldComponent_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "sme-form-field-layout", 0)(1, "div", 1)(2, "label", 2)(3, "input", 3);
i0.ɵɵlistener("ngModelChange", function ToggleSwitchFormFieldComponent_Template_input_ngModelChange_3_listener($event) { return ctx.value = $event; })("keyup.Space", function ToggleSwitchFormFieldComponent_Template_input_keyup_Space_3_listener($event) { return ctx.toggleChanged($event); });
i0.ɵɵelementEnd();
i0.ɵɵelementStart(4, "span", 4);
i0.ɵɵtext(5);
i0.ɵɵelementEnd()()();
i0.ɵɵelement(6, "sme-validation-alert", 5);
i0.ɵɵelementEnd();
} if (rf & 2) {
i0.ɵɵproperty("formField", ctx);
i0.ɵɵadvance(3);
i0.ɵɵproperty("ngModel", ctx.value)("disabled", ctx.getDisabledStatus());
i0.ɵɵattribute("aria-label", ctx.ariaLabel)("aria-disabled", ctx.loadingOrDisabled)("aria-checked", ctx.value);
i0.ɵɵadvance(1);
i0.ɵɵproperty("id", ctx.idBag.stateLabelSpan);
i0.ɵɵadvance(1);
i0.ɵɵtextInterpolate(ctx.value ? ctx.labelOn : ctx.labelOff);
i0.ɵɵadvance(1);
i0.ɵɵproperty("alert", ctx.alert);
} }, dependencies: [i1.CheckboxControlValueAccessor, i1.NgControlStatus, i1.NgModel, i5.ValidationAlertComponent, i6.FormFieldLayoutComponent], encapsulation: 2 });
ToggleSwitchFormFieldComponent = __decorate([
SmeSchemaProperty({
type: SchemaPrimitiveType.Boolean,
format: 'toggle-switch',
description: 'A toggle switch control binding to boolean data.',
loaderComponent: ToggleSwitchFormFieldLoaderComponent
}),
__metadata("design:paramtypes", [Injector])
], ToggleSwitchFormFieldComponent);
export { ToggleSwitchFormFieldComponent };
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ToggleSwitchFormFieldComponent, [{
type: Component,
args: [{ selector: 'sme-form-field[type="toggle-switch"]', template: "<sme-form-field-layout [formField]=\"this\">\r\n <div class=\"sme-toggle-switch sme-form-field-editor\">\r\n <label class=\"sme-arrange-stack-h\">\r\n <input role=\"switch\" type=\"checkbox\" [attr.aria-label]=\"ariaLabel\" [attr.aria-disabled]=\"loadingOrDisabled\"\r\n [attr.aria-checked]=\"value\" [(ngModel)]=\"value\" [disabled]=\"getDisabledStatus()\" (keyup.Space)=\"toggleChanged($event)\">\r\n <span class=\"sme-position-flex-auto\" [id]=\"idBag.stateLabelSpan\">{{value ? labelOn : labelOff}}</span>\r\n </label>\r\n </div>\r\n\r\n <sme-validation-alert [alert]=\"alert\"></sme-validation-alert>\r\n</sme-form-field-layout>\r\n" }]
}], function () { return [{ type: i0.Injector }]; }, { labelOn: [{
type: Input
}], labelOff: [{
type: Input
}], ariaLabel: [{
type: HostBinding,
args: ['attr.aria-label']
}] }); })();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9nZ2xlLXN3aXRjaC1mb3JtLWZpZWxkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FuZ3VsYXIvc3JjL2NvbnRyb2xzL2Zvcm0vZm9ybS1maWVsZC90b2dnbGUtc3dpdGNoL3RvZ2dsZS1zd2l0Y2gtZm9ybS1maWVsZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbmd1bGFyL3NyYy9jb250cm9scy9mb3JtL2Zvcm0tZmllbGQvdG9nZ2xlLXN3aXRjaC90b2dnbGUtc3dpdGNoLWZvcm0tZmllbGQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDaEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDckUsT0FBTyxFQUFFLHdDQUF3QyxFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDdkcsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDcEUsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0seUJBQXlCLENBQUM7Ozs7Ozs7OztBQUV4RSw0QkFBNEI7QUFlNUIsMkJBQTJCO0FBQzNCLE1BQU0sT0FBTyxvQ0FBcUMsU0FBUSx3Q0FBd0M7OzJXQUFyRixvQ0FBb0MsU0FBcEMsb0NBQW9DO3NIQUFwQyxvQ0FBb0M7UUFiN0MsNENBU0s7UUFUdUMsb0tBQWtCLG9JQUl4Qyx3REFBZ0QsUUFBUSxJQUpoQiwwTEFLSyxxRUFBNkQsUUFBUSxJQUwxRTtRQVN6RCxpQkFBaUI7O1FBVHNCLGtDQUFrQixpQ0FBQSxpREFBQSw2REFBQSx5Q0FBQSx3RUFBQSxrSEFBQSxxSUFBQSw0RUFBQSxrSUFBQTttR0EwQnJELDhCQUE4Qjt1RkFiOUIsb0NBQW9D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cnQgeyBDb21wb25lbnQsIEhvc3RCaW5kaW5nLCBJbmplY3RvciwgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTbWVTY2hlbWFQcm9wZXJ0eSB9IGZyb20gJy4uLy4uLy4uL3NjaGVtYS9zY2hlbWEtZGVjb3JhdG9yJztcclxuaW1wb3J0IHsgU2ltcGxlUHJvcGVydHlTY2hlbWFGaWVsZExvYWRlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL3NjaGVtYS9zY2hlbWEtZmllbGQtaG9zdC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBTY2hlbWFQcmltaXRpdmVUeXBlIH0gZnJvbSAnLi4vLi4vLi4vc2NoZW1hL3NjaGVtYS1tb2RlbHMnO1xyXG5pbXBvcnQgeyBTbWVJbnRlcm5hbEZvcm1GaWVsZENvbXBvbmVudCB9IGZyb20gJy4uL2Zvcm0tZmllbGQuY29tcG9uZW50JztcclxuXHJcbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgICB0ZW1wbGF0ZTogYFxyXG4gICAgPHNtZS1mb3JtLWZpZWxkICNmaWVsZCB0eXBlPVwidG9nZ2xlLXN3aXRjaFwiIFsobmdNb2RlbCldPVwiZGF0YVwiIFtuYW1lXT1cInByb3BlcnR5U2NoZW1hLm5hbWVcIiBbbGFiZWxdPVwibG9jYWxpemUocHJvcGVydHlTY2hlbWEubGFiZWwpXCJcclxuICAgICAgICBbZGVzY3JpcHRpb25dPVwibG9jYWxpemUocHJvcGVydHlTY2hlbWEuZGVzY3JpcHRpb24pXCIgW3JlcXVpcmVkXT1cInByb3BlcnR5U2NoZW1hLnJlcXVpcmVkXCJcclxuICAgICAgICBbcmVhZG9ubHldPVwiISFldmFsRXhwcmVzc2lvbihwcm9wZXJ0eVNjaGVtYS5yZWFkb25seUNvbmRpdGlvbilcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCIhIShwcm9wZXJ0eVNjaGVtYS5kaXNhYmxlZENvbmRpdGlvbiAmJiBldmFsRXhwcmVzc2lvbihwcm9wZXJ0eVNjaGVtYS5kaXNhYmxlZENvbmRpdGlvbikpXCJcclxuICAgICAgICAoY3VzdG9tVmFsaWRhdGUpPVwicmVzb2x2ZUZ1bmN0aW9uKHByb3BlcnR5U2NoZW1hLmN1c3RvbVZhbGlkYXRpb24pKCRldmVudClcIlxyXG4gICAgICAgIChjdXN0b21Bc3luY1ZhbGlkYXRlKT1cInByb3BlcnR5U2NoZW1hLmN1c3RvbUFzeW5jVmFsaWRhdGlvbiAmJiByZXNvbHZlRnVuY3Rpb24ocHJvcGVydHlTY2hlbWEuY3VzdG9tQXN5bmNWYWxpZGF0aW9uLmhhbmRsZXIpKCRldmVudClcIlxyXG4gICAgICAgIFtwZW5kaW5nTWVzc2FnZV09XCJwcm9wZXJ0eVNjaGVtYS5jdXN0b21Bc3luY1ZhbGlkYXRpb24gJiYgbG9jYWxpemUocHJvcGVydHlTY2hlbWEuY3VzdG9tQXN5bmNWYWxpZGF0aW9uLnBlbmRpbmdNZXNzYWdlKVwiXHJcbiAgICAgICAgW2N1c3RvbUFzeW5jVmFsaWRhdGVEaXNhYmxlZF09XCJzaG91bGRDdXN0b21Bc3luY1ZhbGlkYXRpb25CZURpc2FibGVkKClcIlxyXG4gICAgICAgIFtjdXN0b21Bc3luY1ZhbGlkYXRlRGVib3VuY2VUaW1lXT1cInByb3BlcnR5U2NoZW1hLmN1c3RvbUFzeW5jVmFsaWRhdGlvbiAmJiArcHJvcGVydHlTY2hlbWEuY3VzdG9tQXN5bmNWYWxpZGF0aW9uLmhhbmRsZXJcIlxyXG4gICAgICAgID48L3NtZS1mb3JtLWZpZWxkPlxyXG4gICAgYFxyXG59KVxyXG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4gKi9cclxuZXhwb3J0IGNsYXNzIFRvZ2dsZVN3aXRjaEZvcm1GaWVsZExvYWRlckNvbXBvbmVudCBleHRlbmRzIFNpbXBsZVByb3BlcnR5U2NoZW1hRmllbGRMb2FkZXJDb21wb25lbnQge1xyXG59XHJcblxyXG5AU21lU2NoZW1hUHJvcGVydHkoe1xyXG4gICAgdHlwZTogU2NoZW1hUHJpbWl0aXZlVHlwZS5Cb29sZWFuLFxyXG4gICAgZm9ybWF0OiAndG9nZ2xlLXN3aXRjaCcsXHJcbiAgICBkZXNjcmlwdGlvbjogJ0EgdG9nZ2xlIHN3aXRjaCBjb250cm9sIGJpbmRpbmcgdG8gYm9vbGVhbiBkYXRhLicsXHJcbiAgICBsb2FkZXJDb21wb25lbnQ6IFRvZ2dsZVN3aXRjaEZvcm1GaWVsZExvYWRlckNvbXBvbmVudFxyXG59KVxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnc21lLWZvcm0tZmllbGRbdHlwZT1cInRvZ2dsZS1zd2l0Y2hcIl0nLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3RvZ2dsZS1zd2l0Y2gtZm9ybS1maWVsZC5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFRvZ2dsZVN3aXRjaEZvcm1GaWVsZENvbXBvbmVudCBleHRlbmRzIFNtZUludGVybmFsRm9ybUZpZWxkQ29tcG9uZW50PGJvb2xlYW4+IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBzb3VyY2UgbmFtZSB0byB1c2UgZm9yIGxvZ2dpbmdcclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGdldCBsb2dTb3VyY2VOYW1lKCkge1xyXG4gICAgICAgIHJldHVybiAnVG9nZ2xlU3dpdGNoRm9ybUZpZWxkQ29tcG9uZW50JztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEluZGljYXRlcyB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgaW1tZWRpYXRlVmFsaWRhdGlvbi5cclxuICAgICAqIFRoaXMgaXMgbWVhbnQgdG8gYmUgb3ZlcnJpZGRlbiBieSBkZXJpdmVkIGNsYXNzZXNcclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGdldCBkZWZhdWx0SW1tZWRpYXRlVmFsaWRhdGlvbigpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBsYWJlbCB0byBzaG93IHdoZW4gdGhlIHN3aXRjaCBpcyBvblxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGxhYmVsT246IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBsYWJlbCB0byBzaG93IHdoZW4gdGhlIHN3aXRjaCBpcyBvZmZcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBsYWJlbE9mZjogc3RyaW5nO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGFyaWEgbGFiZWwgZm9yIHRoaXMgaW5zdGFuY2VcclxuICAgICAqL1xyXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtbGFiZWwnKVxyXG4gICAgcHVibGljIGdldCBhcmlhTGFiZWwoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRNZXJnZWREZXNjcmlwdGlvbkxhYmVsKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbml0aWFsaXplcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgVG9nZ2xlU3dpdGNoRm9ybUZpZWxkQ29tcG9uZW50XHJcbiAgICAgKi9cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIGluamVjdG9yOiBJbmplY3RvclxyXG4gICAgKSB7XHJcbiAgICAgICAgc3VwZXIoaW5qZWN0b3IpO1xyXG4gICAgICAgIHRoaXMubGFiZWxPbiA9IHRoaXMuc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Db21tb24ub247XHJcbiAgICAgICAgdGhpcy5sYWJlbE9mZiA9IHRoaXMuc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Db21tb24ub2ZmO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW1wbGVtZW50YXRpb24gb2YgYW5ndWxhciBPbkluaXQgaW50ZXJmYWNlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBuZ09uSW5pdCgpIHtcclxuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xyXG4gICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKCdyb2xlJywgJ2dyb3VwJyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBpbml0aWFsIGhvc3QgY2xhc3NlcyB0byBiZSBhcHBsaWVkIHRvIHRoaXMgZWxlbWVudFxyXG4gICAgICogV2hlbiBjYWxsZWQgaW4gdGhlIEBzZWUgQmFzZUNvbXBvbmVudCBzdXBlciBjbGFzcyBpbml0aWFsaXphdGlvbiwgVGhlc2UgY2xhc3NlcyB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgYXNzaWduZWQgdG8gdGhlIGhvc3QgZWxlbWVudC5cclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGdldEluaXRpYWxIb3N0Q2xhc3NlcygpOiBzdHJpbmdbXSB7XHJcbiAgICAgICAgcmV0dXJuIHN1cGVyLmdldEluaXRpYWxIb3N0Q2xhc3NlcygpLmNvbmNhdChbXHJcbiAgICAgICAgICAgICdzbWUtZm9ybS1maWVsZC1hdXRvLWhlaWdodCdcclxuICAgICAgICBdKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgdGhlIGlkQmFnIHVzZWQgYnkgdGhpcyBjb21wb25lbnQgdG8gc3RvcmUgdW5pcXVlIGVsZW1lbnQgaWRzLlxyXG4gICAgICogaWQgdmFsdWVzIHdpbGwgYmUgYXNzaWduZWQgYmUgdGhlIEBzZWUgQmFzZUNvbXBvbmVudCBzdXBlciBjbGFzcy5cclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGNyZWF0ZUlkQmFnKCk6IE1zZnRTbWUuU3RyaW5nTWFwPHN0cmluZz4ge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHN0YXRlTGFiZWxTcGFuOiAnJyxcclxuICAgICAgICAgICAgZGV0YWlsc1NwYW46ICcnXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFdlIG9ubHkgdHJ1bHkgZGlzYWJsZSB0aGUgc3dpdGNoIGlmIG5vdCBpbiBhY2Nlc3NpYmlsaXR5IG1vZGVcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldERpc2FibGVkU3RhdHVzKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmxvYWRpbmdPckRpc2FibGVkICYmICFNc2Z0U21lLnNlbGYoKS5SZXNvdXJjZXMuYWNjZXNzaWJpbGl0eU1vZGU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBXZSBkaXNhYmxlZCBldmVudCBwcm9wYWdhdGlvbiBmb3IgZGlzYWJsZWQgdG9nZ2xlIHN3aXRjaFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgdG9nZ2xlQ2hhbmdlZChldmVudCkge1xyXG4gICAgICAgIGlmICh0aGlzLmxvYWRpbmdPckRpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIiwiPHNtZS1mb3JtLWZpZWxkLWxheW91dCBbZm9ybUZpZWxkXT1cInRoaXNcIj5cclxuICA8ZGl2IGNsYXNzPVwic21lLXRvZ2dsZS1zd2l0Y2ggc21lLWZvcm0tZmllbGQtZWRpdG9yXCI+XHJcbiAgICA8bGFiZWwgY2xhc3M9XCJzbWUtYXJyYW5nZS1zdGFjay1oXCI+XHJcbiAgICAgIDxpbnB1dCByb2xlPVwic3dpdGNoXCIgdHlwZT1cImNoZWNrYm94XCIgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWxcIiBbYXR0ci5hcmlhLWRpc2FibGVkXT1cImxvYWRpbmdPckRpc2FibGVkXCJcclxuICAgICAgICAgICAgIFthdHRyLmFyaWEtY2hlY2tlZF09XCJ2YWx1ZVwiIFsobmdNb2RlbCldPVwidmFsdWVcIiBbZGlzYWJsZWRdPVwiZ2V0RGlzYWJsZWRTdGF0dXMoKVwiIChrZXl1cC5TcGFjZSk9XCJ0b2dnbGVDaGFuZ2VkKCRldmVudClcIj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJzbWUtcG9zaXRpb24tZmxleC1hdXRvXCIgW2lkXT1cImlkQmFnLnN0YXRlTGFiZWxTcGFuXCI+e3t2YWx1ZSA/IGxhYmVsT24gOiBsYWJlbE9mZn19PC9zcGFuPlxyXG4gICAgPC9sYWJlbD5cclxuICA8L2Rpdj5cclxuXHJcbiAgPHNtZS12YWxpZGF0aW9uLWFsZXJ0IFthbGVydF09XCJhbGVydFwiPjwvc21lLXZhbGlkYXRpb24tYWxlcnQ+XHJcbjwvc21lLWZvcm0tZmllbGQtbGF5b3V0PlxyXG4iXX0=