ontimize-web-ngx
Version:
Ontimize Web framework using Angular 15
156 lines • 26.1 kB
JavaScript
import { animate, state, style, transition, trigger } from '@angular/animations';
import { ChangeDetectorRef, Component, ElementRef, Injector, ViewChild } from '@angular/core';
import { Validators } from '@angular/forms';
import { MatTab, MatTabGroup } from '@angular/material/tabs';
import { NumberConverter } from '../../../decorators/input-converter';
import { OFormComponent } from '../../form/o-form.component';
import { CKEditorComponent } from '../../material/ckeditor/ck-editor.component';
import { OFormDataComponent } from '../../o-form-data-component.class';
import * as i0 from "@angular/core";
import * as i1 from "../../form/o-form.component";
import * as i2 from "@angular/forms";
import * as i3 from "../../material/ckeditor/ck-editor.component";
import * as i4 from "@angular/common";
import * as i5 from "@angular/flex-layout/flex";
import * as i6 from "../../../directives/o-mat-error.directive";
import * as i7 from "@angular/material/form-field";
import * as i8 from "../../../pipes/o-translate.pipe";
export const DEFAULT_INPUTS_O_HTML_INPUT = [
'oattr: attr',
'data',
'autoBinding: automatic-binding',
'autoRegistering: automatic-registering',
'orequired: required',
'minLength: min-length',
'maxLength: max-length',
'readOnly: read-only',
'sqlType: sql-type'
];
export const DEFAULT_OUTPUTS_O_HTML_INPUT = [
'onFocus',
'onBlur'
];
export class OHTMLInputComponent extends OFormDataComponent {
constructor(form, elRef, injector) {
super(form, elRef, injector);
this._minLength = -1;
this._maxLength = -1;
this._subscriptAnimationState = '';
this.form = form;
this.elRef = elRef;
this._changeDetectorRef = this.injector.get(ChangeDetectorRef);
try {
this.tabGroupContainer = this.injector.get(MatTabGroup);
this.tabContainer = this.injector.get(MatTab);
}
catch (error) {
}
}
ngOnInit() {
super.ngOnInit();
const self = this;
if (this.form) {
this.form.beforeCloseDetail.subscribe(() => this.destroyCKEditor());
this.form.beforeUpdateMode.subscribe(() => this.destroyCKEditor());
}
if (this.tabGroupContainer) {
this.tabGroupContainer.selectedTabChange.subscribe((evt) => {
self.destroyCKEditor();
if (self.isInActiveTab()) {
self.ckEditor.initCKEditor(self.oattr);
}
});
}
}
ngAfterViewInit() {
super.ngAfterViewInit();
this._subscriptAnimationState = 'enter';
this._changeDetectorRef.detectChanges();
}
hasError(error) {
const result = super.hasError(error);
this._subscriptAnimationState = result ? 'enter' : 'void';
return result;
}
isInActiveTab() {
let result = !(this.tabGroupContainer && this.tabContainer);
if (!result) {
const self = this;
this.tabGroupContainer._tabs.forEach((tab, index) => {
if (tab === self.tabContainer) {
result = (self.tabGroupContainer.selectedIndex === index);
}
});
}
return result;
}
resolveValidators() {
const validators = super.resolveValidators();
if (this.minLength >= 0) {
validators.push(Validators.minLength(this.minLength));
}
if (this.maxLength >= 0) {
validators.push(Validators.maxLength(this.maxLength));
}
return validators;
}
clearValue() {
super.clearValue();
this.ckEditor.instance.updateElement();
this.ckEditor.instance.setData('');
}
destroyCKEditor() {
if (this.ckEditor) {
this.ckEditor.destroyCKEditor();
}
}
getCKEditor() {
return this.ckEditor.instance;
}
set minLength(val) {
const old = this._minLength;
this._minLength = NumberConverter(val);
if (val !== old) {
this.updateValidators();
}
}
get minLength() {
return this._minLength;
}
set maxLength(val) {
const old = this._maxLength;
this._maxLength = NumberConverter(val);
if (val !== old) {
this.updateValidators();
}
}
get maxLength() {
return this._maxLength;
}
}
OHTMLInputComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OHTMLInputComponent, deps: [{ token: i1.OFormComponent }, { token: i0.ElementRef }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
OHTMLInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: OHTMLInputComponent, selector: "o-html-input", inputs: { oattr: ["attr", "oattr"], data: "data", autoBinding: ["automatic-binding", "autoBinding"], autoRegistering: ["automatic-registering", "autoRegistering"], orequired: ["required", "orequired"], minLength: ["min-length", "minLength"], maxLength: ["max-length", "maxLength"], readOnly: ["read-only", "readOnly"], sqlType: ["sql-type", "sqlType"] }, outputs: { onFocus: "onFocus", onBlur: "onBlur" }, viewQueries: [{ propertyName: "ckEditor", first: true, predicate: ["ckEditor"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div [formGroup]=\"getFormGroup()\" class=\"mat-form-field mat-form-field\" fxFill>\n <div class=\"mat-form-field-wrapper mat-form-field-wrapper\">\n <ck-editor #ckEditor [id]=\"getAttribute()\" [formControlName]=\"getAttribute()\" (focus)=\"innerOnFocus($event)\" (blur)=\"innerOnBlur($event)\" \n (change)=\"onChangeEvent($event)\" [required]=\"isRequired\" [readonly]=\"isReadOnly\" class=\"mat-form-field-flex mat-form-field-flex\" fxFill></ck-editor>\n <div class=\"mat-form-field-subscript-wrapper mat-form-field-subscript-wrapper\">\n <div class=\"ng-trigger ng-trigger-transitionMessages\" [@transitionMessages]=\"_subscriptAnimationState\">\n <mat-error *oMatError=\"hasError('required')\">\n {{ 'FORM_VALIDATION.REQUIRED' | oTranslate }}\n </mat-error>\n <mat-error *oMatError=\"hasError('minlength')\">\n {{ 'FORM_VALIDATION.MIN_LENGTH' | oTranslate }}: {{ getErrorValue('minlength', 'requiredLength') }}\n </mat-error>\n <mat-error *oMatError=\"hasError('maxlength')\">\n {{ 'FORM_VALIDATION.MAX_LENGTH' | oTranslate }}: {{ getErrorValue('maxlength', 'requiredLength') }}\n </mat-error>\n <mat-error *ngFor=\"let oError of getActiveOErrors()\"> \n {{ oError.text | oTranslate }}\n </mat-error>\n </div>\n </div>\n </div>\n</div>", styles: [".mat-form-field-wrapper{position:relative}.mat-form-field-subscript-wrapper{position:absolute;width:100%;overflow:hidden}\n"], dependencies: [{ kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "component", type: i3.CKEditorComponent, selector: "ck-editor", inputs: ["readonly", "config", "skin", "language", "fullPage", "inline", "id"], outputs: ["change", "ready", "blur", "focus"], exportAs: ["ckEditor"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.FlexFillDirective, selector: "[fxFill], [fxFlexFill]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i6.OMatErrorDirective, selector: "[oMatError]", inputs: ["oMatError"] }, { kind: "directive", type: i7.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "pipe", type: i8.OTranslatePipe, name: "oTranslate" }], animations: [
trigger('transitionMessages', [
state('enter', style({ opacity: 1, transform: 'translateY(0%)' })),
transition('void => enter', [
style({ opacity: 0, transform: 'translateY(-100%)' }),
animate('300ms cubic-bezier(0.55, 0, 0.55, 0.2)'),
]),
])
] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OHTMLInputComponent, decorators: [{
type: Component,
args: [{ selector: 'o-html-input', inputs: DEFAULT_INPUTS_O_HTML_INPUT, outputs: DEFAULT_OUTPUTS_O_HTML_INPUT, animations: [
trigger('transitionMessages', [
state('enter', style({ opacity: 1, transform: 'translateY(0%)' })),
transition('void => enter', [
style({ opacity: 0, transform: 'translateY(-100%)' }),
animate('300ms cubic-bezier(0.55, 0, 0.55, 0.2)'),
]),
])
], template: "<div [formGroup]=\"getFormGroup()\" class=\"mat-form-field mat-form-field\" fxFill>\n <div class=\"mat-form-field-wrapper mat-form-field-wrapper\">\n <ck-editor #ckEditor [id]=\"getAttribute()\" [formControlName]=\"getAttribute()\" (focus)=\"innerOnFocus($event)\" (blur)=\"innerOnBlur($event)\" \n (change)=\"onChangeEvent($event)\" [required]=\"isRequired\" [readonly]=\"isReadOnly\" class=\"mat-form-field-flex mat-form-field-flex\" fxFill></ck-editor>\n <div class=\"mat-form-field-subscript-wrapper mat-form-field-subscript-wrapper\">\n <div class=\"ng-trigger ng-trigger-transitionMessages\" [@transitionMessages]=\"_subscriptAnimationState\">\n <mat-error *oMatError=\"hasError('required')\">\n {{ 'FORM_VALIDATION.REQUIRED' | oTranslate }}\n </mat-error>\n <mat-error *oMatError=\"hasError('minlength')\">\n {{ 'FORM_VALIDATION.MIN_LENGTH' | oTranslate }}: {{ getErrorValue('minlength', 'requiredLength') }}\n </mat-error>\n <mat-error *oMatError=\"hasError('maxlength')\">\n {{ 'FORM_VALIDATION.MAX_LENGTH' | oTranslate }}: {{ getErrorValue('maxlength', 'requiredLength') }}\n </mat-error>\n <mat-error *ngFor=\"let oError of getActiveOErrors()\"> \n {{ oError.text | oTranslate }}\n </mat-error>\n </div>\n </div>\n </div>\n</div>", styles: [".mat-form-field-wrapper{position:relative}.mat-form-field-subscript-wrapper{position:absolute;width:100%;overflow:hidden}\n"] }]
}], ctorParameters: function () { return [{ type: i1.OFormComponent }, { type: i0.ElementRef }, { type: i0.Injector }]; }, propDecorators: { ckEditor: [{
type: ViewChild,
args: ['ckEditor']
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby1odG1sLWlucHV0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL2lucHV0L2h0bWwtaW5wdXQvby1odG1sLWlucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL2lucHV0L2h0bWwtaW5wdXQvby1odG1sLWlucHV0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakYsT0FBTyxFQUFpQixpQkFBaUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBZ0IsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNILE9BQU8sRUFBZSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRTdELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDaEYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7Ozs7Ozs7Ozs7QUFFdkUsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQUc7SUFDekMsYUFBYTtJQUNiLE1BQU07SUFDTixnQ0FBZ0M7SUFDaEMsd0NBQXdDO0lBQ3hDLHFCQUFxQjtJQUNyQix1QkFBdUI7SUFDdkIsdUJBQXVCO0lBQ3ZCLHFCQUFxQjtJQUNy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Qzs0QkFDbEUsVUFBVSxDQUFDLGVBQWUsRUFBRTtnQ0FDMUIsS0FBSyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsbUJBQW1CLEVBQUUsQ0FBQztnQ0FDckQsT0FBTyxDQUFDLHdDQUF3QyxDQUFDOzZCQUNsRCxDQUFDO3lCQUNILENBQUM7cUJBQ0g7cUpBT3NCLFFBQVE7c0JBQTlCLFNBQVM7dUJBQUMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFuaW1hdGUsIHN0YXRlLCBzdHlsZSwgdHJhbnNpdGlvbiwgdHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5qZWN0b3IsIE9uSW5pdCwgVHlwZSwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBWYWxpZGF0b3JGbiwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdFRhYiwgTWF0VGFiR3JvdXAgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJzJztcblxuaW1wb3J0IHsgTnVtYmVyQ29udmVydGVyIH0gZnJvbSAnLi4vLi4vLi4vZGVjb3JhdG9ycy9pbnB1dC1jb252ZXJ0ZXInO1xuaW1wb3J0IHsgT0Zvcm1Db21wb25lbnQgfSBmcm9tICcuLi8uLi9mb3JtL28tZm9ybS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ0tFZGl0b3JDb21wb25lbnQgfSBmcm9tICcuLi8uLi9tYXRlcmlhbC9ja2VkaXRvci9jay1lZGl0b3IuY29tcG9uZW50JztcbmltcG9ydCB7IE9Gb3JtRGF0YUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL28tZm9ybS1kYXRhLWNvbXBvbmVudC5jbGFzcyc7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0lOUFVUU19PX0hUTUxfSU5QVVQgPSBbXG4gICdvYXR0cjogYXR0cicsXG4gICdkYXRhJyxcbiAgJ2F1dG9CaW5kaW5nOiBhdXRvbWF0aWMtYmluZGluZycsXG4gICdhdXRvUmVnaXN0ZXJpbmc6IGF1dG9tYXRpYy1yZWdpc3RlcmluZycsXG4gICdvcmVxdWlyZWQ6IHJlcXVpcmVkJyxcbiAgJ21pbkxlbmd0aDogbWluLWxlbmd0aCcsXG4gICdtYXhMZW5ndGg6IG1heC1sZW5ndGgnLFxuICAncmVhZE9ubHk6IHJlYWQtb25seScsXG4gICdzcWxUeXBlOiBzcWwtdHlwZSdcbl07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX09VVFBVVFNfT19IVE1MX0lOUFVUID0gW1xuICAnb25Gb2N1cycsXG4gICdvbkJsdXInXG5dO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdvLWh0bWwtaW5wdXQnLFxuICB0ZW1wbGF0ZVVybDogJy4vby1odG1sLWlucHV0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vby1odG1sLWlucHV0LmNvbXBvbmVudC5zY3NzJ10sXG4gIGlucHV0czogREVGQVVMVF9JTlBVVFNfT19IVE1MX0lOUFVULFxuICBvdXRwdXRzOiBERUZBVUxUX09VVFBVVFNfT19IVE1MX0lOUFVULFxuICBhbmltYXRpb25zOiBbXG4gICAgdHJpZ2dlcigndHJhbnNpdGlvbk1lc3NhZ2VzJywgW1xuICAgICAgc3RhdGUoJ2VudGVyJywgc3R5bGUoeyBvcGFjaXR5OiAxLCB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKDAlKScgfSkpLFxuICAgICAgdHJhbnNpdGlvbigndm9pZCA9PiBlbnRlcicsIFtcbiAgICAgICAgc3R5bGUoeyBvcGFjaXR5OiAwLCB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKC0xMDAlKScgfSksXG4gICAgICAgIGFuaW1hdGUoJzMwMG1zIGN1YmljLWJlemllcigwLjU1LCAwLCAwLjU1LCAwLjIpJyksXG4gICAgICBdKSxcbiAgICBdKVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIE9IVE1MSW5wdXRDb21wb25lbnQgZXh0ZW5kcyBPRm9ybURhdGFDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xuXG4gIHByb3RlY3RlZCBfbWluTGVuZ3RoOiBudW1iZXIgPSAtMTtcbiAgcHJvdGVjdGVkIF9tYXhMZW5ndGg6IG51bWJlciA9IC0xO1xuXG4gIEBWaWV3Q2hpbGQoJ2NrRWRpdG9yJykgY2tFZGl0b3I6IENLRWRpdG9yQ29tcG9uZW50O1xuXG4gIHByb3RlY3RlZCB0YWJHcm91cENvbnRhaW5lcjogTWF0VGFiR3JvdXA7XG4gIHByb3RlY3RlZCB0YWJDb250YWluZXI6IE1hdFRhYjtcblxuICAvKiogU3RhdGUgb2YgdGhlIG1hdC1oaW50IGFuZCBtYXQtZXJyb3IgYW5pbWF0aW9ucy4gKi9cbiAgX3N1YnNjcmlwdEFuaW1hdGlvblN0YXRlOiBzdHJpbmcgPSAnJztcblxuICBwcm90ZWN0ZWQgX2NoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBmb3JtOiBPRm9ybUNvbXBvbmVudCxcbiAgICBlbFJlZjogRWxlbWVudFJlZixcbiAgICBpbmplY3RvcjogSW5qZWN0b3JcbiAgKSB7XG4gICAgc3VwZXIoZm9ybSwgZWxSZWYsIGluamVjdG9yKTtcbiAgICB0aGlzLmZvcm0gPSBmb3JtO1xuICAgIHRoaXMuZWxSZWYgPSBlbFJlZjtcbiAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZiA9IHRoaXMuaW5qZWN0b3IuZ2V0PENoYW5nZURldGVjdG9yUmVmPihDaGFuZ2VEZXRlY3RvclJlZiBhcyBUeXBlPENoYW5nZURldGVjdG9yUmVmPik7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMudGFiR3JvdXBDb250YWluZXIgPSB0aGlzLmluamVjdG9yLmdldDxNYXRUYWJHcm91cD4oTWF0VGFiR3JvdXAgYXMgVHlwZTxNYXRUYWJHcm91cD4pO1xuICAgICAgdGhpcy50YWJDb250YWluZXIgPSB0aGlzLmluamVjdG9yLmdldDxNYXRUYWI+KE1hdFRhYiBhcyBUeXBlPE1hdFRhYj4pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBEbyBub3RoaW5nIGR1ZSB0byBub3QgYWx3YXlzIGlzIGNvbnRhaW5lZCBvbiB0YWIuXG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBpZiAodGhpcy5mb3JtKSB7XG4gICAgICB0aGlzLmZvcm0uYmVmb3JlQ2xvc2VEZXRhaWwuc3Vic2NyaWJlKCgpID0+IHRoaXMuZGVzdHJveUNLRWRpdG9yKCkpO1xuICAgICAgdGhpcy5mb3JtLmJlZm9yZVVwZGF0ZU1vZGUuc3Vic2NyaWJlKCgpID0+IHRoaXMuZGVzdHJveUNLRWRpdG9yKCkpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRhYkdyb3VwQ29udGFpbmVyKSB7XG4gICAgICB0aGlzLnRhYkdyb3VwQ29udGFpbmVyLnNlbGVjdGVkVGFiQ2hhbmdlLnN1YnNjcmliZSgoZXZ0OiBhbnkpID0+IHtcbiAgICAgICAgc2VsZi5kZXN0cm95Q0tFZGl0b3IoKTtcbiAgICAgICAgaWYgKHNlbGYuaXNJbkFjdGl2ZVRhYigpKSB7XG4gICAgICAgICAgc2VsZi5ja0VkaXRvci5pbml0Q0tFZGl0b3Ioc2VsZi5vYXR0cik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBzdXBlci5uZ0FmdGVyVmlld0luaXQoKTtcbiAgICAvLyBBdm9pZCBhbmltYXRpb25zIG9uIGxvYWQuXG4gICAgdGhpcy5fc3Vic2NyaXB0QW5pbWF0aW9uU3RhdGUgPSAnZW50ZXInO1xuICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG5cbiAgaGFzRXJyb3IoZXJyb3I6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IHN1cGVyLmhhc0Vycm9yKGVycm9yKTtcbiAgICB0aGlzLl9zdWJzY3JpcHRBbmltYXRpb25TdGF0ZSA9IHJlc3VsdCA/ICdlbnRlcicgOiAndm9pZCc7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGlzSW5BY3RpdmVUYWIoKTogYm9vbGVhbiB7XG4gICAgbGV0IHJlc3VsdDogYm9vbGVhbiA9ICEodGhpcy50YWJHcm91cENvbnRhaW5lciAmJiB0aGlzLnRhYkNvbnRhaW5lcik7XG4gICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgdGhpcy50YWJHcm91cENvbnRhaW5lci5fdGFicy5mb3JFYWNoKCh0YWIsIGluZGV4KSA9PiB7XG4gICAgICAgIGlmICh0YWIgPT09IHNlbGYudGFiQ29udGFpbmVyKSB7XG4gICAgICAgICAgcmVzdWx0ID0gKHNlbGYudGFiR3JvdXBDb250YWluZXIuc2VsZWN0ZWRJbmRleCA9PT0gaW5kZXgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHJlc29sdmVWYWxpZGF0b3JzKCk6IFZhbGlkYXRvckZuW10ge1xuICAgIGNvbnN0IHZhbGlkYXRvcnM6IFZhbGlkYXRvckZuW10gPSBzdXBlci5yZXNvbHZlVmFsaWRhdG9ycygpO1xuICAgIGlmICh0aGlzLm1pbkxlbmd0aCA+PSAwKSB7XG4gICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5taW5MZW5ndGgodGhpcy5taW5MZW5ndGgpKTtcbiAgICB9XG4gICAgaWYgKHRoaXMubWF4TGVuZ3RoID49IDApIHtcbiAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLm1heExlbmd0aCh0aGlzLm1heExlbmd0aCkpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsaWRhdG9ycztcbiAgfVxuXG4gIGNsZWFyVmFsdWUoKTogdm9pZCB7XG4gICAgc3VwZXIuY2xlYXJWYWx1ZSgpO1xuICAgIHRoaXMuY2tFZGl0b3IuaW5zdGFuY2UudXBkYXRlRWxlbWVudCgpO1xuICAgIHRoaXMuY2tFZGl0b3IuaW5zdGFuY2Uuc2V0RGF0YSgnJyk7XG4gIH1cblxuICBkZXN0cm95Q0tFZGl0b3IoKSB7XG4gICAgaWYgKHRoaXMuY2tFZGl0b3IpIHtcbiAgICAgIHRoaXMuY2tFZGl0b3IuZGVzdHJveUNLRWRpdG9yKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0Q0tFZGl0b3IoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5ja0VkaXRvci5pbnN0YW5jZTtcbiAgfVxuXG4gIHNldCBtaW5MZW5ndGgodmFsOiBudW1iZXIpIHtcbiAgICBjb25zdCBvbGQgPSB0aGlzLl9taW5MZW5ndGg7XG4gICAgdGhpcy5fbWluTGVuZ3RoID0gTnVtYmVyQ29udmVydGVyKHZhbCk7XG4gICAgaWYgKHZhbCAhPT0gb2xkKSB7XG4gICAgICB0aGlzLnVwZGF0ZVZhbGlkYXRvcnMoKTtcbiAgICB9XG4gIH1cblxuICBnZXQgbWluTGVuZ3RoKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX21pbkxlbmd0aDtcbiAgfVxuXG4gIHNldCBtYXhMZW5ndGgodmFsOiBudW1iZXIpIHtcbiAgICBjb25zdCBvbGQgPSB0aGlzLl9tYXhMZW5ndGg7XG4gICAgdGhpcy5fbWF4TGVuZ3RoID0gTnVtYmVyQ29udmVydGVyKHZhbCk7XG4gICAgaWYgKHZhbCAhPT0gb2xkKSB7XG4gICAgICB0aGlzLnVwZGF0ZVZhbGlkYXRvcnMoKTtcbiAgICB9XG4gIH1cblxuICBnZXQgbWF4TGVuZ3RoKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX21heExlbmd0aDtcbiAgfVxufVxuIiwiPGRpdiBbZm9ybUdyb3VwXT1cImdldEZvcm1Hcm91cCgpXCIgY2xhc3M9XCJtYXQtZm9ybS1maWVsZCBtYXQtZm9ybS1maWVsZFwiIGZ4RmlsbD5cbiAgPGRpdiBjbGFzcz1cIm1hdC1mb3JtLWZpZWxkLXdyYXBwZXIgbWF0LWZvcm0tZmllbGQtd3JhcHBlclwiPlxuICAgIDxjay1lZGl0b3IgI2NrRWRpdG9yIFtpZF09XCJnZXRBdHRyaWJ1dGUoKVwiIFtmb3JtQ29udHJvbE5hbWVdPVwiZ2V0QXR0cmlidXRlKClcIiAoZm9jdXMpPVwiaW5uZXJPbkZvY3VzKCRldmVudClcIiAoYmx1cik9XCJpbm5lck9uQmx1cigkZXZlbnQpXCIgXG4gICAgKGNoYW5nZSk9XCJvbkNoYW5nZUV2ZW50KCRldmVudClcIiAgW3JlcXVpcmVkXT1cImlzUmVxdWlyZWRcIiBbcmVhZG9ubHldPVwiaXNSZWFkT25seVwiIGNsYXNzPVwibWF0LWZvcm0tZmllbGQtZmxleCBtYXQtZm9ybS1maWVsZC1mbGV4XCIgZnhGaWxsPjwvY2stZWRpdG9yPlxuICAgIDxkaXYgY2xhc3M9XCJtYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlciBtYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlclwiPlxuICAgICAgPGRpdiBjbGFzcz1cIm5nLXRyaWdnZXIgbmctdHJpZ2dlci10cmFuc2l0aW9uTWVzc2FnZXNcIiBbQHRyYW5zaXRpb25NZXNzYWdlc109XCJfc3Vic2NyaXB0QW5pbWF0aW9uU3RhdGVcIj5cbiAgICAgICAgPG1hdC1lcnJvciAqb01hdEVycm9yPVwiaGFzRXJyb3IoJ3JlcXVpcmVkJylcIj5cbiAgICAgICAgICB7eyAnRk9STV9WQUxJREFUSU9OLlJFUVVJUkVEJyB8IG9UcmFuc2xhdGUgfX1cbiAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgIDxtYXQtZXJyb3IgKm9NYXRFcnJvcj1cImhhc0Vycm9yKCdtaW5sZW5ndGgnKVwiPlxuICAgICAgICAgIHt7ICdGT1JNX1ZBTElEQVRJT04uTUlOX0xFTkdUSCcgfCBvVHJhbnNsYXRlIH19OiB7eyBnZXRFcnJvclZhbHVlKCdtaW5sZW5ndGgnLCAncmVxdWlyZWRMZW5ndGgnKSB9fVxuICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgPG1hdC1lcnJvciAqb01hdEVycm9yPVwiaGFzRXJyb3IoJ21heGxlbmd0aCcpXCI+XG4gICAgICAgICAge3sgJ0ZPUk1fVkFMSURBVElPTi5NQVhfTEVOR1RIJyB8IG9UcmFuc2xhdGUgfX06IHt7IGdldEVycm9yVmFsdWUoJ21heGxlbmd0aCcsICdyZXF1aXJlZExlbmd0aCcpIH19XG4gICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICA8bWF0LWVycm9yICpuZ0Zvcj1cImxldCBvRXJyb3Igb2YgZ2V0QWN0aXZlT0Vycm9ycygpXCI+IFxuICAgICAgICAgIHt7IG9FcnJvci50ZXh0IHwgb1RyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PiJdfQ==