@nakedobjects/gemini
Version:
Single Page Application client for a Naked Objects application.
115 lines • 15.9 kB
JavaScript
import { ViewChild } from '@angular/core';
import { Component, EventEmitter, Input } from '@angular/core';
import { PropertyViewModel } from '@nakedobjects/view-models';
import { DatePickerOptions } from '../date-picker/date-picker.component';
import { fixedDateFormat } from '@nakedobjects/services';
import * as i0 from "@angular/core";
import * as i1 from "@nakedobjects/services";
import * as i2 from "@angular/forms";
import * as i3 from "../date-picker/date-picker.component";
export class DatePickerFacadeComponent {
datePickerOptions = new DatePickerOptions();
constructor(configService) {
this.inputEvents = new EventEmitter();
this.datePickerOptions.format = configService.config.dateInputFormat;
}
control;
form;
fieldViewModel;
set model(m) {
this.fieldViewModel = m;
this.datePickerOptions.class = m instanceof PropertyViewModel ? 'datepicker-property' : 'datepicker-parameter';
}
get model() {
return this.fieldViewModel;
}
datepicker;
inputEvents;
get id() {
return this.model.paneArgId;
}
get description() {
return this.model.description;
}
setValueIfChanged(dateModel) {
const oldValue = this.control.value;
const newValue = dateModel ? dateModel.toFormat(fixedDateFormat) : '';
if (newValue !== oldValue) {
this.model.resetMessage();
this.model.clientValid = true;
this.control.setValue(newValue);
}
}
handleDefaultEvent(data) {
if (this.control) {
if (data === 'closed') {
const dateModel = this.datepicker?.dateModel ?? null;
this.setValueIfChanged(dateModel);
}
}
}
handleDateChangedEvent(dateModel) {
if (this.control) {
this.setValueIfChanged(dateModel);
}
}
handleDateClearedEvent() {
if (this.control) {
this.model.resetMessage();
this.model.clientValid = true;
this.control.setValue('');
}
}
handleInvalidDateEvent(_) {
if (this.control) {
this.model.setInvalidDate();
this.model.clientValid = false;
this.control.setErrors({ [this.model.getMessage()]: true });
}
}
handleEvents(e) {
switch (e.type) {
case ('default'):
this.handleDefaultEvent(e.data);
break;
case ('dateChanged'):
this.handleDateChangedEvent(e.data);
break;
case ('dateCleared'):
this.handleDateClearedEvent();
break;
case ('dateInvalid'):
this.handleInvalidDateEvent(e.data);
break;
default: // ignore
}
}
ngAfterViewInit() {
const existingValue = this.control && this.control.value;
if (existingValue && (existingValue instanceof String || typeof existingValue === 'string')) {
setTimeout(() => this.inputEvents.emit({ type: 'setDate', data: existingValue, }));
}
}
focus() {
return this.datepicker?.focus();
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: DatePickerFacadeComponent, deps: [{ token: i1.ConfigService }], target: i0.ɵɵFactoryTarget.Component });
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: DatePickerFacadeComponent, selector: "nof-date-picker-facade", inputs: { control: "control", form: "form", model: "model" }, viewQueries: [{ propertyName: "datepicker", first: true, predicate: ["dp"], descendants: true }], ngImport: i0, template: "<div [formGroup]=\"form\">\n <nof-date-picker #dp [id]=\"id\" [inputEvents]=\"inputEvents\" (outputEvents)=\"handleEvents($event)\" [options]=\"datePickerOptions\" [description]=\"description\"></nof-date-picker >\n</div> ", styles: [""], dependencies: [{ kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i3.DatePickerComponent, selector: "nof-date-picker", inputs: ["options", "inputEvents", "id", "description"], outputs: ["outputEvents"] }] });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: DatePickerFacadeComponent, decorators: [{
type: Component,
args: [{ selector: 'nof-date-picker-facade', template: "<div [formGroup]=\"form\">\n <nof-date-picker #dp [id]=\"id\" [inputEvents]=\"inputEvents\" (outputEvents)=\"handleEvents($event)\" [options]=\"datePickerOptions\" [description]=\"description\"></nof-date-picker >\n</div> " }]
}], ctorParameters: () => [{ type: i1.ConfigService }], propDecorators: { control: [{
type: Input,
args: [{ required: true }]
}], form: [{
type: Input,
args: [{ required: true }]
}], model: [{
type: Input,
args: [{ required: true }]
}], datepicker: [{
type: ViewChild,
args: ['dp', { static: false }]
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1waWNrZXItZmFjYWRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2dlbWluaS9zcmMvZGF0ZS1waWNrZXItZmFjYWRlL2RhdGUtcGlja2VyLWZhY2FkZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9nZW1pbmkvc3JjL2RhdGUtcGlja2VyLWZhY2FkZS9kYXRlLXBpY2tlci1mYWNhZGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRy9ELE9BQU8sRUFBa0IsaUJBQWlCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUU5RSxPQUFPLEVBQXVCLGlCQUFpQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFFOUYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7OztBQU96RCxNQUFNLE9BQU8seUJBQXlCO0lBRWxDLGlCQUFpQixHQUFHLElBQUksaUJBQWlCLEVBQUUsQ0FBQztJQUU1QyxZQUFZLGFBQTRCO1FBQ3BDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxZQUFZLEVBQXlCLENBQUM7UUFDN0QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQztJQUN6RSxDQUFDO0lBR0QsT0FBTyxDQUFtQjtJQUcxQixJQUFJLENBQWE7SUFFVCxjQUFjLENBQWtCO0lBRXhDLElBQ0ksS0FBSyxDQUFDLENBQWlCO1FBQ3ZCLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxZQUFZLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsc0JBQXNCLENBQUM7SUFDbkgsQ0FBQztJQUVELElBQUksS0FBSztRQUNMLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUMvQixDQUFDO0lBR0QsVUFBVSxDQUF1QjtJQUVqQyxXQUFXLENBQXNDO0lBRWpELElBQUksRUFBRTtRQUNGLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUM7SUFDaEMsQ0FBQztJQUVELElBQUksV0FBVztRQUNYLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUM7SUFDbEMsQ0FBQztJQUVELGlCQUFpQixDQUFDLFNBQTBCO1FBQ3hDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQ3BDLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBRXRFLElBQUksUUFBUSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1lBQzlCLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3BDLENBQUM7SUFDTCxDQUFDO0lBRUQsa0JBQWtCLENBQUMsSUFBWTtRQUMzQixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNmLElBQUksSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUNwQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLFNBQVMsSUFBSSxJQUFJLENBQUM7Z0JBQ3JELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN0QyxDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxTQUFtQjtRQUN0QyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNmLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN0QyxDQUFDO0lBQ0wsQ0FBQztJQUVELHNCQUFzQjtRQUNsQixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNmLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1lBQzlCLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzlCLENBQUM7SUFDTCxDQUFDO0lBRUQsc0JBQXNCLENBQUMsQ0FBUztRQUM1QixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNmLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDNUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1lBQy9CLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNoRSxDQUFDO0lBQ0wsQ0FBQztJQUVELFlBQVksQ0FBQyxDQUF5QjtRQUNsQyxRQUFRLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNiLEtBQUssQ0FBQyxTQUFTLENBQUM7Z0JBQ1osSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDaEMsTUFBTTtZQUNWLEtBQUssQ0FBQyxhQUFhLENBQUM7Z0JBQ2hCLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3BDLE1BQU07WUFDVixLQUFLLENBQUMsYUFBYSxDQUFDO2dCQUNoQixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztnQkFDOUIsTUFBTTtZQUNWLEtBQUssQ0FBQyxhQUFhLENBQUM7Z0JBQ2hCLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3BDLE1BQU07WUFFVixRQUFRLENBQUMsU0FBUztRQUN0QixDQUFDO0lBQ0wsQ0FBQztJQUVELGVBQWU7UUFDWCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQ3pELElBQUksYUFBYSxJQUFJLENBQUMsYUFBYSxZQUFZLE1BQU0sSUFBSSxPQUFPLGFBQWEsS0FBSyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQzFGLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLGFBQXVCLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDakcsQ0FBQztJQUNMLENBQUM7SUFFRCxLQUFLO1FBQ0QsT0FBTyxJQUFJLENBQUMsVUFBVSxFQUFFLEtBQUssRUFBRSxDQUFDO0lBQ3BDLENBQUM7dUdBOUdRLHlCQUF5QjsyRkFBekIseUJBQXlCLDhOQ2Z0QyxzUEFFeUI7OzJGRGFaLHlCQUF5QjtrQkFMckMsU0FBUzsrQkFDSSx3QkFBd0I7a0ZBY2xDLE9BQU87c0JBRE4sS0FBSzt1QkFBQyxFQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUM7Z0JBSXZCLElBQUk7c0JBREgsS0FBSzt1QkFBQyxFQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUM7Z0JBTW5CLEtBQUs7c0JBRFIsS0FBSzt1QkFBQyxFQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUM7Z0JBV3ZCLFVBQVU7c0JBRFQsU0FBUzt1QkFBQyxJQUFJLEVBQUUsRUFBQyxNQUFNLEVBQUUsS0FBSyxFQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQ29uZmlnU2VydmljZSB9IGZyb20gJ0BuYWtlZG9iamVjdHMvc2VydmljZXMnO1xuaW1wb3J0IHsgRmllbGRWaWV3TW9kZWwsIFByb3BlcnR5Vmlld01vZGVsIH0gZnJvbSAnQG5ha2Vkb2JqZWN0cy92aWV3LW1vZGVscyc7XG5pbXBvcnQgeyBEYXRlVGltZSB9IGZyb20gJ2x1eG9uJztcbmltcG9ydCB7IERhdGVQaWNrZXJDb21wb25lbnQsIERhdGVQaWNrZXJPcHRpb25zIH0gZnJvbSAnLi4vZGF0ZS1waWNrZXIvZGF0ZS1waWNrZXIuY29tcG9uZW50JztcbmltcG9ydCB7IElEYXRlUGlja2VySW5wdXRFdmVudCwgSURhdGVQaWNrZXJPdXRwdXRFdmVudCB9IGZyb20gJy4uL2RhdGUtcGlja2VyL2RhdGUtcGlja2VyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBmaXhlZERhdGVGb3JtYXQgfSBmcm9tICdAbmFrZWRvYmplY3RzL3NlcnZpY2VzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdub2YtZGF0ZS1waWNrZXItZmFjYWRlJyxcbiAgICB0ZW1wbGF0ZVVybDogJ2RhdGUtcGlja2VyLWZhY2FkZS5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJ2RhdGUtcGlja2VyLWZhY2FkZS5jb21wb25lbnQuY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgRGF0ZVBpY2tlckZhY2FkZUNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xuXG4gICAgZGF0ZVBpY2tlck9wdGlvbnMgPSBuZXcgRGF0ZVBpY2tlck9wdGlvbnMoKTtcblxuICAgIGNvbnN0cnVjdG9yKGNvbmZpZ1NlcnZpY2U6IENvbmZpZ1NlcnZpY2UpIHtcbiAgICAgICAgdGhpcy5pbnB1dEV2ZW50cyA9IG5ldyBFdmVudEVtaXR0ZXI8SURhdGVQaWNrZXJJbnB1dEV2ZW50PigpO1xuICAgICAgICB0aGlzLmRhdGVQaWNrZXJPcHRpb25zLmZvcm1hdCA9IGNvbmZpZ1NlcnZpY2UuY29uZmlnLmRhdGVJbnB1dEZvcm1hdDtcbiAgICB9XG5cbiAgICBASW5wdXQoe3JlcXVpcmVkOiB0cnVlfSlcbiAgICBjb250cm9sITogQWJzdHJhY3RDb250cm9sO1xuXG4gICAgQElucHV0KHtyZXF1aXJlZDogdHJ1ZX0pXG4gICAgZm9ybSE6IEZvcm1Hcm91cDtcblxuICAgIHByaXZhdGUgZmllbGRWaWV3TW9kZWwhOiBGaWVsZFZpZXdNb2RlbDtcblxuICAgIEBJbnB1dCh7cmVxdWlyZWQ6IHRydWV9KVxuICAgIHNldCBtb2RlbChtOiBGaWVsZFZpZXdNb2RlbCkge1xuICAgICAgICB0aGlzLmZpZWxkVmlld01vZGVsID0gbTtcbiAgICAgICAgdGhpcy5kYXRlUGlja2VyT3B0aW9ucy5jbGFzcyA9IG0gaW5zdGFuY2VvZiBQcm9wZXJ0eVZpZXdNb2RlbCA/ICdkYXRlcGlja2VyLXByb3BlcnR5JyA6ICdkYXRlcGlja2VyLXBhcmFtZXRlcic7XG4gICAgfVxuXG4gICAgZ2V0IG1vZGVsKCk6IEZpZWxkVmlld01vZGVsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmllbGRWaWV3TW9kZWw7XG4gICAgfVxuXG4gICAgQFZpZXdDaGlsZCgnZHAnLCB7c3RhdGljOiBmYWxzZX0pXG4gICAgZGF0ZXBpY2tlcj86IERhdGVQaWNrZXJDb21wb25lbnQ7XG5cbiAgICBpbnB1dEV2ZW50czogRXZlbnRFbWl0dGVyPElEYXRlUGlja2VySW5wdXRFdmVudD47XG5cbiAgICBnZXQgaWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVsLnBhbmVBcmdJZDtcbiAgICB9XG5cbiAgICBnZXQgZGVzY3JpcHRpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVsLmRlc2NyaXB0aW9uO1xuICAgIH1cblxuICAgIHNldFZhbHVlSWZDaGFuZ2VkKGRhdGVNb2RlbDogRGF0ZVRpbWUgfCBudWxsKSB7XG4gICAgICAgIGNvbnN0IG9sZFZhbHVlID0gdGhpcy5jb250cm9sLnZhbHVlO1xuICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IGRhdGVNb2RlbCA/IGRhdGVNb2RlbC50b0Zvcm1hdChmaXhlZERhdGVGb3JtYXQpIDogJyc7XG5cbiAgICAgICAgaWYgKG5ld1ZhbHVlICE9PSBvbGRWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5tb2RlbC5yZXNldE1lc3NhZ2UoKTtcbiAgICAgICAgICAgIHRoaXMubW9kZWwuY2xpZW50VmFsaWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5jb250cm9sLnNldFZhbHVlKG5ld1ZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhhbmRsZURlZmF1bHRFdmVudChkYXRhOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbCkge1xuICAgICAgICAgICAgaWYgKGRhdGEgPT09ICdjbG9zZWQnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0ZU1vZGVsID0gdGhpcy5kYXRlcGlja2VyPy5kYXRlTW9kZWwgPz8gbnVsbDtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFZhbHVlSWZDaGFuZ2VkKGRhdGVNb2RlbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBoYW5kbGVEYXRlQ2hhbmdlZEV2ZW50KGRhdGVNb2RlbDogRGF0ZVRpbWUpIHtcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZUlmQ2hhbmdlZChkYXRlTW9kZWwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGFuZGxlRGF0ZUNsZWFyZWRFdmVudCgpIHtcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbCkge1xuICAgICAgICAgICAgdGhpcy5tb2RlbC5yZXNldE1lc3NhZ2UoKTtcbiAgICAgICAgICAgIHRoaXMubW9kZWwuY2xpZW50VmFsaWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5jb250cm9sLnNldFZhbHVlKCcnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhhbmRsZUludmFsaWREYXRlRXZlbnQoXzogc3RyaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wpIHtcbiAgICAgICAgICAgIHRoaXMubW9kZWwuc2V0SW52YWxpZERhdGUoKTtcbiAgICAgICAgICAgIHRoaXMubW9kZWwuY2xpZW50VmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbC5zZXRFcnJvcnMoeyBbdGhpcy5tb2RlbC5nZXRNZXNzYWdlKCldOiB0cnVlIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGFuZGxlRXZlbnRzKGU6IElEYXRlUGlja2VyT3V0cHV0RXZlbnQpIHtcbiAgICAgICAgc3dpdGNoIChlLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgKCdkZWZhdWx0Jyk6XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVEZWZhdWx0RXZlbnQoZS5kYXRhKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgKCdkYXRlQ2hhbmdlZCcpOlxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlRGF0ZUNoYW5nZWRFdmVudChlLmRhdGEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAoJ2RhdGVDbGVhcmVkJyk6XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVEYXRlQ2xlYXJlZEV2ZW50KCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICgnZGF0ZUludmFsaWQnKTpcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUludmFsaWREYXRlRXZlbnQoZS5kYXRhKTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgZGVmYXVsdDogLy8gaWdub3JlXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nVmFsdWUgPSB0aGlzLmNvbnRyb2wgJiYgdGhpcy5jb250cm9sLnZhbHVlO1xuICAgICAgICBpZiAoZXhpc3RpbmdWYWx1ZSAmJiAoZXhpc3RpbmdWYWx1ZSBpbnN0YW5jZW9mIFN0cmluZyB8fCB0eXBlb2YgZXhpc3RpbmdWYWx1ZSA9PT0gJ3N0cmluZycpKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuaW5wdXRFdmVudHMuZW1pdCh7IHR5cGU6ICdzZXREYXRlJywgZGF0YTogZXhpc3RpbmdWYWx1ZSBhcyBzdHJpbmcsIH0pKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZvY3VzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRlcGlja2VyPy5mb2N1cygpO1xuICAgIH1cbn1cbiIsIjxkaXYgW2Zvcm1Hcm91cF09XCJmb3JtXCI+XG4gICAgPG5vZi1kYXRlLXBpY2tlciAjZHAgW2lkXT1cImlkXCIgW2lucHV0RXZlbnRzXT1cImlucHV0RXZlbnRzXCIgKG91dHB1dEV2ZW50cyk9XCJoYW5kbGVFdmVudHMoJGV2ZW50KVwiICBbb3B0aW9uc109XCJkYXRlUGlja2VyT3B0aW9uc1wiIFtkZXNjcmlwdGlvbl09XCJkZXNjcmlwdGlvblwiPjwvbm9mLWRhdGUtcGlja2VyID5cbjwvZGl2PiAgICAgICAgICAgICAgICAgICAiXX0=