ddata-ui-input
Version:
DData UI Input module, components, models & services
180 lines • 28.4 kB
JavaScript
import { Component, EventEmitter, Input, Output } from '@angular/core';
import { BaseModel, DdataCoreModule } from 'ddata-core';
import { InputHelperService } from '../../services/input/helper/input-helper.service';
import * as i0 from "@angular/core";
import * as i1 from "@angular/common";
import * as i2 from "./simple-select/simple-select.component";
import * as i3 from "./multiple-select/multiple-select.component";
export class DdataSelectComponent {
constructor() {
this.helperService = DdataCoreModule.InjectorInstance.get(InputHelperService);
this._field = '';
this._title = '';
this._label = '';
this._prepend = '';
this._append = '';
this._isRequired = false;
this._items = [];
this._model = new BaseModel();
this._selectedModelName = '';
this._mode = 'simple';
this.wrapperClass = 'd-flex flex-wrap';
this.labelClass = 'col-12 col-md-3 px-0 col-form-label';
this.inputBlockClass = 'col-12 d-flex px-0';
this.inputBlockExtraClass = 'col-md-9';
this.showLabel = true;
this.disabledAppearance = false;
this.disabled = false;
this.addEmptyOption = true;
this.text = 'name';
this.valueField = 'id';
this.unselectedText = 'Válassz';
// selected items
this.disableShowSelectedItems = false;
this.showIcon = false;
this.selectedElementsBlockClass = 'col-12 d-flex flex-wrap px-0';
this.selectedElementsBlockExtraClass = 'col-md-9 d-flex flex-wrap';
this.selected = new EventEmitter();
this.selectModel = new EventEmitter();
}
/**
* @deprecated use `mode` input attribute
*/
set fakeSingleSelect(value) {
if (value === true) {
this._mode = 'single';
}
}
/**
* @deprecated use `mode` input attribute
*/
get fakeSingleSelect() {
return this._mode === 'single';
}
/**
* @deprecated use `mode` input attribute
*/
set multipleSelect(value) {
if (value === true) {
this._mode = 'multiple';
}
}
/**
* @deprecated use `mode` input attribute
*/
get multipleSelect() {
return this._mode === 'multiple';
}
set mode(value) {
this._mode = value ?? 'simple';
}
set model(value) {
if (!value) {
return;
}
this._model = value;
// if model's 'fields' is not defined or null
if (!this._model.fields) {
console.error(`Your ${this._model.model_name}'s 'fields' field is`, this._model.fields);
return;
}
// if model's used field is not defined or null
if (!this._model.fields[this._field]) {
console.error(`The ${this._model.model_name}'s ${this._field} field is `, this._model.fields[this._field]);
return;
}
// set texts (title, label, append, prepend) if model & fields attribute is defined too
if (!!this._model && !!this._model.fields[this._field]) {
this._title = this.helperService.getTitle(this._model, this._field);
this._prepend = this.helperService.getPrepend(this._model, this._field);
this._append = this.helperService.getAppend(this._model, this._field);
this._label = this.helperService.getLabel(this._model, this._field);
}
// model is set & has validation rules for field
if (!!this._model && !!this._model.validationRules[this._field]) {
this._isRequired = this.helperService.isRequired(this._model, this._field);
}
// add 'name' property as default value on fake single select mode if model is set
if (!!this._model && this.fakeSingleSelect) {
this._selectedModelName = this._model['name'] ?? '';
}
}
get model() {
return this._model;
}
set field(value) {
if (value === 'undefined') {
value = 'id';
}
this._field = value;
}
set items(value) {
if (!value) {
return;
}
this._items = value;
}
ngOnInit() {
}
selectedEmit(value) {
this.selected.emit(value);
}
selectModelEmit(value) {
this.selectModel.emit(value);
}
}
DdataSelectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: DdataSelectComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
DdataSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: DdataSelectComponent, selector: "dd-select", inputs: { fakeSingleSelect: "fakeSingleSelect", multipleSelect: "multipleSelect", mode: "mode", model: "model", field: "field", items: "items", wrapperClass: "wrapperClass", labelClass: "labelClass", inputBlockClass: "inputBlockClass", inputBlockExtraClass: "inputBlockExtraClass", showLabel: "showLabel", disabledAppearance: "disabledAppearance", disabled: "disabled", addEmptyOption: "addEmptyOption", dialogSettings: "dialogSettings", text: "text", valueField: "valueField", unselectedText: "unselectedText", disableShowSelectedItems: "disableShowSelectedItems", showIcon: "showIcon", selectedElementsBlockClass: "selectedElementsBlockClass", selectedElementsBlockExtraClass: "selectedElementsBlockExtraClass" }, outputs: { selected: "selected", selectModel: "selectModel" }, ngImport: i0, template: "<ng-container *ngIf=\"_mode === 'multiple'\">\n <multiple-select\n mode=\"multiple\"\n [wrapperClass]=\"wrapperClass\"\n [isRequired]=\"_isRequired\"\n [disabledAppearance]=\"disabledAppearance\"\n [disabled]=\"disabled\"\n [addEmptyOption]=\"addEmptyOption\"\n [labelClass]=\"labelClass\"\n [showLabel]=\"showLabel\"\n [labelText]=\"_label\"\n [prepend]=\"_prepend\"\n [append]=\"_append\"\n [model]=\"_model\"\n [field]=\"_field\"\n [items]=\"_items\"\n [dialogSettings]=\"dialogSettings\"\n [text]=\"text\"\n [valueField]=\"valueField\"\n [disableShowSelectedItems]=\"disableShowSelectedItems\"\n [selectedElementsBlockClass]=\"selectedElementsBlockClass\"\n [selectedElementsBlockExtraClass]=\"selectedElementsBlockExtraClass\"\n [showIcon]=\"showIcon\"\n\n (selected)=\"selectedEmit($event)\"\n (selectModel)=\"selectModelEmit($event)\"\n ></multiple-select>\n</ng-container>\n\n<ng-container *ngIf=\"_mode === 'single'\">\n <multiple-select\n mode=\"single\"\n [wrapperClass]=\"wrapperClass\"\n [isRequired]=\"_isRequired\"\n [disabledAppearance]=\"disabledAppearance\"\n [disabled]=\"disabled\"\n [addEmptyOption]=\"addEmptyOption\"\n [labelClass]=\"labelClass\"\n [showLabel]=\"showLabel\"\n [labelText]=\"_label\"\n [prepend]=\"_prepend\"\n [append]=\"_append\"\n [model]=\"_model\"\n [field]=\"_field\"\n [items]=\"_items\"\n [dialogSettings]=\"dialogSettings\"\n [text]=\"text\"\n [valueField]=\"valueField\"\n [disableShowSelectedItems]=\"disableShowSelectedItems\"\n [showIcon]=\"showIcon\"\n\n (selected)=\"selectedEmit($event)\"\n (selectModel)=\"selectModelEmit($event)\"\n ></multiple-select>\n</ng-container>\n\n<ng-container *ngIf=\"_mode === 'simple'\">\n <simple-select\n [wrapperClass]=\"wrapperClass\"\n [isRequired]=\"_isRequired\"\n [disabledAppearance]=\"disabledAppearance\"\n [disabled]=\"disabled\"\n [addEmptyOption]=\"addEmptyOption\"\n [labelClass]=\"labelClass\"\n [showLabel]=\"showLabel\"\n [labelText]=\"_label\"\n [prepend]=\"_prepend\"\n [append]=\"_append\"\n [model]=\"_model\"\n [field]=\"_field\"\n [items]=\"_items\"\n\n (selected)=\"selectedEmit($event)\"\n (selectModel)=\"selectModelEmit($event)\"\n ></simple-select>\n</ng-container>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.DdataSimpleSelectComponent, selector: "simple-select", inputs: ["wrapperClass", "inputBlockClass", "inputBlockExtraClass", "unselectedText", "isRequire", "disabledAppearance", "disabled", "addEmptyOption", "labelClass", "showLabel", "labelText", "prepend", "append", "model", "field", "items", "text", "valueField"], outputs: ["selected", "selectModel"] }, { kind: "component", type: i3.DdataMultipleSelectComponent, selector: "multiple-select", inputs: ["wrapperClass", "inputBlockClass", "inputBlockExtraClass", "unselectedText", "mode", "isRequire", "disabledAppearance", "disabled", "addEmptyOption", "labelClass", "showLabel", "labelText", "prepend", "append", "model", "field", "items", "text", "valueField", "disableShowSelectedItems", "showIcon", "selectedElementsBlockClass", "selectedElementsBlockExtraClass", "dialogSettings"], outputs: ["selected", "selectModel"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: DdataSelectComponent, decorators: [{
type: Component,
args: [{ selector: 'dd-select', template: "<ng-container *ngIf=\"_mode === 'multiple'\">\n <multiple-select\n mode=\"multiple\"\n [wrapperClass]=\"wrapperClass\"\n [isRequired]=\"_isRequired\"\n [disabledAppearance]=\"disabledAppearance\"\n [disabled]=\"disabled\"\n [addEmptyOption]=\"addEmptyOption\"\n [labelClass]=\"labelClass\"\n [showLabel]=\"showLabel\"\n [labelText]=\"_label\"\n [prepend]=\"_prepend\"\n [append]=\"_append\"\n [model]=\"_model\"\n [field]=\"_field\"\n [items]=\"_items\"\n [dialogSettings]=\"dialogSettings\"\n [text]=\"text\"\n [valueField]=\"valueField\"\n [disableShowSelectedItems]=\"disableShowSelectedItems\"\n [selectedElementsBlockClass]=\"selectedElementsBlockClass\"\n [selectedElementsBlockExtraClass]=\"selectedElementsBlockExtraClass\"\n [showIcon]=\"showIcon\"\n\n (selected)=\"selectedEmit($event)\"\n (selectModel)=\"selectModelEmit($event)\"\n ></multiple-select>\n</ng-container>\n\n<ng-container *ngIf=\"_mode === 'single'\">\n <multiple-select\n mode=\"single\"\n [wrapperClass]=\"wrapperClass\"\n [isRequired]=\"_isRequired\"\n [disabledAppearance]=\"disabledAppearance\"\n [disabled]=\"disabled\"\n [addEmptyOption]=\"addEmptyOption\"\n [labelClass]=\"labelClass\"\n [showLabel]=\"showLabel\"\n [labelText]=\"_label\"\n [prepend]=\"_prepend\"\n [append]=\"_append\"\n [model]=\"_model\"\n [field]=\"_field\"\n [items]=\"_items\"\n [dialogSettings]=\"dialogSettings\"\n [text]=\"text\"\n [valueField]=\"valueField\"\n [disableShowSelectedItems]=\"disableShowSelectedItems\"\n [showIcon]=\"showIcon\"\n\n (selected)=\"selectedEmit($event)\"\n (selectModel)=\"selectModelEmit($event)\"\n ></multiple-select>\n</ng-container>\n\n<ng-container *ngIf=\"_mode === 'simple'\">\n <simple-select\n [wrapperClass]=\"wrapperClass\"\n [isRequired]=\"_isRequired\"\n [disabledAppearance]=\"disabledAppearance\"\n [disabled]=\"disabled\"\n [addEmptyOption]=\"addEmptyOption\"\n [labelClass]=\"labelClass\"\n [showLabel]=\"showLabel\"\n [labelText]=\"_label\"\n [prepend]=\"_prepend\"\n [append]=\"_append\"\n [model]=\"_model\"\n [field]=\"_field\"\n [items]=\"_items\"\n\n (selected)=\"selectedEmit($event)\"\n (selectModel)=\"selectModelEmit($event)\"\n ></simple-select>\n</ng-container>\n" }]
}], propDecorators: { fakeSingleSelect: [{
type: Input
}], multipleSelect: [{
type: Input
}], mode: [{
type: Input
}], model: [{
type: Input
}], field: [{
type: Input
}], items: [{
type: Input
}], wrapperClass: [{
type: Input
}], labelClass: [{
type: Input
}], inputBlockClass: [{
type: Input
}], inputBlockExtraClass: [{
type: Input
}], showLabel: [{
type: Input
}], disabledAppearance: [{
type: Input
}], disabled: [{
type: Input
}], addEmptyOption: [{
type: Input
}], dialogSettings: [{
type: Input
}], text: [{
type: Input
}], valueField: [{
type: Input
}], unselectedText: [{
type: Input
}], disableShowSelectedItems: [{
type: Input
}], showIcon: [{
type: Input
}], selectedElementsBlockClass: [{
type: Input
}], selectedElementsBlockExtraClass: [{
type: Input
}], selected: [{
type: Output
}], selectModel: [{
type: Output
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RkYXRhLXVpLWlucHV0L3NyYy9saWIvY29tcG9uZW50cy9zZWxlY3Qvc2VsZWN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RkYXRhLXVpLWlucHV0L3NyYy9saWIvY29tcG9uZW50cy9zZWxlY3Qvc2VsZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0UsT0FBTyxFQUFFLFNBQVMsRUFBc0IsZUFBZSxFQUFtQixNQUFNLFlBQVksQ0FBQztBQUc3RixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQzs7Ozs7QUFRdEYsTUFBTSxPQUFPLG9CQUFvQjtJQUxqQztRQU1VLGtCQUFhLEdBQ25CLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQThCLGtCQUFrQixDQUFDLENBQUM7UUFDeEYsV0FBTSxHQUFHLEVBQUUsQ0FBQztRQUNaLFdBQU0sR0FBRyxFQUFFLENBQUM7UUFDWixXQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ1osYUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNkLFlBQU8sR0FBRyxFQUFFLENBQUM7UUFDYixnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUNwQixXQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ1osV0FBTSxHQUFtRCxJQUFJLFNBQVMsRUFBRSxDQUFDO1FBQ3pFLHVCQUFrQixHQUFHLEVBQUUsQ0FBQztRQUN4QixVQUFLLEdBQUcsUUFBUSxDQUFDO1FBZ0dSLGlCQUFZLEdBQUcsa0JBQWtCLENBQUM7UUFDbEMsZUFBVSxHQUFHLHFDQUFxQyxDQUFDO1FBQ25ELG9CQUFlLEdBQUcsb0JBQW9CLENBQUM7UUFD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UUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQsZUFBZSxDQUFDLEtBQVU7UUFDeEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0IsQ0FBQzs7aUhBM0lVLG9CQUFvQjtxR0FBcEIsb0JBQW9CLDR6QkNaakMsK3pFQTRFQTsyRkRoRWEsb0JBQW9CO2tCQUxoQyxTQUFTOytCQUNFLFdBQVc7OEJBcUJSLGdCQUFnQjtzQkFBNUIsS0FBSztnQkFlTyxjQUFjO3NCQUExQixLQUFLO2dCQVlPLElBQUk7c0JBQWhCLEtBQUs7Z0JBSU8sS0FBSztzQkFBakIsS0FBSztnQkE0Q08sS0FBSztzQkFBakIsS0FBSztnQkFRTyxLQUFLO3NCQUFqQixLQUFLO2dCQVFHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUdHLHdCQUF3QjtzQkFBaEMsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLDBCQUEwQjtzQkFBbEMsS0FBSztnQkFDRywrQkFBK0I7c0JBQXZDLEtBQUs7Z0JBRUksUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmFzZU1vZGVsLCBCYXNlTW9kZWxJbnRlcmZhY2UsIERkYXRhQ29yZU1vZHVsZSwgRmllbGRzSW50ZXJmYWNlIH0gZnJvbSAnZGRhdGEtY29yZSc7XG5pbXBvcnQgeyBEaWFsb2dDb250ZW50V2l0aE9wdGlvbnNJbnRlcmZhY2UgfSBmcm9tICcuLi8uLi9tb2RlbHMvZGlhbG9nL2NvbnRlbnQvZGlhbG9nLWNvbnRlbnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IElucHV0SGVscGVyU2VydmljZUludGVyZmFjZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2lucHV0L2hlbHBlci9pbnB1dC1oZWxwZXItc2VydmljZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSW5wdXRIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvaW5wdXQvaGVscGVyL2lucHV0LWhlbHBlci5zZXJ2aWNlJztcbmltcG9ydCB7IFNlbGVjdFR5cGUgfSBmcm9tICcuL3NlbGVjdC50eXBlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZGQtc2VsZWN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NlbGVjdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3NlbGVjdC5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIERkYXRhU2VsZWN0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgcHJpdmF0ZSBoZWxwZXJTZXJ2aWNlOiBJbnB1dEhlbHBlclNlcnZpY2VJbnRlcmZhY2UgPVxuICAgIERkYXRhQ29yZU1vZHVsZS5JbmplY3Rvckluc3RhbmNlLmdldDxJbnB1dEhlbHBlclNlcnZpY2VJbnRlcmZhY2U+KElucHV0SGVscGVyU2VydmljZSk7XG4gIF9maWVsZCA9ICcnO1xuICBfdGl0bGUgPSAnJztcbiAgX2xhYmVsID0gJyc7XG4gIF9wcmVwZW5kID0gJyc7XG4gIF9hcHBlbmQgPSAnJztcbiAgX2lzUmVxdWlyZWQgPSBmYWxzZTtcbiAgX2l0ZW1zID0gW107XG4gIF9tb2RlbDogQmFzZU1vZGVsSW50ZXJmYWNlPGFueT4gJiBGaWVsZHNJbnRlcmZhY2U8YW55PiA9IG5ldyBCYXNlTW9kZWwoKTtcbiAgX3NlbGVjdGVkTW9kZWxOYW1lID0gJyc7XG4gIF9tb2RlID0gJ3NpbXBsZSc7XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIHVzZSBgbW9kZWAgaW5wdXQgYXR0cmlidXRlXG4gICAqL1xuICBASW5wdXQoKSBzZXQgZmFrZVNpbmdsZVNlbGVjdCh2YWx1ZTogYm9vbGVhbikge1xuICAgIGlmICh2YWx1ZSA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5fbW9kZSA9ICdzaW5nbGUnO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgdXNlIGBtb2RlYCBpbnB1dCBhdHRyaWJ1dGVcbiAgICovXG4gIGdldCBmYWtlU2luZ2xlU2VsZWN0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9tb2RlID09PSAnc2luZ2xlJztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCB1c2UgYG1vZGVgIGlucHV0IGF0dHJpYnV0ZVxuICAgKi9cbiAgQElucHV0KCkgc2V0IG11bHRpcGxlU2VsZWN0KHZhbHVlOiBib29sZWFuKSB7XG4gICAgaWYgKHZhbHVlID09PSB0cnVlKSB7XG4gICAgICB0aGlzLl9tb2RlID0gJ211bHRpcGxlJztcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIHVzZSBgbW9kZWAgaW5wdXQgYXR0cmlidXRlXG4gICAqL1xuICBnZXQgbXVsdGlwbGVTZWxlY3QoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX21vZGUgPT09ICdtdWx0aXBsZSc7XG4gIH1cblxuICBASW5wdXQoKSBzZXQgbW9kZSh2YWx1ZTogU2VsZWN0VHlwZSkge1xuICAgIHRoaXMuX21vZGUgPSB2YWx1ZSA/PyAnc2ltcGxlJztcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBtb2RlbCh2YWx1ZTogQmFzZU1vZGVsSW50ZXJmYWNlPGFueT4gJiBGaWVsZHNJbnRlcmZhY2U8YW55PiB8IG51bGwpIHtcbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbW9kZWwgPSB2YWx1ZTtcblxuICAgIC8vIGlmIG1vZGVsJ3MgJ2ZpZWxkcycgaXMgbm90IGRlZmluZWQgb3IgbnVsbFxuICAgIGlmICghdGhpcy5fbW9kZWwuZmllbGRzKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBZb3VyICR7dGhpcy5fbW9kZWwubW9kZWxfbmFtZX0ncyAnZmllbGRzJyBmaWVsZCBpc2AsIHRoaXMuX21vZGVsLmZpZWxkcyk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBpZiBtb2RlbCdzIHVzZWQgZmllbGQgaXMgbm90IGRlZmluZWQgb3IgbnVsbFxuICAgIGlmICghdGhpcy5fbW9kZWwuZmllbGRzW3RoaXMuX2ZpZWxkXSkge1xuICAgICAgY29uc29sZS5lcnJvcihgVGhlICR7dGhpcy5fbW9kZWwubW9kZWxfbmFtZX0ncyAke3RoaXMuX2ZpZWxkfSBmaWVsZCBpcyBgLCB0aGlzLl9tb2RlbC5maWVsZHNbdGhpcy5fZmllbGRdKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIHNldCB0ZXh0cyAodGl0bGUsIGxhYmVsLCBhcHBlbmQsIHByZXBlbmQpIGlmIG1vZGVsICYgZmllbGRzIGF0dHJpYnV0ZSBpcyBkZWZpbmVkIHRvb1xuICAgIGlmICghIXRoaXMuX21vZGVsICYmICEhdGhpcy5fbW9kZWwuZmllbGRzW3RoaXMuX2ZpZWxkXSkge1xuICAgICAgdGhpcy5fdGl0bGUgPSB0aGlzLmhlbHBlclNlcnZpY2UuZ2V0VGl0bGUodGhpcy5fbW9kZWwsIHRoaXMuX2ZpZWxkKTtcbiAgICAgIHRoaXMuX3ByZXBlbmQgPSB0aGlzLmhlbHBlclNlcnZpY2UuZ2V0UHJlcGVuZCh0aGlzLl9tb2RlbCwgdGhpcy5fZmllbGQpO1xuICAgICAgdGhpcy5fYXBwZW5kID0gdGhpcy5oZWxwZXJTZXJ2aWNlLmdldEFwcGVuZCh0aGlzLl9tb2RlbCwgdGhpcy5fZmllbGQpO1xuICAgICAgdGhpcy5fbGFiZWwgPSB0aGlzLmhlbHBlclNlcnZpY2UuZ2V0TGFiZWwodGhpcy5fbW9kZWwsIHRoaXMuX2ZpZWxkKTtcbiAgICB9XG5cbiAgICAvLyBtb2RlbCBpcyBzZXQgJiBoYXMgdmFsaWRhdGlvbiBydWxlcyBmb3IgZmllbGRcbiAgICBpZiAoISF0aGlzLl9tb2RlbCAmJiAhIXRoaXMuX21vZGVsLnZhbGlkYXRpb25SdWxlc1t0aGlzLl9maWVsZF0pIHtcbiAgICAgIHRoaXMuX2lzUmVxdWlyZWQgPSB0aGlzLmhlbHBlclNlcnZpY2UuaXNSZXF1aXJlZCh0aGlzLl9tb2RlbCwgdGhpcy5fZmllbGQpO1xuICAgIH1cblxuICAgIC8vIGFkZCAnbmFtZScgcHJvcGVydHkgYXMgZGVmYXVsdCB2YWx1ZSBvbiBmYWtlIHNpbmdsZSBzZWxlY3QgbW9kZSBpZiBtb2RlbCBpcyBzZXRcbiAgICBpZiAoISF0aGlzLl9tb2RlbCAmJiB0aGlzLmZha2VTaW5nbGVTZWxlY3QpIHtcbiAgICAgIHRoaXMuX3NlbGVjdGVkTW9kZWxOYW1lID0gdGhpcy5fbW9kZWxbJ25hbWUnXSA/PyAnJztcbiAgICB9XG4gIH1cblxuICBnZXQgbW9kZWwoKTogQmFzZU1vZGVsSW50ZXJmYWNlPGFueT4gJiBGaWVsZHNJbnRlcmZhY2U8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuX21vZGVsO1xuICB9XG5cbiAgQElucHV0KCkgc2V0IGZpZWxkKHZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAodmFsdWUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB2YWx1ZSA9ICdpZCc7XG4gICAgfVxuXG4gICAgdGhpcy5fZmllbGQgPSB2YWx1ZTtcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBpdGVtcyh2YWx1ZTogYW55W10gfCBudWxsKSB7XG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2l0ZW1zID0gdmFsdWU7XG4gIH1cblxuICBASW5wdXQoKSB3cmFwcGVyQ2xhc3MgPSAnZC1mbGV4IGZsZXgtd3JhcCc7XG4gIEBJbnB1dCgpIGxhYmVsQ2xhc3MgPSAnY29sLTEyIGNvbC1tZC0zIHB4LTAgY29sLWZvcm0tbGFiZWwnO1xuICBASW5wdXQoKSBpbnB1dEJsb2NrQ2xhc3MgPSAnY29sLTEyIGQtZmxleCBweC0wJztcbiAgQElucHV0KCkgaW5wdXRCbG9ja0V4dHJhQ2xhc3MgPSAnY29sLW1kLTknO1xuICBASW5wdXQoKSBzaG93TGFiZWwgPSB0cnVlO1xuICBASW5wdXQoKSBkaXNhYmxlZEFwcGVhcmFuY2UgPSBmYWxzZTtcbiAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcbiAgQElucHV0KCkgYWRkRW1wdHlPcHRpb24gPSB0cnVlO1xuICBASW5wdXQoKSBkaWFsb2dTZXR0aW5nczogRGlhbG9nQ29udGVudFdpdGhPcHRpb25zSW50ZXJmYWNlO1xuICBASW5wdXQoKSB0ZXh0ID0gJ25hbWUnO1xuICBASW5wdXQoKSB2YWx1ZUZpZWxkID0gJ2lkJztcbiAgQElucHV0KCkgdW5zZWxlY3RlZFRleHQgPSAnVsOhbGFzc3onO1xuXG4gIC8vIHNlbGVjdGVkIGl0ZW1zXG4gIEBJbnB1dCgpIGRpc2FibGVTaG93U2VsZWN0ZWRJdGVtcyA9IGZhbHNlO1xuICBASW5wdXQoKSBzaG93SWNvbiA9IGZhbHNlO1xuICBASW5wdXQoKSBzZWxlY3RlZEVsZW1lbnRzQmxvY2tDbGFzcyA9ICdjb2wtMTIgZC1mbGV4IGZsZXgtd3JhcCBweC0wJztcbiAgQElucHV0KCkgc2VsZWN0ZWRFbGVtZW50c0Jsb2NrRXh0cmFDbGFzcyA9ICdjb2wtbWQtOSBkLWZsZXggZmxleC13cmFwJztcblxuICBAT3V0cHV0KCkgc2VsZWN0ZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgc2VsZWN0TW9kZWw6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICB9XG5cbiAgc2VsZWN0ZWRFbWl0KHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkLmVtaXQodmFsdWUpO1xuICB9XG5cbiAgc2VsZWN0TW9kZWxFbWl0KHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdE1vZGVsLmVtaXQodmFsdWUpO1xuICB9XG59XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwiX21vZGUgPT09ICdtdWx0aXBsZSdcIj5cbiAgPG11bHRpcGxlLXNlbGVjdFxuICAgIG1vZGU9XCJtdWx0aXBsZVwiXG4gICAgW3dyYXBwZXJDbGFzc109XCJ3cmFwcGVyQ2xhc3NcIlxuICAgIFtpc1JlcXVpcmVkXT1cIl9pc1JlcXVpcmVkXCJcbiAgICBbZGlzYWJsZWRBcHBlYXJhbmNlXT1cImRpc2FibGVkQXBwZWFyYW5jZVwiXG4gICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICBbYWRkRW1wdHlPcHRpb25dPVwiYWRkRW1wdHlPcHRpb25cIlxuICAgIFtsYWJlbENsYXNzXT1cImxhYmVsQ2xhc3NcIlxuICAgIFtzaG93TGFiZWxdPVwic2hvd0xhYmVsXCJcbiAgICBbbGFiZWxUZXh0XT1cIl9sYWJlbFwiXG4gICAgW3ByZXBlbmRdPVwiX3ByZXBlbmRcIlxuICAgIFthcHBlbmRdPVwiX2FwcGVuZFwiXG4gICAgW21vZGVsXT1cIl9tb2RlbFwiXG4gICAgW2ZpZWxkXT1cIl9maWVsZFwiXG4gICAgW2l0ZW1zXT1cIl9pdGVtc1wiXG4gICAgW2RpYWxvZ1NldHRpbmdzXT1cImRpYWxvZ1NldHRpbmdzXCJcbiAgICBbdGV4dF09XCJ0ZXh0XCJcbiAgICBbdmFsdWVGaWVsZF09XCJ2YWx1ZUZpZWxkXCJcbiAgICBbZGlzYWJsZVNob3dTZWxlY3RlZEl0ZW1zXT1cImRpc2FibGVTaG93U2VsZWN0ZWRJdGVtc1wiXG4gICAgW3NlbGVjdGVkRWxlbWVudHNCbG9ja0NsYXNzXT1cInNlbGVjdGVkRWxlbWVudHNCbG9ja0NsYXNzXCJcbiAgICBbc2VsZWN0ZWRFbGVtZW50c0Jsb2NrRXh0cmFDbGFzc109XCJzZWxlY3RlZEVsZW1lbnRzQmxvY2tFeHRyYUNsYXNzXCJcbiAgICBbc2hvd0ljb25dPVwic2hvd0ljb25cIlxuXG4gICAgKHNlbGVjdGVkKT1cInNlbGVjdGVkRW1pdCgkZXZlbnQpXCJcbiAgICAoc2VsZWN0TW9kZWwpPVwic2VsZWN0TW9kZWxFbWl0KCRldmVudClcIlxuICA+PC9tdWx0aXBsZS1zZWxlY3Q+XG48L25nLWNvbnRhaW5lcj5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj1cIl9tb2RlID09PSAnc2luZ2xlJ1wiPlxuICA8bXVsdGlwbGUtc2VsZWN0XG4gICAgbW9kZT1cInNpbmdsZVwiXG4gICAgW3dyYXBwZXJDbGFzc109XCJ3cmFwcGVyQ2xhc3NcIlxuICAgIFtpc1JlcXVpcmVkXT1cIl9pc1JlcXVpcmVkXCJcbiAgICBbZGlzYWJsZWRBcHBlYXJhbmNlXT1cImRpc2FibGVkQXBwZWFyYW5jZVwiXG4gICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICBbYWRkRW1wdHlPcHRpb25dPVwiYWRkRW1wdHlPcHRpb25cIlxuICAgIFtsYWJlbENsYXNzXT1cImxhYmVsQ2xhc3NcIlxuICAgIFtzaG93TGFiZWxdPVwic2hvd0xhYmVsXCJcbiAgICBbbGFiZWxUZXh0XT1cIl9sYWJlbFwiXG4gICAgW3ByZXBlbmRdPVwiX3ByZXBlbmRcIlxuICAgIFthcHBlbmRdPVwiX2FwcGVuZFwiXG4gICAgW21vZGVsXT1cIl9tb2RlbFwiXG4gICAgW2ZpZWxkXT1cIl9maWVsZFwiXG4gICAgW2l0ZW1zXT1cIl9pdGVtc1wiXG4gICAgW2RpYWxvZ1NldHRpbmdzXT1cImRpYWxvZ1NldHRpbmdzXCJcbiAgICBbdGV4dF09XCJ0ZXh0XCJcbiAgICBbdmFsdWVGaWVsZF09XCJ2YWx1ZUZpZWxkXCJcbiAgICBbZGlzYWJsZVNob3dTZWxlY3RlZEl0ZW1zXT1cImRpc2FibGVTaG93U2VsZWN0ZWRJdGVtc1wiXG4gICAgW3Nob3dJY29uXT1cInNob3dJY29uXCJcblxuICAgIChzZWxlY3RlZCk9XCJzZWxlY3RlZEVtaXQoJGV2ZW50KVwiXG4gICAgKHNlbGVjdE1vZGVsKT1cInNlbGVjdE1vZGVsRW1pdCgkZXZlbnQpXCJcbiAgPjwvbXVsdGlwbGUtc2VsZWN0PlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJfbW9kZSA9PT0gJ3NpbXBsZSdcIj5cbiAgPHNpbXBsZS1zZWxlY3RcbiAgICBbd3JhcHBlckNsYXNzXT1cIndyYXBwZXJDbGFzc1wiXG4gICAgW2lzUmVxdWlyZWRdPVwiX2lzUmVxdWlyZWRcIlxuICAgIFtkaXNhYmxlZEFwcGVhcmFuY2VdPVwiZGlzYWJsZWRBcHBlYXJhbmNlXCJcbiAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgIFthZGRFbXB0eU9wdGlvbl09XCJhZGRFbXB0eU9wdGlvblwiXG4gICAgW2xhYmVsQ2xhc3NdPVwibGFiZWxDbGFzc1wiXG4gICAgW3Nob3dMYWJlbF09XCJzaG93TGFiZWxcIlxuICAgIFtsYWJlbFRleHRdPVwiX2xhYmVsXCJcbiAgICBbcHJlcGVuZF09XCJfcHJlcGVuZFwiXG4gICAgW2FwcGVuZF09XCJfYXBwZW5kXCJcbiAgICBbbW9kZWxdPVwiX21vZGVsXCJcbiAgICBbZmllbGRdPVwiX2ZpZWxkXCJcbiAgICBbaXRlbXNdPVwiX2l0ZW1zXCJcblxuICAgIChzZWxlY3RlZCk9XCJzZWxlY3RlZEVtaXQoJGV2ZW50KVwiXG4gICAgKHNlbGVjdE1vZGVsKT1cInNlbGVjdE1vZGVsRW1pdCgkZXZlbnQpXCJcbiAgPjwvc2ltcGxlLXNlbGVjdD5cbjwvbmctY29udGFpbmVyPlxuIl19