@daypilot/daypilot-lite-angular
Version:
DayPilot Lite for Angular
145 lines • 16.4 kB
JavaScript
import { Component, EventEmitter, Input, Output } from "@angular/core";
import { effect } from '@angular/core';
import { DayPilot } from "./core/daypilot-core";
import { optHash, rand } from "./util";
import * as i0 from "@angular/core";
class DayPilotSchedulerComponent {
control;
viewChange = new EventEmitter();
config;
_requestUpdateFull = false;
_requestUpdateEvents = false;
_requestViewChange = false;
_hashOptions = "";
_hashEvents = "";
_eventsSet = false;
_events = [];
get events() {
if (typeof this._events === 'function') {
return this._events();
}
return this._events;
}
set events(value) {
this._eventsSet = true;
this._events = value;
}
_id = "dp_" + new Date().getTime() + rand();
get configResolved() {
return typeof this.config === 'function' ? this.config() : this.config;
}
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);
}
});
}
async ngOnInit() { }
ngOnDestroy() {
this.dispose();
}
ngAfterViewInit() {
this.control = new DayPilot.Scheduler(this.id);
this.updateOptions();
this.updateEvents();
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();
}
ngDoCheck() {
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;
}
if (this._requestViewChange) {
this._requestViewChange = false;
const args = {};
this.viewChange.emit(args);
}
}
dispose() {
if (this.control) {
this.control.dispose();
//@ts-ignore
this.control = null;
}
}
updateOptions() {
const config = this.configResolved;
const hash = optHash(config);
if (hash !== this._hashOptions) {
const control = this.control;
control.internal.loadOptions(config);
this._requestUpdateFull = true;
this._requestViewChange = true;
}
this._hashOptions = hash;
}
updateEvents() {
if (!this._eventsSet) {
return;
}
const hash = optHash(this.events);
if (hash !== this._hashEvents) {
const control = this.control;
control.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: DayPilotSchedulerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DayPilotSchedulerComponent, selector: "daypilot-scheduler", inputs: { config: "config", events: "events" }, outputs: { viewChange: "viewChange" }, ngImport: i0, template: `
<div id='{{id}}'></div>`, isInline: true, styles: [""] });
}
export { DayPilotSchedulerComponent };
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DayPilotSchedulerComponent, decorators: [{
type: Component,
args: [{ selector: 'daypilot-scheduler', template: `
<div id='{{id}}'></div>` }]
}], ctorParameters: function () { return []; }, propDecorators: { viewChange: [{
type: Output
}], config: [{
type: Input
}], events: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF5cGlsb3Qtc2NoZWR1bGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RheXBpbG90L2RheXBpbG90LWxpdGUtYW5ndWxhci9zcmMvbGliL2RheXBpbG90LXNjaGVkdWxlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFnQixTQUFTLEVBQVcsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ2hILE9BQU8sRUFBRSxNQUFNLEVBQUcsTUFBTSxlQUFlLENBQUM7QUFDeEMsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQzlDLE9BQU8sRUFBQyxPQUFPLEVBQUUsSUFBSSxFQUE0QixNQUFNLFFBQVEsQ0FBQzs7QUFFaEUsTUFNYSwwQkFBMEI7SUFFOUIsT0FBTyxDQUFzQjtJQUMxQixVQUFVLEdBQWdDLElBQUksWUFBWSxFQUFpQixDQUFDO0lBQzdFLE1BQU0sQ0FBc0I7SUFDN0Isa0JBQWtCLEdBQVksS0FBSyxDQUFDO0lBQ3BDLG9CQUFvQixHQUFZLEtBQUssQ0FBQztJQUN0QyxrQkFBa0IsR0FBWSxLQUFLLENBQUM7SUFDcEMsWUFBWSxHQUFXLEVBQUUsQ0FBQztJQUMxQixXQUFXLEdBQVcsRUFBRSxDQUFDO0lBQ3pCLFVBQVUsR0FBWSxLQUFLLENBQUM7SUFFNUIsT0FBTyxHQUF5QyxFQUFFLENBQUM7SUFFM0QsSUFBVyxNQUFNO1FBQ2YsSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFPLEtBQUssVUFBVSxFQUFFO1lBQ3RDLE9BQU8sSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1NBQ3ZCO1FBQ0QsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7SUFFRCxJQUNXLE1BQU0sQ0FBQyxLQUEyQztRQUMzRCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztRQUN2QixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUN2QixDQUFDO0lBRU8sR0FBRyxHQUFXLEtBQUssR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDO0lBRTVELElBQVksY0FBYztRQUN4QixPQUFPLE9BQU8sSUFBSSxDQUFDLE1BQU0sS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUN6RSxDQUFDO0lBRUQsSUFBSSxFQUFFO1FBQ0osT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDO0lBQ2xCLENBQUM7SUFFRDtRQUNFLE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDVixJQUFJLE9BQU8sSUFBSSxDQUFDLE9BQU8sS0FBSyxVQUFVLEVBQUU7Z0JBQ3RDLE9BQU87YUFDUjtZQUNELE1BQU0sT0FBTyxHQUFRLElBQUksQ0FBQyxPQUFPLENBQUM7WUFDbEMsTUFBTSxNQUFNLEdBQVMsSUFBSSxDQUFDLE9BQVEsRUFBRSxDQUFDO1lBQ3JDLElBQUksT0FBTyxFQUFFO2dCQUNULE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUMsTUFBTSxFQUFDLENBQUMsQ0FBQzthQUNsQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUNWLElBQUksT0FBTyxJQUFJLENBQUMsTUFBTSxLQUFLLFVBQVUsRUFBRTtnQkFDckMsT0FBTzthQUNSO1lBQ0QsTUFBTSxPQUFPLEdBQVEsSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUNsQyxNQUFNLE1BQU0sR0FBUyxJQUFJLENBQUMsTUFBTyxFQUFFLENBQUM7WUFDcEMsSUFBSSxPQUFPLEVBQUU7Z0JBQ1QsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDaEM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxLQUFLLENBQUMsUUFBUSxLQUFLLENBQUM7SUFFcEIsV0FBVztRQUNULElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNqQixDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUMsQ0FBQyxzRUFBc0U7UUFDdkcsSUFBSSxDQUFDLG9CQUFvQixHQUFHLEtBQUssQ0FBQyxDQUFDLHNFQUFzRTtRQUN6RyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxTQUFTO1FBRVAsTUFBTSxjQUFjLEdBQUcsT0FBTyxJQUFJLENBQUMsT0FBTyxLQUFLLFVBQVUsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDOUUsTUFBTSxjQUFjLEdBQUcsT0FBTyxJQUFJLENBQUMsTUFBTSxLQUFLLFVBQVUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7UUFFekUsSUFBSSxjQUFjLElBQUksY0FBYyxFQUFFO1lBQ3BDLE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2pCLE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDbkIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1NBQ3RCO1FBQ0QsSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUNuQixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7U0FDckI7UUFFRCxNQUFNLE9BQU8sR0FBUSxJQUFJLENBQUMsT0FBTyxDQUFDO1FBRWxDLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQzNCLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQztZQUNoQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsS0FBSyxDQUFDO1NBQ25DO2FBQU0sSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUU7WUFDcEMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBQyxDQUFDLENBQUM7WUFDOUMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLEtBQUssQ0FBQztTQUNuQztRQUNELElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQzNCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7WUFDaEMsTUFBTSxJQUFJLEdBQVEsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzVCO0lBQ0gsQ0FBQztJQUVPLE9BQU87UUFDYixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDaEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN2QixZQUFZO1lBQ1osSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7U0FDckI7SUFDSCxDQUFDO0lBRU8sYUFBYTtRQUVuQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBRW5DLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3QixJQUFJLElBQUksS0FBSyxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQzlCLE1BQU0sT0FBTyxHQUFRLElBQUksQ0FBQyxPQUFPLENBQUM7WUFDbEMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDckMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQztZQUMvQixJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDO1NBQ2hDO1FBQ0QsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7SUFFM0IsQ0FBQztJQUVPLFlBQVk7UUFDbEIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDcEIsT0FBTztTQUNSO1FBRUQsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNsQyxJQUFJLElBQUksS0FBSyxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQzdCLE1BQU0sT0FBTyxHQUFRLElBQUksQ0FBQyxPQUFPLENBQUM7WUFDbEMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUNsQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDO1NBQ2xDO1FBQ0QsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7SUFDMUIsQ0FBQzt3R0FwSlUsMEJBQTBCOzRGQUExQiwwQkFBMEIsaUpBSjNCOzRCQUNnQjs7U0FHZiwwQkFBMEI7NEZBQTFCLDBCQUEwQjtrQkFOdEMsU0FBUzsrQkFDRSxvQkFBb0IsWUFDcEI7NEJBQ2dCOzBFQU1oQixVQUFVO3NCQUFuQixNQUFNO2dCQUNFLE1BQU07c0JBQWQsS0FBSztnQkFrQkssTUFBTTtzQkFEaEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBEb0NoZWNrLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0fSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgZWZmZWN0ICB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtEYXlQaWxvdH0gZnJvbSBcIi4vY29yZS9kYXlwaWxvdC1jb3JlXCI7XG5pbXBvcnQge29wdEhhc2gsIHJhbmQsIEV2ZW50RGlmZiwgT3B0aW9uYWxTaWduYWx9IGZyb20gXCIuL3V0aWxcIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZGF5cGlsb3Qtc2NoZWR1bGVyJyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGlkPSd7e2lkfX0nPjwvZGl2PmAsXG4gIHN0eWxlczogW2BgXVxufSlcbmV4cG9ydCBjbGFzcyBEYXlQaWxvdFNjaGVkdWxlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0LCBEb0NoZWNrIHtcblxuICBwdWJsaWMgY29udHJvbCE6IERheVBpbG90LlNjaGVkdWxlcjtcbiAgQE91dHB1dCgpIHZpZXdDaGFuZ2U6IEV2ZW50RW1pdHRlcjxEYXlQaWxvdC5EYXRlPiA9IG5ldyBFdmVudEVtaXR0ZXI8RGF5UGlsb3QuRGF0ZT4oKTtcbiAgQElucHV0KCkgY29uZmlnOiBPcHRpb25hbFNpZ25hbDxhbnk+O1xuICBwcml2YXRlIF9yZXF1ZXN0VXBkYXRlRnVsbDogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9yZXF1ZXN0VXBkYXRlRXZlbnRzOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX3JlcXVlc3RWaWV3Q2hhbmdlOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2hhc2hPcHRpb25zOiBzdHJpbmcgPSBcIlwiO1xuICBwcml2YXRlIF9oYXNoRXZlbnRzOiBzdHJpbmcgPSBcIlwiO1xuICBwcml2YXRlIF9ldmVudHNTZXQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBwcml2YXRlIF9ldmVudHM6IE9wdGlvbmFsU2lnbmFsPERheVBpbG90LkV2ZW50RGF0YVtdPiA9IFtdO1xuXG4gIHB1YmxpYyBnZXQgZXZlbnRzKCk6IERheVBpbG90LkV2ZW50RGF0YVtdIHtcbiAgICBpZiAodHlwZW9mIHRoaXMuX2V2ZW50cyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIHRoaXMuX2V2ZW50cygpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fZXZlbnRzO1xuICB9XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBldmVudHModmFsdWU6IE9wdGlvbmFsU2lnbmFsPERheVBpbG90LkV2ZW50RGF0YVtdPikge1xuICAgIHRoaXMuX2V2ZW50c1NldCA9IHRydWU7XG4gICAgdGhpcy5fZXZlbnRzID0gdmFsdWU7XG4gIH1cblxuICBwcml2YXRlIF9pZDogc3RyaW5nID0gXCJkcF9cIiArIG5ldyBEYXRlKCkuZ2V0VGltZSgpICsgcmFuZCgpO1xuXG4gIHByaXZhdGUgZ2V0IGNvbmZpZ1Jlc29sdmVkKCkge1xuICAgIHJldHVybiB0eXBlb2YgdGhpcy5jb25maWcgPT09ICdmdW5jdGlvbicgPyB0aGlzLmNvbmZpZygpIDogdGhpcy5jb25maWc7XG4gIH1cblxuICBnZXQgaWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lkO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5fZXZlbnRzICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNvbnRyb2w6IGFueSA9IHRoaXMuY29udHJvbDtcbiAgICAgIGNvbnN0IGV2ZW50cyA9ICg8YW55PnRoaXMuX2V2ZW50cykoKTtcbiAgICAgIGlmIChjb250cm9sKSB7XG4gICAgICAgICAgY29udHJvbC5pbnRlcm5hbC51cGQoe2V2ZW50c30pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5jb25maWcgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgY29udHJvbDogYW55ID0gdGhpcy5jb250cm9sO1xuICAgICAgY29uc3QgY29uZmlnID0gKDxhbnk+dGhpcy5jb25maWcpKCk7XG4gICAgICBpZiAoY29udHJvbCkge1xuICAgICAgICAgIGNvbnRyb2wuaW50ZXJuYWwudXBkKGNvbmZpZyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBuZ09uSW5pdCgpIHsgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGlzcG9zZSgpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuY29udHJvbCA9IG5ldyBEYXlQaWxvdC5TY2hlZHVsZXIodGhpcy5pZCk7XG4gICAgdGhpcy51cGRhdGVPcHRpb25zKCk7XG4gICAgdGhpcy51cGRhdGVFdmVudHMoKTtcbiAgICB0aGlzLl9yZXF1ZXN0VXBkYXRlRnVsbCA9IGZhbHNlOyAvLyBjb25maWcganVzdCBsb2FkZWQgYW5kIGNhbGxpbmcgaW5pdCgpLCBubyBuZWVkIHRvIGNhbGwgdXBkYXRlIGFnYWluXG4gICAgdGhpcy5fcmVxdWVzdFVwZGF0ZUV2ZW50cyA9IGZhbHNlOyAvLyBjb25maWcganVzdCBsb2FkZWQgYW5kIGNhbGxpbmcgaW5pdCgpLCBubyBuZWVkIHRvIGNhbGwgdXBkYXRlIGFnYWluXG4gICAgdGhpcy5jb250cm9sLmluaXQoKTtcbiAgfVxuXG4gIG5nRG9DaGVjaygpOiB2b2lkIHtcblxuICAgIGNvbnN0IGV2ZW50c0FzU2lnbmFsID0gdHlwZW9mIHRoaXMuX2V2ZW50cyA9PT0gJ2Z1bmN0aW9uJyB8fCAhdGhpcy5fZXZlbnRzU2V0O1xuICAgIGNvbnN0IGNvbmZpZ0FzU2lnbmFsID0gdHlwZW9mIHRoaXMuY29uZmlnID09PSAnZnVuY3Rpb24nIHx8ICF0aGlzLmNvbmZpZztcblxuICAgIGlmIChldmVudHNBc1NpZ25hbCAmJiBjb25maWdBc1NpZ25hbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5jb250cm9sKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFjb25maWdBc1NpZ25hbCkge1xuICAgICAgdGhpcy51cGRhdGVPcHRpb25zKCk7XG4gICAgfVxuICAgIGlmICghZXZlbnRzQXNTaWduYWwpIHtcbiAgICAgIHRoaXMudXBkYXRlRXZlbnRzKCk7XG4gICAgfVxuXG4gICAgY29uc3QgY29udHJvbDogYW55ID0gdGhpcy5jb250cm9sO1xuXG4gICAgaWYgKHRoaXMuX3JlcXVlc3RVcGRhdGVGdWxsKSB7XG4gICAgICBjb250cm9sLmludGVybmFsLnVwZCgpO1xuICAgICAgdGhpcy5fcmVxdWVzdFVwZGF0ZUZ1bGwgPSBmYWxzZTtcbiAgICAgIHRoaXMuX3JlcXVlc3RVcGRhdGVFdmVudHMgPSBmYWxzZTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX3JlcXVlc3RVcGRhdGVFdmVudHMpIHtcbiAgICAgIGNvbnRyb2wuaW50ZXJuYWwudXBkKHtcImV2ZW50c1wiOiB0aGlzLmV2ZW50c30pO1xuICAgICAgdGhpcy5fcmVxdWVzdFVwZGF0ZUV2ZW50cyA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAodGhpcy5fcmVxdWVzdFZpZXdDaGFuZ2UpIHtcbiAgICAgIHRoaXMuX3JlcXVlc3RWaWV3Q2hhbmdlID0gZmFsc2U7XG4gICAgICBjb25zdCBhcmdzOiBhbnkgPSB7fTtcbiAgICAgIHRoaXMudmlld0NoYW5nZS5lbWl0KGFyZ3MpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZGlzcG9zZSgpIHtcbiAgICBpZiAodGhpcy5jb250cm9sKSB7XG4gICAgICB0aGlzLmNvbnRyb2wuZGlzcG9zZSgpO1xuICAgICAgLy9AdHMtaWdub3JlXG4gICAgICB0aGlzLmNvbnRyb2wgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlT3B0aW9ucygpOiB2b2lkIHtcblxuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuY29uZmlnUmVzb2x2ZWQ7XG5cbiAgICBjb25zdCBoYXNoID0gb3B0SGFzaChjb25maWcpO1xuICAgIGlmIChoYXNoICE9PSB0aGlzLl9oYXNoT3B0aW9ucykge1xuICAgICAgY29uc3QgY29udHJvbDogYW55ID0gdGhpcy5jb250cm9sO1xuICAgICAgY29udHJvbC5pbnRlcm5hbC5sb2FkT3B0aW9ucyhjb25maWcpO1xuICAgICAgdGhpcy5fcmVxdWVzdFVwZGF0ZUZ1bGwgPSB0cnVlO1xuICAgICAgdGhpcy5fcmVxdWVzdFZpZXdDaGFuZ2UgPSB0cnVlO1xuICAgIH1cbiAgICB0aGlzLl9oYXNoT3B0aW9ucyA9IGhhc2g7XG5cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlRXZlbnRzKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fZXZlbnRzU2V0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaGFzaCA9IG9wdEhhc2godGhpcy5ldmVudHMpO1xuICAgIGlmIChoYXNoICE9PSB0aGlzLl9oYXNoRXZlbnRzKSB7XG4gICAgICBjb25zdCBjb250cm9sOiBhbnkgPSB0aGlzLmNvbnRyb2w7XG4gICAgICBjb250cm9sLmV2ZW50cy5saXN0ID0gdGhpcy5ldmVudHM7XG4gICAgICB0aGlzLl9yZXF1ZXN0VXBkYXRlRXZlbnRzID0gdHJ1ZTtcbiAgICB9XG4gICAgdGhpcy5faGFzaEV2ZW50cyA9IGhhc2g7XG4gIH1cbn1cbiJdfQ==