UNPKG

@daypilot/daypilot-lite-angular

Version:

DayPilot Lite for Angular

183 lines 20.2 kB
import { Component, effect, EventEmitter, Input, Output } from "@angular/core"; import { DayPilot } from "./core/daypilot-core"; import { optHash, rand } from "./util"; import * as i0 from "@angular/core"; class DayPilotNavigatorComponent { config; dateChange = new EventEmitter(); control; _requestUpdateFull = false; _requestUpdateEvents = false; _hashOptions = ""; _hashEvents = ""; _onTrs = null; _dateSet = false; _currentDate = null; _eventsSet = false; _date = DayPilot.Date.today(); get date() { return this._date; } // @Input() date: DayPilot.Date = DayPilot.Date.today(); set date(value) { this._date = value; this._dateSet = true; } _events = []; get events() { if (typeof this._events === 'function') { return this._events(); } return this._events; } set events(value) { this._eventsSet = true; this._events = value; } get configResolved() { return typeof this.config === 'function' ? this.config() : this.config; } _id = "dp_" + new Date().getTime() + rand(); get id() { return this._id; } constructor() { effect(() => { if (typeof this._events !== 'function') { return; } const control = this.control; const events = this._events(); if (control) { control.internal.upd({ events }); } }); effect(() => { if (typeof this.config !== 'function') { return; } const control = this.control; const config = this.config(); if (control) { control.internal.upd(config); } }); } ngOnInit() { } ngOnDestroy() { this.dispose(); } ngAfterViewInit() { this.dispose(); this.control = new DayPilot.Navigator(this.id); let component = this; this.updateOptions(); this.updateEvents(); let dp = this.control; this.control.onTimeRangeSelected = function (args) { // emit event component.dateChange.emit(args.day); // call the original if (component._onTrs) { component._onTrs.call(dp, args); } }; this._requestUpdateFull = false; // config just loaded and calling init(), no need to call update again this._requestUpdateEvents = false; // config just loaded and calling init(), no need to call update again this.control.init(); if (this.control.selectionDay !== DayPilot.Date.today()) { component.dateChange.emit(this.control.selectionDay); } } ngDoCheck() { if (!this.control) { return; } const eventsAsSignal = typeof this._events === 'function' || !this._eventsSet; const configAsSignal = typeof this.config === 'function' || !this.config; if (eventsAsSignal && configAsSignal) { return; } if (!this.control) { return; } if (!configAsSignal) { this.updateOptions(); } if (!eventsAsSignal) { this.updateEvents(); } const control = this.control; if (this._requestUpdateFull) { control.internal.upd(); this._requestUpdateFull = false; this._requestUpdateEvents = false; } else if (this._requestUpdateEvents) { control.internal.upd({ "events": this.events }); this._requestUpdateEvents = false; } } dispose() { if (this.control) { this.control.dispose(); //@ts-ignore this.control = null; } } updateOptions() { let dp = this.control; const config = this.configResolved; let hash = optHash(this.config); if (hash !== this._hashOptions) { for (let name in config) { if (name === "selectionDay") { continue; // ignore } if (name === "onTimeRangeSelected") { this._onTrs = this.config.onTimeRangeSelected; } else { dp[name] = config[name]; } this._requestUpdateFull = true; } } if (this._dateSet && this.date) { this._dateSet = false; this._currentDate = dp.selectionDay; dp.select(this.date); } this._hashOptions = hash; } updateEvents() { const hash = optHash(this.events); if (hash !== this._hashEvents) { const dp = this.control; if (dp) { dp.events.list = this.events; } this._requestUpdateEvents = true; } this._hashEvents = hash; } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DayPilotNavigatorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DayPilotNavigatorComponent, selector: "daypilot-navigator", inputs: { config: "config", date: "date", events: "events" }, outputs: { dateChange: "dateChange" }, ngImport: i0, template: ` <div id='{{id}}'></div>`, isInline: true, styles: [""] }); } export { DayPilotNavigatorComponent }; i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DayPilotNavigatorComponent, decorators: [{ type: Component, args: [{ selector: 'daypilot-navigator', template: ` <div id='{{id}}'></div>` }] }], ctorParameters: function () { return []; }, propDecorators: { config: [{ type: Input }], dateChange: [{ type: Output }], date: [{ type: Input }], events: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF5cGlsb3QtbmF2aWdhdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RheXBpbG90L2RheXBpbG90LWxpdGUtYW5ndWxhci9zcmMvbGliL2RheXBpbG90LW5hdmlnYXRvci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFnQixTQUFTLEVBQVcsTUFBTSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN4SCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDOUMsT0FBTyxFQUFDLE9BQU8sRUFBa0IsSUFBSSxFQUFDLE1BQU0sUUFBUSxDQUFDOztBQUVyRCxNQU1hLDBCQUEwQjtJQUU1QixNQUFNLENBQXNCO0lBQzNCLFVBQVUsR0FBZ0MsSUFBSSxZQUFZLEVBQWlCLENBQUM7SUFDL0UsT0FBTyxDQUFzQjtJQUM1QixrQkFBa0IsR0FBWSxLQUFLLENBQUM7SUFDcEMsb0JBQW9CLEdBQVksS0FBSyxDQUFDO0lBQ3RDLFlBQVksR0FBVyxFQUFFLENBQUM7SUFDMUIsV0FBVyxHQUFXLEVBQUUsQ0FBQztJQUN6QixNQUFNLEdBQVEsSUFBSSxDQUFDO0lBQ25CLFFBQVEsR0FBWSxLQUFLLENBQUM7SUFDMUIsWUFBWSxHQUF5QixJQUFJLENBQUM7SUFDMUMsVUFBVSxHQUFZLEtBQUssQ0FBQztJQUc1QixLQUFLLEdBQWtCLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFFckQsSUFBVyxJQUFJO1FBQ2IsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFFRCx3REFBd0Q7SUFDeEQsSUFDVyxJQUFJLENBQUMsS0FBb0I7UUFDbEMsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENB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QUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3RCO1FBRUQsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7SUFDM0IsQ0FBQztJQUVPLFlBQVk7UUFDbEIsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNsQyxJQUFJLElBQUksS0FBSyxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQzdCLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7WUFDeEIsSUFBSSxFQUFFLEVBQUU7Z0JBQ04sRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQzthQUM5QjtZQUNELElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUM7U0FDbEM7UUFDRCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztJQUMxQixDQUFDO3dHQWxNVSwwQkFBMEI7NEZBQTFCLDBCQUEwQiwrSkFKM0I7NEJBQ2dCOztTQUdmLDBCQUEwQjs0RkFBMUIsMEJBQTBCO2tCQU50QyxTQUFTOytCQUNFLG9CQUFvQixZQUNwQjs0QkFDZ0I7MEVBS2pCLE1BQU07c0JBQWQsS0FBSztnQkFDSSxVQUFVO3NCQUFuQixNQUFNO2dCQW9CSSxJQUFJO3NCQURkLEtBQUs7Z0JBZ0JLLE1BQU07c0JBRGhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0FmdGVyVmlld0luaXQsIENvbXBvbmVudCwgRG9DaGVjaywgZWZmZWN0LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0fSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHtEYXlQaWxvdH0gZnJvbSBcIi4vY29yZS9kYXlwaWxvdC1jb3JlXCI7XG5pbXBvcnQge29wdEhhc2gsIE9wdGlvbmFsU2lnbmFsLCByYW5kfSBmcm9tIFwiLi91dGlsXCI7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2RheXBpbG90LW5hdmlnYXRvcicsXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBpZD0ne3tpZH19Jz48L2Rpdj5gLFxuICBzdHlsZXM6IFtgYF1cbn0pXG5leHBvcnQgY2xhc3MgRGF5UGlsb3ROYXZpZ2F0b3JDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCwgRG9DaGVjayB7XG5cbiAgQElucHV0KCkgY29uZmlnOiBPcHRpb25hbFNpZ25hbDxhbnk+O1xuICBAT3V0cHV0KCkgZGF0ZUNoYW5nZTogRXZlbnRFbWl0dGVyPERheVBpbG90LkRhdGU+ID0gbmV3IEV2ZW50RW1pdHRlcjxEYXlQaWxvdC5EYXRlPigpO1xuICBwdWJsaWMgY29udHJvbCE6IERheVBpbG90Lk5hdmlnYXRvcjtcbiAgcHJpdmF0ZSBfcmVxdWVzdFVwZGF0ZUZ1bGw6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfcmVxdWVzdFVwZGF0ZUV2ZW50czogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9oYXNoT3B0aW9uczogc3RyaW5nID0gXCJcIjtcbiAgcHJpdmF0ZSBfaGFzaEV2ZW50czogc3RyaW5nID0gXCJcIjtcbiAgcHJpdmF0ZSBfb25UcnM6IGFueSA9IG51bGw7XG4gIHByaXZhdGUgX2RhdGVTZXQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfY3VycmVudERhdGU6IERheVBpbG90LkRhdGUgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBfZXZlbnRzU2V0OiBib29sZWFuID0gZmFsc2U7XG5cblxuICBwcml2YXRlIF9kYXRlOiBEYXlQaWxvdC5EYXRlID0gRGF5UGlsb3QuRGF0ZS50b2RheSgpO1xuXG4gIHB1YmxpYyBnZXQgZGF0ZSgpOiBEYXlQaWxvdC5EYXRlIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0ZTtcbiAgfVxuXG4gIC8vIEBJbnB1dCgpIGRhdGU6IERheVBpbG90LkRhdGUgPSBEYXlQaWxvdC5EYXRlLnRvZGF5KCk7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZGF0ZSh2YWx1ZTogRGF5UGlsb3QuRGF0ZSkge1xuICAgIHRoaXMuX2RhdGUgPSB2YWx1ZTtcbiAgICB0aGlzLl9kYXRlU2V0ID0gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgX2V2ZW50czogT3B0aW9uYWxTaWduYWw8RGF5UGlsb3QuRXZlbnREYXRhW10+ID0gW107XG5cbiAgcHVibGljIGdldCBldmVudHMoKTogRGF5UGlsb3QuRXZlbnREYXRhW10ge1xuICAgIGlmICh0eXBlb2YgdGhpcy5fZXZlbnRzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZXZlbnRzKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9ldmVudHM7XG4gIH1cblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGV2ZW50cyh2YWx1ZTogT3B0aW9uYWxTaWduYWw8RGF5UGlsb3QuRXZlbnREYXRhW10+KSB7XG4gICAgdGhpcy5fZXZlbnRzU2V0ID0gdHJ1ZTtcbiAgICB0aGlzLl9ldmVudHMgPSB2YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGNvbmZpZ1Jlc29sdmVkKCkge1xuICAgIHJldHVybiB0eXBlb2YgdGhpcy5jb25maWcgPT09ICdmdW5jdGlvbicgPyB0aGlzLmNvbmZpZygpIDogdGhpcy5jb25maWc7XG4gIH1cblxuXG4gIHByaXZhdGUgX2lkOiBzdHJpbmcgPSBcImRwX1wiICsgbmV3IERhdGUoKS5nZXRUaW1lKCkgKyByYW5kKCk7XG5cbiAgZ2V0IGlkKCkge1xuICAgIHJldHVybiB0aGlzLl9pZDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBpZiAodHlwZW9mIHRoaXMuX2V2ZW50cyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBjb250cm9sOiBhbnkgPSB0aGlzLmNvbnRyb2w7XG4gICAgICBjb25zdCBldmVudHMgPSAoPGFueT50aGlzLl9ldmVudHMpKCk7XG4gICAgICBpZiAoY29udHJvbCkge1xuICAgICAgICBjb250cm9sLmludGVybmFsLnVwZCh7ZXZlbnRzfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbmZpZyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBjb250cm9sOiBhbnkgPSB0aGlzLmNvbnRyb2w7XG4gICAgICBjb25zdCBjb25maWcgPSAoPGFueT50aGlzLmNvbmZpZykoKTtcbiAgICAgIGlmIChjb250cm9sKSB7XG4gICAgICAgIGNvbnRyb2wuaW50ZXJuYWwudXBkKGNvbmZpZyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGlzcG9zZSgpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZGlzcG9zZSgpO1xuICAgIHRoaXMuY29udHJvbCA9IG5ldyBEYXlQaWxvdC5OYXZpZ2F0b3IodGhpcy5pZCk7XG4gICAgbGV0IGNvbXBvbmVudCA9IHRoaXM7XG5cbiAgICB0aGlzLnVwZGF0ZU9wdGlvbnMoKTtcbiAgICB0aGlzLnVwZGF0ZUV2ZW50cygpO1xuICAgIGxldCBkcCA9IHRoaXMuY29udHJvbDtcbiAgICB0aGlzLmNvbnRyb2wub25UaW1lUmFuZ2VTZWxlY3RlZCA9IGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAvLyBlbWl0IGV2ZW50XG4gICAgICBjb21wb25lbnQuZGF0ZUNoYW5nZS5lbWl0KGFyZ3MuZGF5KTtcbiAgICAgIC8vIGNhbGwgdGhlIG9yaWdpbmFsXG4gICAgICBpZiAoY29tcG9uZW50Ll9vblRycykge1xuICAgICAgICBjb21wb25lbnQuX29uVHJzLmNhbGwoZHAsIGFyZ3MpO1xuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5fcmVxdWVzdFVwZGF0ZUZ1bGwgPSBmYWxzZTsgLy8gY29uZmlnIGp1c3QgbG9hZGVkIGFuZCBjYWxsaW5nIGluaXQoKSwgbm8gbmVlZCB0byBjYWxsIHVwZGF0ZSBhZ2FpblxuICAgIHRoaXMuX3JlcXVlc3RVcGRhdGVFdmVudHMgPSBmYWxzZTsgLy8gY29uZmlnIGp1c3QgbG9hZGVkIGFuZCBjYWxsaW5nIGluaXQoKSwgbm8gbmVlZCB0byBjYWxsIHVwZGF0ZSBhZ2FpblxuICAgIHRoaXMuY29udHJvbC5pbml0KCk7XG5cbiAgICBpZiAodGhpcy5jb250cm9sLnNlbGVjdGlvbkRheSAhPT0gRGF5UGlsb3QuRGF0ZS50b2RheSgpKSB7XG4gICAgICBjb21wb25lbnQuZGF0ZUNoYW5nZS5lbWl0KHRoaXMuY29udHJvbC5zZWxlY3Rpb25EYXkpO1xuICAgIH1cblxuICB9XG5cbiAgbmdEb0NoZWNrKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jb250cm9sKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZXZlbnRzQXNTaWduYWwgPSB0eXBlb2YgdGhpcy5fZXZlbnRzID09PSAnZnVuY3Rpb24nIHx8ICF0aGlzLl9ldmVudHNTZXQ7XG4gICAgY29uc3QgY29uZmlnQXNTaWduYWwgPSB0eXBlb2YgdGhpcy5jb25maWcgPT09ICdmdW5jdGlvbicgfHwgIXRoaXMuY29uZmlnO1xuXG4gICAgaWYgKGV2ZW50c0FzU2lnbmFsICYmIGNvbmZpZ0FzU2lnbmFsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmNvbnRyb2wpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIWNvbmZpZ0FzU2lnbmFsKSB7XG4gICAgICB0aGlzLnVwZGF0ZU9wdGlvbnMoKTtcbiAgICB9XG4gICAgaWYgKCFldmVudHNBc1NpZ25hbCkge1xuICAgICAgdGhpcy51cGRhdGVFdmVudHMoKTtcbiAgICB9XG5cbiAgICBjb25zdCBjb250cm9sOiBhbnkgPSB0aGlzLmNvbnRyb2w7XG5cbiAgICBpZiAodGhpcy5fcmVxdWVzdFVwZGF0ZUZ1bGwpIHtcbiAgICAgIGNvbnRyb2wuaW50ZXJuYWwudXBkKCk7XG4gICAgICB0aGlzLl9yZXF1ZXN0VXBkYXRlRnVsbCA9IGZhbHNlO1xuICAgICAgdGhpcy5fcmVxdWVzdFVwZGF0ZUV2ZW50cyA9IGZhbHNlO1xuICAgIH1cbiAgICBlbHNlIGlmICh0aGlzLl9yZXF1ZXN0VXBkYXRlRXZlbnRzKSB7XG4gICAgICBjb250cm9sLmludGVybmFsLnVwZCh7IFwiZXZlbnRzXCI6IHRoaXMuZXZlbnRzIH0pO1xuICAgICAgdGhpcy5fcmVxdWVzdFVwZGF0ZUV2ZW50cyA9IGZhbHNlO1xuICAgIH1cblxuICB9XG5cbiAgcHJpdmF0ZSBkaXNwb3NlKCkge1xuICAgIGlmICh0aGlzLmNvbnRyb2wpIHtcbiAgICAgIHRoaXMuY29udHJvbC5kaXNwb3NlKCk7XG4gICAgICAvL0B0cy1pZ25vcmVcbiAgICAgIHRoaXMuY29udHJvbCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVPcHRpb25zKCk6IHZvaWQge1xuICAgIGxldCBkcCA9IHRoaXMuY29udHJvbCBhcyBhbnk7XG4gICAgY29uc3QgY29uZmlnID0gdGhpcy5jb25maWdSZXNvbHZlZDtcbiAgICBsZXQgaGFzaCA9IG9wdEhhc2godGhpcy5jb25maWcpO1xuXG4gICAgaWYgKGhhc2ggIT09IHRoaXMuX2hhc2hPcHRpb25zKSB7XG4gICAgICBmb3IgKGxldCBuYW1lIGluIGNvbmZpZykge1xuICAgICAgICBpZiAobmFtZSA9PT0gXCJzZWxlY3Rpb25EYXlcIikge1xuICAgICAgICAgIGNvbnRpbnVlOyAvLyBpZ25vcmVcbiAgICAgICAgfVxuICAgICAgICBpZiAobmFtZSA9PT0gXCJvblRpbWVSYW5nZVNlbGVjdGVkXCIpIHtcbiAgICAgICAgICB0aGlzLl9vblRycyA9IHRoaXMuY29uZmlnLm9uVGltZVJhbmdlU2VsZWN0ZWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZHBbbmFtZV0gPSBjb25maWdbbmFtZV07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fcmVxdWVzdFVwZGF0ZUZ1bGwgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9kYXRlU2V0ICYmIHRoaXMuZGF0ZSkge1xuICAgICAgdGhpcy5fZGF0ZVNldCA9IGZhbHNlO1xuICAgICAgdGhpcy5fY3VycmVudERhdGUgPSBkcC5zZWxlY3Rpb25EYXk7XG4gICAgICBkcC5zZWxlY3QodGhpcy5kYXRlKTtcbiAgICB9XG5cbiAgICB0aGlzLl9oYXNoT3B0aW9ucyA9IGhhc2g7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUV2ZW50cygpOiB2b2lkIHtcbiAgICBjb25zdCBoYXNoID0gb3B0SGFzaCh0aGlzLmV2ZW50cyk7XG4gICAgaWYgKGhhc2ggIT09IHRoaXMuX2hhc2hFdmVudHMpIHtcbiAgICAgIGNvbnN0IGRwID0gdGhpcy5jb250cm9sO1xuICAgICAgaWYgKGRwKSB7XG4gICAgICAgIGRwLmV2ZW50cy5saXN0ID0gdGhpcy5ldmVudHM7XG4gICAgICB9XG4gICAgICB0aGlzLl9yZXF1ZXN0VXBkYXRlRXZlbnRzID0gdHJ1ZTtcbiAgICB9XG4gICAgdGhpcy5faGFzaEV2ZW50cyA9IGhhc2g7XG4gIH1cbn1cbiJdfQ==