ontimize-web-ngx
Version:
Ontimize Web framework using Angular 15
98 lines • 22.5 kB
JavaScript
import { __decorate, __metadata } from "tslib";
import { Component, EventEmitter, Injector, ViewChild, ViewEncapsulation, forwardRef } from '@angular/core';
import { BooleanInputConverter } from '../../decorators/input-converter';
import { AuthService } from '../../services';
import { DialogService } from '../../services/dialog.service';
import { OModulesInfoService } from '../../services/o-modules-info.service';
import { Codes } from '../../util/codes';
import { OUserInfoBase } from '../user-info/o-user-info-base.class';
import { OAppHeaderBase } from './o-app-header-base.class';
import * as i0 from "@angular/core";
import * as i1 from "@angular/common";
import * as i2 from "../language-selector/o-language-selector.component";
import * as i3 from "../user-info/o-user-info.component";
import * as i4 from "@angular/flex-layout/flex";
import * as i5 from "@angular/flex-layout/extended";
import * as i6 from "../../pipes/o-translate.pipe";
export const DEFAULT_INPUTS_O_APP_HEADER = [
'showUserInfo: show-user-info',
'showLanguageSelector: show-language-selector',
'useFlagIcons: use-flag-icons',
'color',
'headerHeight:header-height',
'showTitle: show-title',
'staticTitle: static-title',
'showStaticTitle: show-static-title'
];
export const DEFAULT_OUTPUTS_O_APP_HEADER = [
'onSidenavToggle'
];
export class OAppHeaderComponent {
set headerHeight(value) {
this._headerHeight = value ? value.toLowerCase() : value;
if (!Codes.isValidRowHeight(this._headerHeight)) {
this._headerHeight = Codes.DEFAULT_ROW_HEIGHT;
}
}
get headerHeight() {
return this._headerHeight;
}
constructor(injector) {
this.injector = injector;
this.showTitle = false;
this.showStaticTitle = false;
this.showUserInfo = true;
this.showLanguageSelector = true;
this.useFlagIcons = false;
this.onSidenavToggle = new EventEmitter();
this._headerHeight = Codes.DEFAULT_ROW_HEIGHT;
this.dialogService = this.injector.get(DialogService);
this.modulesInfoService = this.injector.get(OModulesInfoService);
this.authService = this.injector.get(AuthService);
}
ngOnInit() {
if (!this.showStaticTitle) {
this.headerTitle$ = this.modulesInfoService.getModuleChangeObservable();
}
}
onLogoutClick() {
this.authService.logoutWithConfirmation();
}
set color(newValue) {
this._color = newValue;
}
get color() {
return this._color;
}
}
OAppHeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OAppHeaderComponent, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
OAppHeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: OAppHeaderComponent, selector: "o-app-header", inputs: { showUserInfo: ["show-user-info", "showUserInfo"], showLanguageSelector: ["show-language-selector", "showLanguageSelector"], useFlagIcons: ["use-flag-icons", "useFlagIcons"], color: "color", headerHeight: ["header-height", "headerHeight"], showTitle: ["show-title", "showTitle"], staticTitle: ["static-title", "staticTitle"], showStaticTitle: ["show-static-title", "showStaticTitle"] }, outputs: { onSidenavToggle: "onSidenavToggle" }, host: { properties: { "class.o-app-header": "true", "class.o-app-header-small": "headerHeight===\"small\"", "class.o-app-header-medium": "headerHeight===\"medium\"", "class.o-app-header-large": "headerHeight===\"large\"" } }, providers: [
{ provide: OAppHeaderBase, useExisting: forwardRef(() => OAppHeaderComponent) }
], viewQueries: [{ propertyName: "userInfo", first: true, predicate: ["userInfo"], descendants: true }], ngImport: i0, template: "<nav fxFlex fxLayout=\"row\" fxLayoutAlign=\"space-between stretch\" [ngClass]=\"color ? 'o-app-header-'+color : ''\">\n <div fxFlex fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\n <ng-content></ng-content>\n <ng-content select=\"o-app-layout-header-projection-start\"></ng-content>\n <span *ngIf=\"showTitle && !showStaticTitle\" class=\"o-app-header-title\" fxLayout=\"row\" fxLayoutAlign=\"center center\">\n {{ headerTitle$ | async | oTranslate }}\n </span>\n <span *ngIf=\"showTitle && showStaticTitle\" class=\"o-app-header-title\" fxLayout=\"row\" fxLayoutAlign=\"center center\">\n {{ staticTitle | oTranslate }}\n </span>\n <div fxLayout=\"row\" fxLayoutAlign=\"end stretch\" class=\"o-app-header-default-actions\">\n <div class=\"layout-header-projection-end\">\n <ng-content select=\"o-app-layout-header-projection-end\"></ng-content>\n </div>\n <o-user-info #userInfo *ngIf=\"showUserInfo\"></o-user-info>\n <o-language-selector *ngIf=\"showLanguageSelector\" [use-flag-icons]=\"useFlagIcons\"></o-language-selector>\n </div>\n </div>\n</nav>\n", styles: [".o-app-header{z-index:2;box-shadow:0 2px 6px #00000029}.o-app-header.o-app-header-large{height:56px}.o-app-header.o-app-header-large+.header-layout{top:56px}.o-app-header.o-app-header-large .o-user-info{font-size:16px}.o-app-header.o-app-header-large .o-user-info .o-user-info-avatar-wrapper{height:40px;width:40px}.o-app-header.o-app-header-medium{height:48px}.o-app-header.o-app-header-medium+.header-layout{top:48px}.o-app-header.o-app-header-medium .o-user-info{font-size:16px}.o-app-header.o-app-header-medium .o-user-info .o-user-info-avatar-wrapper{height:32px;width:32px}.o-app-header.o-app-header-small{height:40px}.o-app-header.o-app-header-small+.header-layout{top:40px}.o-app-header.o-app-header-small .o-user-info{font-size:14px}.o-app-header.o-app-header-small .o-user-info .o-user-info-avatar-wrapper{height:30px;width:30px}.o-app-header nav{padding-right:16px}.o-app-header nav .sidenav-toggle{text-align:center;padding:16px;cursor:pointer}.o-app-header nav .o-app-header-title{padding:0 16px;cursor:default}.o-app-header nav .o-app-header-default-actions{margin-left:auto}.o-app-header nav .o-app-header-default-actions .layout-header-projection-end{margin-right:16px}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.OLanguageSelectorComponent, selector: "o-language-selector", inputs: ["use-flag-icons"], outputs: ["onChange"] }, { kind: "component", type: i3.OUserInfoComponent, selector: "o-user-info", inputs: ["show-profile", "show-settings", "show-logout"] }, { kind: "directive", type: i4.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i4.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i4.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "directive", type: i5.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i6.OTranslatePipe, name: "oTranslate" }], encapsulation: i0.ViewEncapsulation.None });
__decorate([
BooleanInputConverter(),
__metadata("design:type", Boolean)
], OAppHeaderComponent.prototype, "showUserInfo", void 0);
__decorate([
BooleanInputConverter(),
__metadata("design:type", Boolean)
], OAppHeaderComponent.prototype, "showLanguageSelector", void 0);
__decorate([
BooleanInputConverter(),
__metadata("design:type", Boolean)
], OAppHeaderComponent.prototype, "useFlagIcons", void 0);
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OAppHeaderComponent, decorators: [{
type: Component,
args: [{ selector: 'o-app-header', inputs: DEFAULT_INPUTS_O_APP_HEADER, outputs: DEFAULT_OUTPUTS_O_APP_HEADER, encapsulation: ViewEncapsulation.None, host: {
'[class.o-app-header]': 'true',
'[class.o-app-header-small]': 'headerHeight==="small"',
'[class.o-app-header-medium]': 'headerHeight==="medium"',
'[class.o-app-header-large]': 'headerHeight==="large"'
}, providers: [
{ provide: OAppHeaderBase, useExisting: forwardRef(() => OAppHeaderComponent) }
], template: "<nav fxFlex fxLayout=\"row\" fxLayoutAlign=\"space-between stretch\" [ngClass]=\"color ? 'o-app-header-'+color : ''\">\n <div fxFlex fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\n <ng-content></ng-content>\n <ng-content select=\"o-app-layout-header-projection-start\"></ng-content>\n <span *ngIf=\"showTitle && !showStaticTitle\" class=\"o-app-header-title\" fxLayout=\"row\" fxLayoutAlign=\"center center\">\n {{ headerTitle$ | async | oTranslate }}\n </span>\n <span *ngIf=\"showTitle && showStaticTitle\" class=\"o-app-header-title\" fxLayout=\"row\" fxLayoutAlign=\"center center\">\n {{ staticTitle | oTranslate }}\n </span>\n <div fxLayout=\"row\" fxLayoutAlign=\"end stretch\" class=\"o-app-header-default-actions\">\n <div class=\"layout-header-projection-end\">\n <ng-content select=\"o-app-layout-header-projection-end\"></ng-content>\n </div>\n <o-user-info #userInfo *ngIf=\"showUserInfo\"></o-user-info>\n <o-language-selector *ngIf=\"showLanguageSelector\" [use-flag-icons]=\"useFlagIcons\"></o-language-selector>\n </div>\n </div>\n</nav>\n", styles: [".o-app-header{z-index:2;box-shadow:0 2px 6px #00000029}.o-app-header.o-app-header-large{height:56px}.o-app-header.o-app-header-large+.header-layout{top:56px}.o-app-header.o-app-header-large .o-user-info{font-size:16px}.o-app-header.o-app-header-large .o-user-info .o-user-info-avatar-wrapper{height:40px;width:40px}.o-app-header.o-app-header-medium{height:48px}.o-app-header.o-app-header-medium+.header-layout{top:48px}.o-app-header.o-app-header-medium .o-user-info{font-size:16px}.o-app-header.o-app-header-medium .o-user-info .o-user-info-avatar-wrapper{height:32px;width:32px}.o-app-header.o-app-header-small{height:40px}.o-app-header.o-app-header-small+.header-layout{top:40px}.o-app-header.o-app-header-small .o-user-info{font-size:14px}.o-app-header.o-app-header-small .o-user-info .o-user-info-avatar-wrapper{height:30px;width:30px}.o-app-header nav{padding-right:16px}.o-app-header nav .sidenav-toggle{text-align:center;padding:16px;cursor:pointer}.o-app-header nav .o-app-header-title{padding:0 16px;cursor:default}.o-app-header nav .o-app-header-default-actions{margin-left:auto}.o-app-header nav .o-app-header-default-actions .layout-header-projection-end{margin-right:16px}\n"] }]
}], ctorParameters: function () { return [{ type: i0.Injector }]; }, propDecorators: { userInfo: [{
type: ViewChild,
args: ['userInfo']
}], showUserInfo: [], showLanguageSelector: [], useFlagIcons: [] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby1hcHAtaGVhZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL2FwcC1oZWFkZXIvby1hcHAtaGVhZGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL2FwcC1oZWFkZXIvby1hcHAtaGVhZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQVEsU0FBUyxFQUFFLGlCQUFpQixFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUlsSCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN6RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzlELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN6QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDcEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7Ozs7OztBQUUzRCxNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FBRztJQUN6Qyw4QkFBOEI7SUFDOUIsOENBQThDO0lBQzlDLDhCQUE4QjtJQUM5QixPQUFPO0lBQ1AsNEJBQTRCO0lBQzVCLHVCQUF1QjtJQUN2QiwyQkFBMkI7SUFDM0Isb0NBQW9DO0NBQ3JDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSw0QkFBNEIsR0FBRztJQUMxQyxpQkFBaUI7Q0FDbEIsQ0FBQztBQW9CRixNQUFNLE9BQU8sbUJBQW1CO0lBdUI5QixJQUFJLFlBQVksQ0FBQyxLQUFLO1FBQ3BCLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUN6RCxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRTtZQUMvQyxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQztTQUMvQztJQUNILENBQUM7SUFFRCxJQUFJLFlBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDNUIsQ0FBQztJQUlELFlBQ1ksUUFBa0I7UUFBbEIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQWhDdkIsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUNsQixvQkFBZSxHQUFHLEtBQUssQ0FBQztRQVEvQixpQkFBWSxHQUFZLElBQUksQ0FBQztRQUU3Qix5QkFBb0IsR0FBWSxJQUFJLENBQUM7UUFFckMsaUJBQVksR0FBWSxLQUFLLENBQUM7UUFFdkIsb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQ3hDLGtCQUFhLEdBQUcsS0FBSyxDQUFDLGtCQUFrQixDQUFDO1FBa0JqRCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFnQixhQUFvQyxDQUFDLENBQUM7UUFDNUYsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFzQixtQkFBZ0QsQ0FBQyxDQUFDO1FBQ25ILElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQWMsV0FBZ0MsQ0FBQyxDQUFDO0lBQ3RGLENBQUM7SUFDRCxRQUFRO1FBQ04sSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDekIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMseUJBQXlCLEVBQUUsQ0FBQztTQUN6RTtJQUNILENBQUM7SUFDRCxhQUFhO1FBQ1gsSUFBSSxDQUFDLFdBQVcsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO0lBQzVDLENBQUM7SUFDRCxJQUFJLEtBQUssQ0FBQyxRQUFzQjtRQUM5QixJQUFJLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7O2lIQXpEVSxtQkFBbUI7cUdBQW5CLG1CQUFtQixzc0JBTG5CO1FBQ1QsRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsbUJBQW1CLENBQUMsRUFBRTtLQUVoRixnSUMzQ0gsNG1DQW1CQTtBRHVDRTtJQUFDLHFCQUFxQixFQUFFOzt5REFDSztBQUM3QjtJQUFDLHFCQUFxQixFQUFFOztpRUFDYTtBQUNyQztJQUFDLHFCQUFxQixFQUFFOzt5REFDTTs0RkFsQm5CLG1CQUFtQjtrQkFsQi9CLFNBQVM7K0JBQ0UsY0FBYyxVQUNoQiwyQkFBMkIsV0FDMUIsNEJBQTRCLGlCQUd0QixpQkFBaUIsQ0FBQyxJQUFJLFFBQy9CO3dCQUNKLHNCQUFzQixFQUFFLE1BQU07d0JBQzlCLDRCQUE0QixFQUFFLHdCQUF3Qjt3QkFDdEQsNkJBQTZCLEVBQUUseUJBQXlCO3dCQUN4RCw0QkFBNEIsRUFBRSx3QkFBd0I7cUJBQ3ZELGFBQ1U7d0JBQ1QsRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLG9CQUFvQixDQUFDLEVBQUU7cUJBRWhGOytGQWFNLFFBQVE7c0JBRGQsU0FBUzt1QkFBQyxVQUFVO2dCQUlyQixZQUFZLE1BRVosb0JBQW9CLE1BRXBCLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5qZWN0b3IsIFR5cGUsIFZpZXdDaGlsZCwgVmlld0VuY2Fwc3VsYXRpb24sIGZvcndhcmRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRoZW1lUGFsZXR0ZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBCb29sZWFuSW5wdXRDb252ZXJ0ZXIgfSBmcm9tICcuLi8uLi9kZWNvcmF0b3JzL2lucHV0LWNvbnZlcnRlcic7XG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kaWFsb2cuc2VydmljZSc7XG5pbXBvcnQgeyBPTW9kdWxlc0luZm9TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvby1tb2R1bGVzLWluZm8uc2VydmljZSc7XG5pbXBvcnQgeyBDb2RlcyB9IGZyb20gJy4uLy4uL3V0aWwvY29kZXMnO1xuaW1wb3J0IHsgT1VzZXJJbmZvQmFzZSB9IGZyb20gJy4uL3VzZXItaW5mby9vLXVzZXItaW5mby1iYXNlLmNsYXNzJztcbmltcG9ydCB7IE9BcHBIZWFkZXJCYXNlIH0gZnJvbSAnLi9vLWFwcC1oZWFkZXItYmFzZS5jbGFzcyc7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0lOUFVUU19PX0FQUF9IRUFERVIgPSBbXG4gICdzaG93VXNlckluZm86IHNob3ctdXNlci1pbmZvJyxcbiAgJ3Nob3dMYW5ndWFnZVNlbGVjdG9yOiBzaG93LWxhbmd1YWdlLXNlbGVjdG9yJyxcbiAgJ3VzZUZsYWdJY29uczogdXNlLWZsYWctaWNvbnMnLFxuICAnY29sb3InLFxuICAnaGVhZGVySGVpZ2h0OmhlYWRlci1oZWlnaHQnLFxuICAnc2hvd1RpdGxlOiBzaG93LXRpdGxlJyxcbiAgJ3N0YXRpY1RpdGxlOiBzdGF0aWMtdGl0bGUnLFxuICAnc2hvd1N0YXRpY1RpdGxlOiBzaG93LXN0YXRpYy10aXRsZSdcbl07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX09VVFBVVFNfT19BUFBfSEVBREVSID0gW1xuICAnb25TaWRlbmF2VG9nZ2xlJ1xuXTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnby1hcHAtaGVhZGVyJyxcbiAgaW5wdXRzOiBERUZBVUxUX0lOUFVUU19PX0FQUF9IRUFERVIsXG4gIG91dHB1dHM6IERFRkFVTFRfT1VUUFVUU19PX0FQUF9IRUFERVIsXG4gIHRlbXBsYXRlVXJsOiAnLi9vLWFwcC1oZWFkZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9vLWFwcC1oZWFkZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgaG9zdDoge1xuICAgICdbY2xhc3Muby1hcHAtaGVhZGVyXSc6ICd0cnVlJyxcbiAgICAnW2NsYXNzLm8tYXBwLWhlYWRlci1zbWFsbF0nOiAnaGVhZGVySGVpZ2h0PT09XCJzbWFsbFwiJyxcbiAgICAnW2NsYXNzLm8tYXBwLWhlYWRlci1tZWRpdW1dJzogJ2hlYWRlckhlaWdodD09PVwibWVkaXVtXCInLFxuICAgICdbY2xhc3Muby1hcHAtaGVhZGVyLWxhcmdlXSc6ICdoZWFkZXJIZWlnaHQ9PT1cImxhcmdlXCInXG4gIH0sXG4gIHByb3ZpZGVyczogW1xuICAgIHsgcHJvdmlkZTogT0FwcEhlYWRlckJhc2UsIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IE9BcHBIZWFkZXJDb21wb25lbnQpIH1cblxuICBdXG59KVxuZXhwb3J0IGNsYXNzIE9BcHBIZWFkZXJDb21wb25lbnQge1xuXG4gIHByb3RlY3RlZCBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlO1xuICBwcm90ZWN0ZWQgbW9kdWxlc0luZm9TZXJ2aWNlOiBPTW9kdWxlc0luZm9TZXJ2aWNlO1xuICBwcm90ZWN0ZWQgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlO1xuICBwdWJsaWMgc2hvd1RpdGxlID0gZmFsc2U7XG4gIHB1YmxpYyBzaG93U3RhdGljVGl0bGUgPSBmYWxzZTtcbiAgcHVibGljIHN0YXRpY1RpdGxlOiBzdHJpbmc7XG4gIHB1YmxpYyBoZWFkZXJUaXRsZSQ6IE9ic2VydmFibGU8c3RyaW5nPjtcblxuICBAVmlld0NoaWxkKCd1c2VySW5mbycpXG4gIHB1YmxpYyB1c2VySW5mbzogT1VzZXJJbmZvQmFzZTtcblxuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgc2hvd1VzZXJJbmZvOiBib29sZWFuID0gdHJ1ZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHNob3dMYW5ndWFnZVNlbGVjdG9yOiBib29sZWFuID0gdHJ1ZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHVzZUZsYWdJY29uczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHB1YmxpYyBvblNpZGVuYXZUb2dnbGUgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIHByb3RlY3RlZCBfaGVhZGVySGVpZ2h0ID0gQ29kZXMuREVGQVVMVF9ST1dfSEVJR0hUO1xuXG4gIHNldCBoZWFkZXJIZWlnaHQodmFsdWUpIHtcbiAgICB0aGlzLl9oZWFkZXJIZWlnaHQgPSB2YWx1ZSA/IHZhbHVlLnRvTG93ZXJDYXNlKCkgOiB2YWx1ZTtcbiAgICBpZiAoIUNvZGVzLmlzVmFsaWRSb3dIZWlnaHQodGhpcy5faGVhZGVySGVpZ2h0KSkge1xuICAgICAgdGhpcy5faGVhZGVySGVpZ2h0ID0gQ29kZXMuREVGQVVMVF9ST1dfSEVJR0hUO1xuICAgIH1cbiAgfVxuXG4gIGdldCBoZWFkZXJIZWlnaHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5faGVhZGVySGVpZ2h0O1xuICB9XG5cbiAgcHJpdmF0ZSBfY29sb3I6IFRoZW1lUGFsZXR0ZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgaW5qZWN0b3I6IEluamVjdG9yLFxuICApIHtcbiAgICB0aGlzLmRpYWxvZ1NlcnZpY2UgPSB0aGlzLmluamVjdG9yLmdldDxEaWFsb2dTZXJ2aWNlPihEaWFsb2dTZXJ2aWNlIGFzIFR5cGU8RGlhbG9nU2VydmljZT4pO1xuICAgIHRoaXMubW9kdWxlc0luZm9TZXJ2aWNlID0gdGhpcy5pbmplY3Rvci5nZXQ8T01vZHVsZXNJbmZvU2VydmljZT4oT01vZHVsZXNJbmZvU2VydmljZSBhcyBUeXBlPE9Nb2R1bGVzSW5mb1NlcnZpY2U+KTtcbiAgICB0aGlzLmF1dGhTZXJ2aWNlID0gdGhpcy5pbmplY3Rvci5nZXQ8QXV0aFNlcnZpY2U+KEF1dGhTZXJ2aWNlIGFzIFR5cGU8QXV0aFNlcnZpY2U+KTtcbiAgfVxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAoIXRoaXMuc2hvd1N0YXRpY1RpdGxlKSB7XG4gICAgICB0aGlzLmhlYWRlclRpdGxlJCA9IHRoaXMubW9kdWxlc0luZm9TZXJ2aWNlLmdldE1vZHVsZUNoYW5nZU9ic2VydmFibGUoKTtcbiAgICB9XG4gIH1cbiAgb25Mb2dvdXRDbGljaygpIHtcbiAgICB0aGlzLmF1dGhTZXJ2aWNlLmxvZ291dFdpdGhDb25maXJtYXRpb24oKTtcbiAgfVxuICBzZXQgY29sb3IobmV3VmFsdWU6IFRoZW1lUGFsZXR0ZSkge1xuICAgIHRoaXMuX2NvbG9yID0gbmV3VmFsdWU7XG4gIH1cblxuICBnZXQgY29sb3IoKTogVGhlbWVQYWxldHRlIHtcbiAgICByZXR1cm4gdGhpcy5fY29sb3I7XG4gIH1cblxufVxuIiwiPG5hdiBmeEZsZXggZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwic3BhY2UtYmV0d2VlbiBzdHJldGNoXCIgW25nQ2xhc3NdPVwiY29sb3IgPyAnby1hcHAtaGVhZGVyLScrY29sb3IgOiAnJ1wiPlxuICA8ZGl2IGZ4RmxleCBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0QWxpZ249XCJzcGFjZS1iZXR3ZWVuIGNlbnRlclwiPlxuICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJvLWFwcC1sYXlvdXQtaGVhZGVyLXByb2plY3Rpb24tc3RhcnRcIj48L25nLWNvbnRlbnQ+XG4gICAgPHNwYW4gKm5nSWY9XCJzaG93VGl0bGUgJiYgIXNob3dTdGF0aWNUaXRsZVwiIGNsYXNzPVwiby1hcHAtaGVhZGVyLXRpdGxlXCIgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwiY2VudGVyIGNlbnRlclwiPlxuICAgICAge3sgaGVhZGVyVGl0bGUkIHwgYXN5bmMgfCBvVHJhbnNsYXRlIH19XG4gICAgPC9zcGFuPlxuICAgIDxzcGFuICpuZ0lmPVwic2hvd1RpdGxlICYmIHNob3dTdGF0aWNUaXRsZVwiIGNsYXNzPVwiby1hcHAtaGVhZGVyLXRpdGxlXCIgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwiY2VudGVyIGNlbnRlclwiPlxuICAgICAge3sgc3RhdGljVGl0bGUgfCBvVHJhbnNsYXRlIH19XG4gICAgPC9zcGFuPlxuICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwiZW5kIHN0cmV0Y2hcIiBjbGFzcz1cIm8tYXBwLWhlYWRlci1kZWZhdWx0LWFjdGlvbnNcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJsYXlvdXQtaGVhZGVyLXByb2plY3Rpb24tZW5kXCI+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIm8tYXBwLWxheW91dC1oZWFkZXItcHJvamVjdGlvbi1lbmRcIj48L25nLWNvbnRlbnQ+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxvLXVzZXItaW5mbyAjdXNlckluZm8gKm5nSWY9XCJzaG93VXNlckluZm9cIj48L28tdXNlci1pbmZvPlxuICAgICAgPG8tbGFuZ3VhZ2Utc2VsZWN0b3IgKm5nSWY9XCJzaG93TGFuZ3VhZ2VTZWxlY3RvclwiIFt1c2UtZmxhZy1pY29uc109XCJ1c2VGbGFnSWNvbnNcIj48L28tbGFuZ3VhZ2Utc2VsZWN0b3I+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uYXY+XG4iXX0=