design-angular-kit-lombardia
Version:
Un toolkit Angular conforme alle linee guida di design per i servizi web della Regione Lombardia
178 lines • 26.7 kB
JavaScript
import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewChild, } from '@angular/core';
import { ItAbstractFormComponent } from '../../../abstracts/abstract-form.component';
import { AsyncPipe } from '@angular/common';
import { ReactiveFormsModule } from '@angular/forms';
import { SelectAutocomplete } from 'bootstrap-lombardia';
import * as i0 from "@angular/core";
export class ItAutocompleteComponent extends ItAbstractFormComponent {
constructor() {
super(...arguments);
/**
* Autocomplete elements.
* @default []
*/
this.source = [];
/**
* Autocomplete if required.
* @default false
*/
this.required = false;
/**
* Prevents suggestions from appearing if fewer than N characters are typed
* @default 0
*/
this.minLength = 0;
/**
* Default value
*/
this.defaultValue = '';
/**
* Function to set assistive hint label. For more information https://github.com/alphagov/accessible-autocomplete?tab=readme-ov-file#internationalization
*/
this.assistiveHintLabel = () => 'Quando i risultati del completamento automatico sono disponibili, usa le frecce su e giù per rivedere e Invio per selezionare. Utenti di dispositivi touch, esplora tramite tocco o con gesti di scorrimento';
/**
* Function to set label in case of no result. For more information https://github.com/alphagov/accessible-autocomplete?tab=readme-ov-file#internationalization
*/
this.noResultsLabel = () => 'Nessun risultato trovato';
/**
* Function to set label that alerts you that query's too short. For more information https://github.com/alphagov/accessible-autocomplete?tab=readme-ov-file#internationalization
*/
this.statusQueryTooShortLabel = minQueryLength => `Digita ${minQueryLength} o più caratteri per mostrare le opzioni di ricerca`;
/**
* Function to set no results label. For more information https://github.com/alphagov/accessible-autocomplete?tab=readme-ov-file#internationalization
*/
this.statusNoResultsLabel = () => 'Nessun risultato di ricerca';
/**
* Function to set selected option label. For more information https://github.com/alphagov/accessible-autocomplete?tab=readme-ov-file#internationalization
*/
this.statusSelectedOptionLabel = (selectedOption, length, index) => `${selectedOption} ${index + 1} di ${length} è sottolineato`;
/**
* Function to set status results label. For more information https://github.com/alphagov/accessible-autocomplete?tab=readme-ov-file#internationalization
*/
this.statusResultsLabel = (length, contentSelectedOption) => {
const words = {
result: length === 1 ? 'risultato' : 'risultati',
is: length === 1 ? 'è' : 'sono',
available: length === 1 ? 'disponibile' : 'disponibili',
};
return `${length} ${words.result} ${words.is} ${words.available}. ${contentSelectedOption}`;
};
/**
* Fired when value changes
*/
this.selected = new EventEmitter();
this.value = '';
this._interval = 0;
this._inputEl = null;
}
ngOnInit() {
super.ngOnInit();
if (!this.control.value && !!this.value) {
this.writeValue(this.value);
this.onChange(this.value);
}
}
clear() {
this._inputEl.value = '';
}
_findInput() {
this._interval = setInterval(() => {
this._inputEl = document.getElementById(this.id);
if (this._inputEl) {
clearInterval(this._interval);
this._initInputEl();
}
}, 500);
}
_setAndCheck(value) {
this.value = value == '' ? undefined : value;
if (this.control.touched) {
this.writeValue(this.value);
this.onChange(this.value);
}
if (this.isValid == false && this.isInvalid == false) {
this._inputEl?.classList.remove('just-validate-success-field');
this._inputEl?.classList.remove('is-invalid');
}
else if (this.isValid == true) {
this._inputEl?.classList.add('just-validate-success-field');
this._inputEl?.classList.remove('is-invalid');
}
else if (this.isInvalid == true) {
this._inputEl?.classList.add('is-invalid');
this._inputEl?.classList.remove('just-validate-success-field');
}
}
_initInputEl() {
if (this._inputEl) {
this._inputEl.onfocus = (ev) => this._setAndCheck(ev.target.value);
this._inputEl.onblur = (ev) => this._setAndCheck(ev.target.value);
this._inputEl.oninput = (ev) => {
this.markAsTouched();
this._setAndCheck(ev.target.value);
};
}
}
ngAfterViewInit() {
if (this.selectAutocompleteEl) {
super.ngAfterViewInit();
const element = this.selectAutocompleteEl.nativeElement;
this.selectAutocomplete = new SelectAutocomplete(element, {
id: this.id,
name: this.name || this.id,
source: this.source,
required: this.required,
minLength: this.minLength,
defaultValue: this.defaultValue,
tAssistiveHint: this.assistiveHintLabel,
tNoResults: this.noResultsLabel,
tStatusQueryTooShort: this.statusQueryTooShortLabel,
tStatusNoResults: this.statusNoResultsLabel,
tStatusSelectedOption: this.statusSelectedOptionLabel,
tStatusResults: this.statusResultsLabel,
onConfirm: (selectedElement) => {
this.markAsTouched();
this._setAndCheck(selectedElement);
this.selected.emit(selectedElement);
},
});
this._findInput();
}
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ItAutocompleteComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.6", type: ItAutocompleteComponent, isStandalone: true, selector: "it-autocomplete", inputs: { source: "source", required: "required", name: "name", description: "description", minLength: "minLength", defaultValue: "defaultValue", assistiveHintLabel: "assistiveHintLabel", noResultsLabel: "noResultsLabel", statusQueryTooShortLabel: "statusQueryTooShortLabel", statusNoResultsLabel: "statusNoResultsLabel", statusSelectedOptionLabel: "statusSelectedOptionLabel", statusResultsLabel: "statusResultsLabel" }, outputs: { selected: "selected" }, viewQueries: [{ propertyName: "selectAutocompleteEl", first: true, predicate: ["selectAutocomplete"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"form-group\">\n @if (label) {\n <label [for]=\"id\" [class.active]=\"!!control.value\">{{ label }}</label>\n }\n <div #selectAutocomplete name=\"region\" [id]=\"id + 'Wrapper'\" class=\"autocomplete-wrapper\"></div>\n\n @if (description) {\n <small [id]=\"id + '-description'\" class=\"form-text\">{{ description }}</small>\n }\n @if (isInvalid) {\n <div class=\"form-feedback just-validate-error-label\" [id]=\"id + '-error'\">\n <div #customError><ng-content select=\"[error]\"></ng-content></div>\n @if (!customError.hasChildNodes()) {\n {{ invalidMessage | async }}\n }\n </div>\n }\n</div>\n", dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ItAutocompleteComponent, decorators: [{
type: Component,
args: [{ standalone: true, selector: 'it-autocomplete', changeDetection: ChangeDetectionStrategy.OnPush, imports: [ReactiveFormsModule, AsyncPipe], template: "<div class=\"form-group\">\n @if (label) {\n <label [for]=\"id\" [class.active]=\"!!control.value\">{{ label }}</label>\n }\n <div #selectAutocomplete name=\"region\" [id]=\"id + 'Wrapper'\" class=\"autocomplete-wrapper\"></div>\n\n @if (description) {\n <small [id]=\"id + '-description'\" class=\"form-text\">{{ description }}</small>\n }\n @if (isInvalid) {\n <div class=\"form-feedback just-validate-error-label\" [id]=\"id + '-error'\">\n <div #customError><ng-content select=\"[error]\"></ng-content></div>\n @if (!customError.hasChildNodes()) {\n {{ invalidMessage | async }}\n }\n </div>\n }\n</div>\n" }]
}], propDecorators: { source: [{
type: Input
}], required: [{
type: Input
}], name: [{
type: Input
}], description: [{
type: Input
}], minLength: [{
type: Input
}], defaultValue: [{
type: Input
}], assistiveHintLabel: [{
type: Input
}], noResultsLabel: [{
type: Input
}], statusQueryTooShortLabel: [{
type: Input
}], statusNoResultsLabel: [{
type: Input
}], statusSelectedOptionLabel: [{
type: Input
}], statusResultsLabel: [{
type: Input
}], selected: [{
type: Output
}], selectAutocompleteEl: [{
type: ViewChild,
args: ['selectAutocomplete']
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbi1hbmd1bGFyLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvZm9ybS9hdXRvY29tcGxldGUvYXV0b2NvbXBsZXRlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbi1hbmd1bGFyLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvZm9ybS9hdXRvY29tcGxldGUvYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsR0FHVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUNyRixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDNUMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUJBQXFCLENBQUM7O0FBV3pELE1BQU0sT0FBTyx1QkFBd0IsU0FBUSx1QkFBa0Q7SUFQL0Y7O1FBUUU7OztXQUdHO1FBQ00sV0FBTSxHQUE4QixFQUFFLENBQUM7UUFFaEQ7OztXQUdHO1FBQ00sYUFBUSxHQUFZLEtBQUssQ0FBQztRQVluQzs7O1dBR0c7UUFDTSxjQUFTLEdBQVcsQ0FBQyxDQUFDO1FBRS9COztXQUVHO1FBQ00saUJBQVksR0FBa0IsRUFBRSxDQUFDO1FBRTFDOztXQUVHO1FBQ00sdUJBQWtCLEdBQWlCLEdBQUcsRUFBRSxDQUMvQyw4TUFBOE0sQ0FBQztRQUVqTjs7V0FFRztRQUNNLG1CQUFjLEdBQWlCLEdBQUcsRUFBRSxDQUFDLDBC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O2tHQUF2Qix1QkFBdUIsdXFCQ3pCcEMsNG9CQWtCQSwyQ0RLWSxtQkFBbUIsMEJBQUUsU0FBUzs7MkZBRTdCLHVCQUF1QjtrQkFQbkMsU0FBUztpQ0FDSSxJQUFJLFlBQ04saUJBQWlCLG1CQUVWLHVCQUF1QixDQUFDLE1BQU0sV0FDdEMsQ0FBQyxtQkFBbUIsRUFBRSxTQUFTLENBQUM7OEJBT2hDLE1BQU07c0JBQWQsS0FBSztnQkFNRyxRQUFRO3NCQUFoQixLQUFLO2dCQUtHLElBQUk7c0JBQVosS0FBSztnQkFLRyxXQUFXO3NCQUFuQixLQUFLO2dCQU1HLFNBQVM7c0JBQWpCLEtBQUs7Z0JBS0csWUFBWTtzQkFBcEIsS0FBSztnQkFLRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBTUcsY0FBYztzQkFBdEIsS0FBSztnQkFLRyx3QkFBd0I7c0JBQWhDLEtBQUs7Z0JBTUcsb0JBQW9CO3NCQUE1QixLQUFLO2dCQUtHLHlCQUF5QjtzQkFBakMsS0FBSztnQkFNRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBYUksUUFBUTtzQkFBakIsTUFBTTtnQkFFa0Msb0JBQW9CO3NCQUE1RCxTQUFTO3VCQUFDLG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgVmlld0NoaWxkLFxuICBPbkluaXQsXG4gIEFmdGVyVmlld0luaXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSXRBYnN0cmFjdEZvcm1Db21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9hYnN0cmFjdHMvYWJzdHJhY3QtZm9ybS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQXN5bmNQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTZWxlY3RBdXRvY29tcGxldGUgfSBmcm9tICdib290c3RyYXAtbG9tYmFyZGlhJztcblxudHlwZSBmdW5jdGlvblNvdXJjZSA9IChxdWVyeTogc3RyaW5nLCBwb3B1bGF0ZVJlc3VsdHM6IChyZXN1bHRzOiBzdHJpbmdbXSkgPT4gdm9pZCkgPT4gdm9pZDtcblxuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHNlbGVjdG9yOiAnaXQtYXV0b2NvbXBsZXRlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2F1dG9jb21wbGV0ZS5jb21wb25lbnQuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBpbXBvcnRzOiBbUmVhY3RpdmVGb3Jtc01vZHVsZSwgQXN5bmNQaXBlXSxcbn0pXG5leHBvcnQgY2xhc3MgSXRBdXRvY29tcGxldGVDb21wb25lbnQgZXh0ZW5kcyBJdEFic3RyYWN0Rm9ybUNvbXBvbmVudDxzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkPiBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG4gIC8qKlxuICAgKiBBdXRvY29tcGxldGUgZWxlbWVudHMuXG4gICAqIEBkZWZhdWx0IFtdXG4gICAqL1xuICBASW5wdXQoKSBzb3VyY2U6IHN0cmluZ1tdIHwgZnVuY3Rpb25Tb3VyY2UgPSBbXTtcblxuICAvKipcbiAgICogQXV0b2NvbXBsZXRlIGlmIHJlcXVpcmVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KCkgcmVxdWlyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogSW5wdXQgZmllbGQgbmFtZVxuICAgKi9cbiAgQElucHV0KCkgbmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBUaGUgaW5wdXQgZGVzY3JpcHRpb25cbiAgICovXG4gIEBJbnB1dCgpIGRlc2NyaXB0aW9uOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFByZXZlbnRzIHN1Z2dlc3Rpb25zIGZyb20gYXBwZWFyaW5nIGlmIGZld2VyIHRoYW4gTiBjaGFyYWN0ZXJzIGFyZSB0eXBlZFxuICAgKiBAZGVmYXVsdCAwXG4gICAqL1xuICBASW5wdXQoKSBtaW5MZW5ndGg6IG51bWJlciA9IDA7XG5cbiAgLyoqXG4gICAqIERlZmF1bHQgdmFsdWVcbiAgICovXG4gIEBJbnB1dCgpIGRlZmF1bHRWYWx1ZTogc3RyaW5nIHwgbnVsbCA9ICcnO1xuXG4gIC8qKlxuICAgKiBGdW5jdGlvbiB0byBzZXQgYXNzaXN0aXZlIGhpbnQgbGFiZWwuIEZvciBtb3JlIGluZm9ybWF0aW9uIGh0dHBzOi8vZ2l0aHViLmNvbS9hbHBoYWdvdi9hY2Nlc3NpYmxlLWF1dG9jb21wbGV0ZT90YWI9cmVhZG1lLW92LWZpbGUjaW50ZXJuYXRpb25hbGl6YXRpb25cbiAgICovXG4gIEBJbnB1dCgpIGFzc2lzdGl2ZUhpbnRMYWJlbDogKCkgPT4gc3RyaW5nID0gKCkgPT5cbiAgICAnUXVhbmRvIGkgcmlzdWx0YXRpIGRlbCBjb21wbGV0YW1lbnRvIGF1dG9tYXRpY28gc29ubyBkaXNwb25pYmlsaSwgdXNhIGxlIGZyZWNjZSBzdSBlIGdpw7kgcGVyIHJpdmVkZXJlIGUgSW52aW8gcGVyIHNlbGV6aW9uYXJlLiBVdGVudGkgZGkgZGlzcG9zaXRpdmkgdG91Y2gsIGVzcGxvcmEgdHJhbWl0ZSB0b2NjbyBvIGNvbiBnZXN0aSBkaSBzY29ycmltZW50byc7XG5cbiAgLyoqXG4gICAqIEZ1bmN0aW9uIHRvIHNldCBsYWJlbCBpbiBjYXNlIG9mIG5vIHJlc3VsdC4gRm9yIG1vcmUgaW5mb3JtYXRpb24gaHR0cHM6Ly9naXRodWIuY29tL2FscGhhZ292L2FjY2Vzc2libGUtYXV0b2NvbXBsZXRlP3RhYj1yZWFkbWUtb3YtZmlsZSNpbnRlcm5hdGlvbmFsaXphdGlvblxuICAgKi9cbiAgQElucHV0KCkgbm9SZXN1bHRzTGFiZWw6ICgpID0+IHN0cmluZyA9ICgpID0+ICdOZXNzdW4gcmlzdWx0YXRvIHRyb3ZhdG8nO1xuXG4gIC8qKlxuICAgKiBGdW5jdGlvbiB0byBzZXQgbGFiZWwgdGhhdCBhbGVydHMgeW91IHRoYXQgcXVlcnkncyB0b28gc2hvcnQuIEZvciBtb3JlIGluZm9ybWF0aW9uIGh0dHBzOi8vZ2l0aHViLmNvbS9hbHBoYWdvdi9hY2Nlc3NpYmxlLWF1dG9jb21wbGV0ZT90YWI9cmVhZG1lLW92LWZpbGUjaW50ZXJuYXRpb25hbGl6YXRpb25cbiAgICovXG4gIEBJbnB1dCgpIHN0YXR1c1F1ZXJ5VG9vU2hvcnRMYWJlbDogKG1pblF1ZXJ5TGVuZ3RoOiBudW1iZXIpID0+IHN0cmluZyA9IG1pblF1ZXJ5TGVuZ3RoID0+XG4gICAgYERpZ2l0YSAke21pblF1ZXJ5TGVuZ3RofSBvIHBpw7kgY2FyYXR0ZXJpIHBlciBtb3N0cmFyZSBsZSBvcHppb25pIGRpIHJpY2VyY2FgO1xuXG4gIC8qKlxuICAgKiBGdW5jdGlvbiB0byBzZXQgbm8gcmVzdWx0cyBsYWJlbC4gRm9yIG1vcmUgaW5mb3JtYXRpb24gaHR0cHM6Ly9naXRodWIuY29tL2FscGhhZ292L2FjY2Vzc2libGUtYXV0b2NvbXBsZXRlP3RhYj1yZWFkbWUtb3YtZmlsZSNpbnRlcm5hdGlvbmFsaXphdGlvblxuICAgKi9cbiAgQElucHV0KCkgc3RhdHVzTm9SZXN1bHRzTGFiZWw6ICgpID0+IHN0cmluZyA9ICgpID0+ICdOZXNzdW4gcmlzdWx0YXRvIGRpIHJpY2VyY2EnO1xuXG4gIC8qKlxuICAgKiBGdW5jdGlvbiB0byBzZXQgc2VsZWN0ZWQgb3B0aW9uIGxhYmVsLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBodHRwczovL2dpdGh1Yi5jb20vYWxwaGFnb3YvYWNjZXNzaWJsZS1hdXRvY29tcGxldGU/dGFiPXJlYWRtZS1vdi1maWxlI2ludGVybmF0aW9uYWxpemF0aW9uXG4gICAqL1xuICBASW5wdXQoKSBzdGF0dXNTZWxlY3RlZE9wdGlvbkxhYmVsOiAoc2VsZWN0ZWRPcHRpb246IHN0cmluZywgbGVuZ3RoOiBudW1iZXIsIGluZGV4OiBudW1iZXIpID0+IHN0cmluZyA9IChzZWxlY3RlZE9wdGlvbiwgbGVuZ3RoLCBpbmRleCkgPT5cbiAgICBgJHtzZWxlY3RlZE9wdGlvbn0gJHtpbmRleCArIDF9IGRpICR7bGVuZ3RofSDDqCBzb3R0b2xpbmVhdG9gO1xuXG4gIC8qKlxuICAgKiBGdW5jdGlvbiB0byBzZXQgc3RhdHVzIHJlc3VsdHMgbGFiZWwuIEZvciBtb3JlIGluZm9ybWF0aW9uIGh0dHBzOi8vZ2l0aHViLmNvbS9hbHBoYWdvdi9hY2Nlc3NpYmxlLWF1dG9jb21wbGV0ZT90YWI9cmVhZG1lLW92LWZpbGUjaW50ZXJuYXRpb25hbGl6YXRpb25cbiAgICovXG4gIEBJbnB1dCgpIHN0YXR1c1Jlc3VsdHNMYWJlbDogKGxlbmd0aDogbnVtYmVyLCBjb250ZW50U2VsZWN0ZWRPcHRpb246IHN0cmluZykgPT4gc3RyaW5nID0gKGxlbmd0aCwgY29udGVudFNlbGVjdGVkT3B0aW9uKSA9PiB7XG4gICAgY29uc3Qgd29yZHMgPSB7XG4gICAgICByZXN1bHQ6IGxlbmd0aCA9PT0gMSA/ICdyaXN1bHRhdG8nIDogJ3Jpc3VsdGF0aScsXG4gICAgICBpczogbGVuZ3RoID09PSAxID8gJ8OoJyA6ICdzb25vJyxcbiAgICAgIGF2YWlsYWJsZTogbGVuZ3RoID09PSAxID8gJ2Rpc3BvbmliaWxlJyA6ICdkaXNwb25pYmlsaScsXG4gICAgfTtcblxuICAgIHJldHVybiBgJHtsZW5ndGh9ICR7d29yZHMucmVzdWx0fSAke3dvcmRzLmlzfSAke3dvcmRzLmF2YWlsYWJsZX0uICR7Y29udGVudFNlbGVjdGVkT3B0aW9ufWA7XG4gIH07XG5cbiAgLyoqXG4gICAqIEZpcmVkIHdoZW4gdmFsdWUgY2hhbmdlc1xuICAgKi9cbiAgQE91dHB1dCgpIHNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBWaWV3Q2hpbGQoJ3NlbGVjdEF1dG9jb21wbGV0ZScpIHByaXZhdGUgc2VsZWN0QXV0b2NvbXBsZXRlRWw/OiBFbGVtZW50UmVmPEhUTUxCdXR0b25FbGVtZW50PjtcblxuICBwcml2YXRlIHNlbGVjdEF1dG9jb21wbGV0ZT86IFNlbGVjdEF1dG9jb21wbGV0ZTtcblxuICBwcml2YXRlIHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQgPSAnJztcbiAgcHJpdmF0ZSBfaW50ZXJ2YWw6IGFueSA9IDA7XG4gIHByaXZhdGUgX2lucHV0RWw6IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XG5cbiAgb3ZlcnJpZGUgbmdPbkluaXQoKSB7XG4gICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICBpZiAoIXRoaXMuY29udHJvbC52YWx1ZSAmJiAhIXRoaXMudmFsdWUpIHtcbiAgICAgIHRoaXMud3JpdGVWYWx1ZSh0aGlzLnZhbHVlKTtcbiAgICAgIHRoaXMub25DaGFuZ2UodGhpcy52YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgY2xlYXIoKSB7XG4gICAgKHRoaXMuX2lucHV0RWwgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWUgPSAnJztcbiAgfVxuXG4gIF9maW5kSW5wdXQoKSB7XG4gICAgdGhpcy5faW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICB0aGlzLl9pbnB1dEVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5pZCk7XG4gICAgICBpZiAodGhpcy5faW5wdXRFbCkge1xuICAgICAgICBjbGVhckludGVydmFsKHRoaXMuX2ludGVydmFsKTtcbiAgICAgICAgdGhpcy5faW5pdElucHV0RWwoKTtcbiAgICAgIH1cbiAgICB9LCA1MDApO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2V0QW5kQ2hlY2sodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZSA9PSAnJyA/IHVuZGVmaW5lZCA6IHZhbHVlO1xuICAgIGlmICh0aGlzLmNvbnRyb2wudG91Y2hlZCkge1xuICAgICAgdGhpcy53cml0ZVZhbHVlKHRoaXMudmFsdWUpO1xuICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLnZhbHVlKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNWYWxpZCA9PSBmYWxzZSAmJiB0aGlzLmlzSW52YWxpZCA9PSBmYWxzZSkge1xuICAgICAgdGhpcy5faW5wdXRFbD8uY2xhc3NMaXN0LnJlbW92ZSgnanVzdC12YWxpZGF0ZS1zdWNjZXNzLWZpZWxkJyk7XG4gICAgICB0aGlzLl9pbnB1dEVsPy5jbGFzc0xpc3QucmVtb3ZlKCdpcy1pbnZhbGlkJyk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmlzVmFsaWQgPT0gdHJ1ZSkge1xuICAgICAgdGhpcy5faW5wdXRFbD8uY2xhc3NMaXN0LmFkZCgnanVzdC12YWxpZGF0ZS1zdWNjZXNzLWZpZWxkJyk7XG4gICAgICB0aGlzLl9pbnB1dEVsPy5jbGFzc0xpc3QucmVtb3ZlKCdpcy1pbnZhbGlkJyk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmlzSW52YWxpZCA9PSB0cnVlKSB7XG4gICAgICB0aGlzLl9pbnB1dEVsPy5jbGFzc0xpc3QuYWRkKCdpcy1pbnZhbGlkJyk7XG4gICAgICB0aGlzLl9pbnB1dEVsPy5jbGFzc0xpc3QucmVtb3ZlKCdqdXN0LXZhbGlkYXRlLXN1Y2Nlc3MtZmllbGQnKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9pbml0SW5wdXRFbCgpIHtcbiAgICBpZiAodGhpcy5faW5wdXRFbCkge1xuICAgICAgdGhpcy5faW5wdXRFbC5vbmZvY3VzID0gKGV2OiBFdmVudCkgPT4gdGhpcy5fc2V0QW5kQ2hlY2soKGV2LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZSk7XG4gICAgICB0aGlzLl9pbnB1dEVsLm9uYmx1ciA9IChldjogRXZlbnQpID0+IHRoaXMuX3NldEFuZENoZWNrKChldi50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWUpO1xuICAgICAgdGhpcy5faW5wdXRFbC5vbmlucHV0ID0gKGV2OiBFdmVudCkgPT4ge1xuICAgICAgICB0aGlzLm1hcmtBc1RvdWNoZWQoKTtcbiAgICAgICAgdGhpcy5fc2V0QW5kQ2hlY2soKGV2LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZSk7XG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIG92ZXJyaWRlIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBpZiAodGhpcy5zZWxlY3RBdXRvY29tcGxldGVFbCkge1xuICAgICAgc3VwZXIubmdBZnRlclZpZXdJbml0KCk7XG4gICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5zZWxlY3RBdXRvY29tcGxldGVFbC5uYXRpdmVFbGVtZW50O1xuICAgICAgdGhpcy5zZWxlY3RBdXRvY29tcGxldGUgPSBuZXcgU2VsZWN0QXV0b2NvbXBsZXRlKGVsZW1lbnQsIHtcbiAgICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICAgIG5hbWU6IHRoaXMubmFtZSB8fCB0aGlzLmlkLFxuICAgICAgICBzb3VyY2U6IHRoaXMuc291cmNlLFxuICAgICAgICByZXF1aXJlZDogdGhpcy5yZXF1aXJlZCxcbiAgICAgICAgbWluTGVuZ3RoOiB0aGlzLm1pbkxlbmd0aCxcbiAgICAgICAgZGVmYXVsdFZhbHVlOiB0aGlzLmRlZmF1bHRWYWx1ZSxcbiAgICAgICAgdEFzc2lzdGl2ZUhpbnQ6IHRoaXMuYXNzaXN0aXZlSGludExhYmVsLFxuICAgICAgICB0Tm9SZXN1bHRzOiB0aGlzLm5vUmVzdWx0c0xhYmVsLFxuICAgICAgICB0U3RhdHVzUXVlcnlUb29TaG9ydDogdGhpcy5zdGF0dXNRdWVyeVRvb1Nob3J0TGFiZWwsXG4gICAgICAgIHRTdGF0dXNOb1Jlc3VsdHM6IHRoaXMuc3RhdHVzTm9SZXN1bHRzTGFiZWwsXG4gICAgICAgIHRTdGF0dXNTZWxlY3RlZE9wdGlvbjogdGhpcy5zdGF0dXNTZWxlY3RlZE9wdGlvbkxhYmVsLFxuICAgICAgICB0U3RhdHVzUmVzdWx0czogdGhpcy5zdGF0dXNSZXN1bHRzTGFiZWwsXG4gICAgICAgIG9uQ29uZmlybTogKHNlbGVjdGVkRWxlbWVudDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgdGhpcy5tYXJrQXNUb3VjaGVkKCk7XG4gICAgICAgICAgdGhpcy5fc2V0QW5kQ2hlY2soc2VsZWN0ZWRFbGVtZW50KTtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkLmVtaXQoc2VsZWN0ZWRFbGVtZW50KTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5fZmluZElucHV0KCk7XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICBAaWYgKGxhYmVsKSB7XG4gICAgPGxhYmVsIFtmb3JdPVwiaWRcIiBbY2xhc3MuYWN0aXZlXT1cIiEhY29udHJvbC52YWx1ZVwiPnt7IGxhYmVsIH19PC9sYWJlbD5cbiAgfVxuICA8ZGl2ICNzZWxlY3RBdXRvY29tcGxldGUgbmFtZT1cInJlZ2lvblwiIFtpZF09XCJpZCArICdXcmFwcGVyJ1wiIGNsYXNzPVwiYXV0b2NvbXBsZXRlLXdyYXBwZXJcIj48L2Rpdj5cblxuICBAaWYgKGRlc2NyaXB0aW9uKSB7XG4gICAgPHNtYWxsIFtpZF09XCJpZCArICctZGVzY3JpcHRpb24nXCIgY2xhc3M9XCJmb3JtLXRleHRcIj57eyBkZXNjcmlwdGlvbiB9fTwvc21hbGw+XG4gIH1cbiAgQGlmIChpc0ludmFsaWQpIHtcbiAgICA8ZGl2IGNsYXNzPVwiZm9ybS1mZWVkYmFjayBqdXN0LXZhbGlkYXRlLWVycm9yLWxhYmVsXCIgW2lkXT1cImlkICsgJy1lcnJvcidcIj5cbiAgICAgIDxkaXYgI2N1c3RvbUVycm9yPjxuZy1jb250ZW50IHNlbGVjdD1cIltlcnJvcl1cIj48L25nLWNvbnRlbnQ+PC9kaXY+XG4gICAgICBAaWYgKCFjdXN0b21FcnJvci5oYXNDaGlsZE5vZGVzKCkpIHtcbiAgICAgICAge3sgaW52YWxpZE1lc3NhZ2UgfCBhc3luYyB9fVxuICAgICAgfVxuICAgIDwvZGl2PlxuICB9XG48L2Rpdj5cbiJdfQ==