@alfresco/adf-content-services
Version:
Alfresco ADF content services
135 lines • 23 kB
JavaScript
/*!
* @license
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { Component, DestroyRef, inject, Input, ViewEncapsulation } from '@angular/core';
import { ReplaySubject } from 'rxjs';
import { map } from 'rxjs/operators';
import { CommonModule } from '@angular/common';
import { MatFormFieldModule } from '@angular/material/form-field';
import { TranslateModule } from '@ngx-translate/core';
import { MatInputModule } from '@angular/material/input';
import { MatButtonModule } from '@angular/material/button';
import { FormsModule } from '@angular/forms';
import { MatIconModule } from '@angular/material/icon';
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
import * as i0 from "@angular/core";
import * as i1 from "@angular/common";
import * as i2 from "@angular/material/form-field";
import * as i3 from "@ngx-translate/core";
import * as i4 from "@angular/material/input";
import * as i5 from "@angular/material/button";
import * as i6 from "@angular/forms";
import * as i7 from "@angular/material/icon";
export class SearchTextComponent {
constructor() {
/** The content of the text box. */
this.value = '';
this.isActive = false;
this.enableChangeUpdate = true;
this.displayValue$ = new ReplaySubject(1);
this.destroyRef = inject(DestroyRef);
}
ngOnInit() {
if (this.context && this.settings?.pattern) {
const pattern = new RegExp(this.settings.pattern, 'g');
const match = pattern.exec(this.context.queryFragments[this.id] || '');
if (this.settings.allowUpdateOnChange !== undefined && this.settings.allowUpdateOnChange !== null) {
this.enableChangeUpdate = this.settings.allowUpdateOnChange;
}
if (match && match.length > 1) {
this.value = match[1];
}
if (this.startValue) {
this.setValue(this.startValue);
}
else {
if (this.context?.queryFragments) {
this.context.queryFragments[this.id] = '';
}
}
}
this.context.populateFilters
.asObservable()
.pipe(map((filtersQueries) => filtersQueries[this.id]), takeUntilDestroyed(this.destroyRef))
.subscribe((filterQuery) => {
if (filterQuery) {
this.value = filterQuery;
this.updateQuery(this.value, false);
}
else {
this.reset(false);
}
this.context.filterLoaded.next();
});
}
clear() {
this.isActive = false;
this.value = '';
if (this.enableChangeUpdate) {
this.updateQuery(null);
}
}
reset(updateContext = true) {
this.value = '';
this.updateQuery(null, updateContext);
}
onChangedHandler(event) {
this.value = event.target.value;
this.isActive = !!this.value;
if (this.enableChangeUpdate) {
this.updateQuery(this.value);
}
}
updateQuery(value, updateContext = true) {
this.context.filterRawParams[this.id] = value;
this.displayValue$.next(value);
if (this.context && this.settings && this.settings.field) {
this.context.queryFragments[this.id] = value ? `${this.settings.field}:'${this.getSearchPrefix()}${value}${this.getSearchSuffix()}'` : '';
if (updateContext) {
this.context.update();
}
}
}
submitValues() {
this.updateQuery(this.value);
}
hasValidValue() {
return !!this.value;
}
getCurrentValue() {
return this.value;
}
setValue(value) {
this.value = value;
this.displayValue$.next(this.value);
this.submitValues();
}
getSearchPrefix() {
return this.settings.searchPrefix ? this.settings.searchPrefix : '';
}
getSearchSuffix() {
return this.settings.searchSuffix ? this.settings.searchSuffix : '';
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: SearchTextComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.3", type: SearchTextComponent, isStandalone: true, selector: "adf-search-text", inputs: { value: "value" }, host: { classAttribute: "adf-search-text" }, ngImport: i0, template: "<mat-form-field\n class=\"adf-search-text-form-field\"\n appearance=\"fill\">\n <mat-label>{{ settings?.placeholder | translate }}</mat-label>\n <input\n matInput\n [(ngModel)]=\"value\"\n (change)=\"onChangedHandler($event)\">\n <button\n mat-icon-button\n *ngIf=\"value\"\n matSuffix\n (click)=\"clear()\"\n class=\"adf-search-text-form-field-clear-button\">\n <mat-icon>close</mat-icon>\n </button>\n</mat-form-field>\n", styles: [".adf-search-text{padding:0}.adf-search-text .adf-search-text-form-field{width:100%}.adf-search-text .adf-search-text-form-field-clear-button{min-width:unset;border-radius:50%}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2.MatLabel, selector: "mat-label" }, { kind: "directive", type: i2.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i4.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], encapsulation: i0.ViewEncapsulation.None }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: SearchTextComponent, decorators: [{
type: Component,
args: [{ selector: 'adf-search-text', standalone: true, imports: [CommonModule, MatFormFieldModule, TranslateModule, MatInputModule, MatButtonModule, FormsModule, MatIconModule], encapsulation: ViewEncapsulation.None, host: { class: 'adf-search-text' }, template: "<mat-form-field\n class=\"adf-search-text-form-field\"\n appearance=\"fill\">\n <mat-label>{{ settings?.placeholder | translate }}</mat-label>\n <input\n matInput\n [(ngModel)]=\"value\"\n (change)=\"onChangedHandler($event)\">\n <button\n mat-icon-button\n *ngIf=\"value\"\n matSuffix\n (click)=\"clear()\"\n class=\"adf-search-text-form-field-clear-button\">\n <mat-icon>close</mat-icon>\n </button>\n</mat-form-field>\n", styles: [".adf-search-text{padding:0}.adf-search-text .adf-search-text-form-field{width:100%}.adf-search-text .adf-search-text-form-field-clear-button{min-width:unset;border-radius:50%}\n"] }]
}], propDecorators: { value: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLXRleHQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGliL2NvbnRlbnQtc2VydmljZXMvc3JjL2xpYi9zZWFyY2gvY29tcG9uZW50cy9zZWFyY2gtdGV4dC9zZWFyY2gtdGV4dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvY29udGVudC1zZXJ2aWNlcy9zcmMvbGliL3NlYXJjaC9jb21wb25lbnRzL3NlYXJjaC10ZXh0L3NlYXJjaC10ZXh0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQVUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJaEcsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNyQyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7Ozs7Ozs7OztBQVdoRSxNQUFNLE9BQU8sbUJBQW1CO0lBVGhDO1FBVUks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QUFLLENBQUM7SUFDeEIsQ0FBQztJQUVELGVBQWU7UUFDWCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDdEIsQ0FBQztJQUVELFFBQVEsQ0FBQyxLQUFhO1FBQ2xCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVPLGVBQWU7UUFDbkIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUN4RSxDQUFDO0lBRU8sZUFBZTtRQUNuQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ3hFLENBQUM7OEdBM0dRLG1CQUFtQjtrR0FBbkIsbUJBQW1CLG9KQ3pDaEMseWZBaUJBLDBPRGtCYyxZQUFZLGtJQUFFLGtCQUFrQiwyYUFBRSxlQUFlLDJGQUFFLGNBQWMsMFdBQUUsZUFBZSwySUFBRSxXQUFXLDhtQkFBRSxhQUFhOzsyRkFNL0csbUJBQW1CO2tCQVQvQixTQUFTOytCQUNJLGlCQUFpQixjQUNmLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxrQkFBa0IsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsYUFBYSxDQUFDLGlCQUcxRyxpQkFBaUIsQ0FBQyxJQUFJLFFBQy9CLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixFQUFFOzhCQUtsQyxLQUFLO3NCQURKLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgwqkgMjAwNS0yMDI1IEh5bGFuZCBTb2Z0d2FyZSwgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IENvbXBvbmVudCwgRGVzdHJveVJlZiwgaW5qZWN0LCBJbnB1dCwgT25Jbml0LCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU2VhcmNoV2lkZ2V0IH0gZnJvbSAnLi4vLi4vbW9kZWxzL3NlYXJjaC13aWRnZXQuaW50ZXJmYWNlJztcbmltcG9ydCB7IFNlYXJjaFdpZGdldFNldHRpbmdzIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3NlYXJjaC13aWRnZXQtc2V0dGluZ3MuaW50ZXJmYWNlJztcbmltcG9ydCB7IFNlYXJjaFF1ZXJ5QnVpbGRlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zZWFyY2gtcXVlcnktYnVpbGRlci5zZXJ2aWNlJztcbmltcG9ydCB7IFJlcGxheVN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYWRmLXNlYXJjaC10ZXh0JyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIE1hdEZvcm1GaWVsZE1vZHVsZSwgVHJhbnNsYXRlTW9kdWxlLCBNYXRJbnB1dE1vZHVsZSwgTWF0QnV0dG9uTW9kdWxlLCBGb3Jtc01vZHVsZSwgTWF0SWNvbk1vZHVsZV0sXG4gICAgdGVtcGxhdGVVcmw6ICcuL3NlYXJjaC10ZXh0LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9zZWFyY2gtdGV4dC5jb21wb25lbnQuc2NzcyddLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgaG9zdDogeyBjbGFzczogJ2FkZi1zZWFyY2gtdGV4dCcgfVxufSlcbmV4cG9ydCBjbGFzcyBTZWFyY2hUZXh0Q29tcG9uZW50IGltcGxlbWVudHMgU2VhcmNoV2lkZ2V0LCBPbkluaXQge1xuICAgIC8qKiBUaGUgY29udGVudCBvZiB0aGUgdGV4dCBib3guICovXG4gICAgQElucHV0KClcbiAgICB2YWx1ZSA9ICcnO1xuXG4gICAgaWQ6IHN0cmluZztcbiAgICBzZXR0aW5nczogU2VhcmNoV2lkZ2V0U2V0dGluZ3M7XG4gICAgY29udGV4dDogU2VhcmNoUXVlcnlCdWlsZGVyU2VydmljZTtcbiAgICBzdGFydFZhbHVlOiBzdHJpbmc7XG4gICAgaXNBY3RpdmUgPSBmYWxzZTtcbiAgICBlbmFibGVDaGFuZ2VVcGRhdGUgPSB0cnVlO1xuICAgIGRpc3BsYXlWYWx1ZSQgPSBuZXcgUmVwbGF5U3ViamVjdDxzdHJpbmc+KDEpO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRleHQgJiYgdGhpcy5zZXR0aW5ncz8ucGF0dGVybikge1xuICAgICAgICAgICAgY29uc3QgcGF0dGVybiA9IG5ldyBSZWdFeHAodGhpcy5zZXR0aW5ncy5wYXR0ZXJuLCAnZycpO1xuICAgICAgICAgICAgY29uc3QgbWF0Y2ggPSBwYXR0ZXJuLmV4ZWModGhpcy5jb250ZXh0LnF1ZXJ5RnJhZ21lbnRzW3RoaXMuaWRdIHx8ICcnKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnNldHRpbmdzLmFsbG93VXBkYXRlT25DaGFuZ2UgIT09IHVuZGVmaW5lZCAmJiB0aGlzLnNldHRpbmdzLmFsbG93VXBkYXRlT25DaGFuZ2UgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVuYWJsZUNoYW5nZVVwZGF0ZSA9IHRoaXMuc2V0dGluZ3MuYWxsb3dVcGRhdGVPbkNoYW5nZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG1hdGNoICYmIG1hdGNoLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gbWF0Y2hbMV07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnN0YXJ0VmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFZhbHVlKHRoaXMuc3RhcnRWYWx1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbnRleHQ/LnF1ZXJ5RnJhZ21lbnRzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5xdWVyeUZyYWdtZW50c1t0aGlzLmlkXSA9ICcnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbnRleHQucG9wdWxhdGVGaWx0ZXJzXG4gICAgICAgICAgICAuYXNPYnNlcnZhYmxlKClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcCgoZmlsdGVyc1F1ZXJpZXMpID0+IGZpbHRlcnNRdWVyaWVzW3RoaXMuaWRdKSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZmlsdGVyUXVlcnkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZmlsdGVyUXVlcnkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGZpbHRlclF1ZXJ5O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVF1ZXJ5KHRoaXMudmFsdWUsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc2V0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpbHRlckxvYWRlZC5uZXh0KCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG4gICAgY2xlYXIoKSB7XG4gICAgICAgIHRoaXMuaXNBY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy52YWx1ZSA9ICcnO1xuICAgICAgICBpZiAodGhpcy5lbmFibGVDaGFuZ2VVcGRhdGUpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUXVlcnkobnVsbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXNldCh1cGRhdGVDb250ZXh0ID0gdHJ1ZSkge1xuICAgICAgICB0aGlzLnZhbHVlID0gJyc7XG4gICAgICAgIHRoaXMudXBkYXRlUXVlcnkobnVsbCwgdXBkYXRlQ29udGV4dCk7XG4gICAgfVxuXG4gICAgb25DaGFuZ2VkSGFuZGxlcihldmVudCkge1xuICAgICAgICB0aGlzLnZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICAgICAgICB0aGlzLmlzQWN0aXZlID0gISF0aGlzLnZhbHVlO1xuICAgICAgICBpZiAodGhpcy5lbmFibGVDaGFuZ2VVcGRhdGUpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUXVlcnkodGhpcy52YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVF1ZXJ5KHZhbHVlOiBzdHJpbmcsIHVwZGF0ZUNvbnRleHQgPSB0cnVlKSB7XG4gICAgICAgIHRoaXMuY29udGV4dC5maWx0ZXJSYXdQYXJhbXNbdGhpcy5pZF0gPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5kaXNwbGF5VmFsdWUkLm5leHQodmFsdWUpO1xuICAgICAgICBpZiAodGhpcy5jb250ZXh0ICYmIHRoaXMuc2V0dGluZ3MgJiYgdGhpcy5zZXR0aW5ncy5maWVsZCkge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LnF1ZXJ5RnJhZ21lbnRzW3RoaXMuaWRdID0gdmFsdWUgPyBgJHt0aGlzLnNldHRpbmdzLmZpZWxkfTonJHt0aGlzLmdldFNlYXJjaFByZWZpeCgpfSR7dmFsdWV9JHt0aGlzLmdldFNlYXJjaFN1ZmZpeCgpfSdgIDogJyc7XG4gICAgICAgICAgICBpZiAodXBkYXRlQ29udGV4dCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC51cGRhdGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN1Ym1pdFZhbHVlcygpIHtcbiAgICAgICAgdGhpcy51cGRhdGVRdWVyeSh0aGlzLnZhbHVlKTtcbiAgICB9XG5cbiAgICBoYXNWYWxpZFZhbHVlKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLnZhbHVlO1xuICAgIH1cblxuICAgIGdldEN1cnJlbnRWYWx1ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gICAgfVxuXG4gICAgc2V0VmFsdWUodmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuZGlzcGxheVZhbHVlJC5uZXh0KHRoaXMudmFsdWUpO1xuICAgICAgICB0aGlzLnN1Ym1pdFZhbHVlcygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U2VhcmNoUHJlZml4KCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnNldHRpbmdzLnNlYXJjaFByZWZpeCA/IHRoaXMuc2V0dGluZ3Muc2VhcmNoUHJlZml4IDogJyc7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRTZWFyY2hTdWZmaXgoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0dGluZ3Muc2VhcmNoU3VmZml4ID8gdGhpcy5zZXR0aW5ncy5zZWFyY2hTdWZmaXggOiAnJztcbiAgICB9XG59XG4iLCI8bWF0LWZvcm0tZmllbGRcbiAgICBjbGFzcz1cImFkZi1zZWFyY2gtdGV4dC1mb3JtLWZpZWxkXCJcbiAgICBhcHBlYXJhbmNlPVwiZmlsbFwiPlxuICAgIDxtYXQtbGFiZWw+e3sgc2V0dGluZ3M/LnBsYWNlaG9sZGVyIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgPGlucHV0XG4gICAgICAgIG1hdElucHV0XG4gICAgICAgIFsobmdNb2RlbCldPVwidmFsdWVcIlxuICAgICAgICAoY2hhbmdlKT1cIm9uQ2hhbmdlZEhhbmRsZXIoJGV2ZW50KVwiPlxuICAgIDxidXR0b25cbiAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICpuZ0lmPVwidmFsdWVcIlxuICAgICAgICBtYXRTdWZmaXhcbiAgICAgICAgKGNsaWNrKT1cImNsZWFyKClcIlxuICAgICAgICBjbGFzcz1cImFkZi1zZWFyY2gtdGV4dC1mb3JtLWZpZWxkLWNsZWFyLWJ1dHRvblwiPlxuICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuPC9tYXQtZm9ybS1maWVsZD5cbiJdfQ==