UNPKG

ddata-ui-input

Version:

DData UI Input module, components, models & services

128 lines 20.7 kB
import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core'; import { BaseModel, DdataCoreModule, ValidatorService } from 'ddata-core'; import * as i0 from "@angular/core"; import * as i1 from "../../services/input/helper/input-helper.service"; import * as i2 from "ngx-color-picker"; import * as i3 from "@angular/common"; import * as i4 from "@angular/forms"; export class DdataInputColorComponent { constructor(helperService) { this.helperService = helperService; // tslint:disable: variable-name this._field = ''; this._title = ''; this._label = ''; this._placeholder = ''; this._prepend = ''; this._append = ''; this._isRequired = false; this._model = new BaseModel(); this.disabled = false; this.type = 'text'; this.inputClass = 'form-control'; 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.autoFocus = false; this.wrapperClass = 'd-flex flex-wrap'; this.changed = new EventEmitter(); this.random = this.helperService.randChars(); this.toggle = false; this.validatorService = DdataCoreModule.InjectorInstance.get(ValidatorService); } set model(value) { if (!value) { value = new BaseModel(); } this._model = value; if (!!this._model && !!this._model.fields[this._field]) { this._title = this.helperService.getTitle(this._model, this._field); this._placeholder = this.helperService.getPlaceholder(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); } if (!!this._model && !!this._model.validationRules[this._field]) { this._isRequired = this.helperService.isRequired(this._model, this._field); } } get model() { return this._model; } set field(value) { if (value === 'undefined') { value = 'isValid'; } this._field = value; } set append(value) { if (value === 'undefined') { value = ''; } this._append = value; } set prepend(value) { if (value === 'undefined') { value = ''; } this._prepend = value; } set labelText(value) { if (value === 'undefined') { value = ''; } this._label = value; } ngOnInit() { if (this.autoFocus) { this.inputBox.nativeElement.focus(); } } validateField() { const isValid = this.helperService.validateField(this._model, this._field); if (isValid) { this.changed.emit(this._model); } } } DdataInputColorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: DdataInputColorComponent, deps: [{ token: i1.InputHelperService }], target: i0.ɵɵFactoryTarget.Component }); DdataInputColorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: DdataInputColorComponent, selector: "dd-input-color", inputs: { model: "model", field: "field", append: "append", prepend: "prepend", labelText: "labelText", disabled: "disabled", type: "type", inputClass: "inputClass", labelClass: "labelClass", inputBlockClass: "inputBlockClass", inputBlockExtraClass: "inputBlockExtraClass", showLabel: "showLabel", autoFocus: "autoFocus", wrapperClass: "wrapperClass" }, outputs: { changed: "changed" }, viewQueries: [{ propertyName: "inputBox", first: true, predicate: ["inputBox"], descendants: true }], ngImport: i0, template: "<div [class]=\"wrapperClass\">\n <label [class]=\"labelClass\" [for]=\"_field + '_' + random\" *ngIf=\"showLabel\">\n {{ _label }}:\n <span *ngIf=\"_isRequired\"> *</span>\n </label>\n\n <div [class]=\"inputBlockClass\" [ngClass]=\"showLabel ? inputBlockExtraClass : ''\">\n <div class=\"input-color-container\" [style.background]=\"model[_field]\" (click)=\"toggle=!toggle\"></div>\n\n <div class=\"input-group-prepend\" *ngIf=\" _prepend != '' \">\n <div class=\"input-group-text\">{{ _prepend }}</div>\n </div>\n\n <input\n [class.invalid]=\"model.validationErrors.includes(_field)\"\n [class]=\"inputClass\"\n [(ngModel)]=\"model[_field]\"\n [id]=\"_field + '_' + random\"\n [attr.name]=\"_field + '_' + random\"\n [placeholder]=\"_placeholder\"\n [title]=\"_title\"\n [disabled]=\"disabled\"\n [type]=\"type\"\n [(colorPicker)]=\"model[_field]\"\n [(cpToggle)]=\"toggle\"\n cpPosition=\"bottom\"\n cpOutputFormat=\"hex\"\n cpAlphaChannel=\"disabled\"\n cpFallbackColor=\"#c0c0c0\"\n (keyup)=\"validateField()\"\n #inputBox>\n\n <div class=\"input-group-append\" *ngIf=\"_append != ''\">\n <div class=\"input-group-text\">{{ _append }}</div>\n </div>\n </div>\n\n</div>\n", styles: [".input-color-container{width:40px}\n"], dependencies: [{ kind: "directive", type: i2.ColorPickerDirective, selector: "[colorPicker]", inputs: ["cpWidth", "cpHeight", "cpToggle", "cpDisabled", "cpIgnoredElements", "cpFallbackColor", "cpColorMode", "cpCmykEnabled", "cpOutputFormat", "cpAlphaChannel", "cpDisableInput", "cpDialogDisplay", "cpSaveClickOutside", "cpCloseClickOutside", "cpUseRootViewContainer", "cpPosition", "cpPositionOffset", "cpPositionRelativeToArrow", "cpOKButton", "cpOKButtonText", "cpOKButtonClass", "cpCancelButton", "cpCancelButtonText", "cpCancelButtonClass", "cpPresetLabel", "cpPresetColorsClass", "cpMaxPresetColorsLength", "cpPresetEmptyMessage", "cpPresetEmptyMessageClass", "cpAddColorButton", "cpAddColorButtonText", "cpAddColorButtonClass", "cpRemoveColorButtonClass", "colorPicker", "cpPresetColors"], outputs: ["cpInputChange", "cpToggleChange", "cpSliderChange", "cpSliderDragEnd", "cpSliderDragStart", "colorPickerOpen", "colorPickerClose", "colorPickerCancel", "colorPickerSelect", "colorPickerChange", "cpCmykColorChange", "cpPresetColorsChange"], exportAs: ["ngxColorPicker"] }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.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: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: DdataInputColorComponent, decorators: [{ type: Component, args: [{ selector: 'dd-input-color', template: "<div [class]=\"wrapperClass\">\n <label [class]=\"labelClass\" [for]=\"_field + '_' + random\" *ngIf=\"showLabel\">\n {{ _label }}:\n <span *ngIf=\"_isRequired\"> *</span>\n </label>\n\n <div [class]=\"inputBlockClass\" [ngClass]=\"showLabel ? inputBlockExtraClass : ''\">\n <div class=\"input-color-container\" [style.background]=\"model[_field]\" (click)=\"toggle=!toggle\"></div>\n\n <div class=\"input-group-prepend\" *ngIf=\" _prepend != '' \">\n <div class=\"input-group-text\">{{ _prepend }}</div>\n </div>\n\n <input\n [class.invalid]=\"model.validationErrors.includes(_field)\"\n [class]=\"inputClass\"\n [(ngModel)]=\"model[_field]\"\n [id]=\"_field + '_' + random\"\n [attr.name]=\"_field + '_' + random\"\n [placeholder]=\"_placeholder\"\n [title]=\"_title\"\n [disabled]=\"disabled\"\n [type]=\"type\"\n [(colorPicker)]=\"model[_field]\"\n [(cpToggle)]=\"toggle\"\n cpPosition=\"bottom\"\n cpOutputFormat=\"hex\"\n cpAlphaChannel=\"disabled\"\n cpFallbackColor=\"#c0c0c0\"\n (keyup)=\"validateField()\"\n #inputBox>\n\n <div class=\"input-group-append\" *ngIf=\"_append != ''\">\n <div class=\"input-group-text\">{{ _append }}</div>\n </div>\n </div>\n\n</div>\n", styles: [".input-color-container{width:40px}\n"] }] }], ctorParameters: function () { return [{ type: i1.InputHelperService }]; }, propDecorators: { model: [{ type: Input }], field: [{ type: Input }], append: [{ type: Input }], prepend: [{ type: Input }], labelText: [{ type: Input }], disabled: [{ type: Input }], type: [{ type: Input }], inputClass: [{ type: Input }], labelClass: [{ type: Input }], inputBlockClass: [{ type: Input }], inputBlockExtraClass: [{ type: Input }], showLabel: [{ type: Input }], autoFocus: [{ type: Input }], wrapperClass: [{ type: Input }], changed: [{ type: Output }], inputBox: [{ type: ViewChild, args: ['inputBox'] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sb3ItaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGRhdGEtdWktaW5wdXQvc3JjL2xpYi9jb21wb25lbnRzL2NvbG9yL2NvbG9yLWlucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RkYXRhLXVpLWlucHV0L3NyYy9saWIvY29tcG9uZW50cy9jb2xvci9jb2xvci1pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0RyxPQUFPLEVBQUUsU0FBUyxFQUFzQixlQUFlLEVBQW1CLGdCQUFnQixFQUFFLE1BQU0sWUFBWSxDQUFDOzs7Ozs7QUFRL0csTUFBTSxPQUFPLHdCQUF3QjtJQWdGbkMsWUFDVSxhQUFpQztRQUFqQyxrQkFBYSxHQUFiLGFBQWEsQ0FBb0I7UUEvRTNDLGdDQUFnQztRQUNoQyxXQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ1osV0FBTSxHQUFHLEVBQUUsQ0FBQztRQUNaLFdBQU0sR0FBRyxFQUFFLENBQUM7UUFDWixpQkFBWSxHQUFHLEVBQUUsQ0FBQztRQUNsQixhQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ2QsWUFBTyxHQUFHLEVBQUUsQ0FBQztRQUNiLGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLFdBQU0sR0FBbUQsSUFBSSxTQUFTLEVBQUUsQ0FBQztRQW9EaEUsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQixTQUFJLEdBQUcsTUFBTSxDQUFDO1FBQ2QsZUFBVSxHQUFHLGNBQWMsQ0FBQztRQUM1QixlQUFVLEdBQUcscUNBQXFDLENBQUM7UUFDbkQsb0JBQWUsR0FBRyxvQkFBb0IsQ0FBQztRQUN2Qyx5QkFBb0IsR0FBRyxVQUFVLENBQUM7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TUFBTSxHQUFHLEtBQUssQ0FBQztJQUN0QixDQUFDO0lBdUJELFFBQVE7UUFDTixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDbEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDckM7SUFDSCxDQUFDO0lBRUQsYUFBYTtRQUNYLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTNFLElBQUksT0FBTyxFQUFFO1lBQ1gsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ2hDO0lBRUgsQ0FBQzs7cUhBakdVLHdCQUF3Qjt5R0FBeEIsd0JBQXdCLCtoQkNUckMsb3hDQXNDQTsyRkQ3QmEsd0JBQXdCO2tCQUxwQyxTQUFTOytCQUNFLGdCQUFnQjt5R0FnQmIsS0FBSztzQkFBakIsS0FBSztnQkFzQk8sS0FBSztzQkFBakIsS0FBSztnQkFPTyxNQUFNO3NCQUFsQixLQUFLO2dCQU9PLE9BQU87c0JBQW5CLEtBQUs7Z0JBT08sU0FBUztzQkFBckIsS0FBSztnQkFPRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBRUksT0FBTztzQkFBaEIsTUFBTTtnQkFFZ0IsUUFBUTtzQkFBOUIsU0FBUzt1QkFBQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCYXNlTW9kZWwsIEJhc2VNb2RlbEludGVyZmFjZSwgRGRhdGFDb3JlTW9kdWxlLCBGaWVsZHNJbnRlcmZhY2UsIFZhbGlkYXRvclNlcnZpY2UgfSBmcm9tICdkZGF0YS1jb3JlJztcbmltcG9ydCB7IElucHV0SGVscGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2lucHV0L2hlbHBlci9pbnB1dC1oZWxwZXIuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2RkLWlucHV0LWNvbG9yJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbG9yLWlucHV0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY29sb3ItaW5wdXQuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBEZGF0YUlucHV0Q29sb3JDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIC8vIHRzbGludDpkaXNhYmxlOiB2YXJpYWJsZS1uYW1lXG4gIF9maWVsZCA9ICcnO1xuICBfdGl0bGUgPSAnJztcbiAgX2xhYmVsID0gJyc7XG4gIF9wbGFjZWhvbGRlciA9ICcnO1xuICBfcHJlcGVuZCA9ICcnO1xuICBfYXBwZW5kID0gJyc7XG4gIF9pc1JlcXVpcmVkID0gZmFsc2U7XG4gIF9tb2RlbDogQmFzZU1vZGVsSW50ZXJmYWNlPGFueT4gJiBGaWVsZHNJbnRlcmZhY2U8YW55PiA9IG5ldyBCYXNlTW9kZWwoKTtcblxuICBASW5wdXQoKSBzZXQgbW9kZWwodmFsdWU6IEJhc2VNb2RlbEludGVyZmFjZTxhbnk+ICYgRmllbGRzSW50ZXJmYWNlPGFueT4gfCBudWxsKSB7XG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgdmFsdWUgPSBuZXcgQmFzZU1vZGVsKCk7XG4gICAgfVxuXG4gICAgdGhpcy5fbW9kZWwgPSB2YWx1ZTtcblxuICAgIGlmICghIXRoaXMuX21vZGVsICYmICEhdGhpcy5fbW9kZWwuZmllbGRzW3RoaXMuX2ZpZWxkXSkge1xuICAgICAgdGhpcy5fdGl0bGUgPSB0aGlzLmhlbHBlclNlcnZpY2UuZ2V0VGl0bGUodGhpcy5fbW9kZWwsIHRoaXMuX2ZpZWxkKTtcbiAgICAgIHRoaXMuX3BsYWNlaG9sZGVyID0gdGhpcy5oZWxwZXJTZXJ2aWNlLmdldFBsYWNlaG9sZGVyKHRoaXMuX21vZGVsLCB0aGlzLl9maWVsZCk7XG4gICAgICB0aGlzLl9wcmVwZW5kID0gdGhpcy5oZWxwZXJTZXJ2aWNlLmdldFByZXBlbmQodGhpcy5fbW9kZWwsIHRoaXMuX2ZpZWxkKTtcbiAgICAgIHRoaXMuX2FwcGVuZCA9IHRoaXMuaGVscGVyU2VydmljZS5nZXRBcHBlbmQodGhpcy5fbW9kZWwsIHRoaXMuX2ZpZWxkKTtcbiAgICAgIHRoaXMuX2xhYmVsID0gdGhpcy5oZWxwZXJTZXJ2aWNlLmdldExhYmVsKHRoaXMuX21vZGVsLCB0aGlzLl9maWVsZCk7XG4gICAgfVxuXG4gICAgaWYgKCEhdGhpcy5fbW9kZWwgJiYgISF0aGlzLl9tb2RlbC52YWxpZGF0aW9uUnVsZXNbdGhpcy5fZmllbGRdKSB7XG4gICAgICB0aGlzLl9pc1JlcXVpcmVkID0gdGhpcy5oZWxwZXJTZXJ2aWNlLmlzUmVxdWlyZWQodGhpcy5fbW9kZWwsIHRoaXMuX2ZpZWxkKTtcbiAgICB9XG4gIH1cbiAgZ2V0IG1vZGVsKCk6IEJhc2VNb2RlbEludGVyZmFjZTxhbnk+ICYgRmllbGRzSW50ZXJmYWNlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLl9tb2RlbDtcbiAgfVxuICBASW5wdXQoKSBzZXQgZmllbGQodmFsdWU6IHN0cmluZykge1xuICAgIGlmICh2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHZhbHVlID0gJ2lzVmFsaWQnO1xuICAgIH1cblxuICAgIHRoaXMuX2ZpZWxkID0gdmFsdWU7XG4gIH1cbiAgQElucHV0KCkgc2V0IGFwcGVuZCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKHZhbHVlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdmFsdWUgPSAnJztcbiAgICB9XG5cbiAgICB0aGlzLl9hcHBlbmQgPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKSBzZXQgcHJlcGVuZCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKHZhbHVlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdmFsdWUgPSAnJztcbiAgICB9XG5cbiAgICB0aGlzLl9wcmVwZW5kID0gdmFsdWU7XG4gIH1cbiAgQElucHV0KCkgc2V0IGxhYmVsVGV4dCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKHZhbHVlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdmFsdWUgPSAnJztcbiAgICB9XG5cbiAgICB0aGlzLl9sYWJlbCA9IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2U7XG4gIEBJbnB1dCgpIHR5cGUgPSAndGV4dCc7XG4gIEBJbnB1dCgpIGlucHV0Q2xhc3MgPSAnZm9ybS1jb250cm9sJztcbiAgQElucHV0KCkgbGFiZWxDbGFzcyA9ICdjb2wtMTIgY29sLW1kLTMgcHgtMCBjb2wtZm9ybS1sYWJlbCc7XG4gIEBJbnB1dCgpIGlucHV0QmxvY2tDbGFzcyA9ICdjb2wtMTIgZC1mbGV4IHB4LTAnO1xuICBASW5wdXQoKSBpbnB1dEJsb2NrRXh0cmFDbGFzcyA9ICdjb2wtbWQtOSc7XG4gIEBJbnB1dCgpIHNob3dMYWJlbCA9IHRydWU7XG4gIEBJbnB1dCgpIGF1dG9Gb2N1cyA9IGZhbHNlO1xuICBASW5wdXQoKSB3cmFwcGVyQ2xhc3MgPSAnZC1mbGV4IGZsZXgtd3JhcCc7XG5cbiAgQE91dHB1dCgpIGNoYW5nZWQ6IEV2ZW50RW1pdHRlcjxCYXNlTW9kZWxJbnRlcmZhY2U8YW55PiAmIEZpZWxkc0ludGVyZmFjZTxhbnk+PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBAVmlld0NoaWxkKCdpbnB1dEJveCcpIGlucHV0Qm94OiBFbGVtZW50UmVmO1xuXG4gIHJhbmRvbTogc3RyaW5nID0gdGhpcy5oZWxwZXJTZXJ2aWNlLnJhbmRDaGFycygpO1xuICB0b2dnbGUgPSBmYWxzZTtcbiAgdmFsaWRhdG9yU2VydmljZTogVmFsaWRhdG9yU2VydmljZSA9IERkYXRhQ29yZU1vZHVsZS5JbmplY3Rvckluc3RhbmNlLmdldDxWYWxpZGF0b3JTZXJ2aWNlPihWYWxpZGF0b3JTZXJ2aWNlKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGhlbHBlclNlcnZpY2U6IElucHV0SGVscGVyU2VydmljZSxcbiAgKSB7IH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5hdXRvRm9jdXMpIHtcbiAgICAgIHRoaXMuaW5wdXRCb3gubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cbiAgfVxuXG4gIHZhbGlkYXRlRmllbGQoKTogdm9pZCB7XG4gICAgY29uc3QgaXNWYWxpZCA9IHRoaXMuaGVscGVyU2VydmljZS52YWxpZGF0ZUZpZWxkKHRoaXMuX21vZGVsLCB0aGlzLl9maWVsZCk7XG5cbiAgICBpZiAoaXNWYWxpZCkge1xuICAgICAgdGhpcy5jaGFuZ2VkLmVtaXQodGhpcy5fbW9kZWwpO1xuICAgIH1cblxuICB9XG59XG4iLCI8ZGl2IFtjbGFzc109XCJ3cmFwcGVyQ2xhc3NcIj5cbiAgPGxhYmVsIFtjbGFzc109XCJsYWJlbENsYXNzXCIgW2Zvcl09XCJfZmllbGQgKyAnXycgKyByYW5kb21cIiAqbmdJZj1cInNob3dMYWJlbFwiPlxuICAgIHt7IF9sYWJlbCB9fTpcbiAgICA8c3BhbiAqbmdJZj1cIl9pc1JlcXVpcmVkXCI+ICo8L3NwYW4+XG4gIDwvbGFiZWw+XG5cbiAgPGRpdiBbY2xhc3NdPVwiaW5wdXRCbG9ja0NsYXNzXCIgW25nQ2xhc3NdPVwic2hvd0xhYmVsID8gaW5wdXRCbG9ja0V4dHJhQ2xhc3MgOiAnJ1wiPlxuICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1jb2xvci1jb250YWluZXJcIiBbc3R5bGUuYmFja2dyb3VuZF09XCJtb2RlbFtfZmllbGRdXCIgKGNsaWNrKT1cInRvZ2dsZT0hdG9nZ2xlXCI+PC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAtcHJlcGVuZFwiICpuZ0lmPVwiIF9wcmVwZW5kICE9ICcnIFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwLXRleHRcIj57eyBfcHJlcGVuZCB9fTwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGlucHV0XG4gICAgICBbY2xhc3MuaW52YWxpZF09XCJtb2RlbC52YWxpZGF0aW9uRXJyb3JzLmluY2x1ZGVzKF9maWVsZClcIlxuICAgICAgW2NsYXNzXT1cImlucHV0Q2xhc3NcIlxuICAgICAgWyhuZ01vZGVsKV09XCJtb2RlbFtfZmllbGRdXCJcbiAgICAgIFtpZF09XCJfZmllbGQgKyAnXycgKyByYW5kb21cIlxuICAgICAgW2F0dHIubmFtZV09XCJfZmllbGQgKyAnXycgKyByYW5kb21cIlxuICAgICAgW3BsYWNlaG9sZGVyXT1cIl9wbGFjZWhvbGRlclwiXG4gICAgICBbdGl0bGVdPVwiX3RpdGxlXCJcbiAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICBbdHlwZV09XCJ0eXBlXCJcbiAgICAgIFsoY29sb3JQaWNrZXIpXT1cIm1vZGVsW19maWVsZF1cIlxuICAgICAgWyhjcFRvZ2dsZSldPVwidG9nZ2xlXCJcbiAgICAgIGNwUG9zaXRpb249XCJib3R0b21cIlxuICAgICAgY3BPdXRwdXRGb3JtYXQ9XCJoZXhcIlxuICAgICAgY3BBbHBoYUNoYW5uZWw9XCJkaXNhYmxlZFwiXG4gICAgICBjcEZhbGxiYWNrQ29sb3I9XCIjYzBjMGMwXCJcbiAgICAgIChrZXl1cCk9XCJ2YWxpZGF0ZUZpZWxkKClcIlxuICAgICAgI2lucHV0Qm94PlxuXG4gICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwLWFwcGVuZFwiICpuZ0lmPVwiX2FwcGVuZCAhPSAnJ1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwLXRleHRcIj57eyBfYXBwZW5kIH19PC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG48L2Rpdj5cbiJdfQ==