UNPKG

@netgrif/components

Version:

Netgrif Application Engine frontend Angular components

108 lines 28.1 kB
import { Component, Inject, Optional, SkipSelf, ViewEncapsulation } from '@angular/core'; import { MAT_DATE_FORMATS } from '@angular/material/core'; import { AbstractSearchComponent, CategoryResolverService, DATE_FORMAT, NAE_SEARCH_COMPONENT_CONFIGURATION, NAE_SEARCH_CATEGORIES, Category, NAE_FILTERS_FILTER, Filter, FilterType, NAE_BASE_FILTER, NAE_DEFAULT_CASE_SEARCH_CATEGORIES, NAE_DEFAULT_TASK_SEARCH_CATEGORIES, NAE_NAVIGATION_ITEM_TASK_DATA } from '@netgrif/components-core'; import * as i0 from "@angular/core"; import * as i1 from "@netgrif/components-core"; import * as i2 from "@ngx-translate/core"; import * as i3 from "@angular/common"; import * as i4 from "@ngbracket/ngx-layout"; import * as i5 from "@angular/material/button"; import * as i6 from "@angular/material/icon"; import * as i7 from "@angular/material/menu"; import * as i8 from "@angular/material/tooltip"; import * as i9 from "../advanced-search/advanced-search-component/advanced-search.component"; import * as i10 from "../fulltext-search-component/fulltext-search.component"; /** * Converts search categories provided by the {@link NAE_SEARCH_CATEGORIES} * injection token in the old (pre 5.6.0) format, to the new format. * * If no search categories are provided converts the default search categories into search categories * based on the base filter filter type. * * @param categoryResolverService service for serialisation and deserialization of search categories * @param baseFilter determines the default categories used if no categories are provided, injected by the {@link NAE_BASE_FILTER} * injection token * @param defaultCaseSearchCategories the default case search categories, injected by the {@link NAE_DEFAULT_CASE_SEARCH_CATEGORIES} * injection token * @param defaultTaskSearchCategories the default task search categories, injected by the {@link NAE_DEFAULT_TASK_SEARCH_CATEGORIES} * injection token * @param naeSearchCategories optionally the search category instances, or the search category classes. Instances are converted to classes. * If no categories are provided the default ones based on the base filter filter type will be returned. * Injected by the {@link NAE_SEARCH_CATEGORIES} injection token. */ export function searchCategoryConverter(categoryResolverService, baseFilter, defaultCaseSearchCategories, defaultTaskSearchCategories, naeSearchCategories = null) { if (naeSearchCategories === null) { // categories were not provided => return the defaults const type = baseFilter.filter instanceof Filter ? baseFilter.filter.type : baseFilter.filterType; if (type === FilterType.CASE) { return defaultCaseSearchCategories; } else if (type === FilterType.TASK) { return defaultTaskSearchCategories; } throw new Error(`Illegal filter type: ${type}`); } // categories were provided => convert them if necessary if (naeSearchCategories.length !== 0 && naeSearchCategories[0] instanceof Category) { return naeSearchCategories.map(c => { return categoryResolverService.toClass(categoryResolverService.serialize(c)); }); } return naeSearchCategories; } export class SearchComponent extends AbstractSearchComponent { constructor(searchService, logger, dialogService, translate, userFilterService, allowedNetsService, viewIdService, searchCategories, configuration, filtersFilter = null, navigationItemTaskData = null) { super(searchService, logger, dialogService, translate, userFilterService, allowedNetsService, viewIdService, searchCategories, configuration, filtersFilter, navigationItemTaskData); } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SearchComponent, deps: [{ token: i1.SearchService }, { token: i1.LoggerService }, { token: i1.DialogService }, { token: i2.TranslateService }, { token: i1.UserFiltersService }, { token: i1.AllowedNetsService }, { token: i1.ViewIdService }, { token: NAE_SEARCH_CATEGORIES }, { token: NAE_SEARCH_COMPONENT_CONFIGURATION, optional: true }, { token: NAE_FILTERS_FILTER, optional: true }, { token: NAE_NAVIGATION_ITEM_TASK_DATA, optional: true }], target: i0.ɵɵFactoryTarget.Component }); static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: SearchComponent, selector: "nc-search", providers: [ { provide: MAT_DATE_FORMATS, useValue: DATE_FORMAT }, { provide: NAE_SEARCH_CATEGORIES, useFactory: searchCategoryConverter, deps: [ CategoryResolverService, NAE_BASE_FILTER, NAE_DEFAULT_CASE_SEARCH_CATEGORIES, NAE_DEFAULT_TASK_SEARCH_CATEGORIES, [new Optional(), new SkipSelf(), NAE_SEARCH_CATEGORIES] ] } ], usesInheritance: true, ngImport: i0, template: "<div fxLayout=\"row wrap\" class=\"padding-top-search\" fxLayoutAlign=\"start center\">\n\n <div *ngIf=\"advancedSearchDisplayed; then advancedSearch; else fullTextSearch\"></div>\n\n <ng-template #advancedSearch>\n <nc-advanced-search [editable]=\"!disabled\"></nc-advanced-search>\n </ng-template>\n\n <ng-template #fullTextSearch>\n <nc-fulltext-search [disabled]=\"disabled\" class=\"netgrif-input\"></nc-fulltext-search>\n </ng-template>\n\n <button mat-stroked-button class=\"search-buttons-margin search-buttons-padding fix-filter-button\" *ngIf=\"showSearchToggleButton\" [disabled]=\"disabled\"\n [matTooltip]=\"(advancedSearchDisplayed ? 'search.tooltip.toFullText' : 'search.tooltip.toAdvanced') | translate\"\n (click)=\"toggleSearchMode()\">\n <mat-icon class=\"advanced-search-icon fix-mat-icon\" svgIcon=\"filter-variant\"></mat-icon>\n </button>\n\n <button mat-icon-button [matMenuTriggerFor]=\"menu\" aria-label=\"menu\" class=\"fix-icon-button\" *ngIf=\"advancedSearchDisplayed\" [disabled]=\"disabled\">\n <mat-icon class=\"advanced-search-icon\">more_vert</mat-icon>\n </button>\n <mat-menu #menu=\"matMenu\" class=\"mat-menu-border-radius mat-menu-padding\">\n <button mat-menu-item *ngIf=\"showSaveFilterButton\" (click)=\"saveFilter()\">\n <mat-icon class=\"prefix-icon\">save</mat-icon>\n <span>{{'search.tooltip.save' | translate}}</span>\n </button>\n <button mat-menu-item *ngIf=\"showLoadFilterButton\" (click)=\"loadFilter()\">\n <mat-icon class=\"prefix-icon\">open_in_browser</mat-icon>\n <span>{{'search.tooltip.load' | translate}}</span>\n </button>\n\n <button mat-menu-item *ngIf=\"showAdvancedSearchHelp\" (click)=\"showHelp()\">\n <mat-icon class=\"prefix-icon\">help</mat-icon>\n <span>{{'search.tooltip.help' | translate}}</span>\n </button>\n </mat-menu>\n</div>\n", styles: [".button-margin{margin-left:8px;margin-right:8px}.disable-error-margin .mat-mdc-form-field-wrapper{margin:0!important;padding-bottom:0}.search-buttons-margin{margin-left:8px}.search-icon{padding-right:8px;font-size:xx-large}.search-input{width:100%}.search-input-lg{width:60%}.search-input-md{width:80%}.search-input-sm{width:100%}.search-buttons-padding{height:43px!important;min-width:43px;padding:0}.fix-icon-button{height:45px!important;width:45px!important;padding:10.5px!important}.prefix-icon{color:#64748b!important}.padding-top-search{padding-top:2px}.fix-filter-button{margin-top:1px}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { 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: "component", type: i5.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i7.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i7.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i7.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "directive", type: i8.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i9.AdvancedSearchComponent, selector: "nc-advanced-search" }, { kind: "component", type: i10.FulltextSearchComponent, selector: "nc-fulltext-search" }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SearchComponent, decorators: [{ type: Component, args: [{ selector: 'nc-search', encapsulation: ViewEncapsulation.None, providers: [ { provide: MAT_DATE_FORMATS, useValue: DATE_FORMAT }, { provide: NAE_SEARCH_CATEGORIES, useFactory: searchCategoryConverter, deps: [ CategoryResolverService, NAE_BASE_FILTER, NAE_DEFAULT_CASE_SEARCH_CATEGORIES, NAE_DEFAULT_TASK_SEARCH_CATEGORIES, [new Optional(), new SkipSelf(), NAE_SEARCH_CATEGORIES] ] } ], template: "<div fxLayout=\"row wrap\" class=\"padding-top-search\" fxLayoutAlign=\"start center\">\n\n <div *ngIf=\"advancedSearchDisplayed; then advancedSearch; else fullTextSearch\"></div>\n\n <ng-template #advancedSearch>\n <nc-advanced-search [editable]=\"!disabled\"></nc-advanced-search>\n </ng-template>\n\n <ng-template #fullTextSearch>\n <nc-fulltext-search [disabled]=\"disabled\" class=\"netgrif-input\"></nc-fulltext-search>\n </ng-template>\n\n <button mat-stroked-button class=\"search-buttons-margin search-buttons-padding fix-filter-button\" *ngIf=\"showSearchToggleButton\" [disabled]=\"disabled\"\n [matTooltip]=\"(advancedSearchDisplayed ? 'search.tooltip.toFullText' : 'search.tooltip.toAdvanced') | translate\"\n (click)=\"toggleSearchMode()\">\n <mat-icon class=\"advanced-search-icon fix-mat-icon\" svgIcon=\"filter-variant\"></mat-icon>\n </button>\n\n <button mat-icon-button [matMenuTriggerFor]=\"menu\" aria-label=\"menu\" class=\"fix-icon-button\" *ngIf=\"advancedSearchDisplayed\" [disabled]=\"disabled\">\n <mat-icon class=\"advanced-search-icon\">more_vert</mat-icon>\n </button>\n <mat-menu #menu=\"matMenu\" class=\"mat-menu-border-radius mat-menu-padding\">\n <button mat-menu-item *ngIf=\"showSaveFilterButton\" (click)=\"saveFilter()\">\n <mat-icon class=\"prefix-icon\">save</mat-icon>\n <span>{{'search.tooltip.save' | translate}}</span>\n </button>\n <button mat-menu-item *ngIf=\"showLoadFilterButton\" (click)=\"loadFilter()\">\n <mat-icon class=\"prefix-icon\">open_in_browser</mat-icon>\n <span>{{'search.tooltip.load' | translate}}</span>\n </button>\n\n <button mat-menu-item *ngIf=\"showAdvancedSearchHelp\" (click)=\"showHelp()\">\n <mat-icon class=\"prefix-icon\">help</mat-icon>\n <span>{{'search.tooltip.help' | translate}}</span>\n </button>\n </mat-menu>\n</div>\n", styles: [".button-margin{margin-left:8px;margin-right:8px}.disable-error-margin .mat-mdc-form-field-wrapper{margin:0!important;padding-bottom:0}.search-buttons-margin{margin-left:8px}.search-icon{padding-right:8px;font-size:xx-large}.search-input{width:100%}.search-input-lg{width:60%}.search-input-md{width:80%}.search-input-sm{width:100%}.search-buttons-padding{height:43px!important;min-width:43px;padding:0}.fix-icon-button{height:45px!important;width:45px!important;padding:10.5px!important}.prefix-icon{color:#64748b!important}.padding-top-search{padding-top:2px}.fix-filter-button{margin-top:1px}\n"] }] }], ctorParameters: () => [{ type: i1.SearchService }, { type: i1.LoggerService }, { type: i1.DialogService }, { type: i2.TranslateService }, { type: i1.UserFiltersService }, { type: i1.AllowedNetsService }, { type: i1.ViewIdService }, { type: Array, decorators: [{ type: Inject, args: [NAE_SEARCH_CATEGORIES] }] }, { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [NAE_SEARCH_COMPONENT_CONFIGURATION] }] }, { type: i1.Filter, decorators: [{ type: Optional }, { type: Inject, args: [NAE_FILTERS_FILTER] }] }, { type: Array, decorators: [{ type: Optional }, { type: Inject, args: [NAE_NAVIGATION_ITEM_TASK_DATA] }] }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25ldGdyaWYtY29tcG9uZW50cy9zcmMvbGliL3NlYXJjaC9zZWFyY2gtY29tcG9uZW50L3NlYXJjaC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZXRncmlmLWNvbXBvbmVudHMvc3JjL2xpYi9zZWFyY2gvc2VhcmNoLWNvbXBvbmVudC9zZWFyY2guY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBUSxpQkFBaUIsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUM3RixPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUN4RCxPQUFPLEVBQ0gsdUJBQXVCLEVBRXZCLHVCQUF1QixFQUN2QixXQUFXLEVBSVgsa0NBQWtDLEVBSWxDLHFCQUFxQixFQUNyQixRQUFRLEVBRVIsa0JBQWtCLEVBQ2xCLE1BQU0sRUFDTixVQUFVLEVBQ1YsZUFBZSxFQUNmLGtDQUFrQyxFQUNsQyxrQ0FBa0MsRUFBRSw2QkFBNkIsRUFDcEUsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7Ozs7Ozs7O0FBR2xDOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQUNILE1BQU0sVUFBVSx1QkFBdUIsQ0FBQyx1QkFBZ0QsRUFDaEQsVUFBc0IsRUFDdEIsMkJBQXVELEVBQ3ZELDJCQUF1RCxFQUN2RCxzQkFBeUUsSUFBSTtJQUVqSCxJQUFJLG1CQUFtQixLQUFLLElBQUksRUFBRTtRQUM5QixzREFBc0Q7UUFDdEQsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLE1BQU0sWUFBWSxNQUFNLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDO1FBQ2xHLElBQUksSUFBSSxLQUFLLFVBQVUsQ0FBQyxJQUFJLEVBQUU7WUFDMUIsT0FBTywyQkFBMkIsQ0FBQztTQUN0QzthQUFNLElBQUksSUFBSSxLQUFLLFVBQVUsQ0FBQyxJQUFJLEVBQUU7WUFDakMsT0FBTywyQkFBMkIsQ0FBQztTQUN0QztRQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsd0JBQXdCLElBQUksRUFBRSxDQUFDLENBQUM7S0FDbkQ7SUFFRCx3REFBd0Q7SUFDeEQsSUFBSSxtQkFBbUIsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxZQUFZLFFBQVEsRUFBRTtRQUNoRixPQUFRLG1CQUE0QyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUN6RCxPQUFPLHVCQUF1QixDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqRixDQUFDLENBQUMsQ0FBQztLQUNOO0lBQ0QsT0FBTyxtQkFBaUQsQ0FBQztBQUM3RCxDQUFDO0FBc0JELE1BQU0sT0FBTyxlQUFnQixTQUFRLHVCQUF1QjtJQUV4RCxZQUFZLGFBQTRCLEVBQzVCLE1BQXFCLEVBQ3JCLGFBQTRCLEVBQzVCLFNBQTJCLEVBQzNCLGlCQUFxQyxFQUNyQyxrQkFBc0MsRUFDdEMsYUFBNEIsRUFDRyxnQkFBNEMsRUFDbkIsYUFBMkMsRUFDM0QsZ0JBQXdCLElBQUksRUFDakIseUJBQTJDLElBQUk7UUFDMUcsS0FBSyxDQUFDLGFBQWEsRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxrQkFBa0IsRUFDeEYsYUFBYSxFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztJQUMvRixDQUFDO3dHQWZRLGVBQWUsME9BU0oscUJBQXFCLGFBQ1Qsa0NBQWtDLDZCQUNsQyxrQkFBa0IsNkJBQ2xCLDZCQUE2Qjs0RkFacEQsZUFBZSxvQ0FmYjtZQUNQLEVBQUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUM7WUFDbEQ7Z0JBQ0ksT0FBTyxFQUFFLHFCQUFxQjtnQkFDOUIsVUFBVSxFQUFFLHVCQUF1QjtnQkFDbkMsSUFBSSxFQUFFO29CQUNGLHVCQUF1QjtvQkFDdkIsZUFBZTtvQkFDZixrQ0FBa0M7b0JBQ2xDLGtDQUFrQztvQkFDbEMsQ0FBQyxJQUFJLFFBQVEsRUFBRSxFQUFFLElBQUksUUFBUSxFQUFFLEVBQUUscUJBQXFCLENBQUM7aUJBQzFEO2FBQ0o7U0FDSixpREN4RkwsODhEQXFDQTs7NEZEcURhLGVBQWU7a0JBcEIzQixTQUFTOytCQUNJLFdBQVcsaUJBR04saUJBQWlCLENBQUMsSUFBSSxhQUMxQjt3QkFDUCxFQUFDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFDO3dCQUNsRDs0QkFDSSxPQUFPLEVBQUUscUJBQXFCOzRCQUM5QixVQUFVLEVBQUUsdUJBQXVCOzRCQUNuQyxJQUFJLEVBQUU7Z0NBQ0YsdUJBQXVCO2dDQUN2QixlQUFlO2dDQUNmLGtDQUFrQztnQ0FDbEMsa0NBQWtDO2dDQUNsQyxDQUFDLElBQUksUUFBUSxFQUFFLEVBQUUsSUFBSSxRQUFRLEVBQUUsRUFBRSxxQkFBcUIsQ0FBQzs2QkFDMUQ7eUJBQ0o7cUJBQ0o7OzBCQVdZLE1BQU07MkJBQUMscUJBQXFCOzswQkFDNUIsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxrQ0FBa0M7OzBCQUNyRCxRQUFROzswQkFBSSxNQUFNOzJCQUFDLGtCQUFrQjs7MEJBQ3JDLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsNkJBQTZCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIEluamVjdCwgT3B0aW9uYWwsIFNraXBTZWxmLCBUeXBlLCBWaWV3RW5jYXBzdWxhdGlvbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge01BVF9EQVRFX0ZPUk1BVFN9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBBYnN0cmFjdFNlYXJjaENvbXBvbmVudCxcbiAgICBCYXNlRmlsdGVyLFxuICAgIENhdGVnb3J5UmVzb2x2ZXJTZXJ2aWNlLFxuICAgIERBVEVfRk9STUFULFxuICAgIERpYWxvZ1NlcnZpY2UsXG4gICAgTG9nZ2VyU2VydmljZSxcbiAgICBTZWFyY2hTZXJ2aWNlLFxuICAgIE5BRV9TRUFSQ0hfQ09NUE9ORU5UX0NPTkZJR1VSQVRJT04sXG4gICAgU2VhcmNoQ29tcG9uZW50Q29uZmlndXJhdGlvbixcbiAgICBVc2VyRmlsdGVyc1NlcnZpY2UsXG4gICAgQWxsb3dlZE5ldHNTZXJ2aWNlLFxuICAgIE5BRV9TRUFSQ0hfQ0FURUdPUklFUyxcbiAgICBDYXRlZ29yeSxcbiAgICBWaWV3SWRTZXJ2aWNlLFxuICAgIE5BRV9GSUxURVJTX0ZJTFRFUixcbiAgICBGaWx0ZXIsXG4gICAgRmlsdGVyVHlwZSxcbiAgICBOQUVfQkFTRV9GSUxURVIsXG4gICAgTkFFX0RFRkFVTFRfQ0FTRV9TRUFSQ0hfQ0FURUdPUklFUyxcbiAgICBOQUVfREVGQVVMVF9UQVNLX1NFQVJDSF9DQVRFR09SSUVTLCBOQUVfTkFWSUdBVElPTl9JVEVNX1RBU0tfREFUQSwgRGF0YUdyb3VwXG59IGZyb20gJ0BuZXRncmlmL2NvbXBvbmVudHMtY29yZSc7XG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuXG4vKipcbiAqIENvbnZlcnRzIHNlYXJjaCBjYXRlZ29yaWVzIHByb3ZpZGVkIGJ5IHRoZSB7QGxpbmsgTkFFX1NFQVJDSF9DQVRFR09SSUVTfVxuICogaW5qZWN0aW9uIHRva2VuIGluIHRoZSBvbGQgKHByZSA1LjYuMCkgZm9ybWF0LCB0byB0aGUgbmV3IGZvcm1hdC5cbiAqXG4gKiBJZiBubyBzZWFyY2ggY2F0ZWdvcmllcyBhcmUgcHJvdmlkZWQgY29udmVydHMgdGhlIGRlZmF1bHQgc2VhcmNoIGNhdGVnb3JpZXMgaW50byBzZWFyY2ggY2F0ZWdvcmllc1xuICogYmFzZWQgb24gdGhlIGJhc2UgZmlsdGVyIGZpbHRlciB0eXBlLlxuICpcbiAqIEBwYXJhbSBjYXRlZ29yeVJlc29sdmVyU2VydmljZSBzZXJ2aWNlIGZvciBzZXJpYWxpc2F0aW9uIGFuZCBkZXNlcmlhbGl6YXRpb24gb2Ygc2VhcmNoIGNhdGVnb3JpZXNcbiAqIEBwYXJhbSBiYXNlRmlsdGVyIGRldGVybWluZXMgdGhlIGRlZmF1bHQgY2F0ZWdvcmllcyB1c2VkIGlmIG5vIGNhdGVnb3JpZXMgYXJlIHByb3ZpZGVkLCBpbmplY3RlZCBieSB0aGUge0BsaW5rIE5BRV9CQVNFX0ZJTFRFUn1cbiAqIGluamVjdGlvbiB0b2tlblxuICogQHBhcmFtIGRlZmF1bHRDYXNlU2VhcmNoQ2F0ZWdvcmllcyB0aGUgZGVmYXVsdCBjYXNlIHNlYXJjaCBjYXRlZ29yaWVzLCBpbmplY3RlZCBieSB0aGUge0BsaW5rIE5BRV9ERUZBVUxUX0NBU0VfU0VBUkNIX0NBVEVHT1JJRVN9XG4gKiBpbmplY3Rpb24gdG9rZW5cbiAqIEBwYXJhbSBkZWZhdWx0VGFza1NlYXJjaENhdGVnb3JpZXMgdGhlIGRlZmF1bHQgdGFzayBzZWFyY2ggY2F0ZWdvcmllcywgaW5qZWN0ZWQgYnkgdGhlIHtAbGluayBOQUVfREVGQVVMVF9UQVNLX1NFQVJDSF9DQVRFR09SSUVTfVxuICogaW5qZWN0aW9uIHRva2VuXG4gKiBAcGFyYW0gbmFlU2VhcmNoQ2F0ZWdvcmllcyBvcHRpb25hbGx5IHRoZSBzZWFyY2ggY2F0ZWdvcnkgaW5zdGFuY2VzLCBvciB0aGUgc2VhcmNoIGNhdGVnb3J5IGNsYXNzZXMuIEluc3RhbmNlcyBhcmUgY29udmVydGVkIHRvIGNsYXNzZXMuXG4gKiBJZiBubyBjYXRlZ29yaWVzIGFyZSBwcm92aWRlZCB0aGUgZGVmYXVsdCBvbmVzIGJhc2VkIG9uIHRoZSBiYXNlIGZpbHRlciBmaWx0ZXIgdHlwZSB3aWxsIGJlIHJldHVybmVkLlxuICogSW5qZWN0ZWQgYnkgdGhlIHtAbGluayBOQUVfU0VBUkNIX0NBVEVHT1JJRVN9IGluamVjdGlvbiB0b2tlbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlYXJjaENhdGVnb3J5Q29udmVydGVyKGNhdGVnb3J5UmVzb2x2ZXJTZXJ2aWNlOiBDYXRlZ29yeVJlc29sdmVyU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlRmlsdGVyOiBCYXNlRmlsdGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRDYXNlU2VhcmNoQ2F0ZWdvcmllczogQXJyYXk8VHlwZTxDYXRlZ29yeTxhbnk+Pj4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFRhc2tTZWFyY2hDYXRlZ29yaWVzOiBBcnJheTxUeXBlPENhdGVnb3J5PGFueT4+PixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYWVTZWFyY2hDYXRlZ29yaWVzOiBBcnJheTxDYXRlZ29yeTxhbnk+PiB8IEFycmF5PFR5cGU8Q2F0ZWdvcnk8YW55Pj4+ID0gbnVsbFxuKTogQXJyYXk8VHlwZTxDYXRlZ29yeTxhbnk+Pj4ge1xuICAgIGlmIChuYWVTZWFyY2hDYXRlZ29yaWVzID09PSBudWxsKSB7XG4gICAgICAgIC8vIGNhdGVnb3JpZXMgd2VyZSBub3QgcHJvdmlkZWQgPT4gcmV0dXJuIHRoZSBkZWZhdWx0c1xuICAgICAgICBjb25zdCB0eXBlID0gYmFzZUZpbHRlci5maWx0ZXIgaW5zdGFuY2VvZiBGaWx0ZXIgPyBiYXNlRmlsdGVyLmZpbHRlci50eXBlIDogYmFzZUZpbHRlci5maWx0ZXJUeXBlO1xuICAgICAgICBpZiAodHlwZSA9PT0gRmlsdGVyVHlwZS5DQVNFKSB7XG4gICAgICAgICAgICByZXR1cm4gZGVmYXVsdENhc2VTZWFyY2hDYXRlZ29yaWVzO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IEZpbHRlclR5cGUuVEFTSykge1xuICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRUYXNrU2VhcmNoQ2F0ZWdvcmllcztcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYElsbGVnYWwgZmlsdGVyIHR5cGU6ICR7dHlwZX1gKTtcbiAgICB9XG5cbiAgICAvLyBjYXRlZ29yaWVzIHdlcmUgcHJvdmlkZWQgPT4gY29udmVydCB0aGVtIGlmIG5lY2Vzc2FyeVxuICAgIGlmIChuYWVTZWFyY2hDYXRlZ29yaWVzLmxlbmd0aCAhPT0gMCAmJiBuYWVTZWFyY2hDYXRlZ29yaWVzWzBdIGluc3RhbmNlb2YgQ2F0ZWdvcnkpIHtcbiAgICAgICAgcmV0dXJuIChuYWVTZWFyY2hDYXRlZ29yaWVzIGFzIEFycmF5PENhdGVnb3J5PGFueT4+KS5tYXAoYyA9PiB7XG4gICAgICAgICAgICByZXR1cm4gY2F0ZWdvcnlSZXNvbHZlclNlcnZpY2UudG9DbGFzcyhjYXRlZ29yeVJlc29sdmVyU2VydmljZS5zZXJpYWxpemUoYykpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIG5hZVNlYXJjaENhdGVnb3JpZXMgYXMgQXJyYXk8VHlwZTxDYXRlZ29yeTxhbnk+Pj47XG59XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbmMtc2VhcmNoJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vc2VhcmNoLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9zZWFyY2guY29tcG9uZW50LnNjc3MnXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7cHJvdmlkZTogTUFUX0RBVEVfRk9STUFUUywgdXNlVmFsdWU6IERBVEVfRk9STUFUfSxcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogTkFFX1NFQVJDSF9DQVRFR09SSUVTLFxuICAgICAgICAgICAgdXNlRmFjdG9yeTogc2VhcmNoQ2F0ZWdvcnlDb252ZXJ0ZXIsXG4gICAgICAgICAgICBkZXBzOiBbXG4gICAgICAgICAgICAgICAgQ2F0ZWdvcnlSZXNvbHZlclNlcnZpY2UsXG4gICAgICAgICAgICAgICAgTkFFX0JBU0VfRklMVEVSLFxuICAgICAgICAgICAgICAgIE5BRV9ERUZBVUxUX0NBU0VfU0VBUkNIX0NBVEVHT1JJRVMsXG4gICAgICAgICAgICAgICAgTkFFX0RFRkFVTFRfVEFTS19TRUFSQ0hfQ0FURUdPUklFUyxcbiAgICAgICAgICAgICAgICBbbmV3IE9wdGlvbmFsKCksIG5ldyBTa2lwU2VsZigpLCBOQUVfU0VBUkNIX0NBVEVHT1JJRVNdXG4gICAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIFNlYXJjaENvbXBvbmVudCBleHRlbmRzIEFic3RyYWN0U2VhcmNoQ29tcG9uZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKHNlYXJjaFNlcnZpY2U6IFNlYXJjaFNlcnZpY2UsXG4gICAgICAgICAgICAgICAgbG9nZ2VyOiBMb2dnZXJTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsXG4gICAgICAgICAgICAgICAgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIHVzZXJGaWx0ZXJTZXJ2aWNlOiBVc2VyRmlsdGVyc1NlcnZpY2UsXG4gICAgICAgICAgICAgICAgYWxsb3dlZE5ldHNTZXJ2aWNlOiBBbGxvd2VkTmV0c1NlcnZpY2UsXG4gICAgICAgICAgICAgICAgdmlld0lkU2VydmljZTogVmlld0lkU2VydmljZSxcbiAgICAgICAgICAgICAgICBASW5qZWN0KE5BRV9TRUFSQ0hfQ0FURUdPUklFUykgc2VhcmNoQ2F0ZWdvcmllczogQXJyYXk8VHlwZTxDYXRlZ29yeTxhbnk+Pj4sXG4gICAgICAgICAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChOQUVfU0VBUkNIX0NPTVBPTkVOVF9DT05GSUdVUkFUSU9OKSBjb25maWd1cmF0aW9uOiBTZWFyY2hDb21wb25lbnRDb25maWd1cmF0aW9uLFxuICAgICAgICAgICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoTkFFX0ZJTFRFUlNfRklMVEVSKSBmaWx0ZXJzRmlsdGVyOiBGaWx0ZXIgPSBudWxsLFxuICAgICAgICAgICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoTkFFX05BVklHQVRJT05fSVRFTV9UQVNLX0RBVEEpIG5hdmlnYXRpb25JdGVtVGFza0RhdGE6IEFycmF5PERhdGFHcm91cD4gPSBudWxsKSB7XG4gICAgICAgIHN1cGVyKHNlYXJjaFNlcnZpY2UsIGxvZ2dlciwgZGlhbG9nU2VydmljZSwgdHJhbnNsYXRlLCB1c2VyRmlsdGVyU2VydmljZSwgYWxsb3dlZE5ldHNTZXJ2aWNlLFxuICAgICAgICAgICAgdmlld0lkU2VydmljZSwgc2VhcmNoQ2F0ZWdvcmllcywgY29uZmlndXJhdGlvbiwgZmlsdGVyc0ZpbHRlciwgbmF2aWdhdGlvbkl0ZW1UYXNrRGF0YSk7XG4gICAgfVxufVxuIiwiPGRpdiBmeExheW91dD1cInJvdyB3cmFwXCIgY2xhc3M9XCJwYWRkaW5nLXRvcC1zZWFyY2hcIiBmeExheW91dEFsaWduPVwic3RhcnQgY2VudGVyXCI+XG5cbiAgICA8ZGl2ICpuZ0lmPVwiYWR2YW5jZWRTZWFyY2hEaXNwbGF5ZWQ7IHRoZW4gYWR2YW5jZWRTZWFyY2g7IGVsc2UgZnVsbFRleHRTZWFyY2hcIj48L2Rpdj5cblxuICAgIDxuZy10ZW1wbGF0ZSAjYWR2YW5jZWRTZWFyY2g+XG4gICAgICAgIDxuYy1hZHZhbmNlZC1zZWFyY2ggW2VkaXRhYmxlXT1cIiFkaXNhYmxlZFwiPjwvbmMtYWR2YW5jZWQtc2VhcmNoPlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8bmctdGVtcGxhdGUgI2Z1bGxUZXh0U2VhcmNoPlxuICAgICAgICA8bmMtZnVsbHRleHQtc2VhcmNoIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIGNsYXNzPVwibmV0Z3JpZi1pbnB1dFwiPjwvbmMtZnVsbHRleHQtc2VhcmNoPlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiBjbGFzcz1cInNlYXJjaC1idXR0b25zLW1hcmdpbiBzZWFyY2gtYnV0dG9ucy1wYWRkaW5nIGZpeC1maWx0ZXItYnV0dG9uXCIgKm5nSWY9XCJzaG93U2VhcmNoVG9nZ2xlQnV0dG9uXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgIFttYXRUb29sdGlwXT1cIihhZHZhbmNlZFNlYXJjaERpc3BsYXllZCA/ICdzZWFyY2gudG9vbHRpcC50b0Z1bGxUZXh0JyA6ICdzZWFyY2gudG9vbHRpcC50b0FkdmFuY2VkJykgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVNlYXJjaE1vZGUoKVwiPlxuICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJhZHZhbmNlZC1zZWFyY2gtaWNvbiBmaXgtbWF0LWljb25cIiBzdmdJY29uPVwiZmlsdGVyLXZhcmlhbnRcIj48L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuXG4gICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1lbnVcIiBhcmlhLWxhYmVsPVwibWVudVwiIGNsYXNzPVwiZml4LWljb24tYnV0dG9uXCIgKm5nSWY9XCJhZHZhbmNlZFNlYXJjaERpc3BsYXllZFwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiPlxuICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJhZHZhbmNlZC1zZWFyY2gtaWNvblwiPm1vcmVfdmVydDwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG4gICAgPG1hdC1tZW51ICNtZW51PVwibWF0TWVudVwiIGNsYXNzPVwibWF0LW1lbnUtYm9yZGVyLXJhZGl1cyBtYXQtbWVudS1wYWRkaW5nXCI+XG4gICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAqbmdJZj1cInNob3dTYXZlRmlsdGVyQnV0dG9uXCIgKGNsaWNrKT1cInNhdmVGaWx0ZXIoKVwiPlxuICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwicHJlZml4LWljb25cIj5zYXZlPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDxzcGFuPnt7J3NlYXJjaC50b29sdGlwLnNhdmUnIHwgdHJhbnNsYXRlfX08L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKm5nSWY9XCJzaG93TG9hZEZpbHRlckJ1dHRvblwiIChjbGljayk9XCJsb2FkRmlsdGVyKClcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cInByZWZpeC1pY29uXCI+b3Blbl9pbl9icm93c2VyPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDxzcGFuPnt7J3NlYXJjaC50b29sdGlwLmxvYWQnIHwgdHJhbnNsYXRlfX08L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAqbmdJZj1cInNob3dBZHZhbmNlZFNlYXJjaEhlbHBcIiAoY2xpY2spPVwic2hvd0hlbHAoKVwiPlxuICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwicHJlZml4LWljb25cIj5oZWxwPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDxzcGFuPnt7J3NlYXJjaC50b29sdGlwLmhlbHAnIHwgdHJhbnNsYXRlfX08L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgIDwvbWF0LW1lbnU+XG48L2Rpdj5cbiJdfQ==