UNPKG

@microsoft/windows-admin-center-sdk

Version:

Microsoft - Windows Admin Center Shell

314 lines 33 kB
import { Component, HostBinding, Injector, Input } from '@angular/core'; import { CoreBaseComponent } from '../../common/base.component'; import { ValidationAlertSeverity } from './validation-alert'; import * as i0 from "@angular/core"; import * as i1 from "@angular/common"; import * as i2 from "../../loading-wheel/loading-wheel.component"; import * as i3 from "../../../directives/markdown/markdown.directive"; function ValidationAlertComponent_sme_loading_wheel_0_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelement(0, "sme-loading-wheel", 2); } if (rf & 2) { i0.ɵɵproperty("isBackgroundTransparent", true); } } function ValidationAlertComponent_div_1_span_4_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "span"); i0.ɵɵtext(1); i0.ɵɵelementEnd(); } if (rf & 2) { const ctx_r2 = i0.ɵɵnextContext(2); i0.ɵɵattribute("id", ctx_r2.idBag.alertMessage); i0.ɵɵadvance(1); i0.ɵɵtextInterpolate(ctx_r2.message); } } function ValidationAlertComponent_div_1_p_5_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelement(0, "p", 8); } if (rf & 2) { const ctx_r3 = i0.ɵɵnextContext(2); i0.ɵɵproperty("smeMarkdown", ctx_r3.message); i0.ɵɵattribute("id", ctx_r3.idBag.alertMessage); } } function ValidationAlertComponent_div_1_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "div", 3); i0.ɵɵelement(1, "span", 4); i0.ɵɵelementStart(2, "span", 5); i0.ɵɵtext(3); i0.ɵɵelementEnd(); i0.ɵɵtemplate(4, ValidationAlertComponent_div_1_span_4_Template, 2, 2, "span", 6); i0.ɵɵtemplate(5, ValidationAlertComponent_div_1_p_5_Template, 1, 2, "p", 7); i0.ɵɵelementEnd(); } if (rf & 2) { const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵattribute("role", ctx_r1.useRoleAlert)("aria-labelledby", ctx_r1.idBag.alertType + " " + ctx_r1.idBag.alertMessage); i0.ɵɵadvance(1); i0.ɵɵclassMap(ctx_r1.alertClass); i0.ɵɵadvance(1); i0.ɵɵattribute("id", ctx_r1.idBag.alertType); i0.ɵɵadvance(1); i0.ɵɵtextInterpolate(ctx_r1.alertType); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", !ctx_r1.isMarkdownMessage); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", ctx_r1.isMarkdownMessage); } } /** * Component for displaying a form validation alert. * Alerts are not necessarily errors, they can display other types of * information that the user should know about a value they entered into a form field */ export class ValidationAlertComponent extends CoreBaseComponent { constructor(injector) { super(injector); /** * Optionally show background color for the alert. */ this.showBackground = false; /** * The default role for the alert */ this.role = 'alert'; /** * The icon class to use for the alert */ this.iconClass = null; } /** * The source name to use for logging */ get logSourceName() { return 'ValidationAlertComponent'; } /** * Indicates the value to use for the 'role' attribute */ get useRoleAlert() { return MsftSme.isNullOrUndefined(this.role) ? null : 'alert'; } /** * Indicates that there is an alert to display */ get hasAlert() { return !MsftSme.isNullOrUndefined(this.alert); } /** * Indicates that this alert is hidden */ get isHidden() { return !!this.alert?.hidden; } /** * Indicates that the current alert is valid */ get valid() { return this.hasAlert && this.alert.valid; } /** * Indicates that the current alert is valid */ get message() { return this.hasAlert ? this.alert.message : ''; } /** * Indicates that the current alert should be rendered with markdown */ get isMarkdownMessage() { return this.hasAlert && this.alert.isMarkdownMessage; } /** * Indicates that the current alert has a severity defined */ get hasSeverity() { return this.hasAlert && !MsftSme.isNullOrUndefined(ValidationAlertSeverity[this.alert.severity]); } /** * Indicates that the current alert has a custom icon */ get hasCustomIcon() { return this.hasAlert && !MsftSme.isNullOrWhiteSpace(this.alert.iconClass); } /** * Indicates that the current alert is valid */ get isPending() { return this.hasAlert && this.alert.pending; } /** * Indicates that the current alert is an error alert * Errors are always invalid with either no severity or error severity */ get isError() { return this.hasAlert && !this.isPending && (this.alert.severity === ValidationAlertSeverity.Error || (!this.valid && !this.hasSeverity)); } /** * Indicates that the current alert is an warning alert * Warnings may be valid or invalid (usually valid) with warning severity */ get isWarning() { return this.hasAlert && !this.isPending && this.alert.severity === ValidationAlertSeverity.Warning; } /** * Indicates that the current alert is an informational alert * Informational alerts may be valid or invalid (usually valid) with informational severity */ get isInformational() { return this.hasAlert && !this.isPending && this.alert.severity === ValidationAlertSeverity.Informational; } /** * Indicates that the current alert is an success alert * Success alerts are always valid with no severity severity */ get isSuccess() { return this.valid && !this.isPending && !this.hasSeverity; } /** * Indicates that the current alert is an success alert */ get alertType() { const alertTypes = this.strings.MsftSmeShell.Angular.Common.Form.Validation.AlertTypes; if (this.isPending) { return alertTypes.pending; } else if (this.isSuccess) { return alertTypes.success; } else if (this.isWarning) { return alertTypes.warn; } else if (this.isInformational) { return alertTypes.info; } else if (this.isError) { return alertTypes.error; } else { return ''; } } /** * Gets the class to apply to the alert icon */ get alertClass() { let alertString = ''; if (this.isPending) { alertString = 'sme-alert-pending'; } else if (this.isSuccess) { alertString = 'sme-alert-success'; } else if (this.isWarning) { alertString = 'sme-alert-warning'; } else if (this.isInformational) { alertString = 'sme-alert-informational'; } else if (this.isError) { alertString = 'sme-alert-error'; } else { alertString = ''; } if (this.iconClass) { alertString = alertString ? `${alertString} ${this.iconClass}` : this.iconClass; } if (this.showBackground) { alertString += alertString ? `${alertString} sme-alert-background` : 'sme-alert-background'; } return alertString; } /** * Implementation of angular OnInit interface */ ngOnInit() { super.ngOnInit(); } ngOnChanges(changes) { super.ngOnChanges(changes); if (changes.alert) { if (!MsftSme.isNullOrWhiteSpace(this.iconClass)) { this.renderer.removeClass(this.hostElement.nativeElement, this.iconClass); } if (this.hasCustomIcon) { this.iconClass = this.alert.iconClass; } else if (this.isError) { this.iconClass = 'sme-icon-criticalErrorSolid'; } else if (this.isWarning) { this.iconClass = 'sme-icon-warningSolid'; } else if (this.isInformational) { this.iconClass = 'sme-icon-infoSolid'; } else if (this.isSuccess) { this.iconClass = 'sme-icon-completedSolid'; } else { this.iconClass = null; } } } /** * 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-alert' ]); } /** * 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 { alertMessage: '', alertType: '' }; } } /** @nocollapse */ ValidationAlertComponent.ɵfac = function ValidationAlertComponent_Factory(t) { return new (t || ValidationAlertComponent)(i0.ɵɵdirectiveInject(i0.Injector)); }; /** @nocollapse */ ValidationAlertComponent.ɵcmp = /** @pureOrBreakMyCode */ i0.ɵɵdefineComponent({ type: ValidationAlertComponent, selectors: [["sme-validation-alert"], ["sme-alert"]], hostVars: 14, hostBindings: function ValidationAlertComponent_HostBindings(rf, ctx) { if (rf & 2) { i0.ɵɵclassProp("sme-alert-background", ctx.showBackground)("sme-layout-none", ctx.isHidden)("sme-alert-pending", ctx.isPending)("sme-alert-error", ctx.isError)("sme-alert-warning", ctx.isWarning)("sme-alert-informational", ctx.isInformational)("sme-alert-success", ctx.isSuccess); } }, inputs: { showBackground: "showBackground", alert: "alert", role: "role" }, features: [i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature], decls: 2, vars: 2, consts: [["size", "small", "class", "sme-layout-relative sme-layout-inline-block sme-width-lg sme-margin-right-xs", 3, "isBackgroundTransparent", 4, "ngIf"], ["class", "sme-arrange-stack-inline", 4, "ngIf"], ["size", "small", 1, "sme-layout-relative", "sme-layout-inline-block", "sme-width-lg", "sme-margin-right-xs", 3, "isBackgroundTransparent"], [1, "sme-arrange-stack-inline"], ["aria-hidden", "true", 1, "sme-alert-icon", "sme-icon", "sme-icon-size-xs"], [1, "sme-screen-reader"], [4, "ngIf"], [3, "smeMarkdown", 4, "ngIf"], [3, "smeMarkdown"]], template: function ValidationAlertComponent_Template(rf, ctx) { if (rf & 1) { i0.ɵɵtemplate(0, ValidationAlertComponent_sme_loading_wheel_0_Template, 1, 1, "sme-loading-wheel", 0); i0.ɵɵtemplate(1, ValidationAlertComponent_div_1_Template, 6, 8, "div", 1); } if (rf & 2) { i0.ɵɵproperty("ngIf", ctx.isPending); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", ctx.hasAlert); } }, dependencies: [i1.NgIf, i2.LoadingWheelComponent, i3.MarkdownDirective], encapsulation: 2 }); (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ValidationAlertComponent, [{ type: Component, args: [{ selector: 'sme-validation-alert, sme-alert', template: "<sme-loading-wheel size=\"small\" *ngIf=\"isPending\" [isBackgroundTransparent]=\"true\"\r\n class=\"sme-layout-relative sme-layout-inline-block sme-width-lg sme-margin-right-xs\"></sme-loading-wheel>\r\n\r\n<div *ngIf=\"hasAlert\" [attr.role]=\"useRoleAlert\" [attr.aria-labelledby]=\"idBag.alertType + ' ' + idBag.alertMessage\" class=\"sme-arrange-stack-inline\">\r\n <span class=\"sme-alert-icon sme-icon sme-icon-size-xs\" [class]=\"alertClass\" aria-hidden=\"true\"></span>\r\n <span [attr.id]=\"idBag.alertType\" class=\"sme-screen-reader\">{{alertType}}</span>\r\n <span [attr.id]=\"idBag.alertMessage\" *ngIf=\"!isMarkdownMessage\">{{message}}</span>\r\n <p [attr.id]=\"idBag.alertMessage\" *ngIf=\"isMarkdownMessage\" [smeMarkdown]=\"message\"></p>\r\n</div>" }] }], function () { return [{ type: i0.Injector }]; }, { showBackground: [{ type: HostBinding, args: ['class.sme-alert-background'] }, { type: Input }], alert: [{ type: Input }], role: [{ type: Input }], isHidden: [{ type: HostBinding, args: ['class.sme-layout-none'] }], isPending: [{ type: HostBinding, args: ['class.sme-alert-pending'] }], isError: [{ type: HostBinding, args: ['class.sme-alert-error'] }], isWarning: [{ type: HostBinding, args: ['class.sme-alert-warning'] }], isInformational: [{ type: HostBinding, args: ['class.sme-alert-informational'] }], isSuccess: [{ type: HostBinding, args: ['class.sme-alert-success'] }] }); })(); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi1hbGVydC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbmd1bGFyL3NyYy9jb250cm9scy9mb3JtL3ZhbGlkYXRpb24tYWxlcnQvdmFsaWRhdGlvbi1hbGVydC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbmd1bGFyL3NyYy9jb250cm9scy9mb3JtL3ZhbGlkYXRpb24tYWxlcnQvdmFsaWRhdGlvbi1hbGVydC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFvQyxNQUFNLGVBQWUsQ0FBQztBQUMxRyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEVBQW1CLHVCQUF1QixFQUFFLE1BQU0sb0JBQW9CLENBQUM7Ozs7OztJQ0Y5RSx1Q0FDNkc7O0lBRDNELDhDQUFnQzs7O0lBTTlFLDRCQUFnRTtJQUFBLFlBQVc7SUFBQSxpQkFBTzs7O0lBQTVFLCtDQUE4QjtJQUE0QixlQUFXO0lBQVgsb0NBQVc7OztJQUMzRSx1QkFBd0Y7OztJQUE1Qiw0Q0FBdUI7SUFBaEYsK0NBQThCOzs7SUFKckMsOEJBQXNKO0lBQ2xKLDBCQUFzRztJQUN0RywrQkFBNEQ7SUFBQSxZQUFhO0lBQUEsaUJBQU87SUFDaEYsaUZBQWtGO0lBQ2xGLDJFQUF3RjtJQUM1RixpQkFBTTs7O0lBTGdCLDJDQUEwQiw2RUFBQTtJQUNXLGVBQW9CO0lBQXBCLGdDQUFvQjtJQUNyRSxlQUEyQjtJQUEzQiw0Q0FBMkI7SUFBMkIsZUFBYTtJQUFiLHNDQUFhO0lBQ25DLGVBQXdCO0lBQXhCLGdEQUF3QjtJQUMzQixlQUF1QjtJQUF2QiwrQ0FBdUI7O0FESDlEOzs7O0dBSUc7QUFLSCxNQUFNLE9BQU8sd0JBQXlCLFNB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LFdBQVc7bUJBQUMseUJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBIb3N0QmluZGluZywgSW5qZWN0b3IsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb3JlQmFzZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbW1vbi9iYXNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFZhbGlkYXRpb25BbGVydCwgVmFsaWRhdGlvbkFsZXJ0U2V2ZXJpdHkgfSBmcm9tICcuL3ZhbGlkYXRpb24tYWxlcnQnO1xyXG5cclxuLyoqXHJcbiAqIENvbXBvbmVudCBmb3IgZGlzcGxheWluZyBhIGZvcm0gdmFsaWRhdGlvbiBhbGVydC5cclxuICogQWxlcnRzIGFyZSBub3QgbmVjZXNzYXJpbHkgZXJyb3JzLCB0aGV5IGNhbiBkaXNwbGF5IG90aGVyIHR5cGVzIG9mXHJcbiAqIGluZm9ybWF0aW9uIHRoYXQgdGhlIHVzZXIgc2hvdWxkIGtub3cgYWJvdXQgYSB2YWx1ZSB0aGV5IGVudGVyZWQgaW50byBhIGZvcm0gZmllbGRcclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdzbWUtdmFsaWRhdGlvbi1hbGVydCwgc21lLWFsZXJ0JyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi92YWxpZGF0aW9uLWFsZXJ0LmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgVmFsaWRhdGlvbkFsZXJ0Q29tcG9uZW50IGV4dGVuZHMgQ29yZUJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgc291cmNlIG5hbWUgdG8gdXNlIGZvciBsb2dnaW5nXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBnZXQgbG9nU291cmNlTmFtZSgpIHtcclxuICAgICAgICByZXR1cm4gJ1ZhbGlkYXRpb25BbGVydENvbXBvbmVudCc7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIE9wdGlvbmFsbHkgc2hvdyBiYWNrZ3JvdW5kIGNvbG9yIGZvciB0aGUgYWxlcnQuXHJcbiAgICAgKi9cclxuICAgIEBIb3N0QmluZGluZygnY2xhc3Muc21lLWFsZXJ0LWJhY2tncm91bmQnKVxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBzaG93QmFja2dyb3VuZCA9IGZhbHNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGFsZXJ0IFZhbGlkYXRpb24gYWxlcnQgd2UgbmVlZCB0byBkaXNwbGF5LlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGFsZXJ0OiBWYWxpZGF0aW9uQWxlcnQ7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgZGVmYXVsdCByb2xlIGZvciB0aGUgYWxlcnRcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyByb2xlID0gJ2FsZXJ0JztcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBpY29uIGNsYXNzIHRvIHVzZSBmb3IgdGhlIGFsZXJ0XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBpY29uQ2xhc3M6IHN0cmluZyA9IG51bGw7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2F0ZXMgdGhlIHZhbHVlIHRvIHVzZSBmb3IgdGhlICdyb2xlJyBhdHRyaWJ1dGVcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCB1c2VSb2xlQWxlcnQoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gTXNmdFNtZS5pc051bGxPclVuZGVmaW5lZCh0aGlzLnJvbGUpID8gbnVsbCA6ICdhbGVydCc7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGVyZSBpcyBhbiBhbGVydCB0byBkaXNwbGF5XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgaGFzQWxlcnQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICFNc2Z0U21lLmlzTnVsbE9yVW5kZWZpbmVkKHRoaXMuYWxlcnQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhdGVzIHRoYXQgdGhpcyBhbGVydCBpcyBoaWRkZW5cclxuICAgICAqL1xyXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5zbWUtbGF5b3V0LW5vbmUnKVxyXG4gICAgcHVibGljIGdldCBpc0hpZGRlbigpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gISF0aGlzLmFsZXJ0Py5oaWRkZW47XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgY3VycmVudCBhbGVydCBpcyB2YWxpZFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IHZhbGlkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmhhc0FsZXJ0ICYmIHRoaXMuYWxlcnQudmFsaWQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgY3VycmVudCBhbGVydCBpcyB2YWxpZFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IG1lc3NhZ2UoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5oYXNBbGVydCA/IHRoaXMuYWxlcnQubWVzc2FnZSA6ICcnO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhdGVzIHRoYXQgdGhlIGN1cnJlbnQgYWxlcnQgc2hvdWxkIGJlIHJlbmRlcmVkIHdpdGggbWFya2Rvd25cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBpc01hcmtkb3duTWVzc2FnZSgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5oYXNBbGVydCAmJiB0aGlzLmFsZXJ0LmlzTWFya2Rvd25NZXNzYWdlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhdGVzIHRoYXQgdGhlIGN1cnJlbnQgYWxlcnQgaGFzIGEgc2V2ZXJpdHkgZGVmaW5lZFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IGhhc1NldmVyaXR5KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmhhc0FsZXJ0ICYmICFNc2Z0U21lLmlzTnVsbE9yVW5kZWZpbmVkKFZhbGlkYXRpb25BbGVydFNldmVyaXR5W3RoaXMuYWxlcnQuc2V2ZXJpdHldKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEluZGljYXRlcyB0aGF0IHRoZSBjdXJyZW50IGFsZXJ0IGhhcyBhIGN1c3RvbSBpY29uXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgaGFzQ3VzdG9tSWNvbigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5oYXNBbGVydCAmJiAhTXNmdFNtZS5pc051bGxPcldoaXRlU3BhY2UodGhpcy5hbGVydC5pY29uQ2xhc3MpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhdGVzIHRoYXQgdGhlIGN1cnJlbnQgYWxlcnQgaXMgdmFsaWRcclxuICAgICAqL1xyXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5zbWUtYWxlcnQtcGVuZGluZycpXHJcbiAgICBwdWJsaWMgZ2V0IGlzUGVuZGluZygpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5oYXNBbGVydCAmJiB0aGlzLmFsZXJ0LnBlbmRpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgY3VycmVudCBhbGVydCBpcyBhbiBlcnJvciBhbGVydFxyXG4gICAgICogRXJyb3JzIGFyZSBhbHdheXMgaW52YWxpZCB3aXRoIGVpdGhlciBubyBzZXZlcml0eSBvciBlcnJvciBzZXZlcml0eVxyXG4gICAgICovXHJcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLnNtZS1hbGVydC1lcnJvcicpXHJcbiAgICBwdWJsaWMgZ2V0IGlzRXJyb3IoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFzQWxlcnRcclxuICAgICAgICAgICAgJiYgIXRoaXMuaXNQZW5kaW5nXHJcbiAgICAgICAgICAgICYmICh0aGlzLmFsZXJ0LnNldmVyaXR5ID09PSBWYWxpZGF0aW9uQWxlcnRTZXZlcml0eS5FcnJvclxyXG4gICAgICAgICAgICAgICAgfHwgKCF0aGlzLnZhbGlkICYmICF0aGlzLmhhc1NldmVyaXR5KSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgY3VycmVudCBhbGVydCBpcyBhbiB3YXJuaW5nIGFsZXJ0XHJcbiAgICAgKiBXYXJuaW5ncyBtYXkgYmUgdmFsaWQgb3IgaW52YWxpZCAodXN1YWxseSB2YWxpZCkgd2l0aCB3YXJuaW5nIHNldmVyaXR5XHJcbiAgICAgKi9cclxuICAgIEBIb3N0QmluZGluZygnY2xhc3Muc21lLWFsZXJ0LXdhcm5pbmcnKVxyXG4gICAgcHVibGljIGdldCBpc1dhcm5pbmcoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFzQWxlcnQgJiYgIXRoaXMuaXNQZW5kaW5nICYmIHRoaXMuYWxlcnQuc2V2ZXJpdHkgPT09IFZhbGlkYXRpb25BbGVydFNldmVyaXR5Lldhcm5pbmc7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgY3VycmVudCBhbGVydCBpcyBhbiBpbmZvcm1hdGlvbmFsIGFsZXJ0XHJcbiAgICAgKiBJbmZvcm1hdGlvbmFsIGFsZXJ0cyBtYXkgYmUgdmFsaWQgb3IgaW52YWxpZCAodXN1YWxseSB2YWxpZCkgd2l0aCBpbmZvcm1hdGlvbmFsIHNldmVyaXR5XHJcbiAgICAgKi9cclxuICAgIEBIb3N0QmluZGluZygnY2xhc3Muc21lLWFsZXJ0LWluZm9ybWF0aW9uYWwnKVxyXG4gICAgcHVibGljIGdldCBpc0luZm9ybWF0aW9uYWwoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFzQWxlcnQgJiYgIXRoaXMuaXNQZW5kaW5nICYmIHRoaXMuYWxlcnQuc2V2ZXJpdHkgPT09IFZhbGlkYXRpb25BbGVydFNldmVyaXR5LkluZm9ybWF0aW9uYWw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgY3VycmVudCBhbGVydCBpcyBhbiBzdWNjZXNzIGFsZXJ0XHJcbiAgICAgKiBTdWNjZXNzIGFsZXJ0cyBhcmUgYWx3YXlzIHZhbGlkIHdpdGggbm8gc2V2ZXJpdHkgc2V2ZXJpdHlcclxuICAgICAqL1xyXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5zbWUtYWxlcnQtc3VjY2VzcycpXHJcbiAgICBwdWJsaWMgZ2V0IGlzU3VjY2VzcygpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWxpZCAmJiAhdGhpcy5pc1BlbmRpbmcgJiYgIXRoaXMuaGFzU2V2ZXJpdHk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgY3VycmVudCBhbGVydCBpcyBhbiBzdWNjZXNzIGFsZXJ0XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgYWxlcnRUeXBlKCk6IHN0cmluZyB7XHJcbiAgICAgICAgY29uc3QgYWxlcnRUeXBlcyA9IHRoaXMuc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Db21tb24uRm9ybS5WYWxpZGF0aW9uLkFsZXJ0VHlwZXM7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNQZW5kaW5nKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBhbGVydFR5cGVzLnBlbmRpbmc7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzU3VjY2Vzcykge1xyXG4gICAgICAgICAgICByZXR1cm4gYWxlcnRUeXBlcy5zdWNjZXNzO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc1dhcm5pbmcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGFsZXJ0VHlwZXMud2FybjtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNJbmZvcm1hdGlvbmFsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBhbGVydFR5cGVzLmluZm87XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzRXJyb3IpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGFsZXJ0VHlwZXMuZXJyb3I7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIGNsYXNzIHRvIGFwcGx5IHRvIHRoZSBhbGVydCBpY29uXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgYWxlcnRDbGFzcygpOiBzdHJpbmcge1xyXG4gICAgICAgIGxldCBhbGVydFN0cmluZyA9ICcnO1xyXG4gICAgICAgIGlmICh0aGlzLmlzUGVuZGluZykge1xyXG4gICAgICAgICAgICBhbGVydFN0cmluZyA9ICdzbWUtYWxlcnQtcGVuZGluZyc7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzU3VjY2Vzcykge1xyXG4gICAgICAgICAgICBhbGVydFN0cmluZyA9ICdzbWUtYWxlcnQtc3VjY2Vzcyc7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzV2FybmluZykge1xyXG4gICAgICAgICAgICBhbGVydFN0cmluZyA9ICdzbWUtYWxlcnQtd2FybmluZyc7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzSW5mb3JtYXRpb25hbCkge1xyXG4gICAgICAgICAgICBhbGVydFN0cmluZyA9ICdzbWUtYWxlcnQtaW5mb3JtYXRpb25hbCc7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzRXJyb3IpIHtcclxuICAgICAgICAgICAgYWxlcnRTdHJpbmcgPSAnc21lLWFsZXJ0LWVycm9yJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBhbGVydFN0cmluZyA9ICcnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaWNvbkNsYXNzKSB7XHJcbiAgICAgICAgICAgIGFsZXJ0U3RyaW5nID0gYWxlcnRTdHJpbmcgPyBgJHthbGVydFN0cmluZ30gICR7dGhpcy5pY29uQ2xhc3N9YCA6IHRoaXMuaWNvbkNsYXNzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuc2hvd0JhY2tncm91bmQpIHtcclxuICAgICAgICAgICAgYWxlcnRTdHJpbmcgKz0gYWxlcnRTdHJpbmcgPyBgJHthbGVydFN0cmluZ30gc21lLWFsZXJ0LWJhY2tncm91bmRgIDogJ3NtZS1hbGVydC1iYWNrZ3JvdW5kJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBhbGVydFN0cmluZztcclxuICAgIH1cclxuXHJcbiAgICBjb25zdHJ1Y3RvcihpbmplY3RvcjogSW5qZWN0b3IpIHtcclxuICAgICAgICBzdXBlcihpbmplY3Rvcik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbXBsZW1lbnRhdGlvbiBvZiBhbmd1bGFyIE9uSW5pdCBpbnRlcmZhY2VcclxuICAgICAqL1xyXG4gICAgcHVibGljIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgICAgICBzdXBlci5uZ09uQ2hhbmdlcyhjaGFuZ2VzKTtcclxuICAgICAgICBpZiAoY2hhbmdlcy5hbGVydCkge1xyXG4gICAgICAgICAgICBpZiAoIU1zZnRTbWUuaXNOdWxsT3JXaGl0ZVNwYWNlKHRoaXMuaWNvbkNsYXNzKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmhvc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQsIHRoaXMuaWNvbkNsYXNzKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuaGFzQ3VzdG9tSWNvbikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pY29uQ2xhc3MgPSB0aGlzLmFsZXJ0Lmljb25DbGFzcztcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzRXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaWNvbkNsYXNzID0gJ3NtZS1pY29uLWNyaXRpY2FsRXJyb3JTb2xpZCc7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc1dhcm5pbmcpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaWNvbkNsYXNzID0gJ3NtZS1pY29uLXdhcm5pbmdTb2xpZCc7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc0luZm9ybWF0aW9uYWwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaWNvbkNsYXNzID0gJ3NtZS1pY29uLWluZm9Tb2xpZCc7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc1N1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaWNvbkNsYXNzID0gJ3NtZS1pY29uLWNvbXBsZXRlZFNvbGlkJztcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaWNvbkNsYXNzID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIGluaXRpYWwgaG9zdCBjbGFzc2VzIHRvIGJlIGFwcGxpZWQgdG8gdGhpcyBlbGVtZW50XHJcbiAgICAgKiBXaGVuIGNhbGxlZCBpbiB0aGUgQHNlZSBCYXNlQ29tcG9uZW50IHN1cGVyIGNsYXNzIGluaXRpYWxpemF0aW9uLCBUaGVzZSBjbGFzc2VzIHdpbGwgYmUgYXV0b21hdGljYWxseSBhc3NpZ25lZCB0byB0aGUgaG9zdCBlbGVtZW50LlxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgZ2V0SW5pdGlhbEhvc3RDbGFzc2VzKCk6IHN0cmluZ1tdIHtcclxuICAgICAgICByZXR1cm4gc3VwZXIuZ2V0SW5pdGlhbEhvc3RDbGFzc2VzKCkuY29uY2F0KFtcclxuICAgICAgICAgICAgJ3NtZS1hbGVydCdcclxuICAgICAgICBdKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgdGhlIGlkQmFnIHVzZWQgYnkgdGhpcyBjb21wb25lbnQgdG8gc3RvcmUgdW5pcXVlIGVsZW1lbnQgaWRzLlxyXG4gICAgICogaWQgdmFsdWVzIHdpbGwgYmUgYXNzaWduZWQgYmUgdGhlIEBzZWUgQmFzZUNvbXBvbmVudCBzdXBlciBjbGFzcy5cclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGNyZWF0ZUlkQmFnKCk6IE1zZnRTbWUuU3RyaW5nTWFwPHN0cmluZz4ge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGFsZXJ0TWVzc2FnZTogJycsXHJcbiAgICAgICAgICAgIGFsZXJ0VHlwZTogJydcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59XHJcbiIsIjxzbWUtbG9hZGluZy13aGVlbCBzaXplPVwic21hbGxcIiAqbmdJZj1cImlzUGVuZGluZ1wiIFtpc0JhY2tncm91bmRUcmFuc3BhcmVudF09XCJ0cnVlXCJcclxuICAgIGNsYXNzPVwic21lLWxheW91dC1yZWxhdGl2ZSBzbWUtbGF5b3V0LWlubGluZS1ibG9jayBzbWUtd2lkdGgtbGcgc21lLW1hcmdpbi1yaWdodC14c1wiPjwvc21lLWxvYWRpbmctd2hlZWw+XHJcblxyXG48ZGl2ICpuZ0lmPVwiaGFzQWxlcnRcIiBbYXR0ci5yb2xlXT1cInVzZVJvbGVBbGVydFwiIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJpZEJhZy5hbGVydFR5cGUgKyAnICcgKyBpZEJhZy5hbGVydE1lc3NhZ2VcIiBjbGFzcz1cInNtZS1hcnJhbmdlLXN0YWNrLWlubGluZVwiPlxyXG4gICAgPHNwYW4gY2xhc3M9XCJzbWUtYWxlcnQtaWNvbiBzbWUtaWNvbiBzbWUtaWNvbi1zaXplLXhzXCIgW2NsYXNzXT1cImFsZXJ0Q2xhc3NcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L3NwYW4+XHJcbiAgICA8c3BhbiBbYXR0ci5pZF09XCJpZEJhZy5hbGVydFR5cGVcIiBjbGFzcz1cInNtZS1zY3JlZW4tcmVhZGVyXCI+e3thbGVydFR5cGV9fTwvc3Bhbj5cclxuICAgIDxzcGFuIFthdHRyLmlkXT1cImlkQmFnLmFsZXJ0TWVzc2FnZVwiICpuZ0lmPVwiIWlzTWFya2Rvd25NZXNzYWdlXCI+e3ttZXNzYWdlfX08L3NwYW4+XHJcbiAgICA8cCBbYXR0ci5pZF09XCJpZEJhZy5hbGVydE1lc3NhZ2VcIiAqbmdJZj1cImlzTWFya2Rvd25NZXNzYWdlXCIgW3NtZU1hcmtkb3duXT1cIm1lc3NhZ2VcIj48L3A+XHJcbjwvZGl2PiJdfQ==