com.phloxui
Version:
PhloxUI Ng2+ Framework
541 lines (540 loc) • 36.5 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
import * as tslib_1 from "tslib";
import { EventEmitter } from '@angular/core';
import { AbstractHasDataHelp } from './AbstractHasDataHelp';
import { Option } from '../decorator/Option.decorator';
import { EventUtils } from '../share/utils/EventUtils';
import { BEFORE_RESULT_CHANGE_EVENT, BEFORE_ERROR_CHANGE_EVENT, BEFORE_BUTTONS_CHANGE_EVENT, RESULT_CHANGE_EVENT, ERROR_CHANGE_EVENT, BUTTONS_CHANGE_EVENT } from '../share/CustomEventType';
/**
* <p style="text-indent: 2em;">
* An abstract base class of [[IDialogController]] interface. All dialog component classes, including <code>custom component</code>
* classes used in [[ComponentDialog]], should extend this class. Hence, if you want to build a <code>custom dialog</code>, you should
* use this class as a base class for the custom <code>component type</code> being used as [[ComponentDialog]]'s body component.
* </p>
*
* @author shiorin, tee4cute
* @see [[PhloxDialog]]
* @abstract
*/
var AbstractDialogController = /** @class */ (function (_super) {
tslib_1.__extends(AbstractDialogController, _super);
function AbstractDialogController(elementRef) {
var _this = _super.call(this, elementRef) || this;
_this.beforeResultChangeEvent = new EventEmitter();
_this.resultChangeEvent = new EventEmitter();
_this.beforeErrorChangeEvent = new EventEmitter();
_this.errorChangeEvent = new EventEmitter();
_this.beforeButtonsChangeEvent = new EventEmitter();
_this.buttonsChangeEvent = new EventEmitter();
return _this;
}
/**
* @return {?}
*/
AbstractDialogController.prototype.ngOnInit = /**
* @return {?}
*/
function () {
_super.prototype.ngOnInit.call(this);
};
/**
* @param {?} oldValue
* @param {?} newValue
* @return {?}
*/
AbstractDialogController.prototype.emitBeforeResultChangeEvent = /**
* @param {?} oldValue
* @param {?} newValue
* @return {?}
*/
function (oldValue, newValue) {
var /** @type {?} */ data = {
oldValue: oldValue,
newValue: newValue
};
var /** @type {?} */ ev = EventUtils.newCustomEvent(BEFORE_RESULT_CHANGE_EVENT, this, data, null);
if (this.beforeResultChangeEvent !== null && this.beforeResultChangeEvent !== undefined) {
this.beforeResultChangeEvent.emit(ev);
}
};
/**
* @param {?} oldValue
* @param {?} newValue
* @return {?}
*/
AbstractDialogController.prototype.emitResultChangeEvent = /**
* @param {?} oldValue
* @param {?} newValue
* @return {?}
*/
function (oldValue, newValue) {
var /** @type {?} */ data = {
oldValue: oldValue,
newValue: newValue
};
var /** @type {?} */ ev = EventUtils.newCustomEvent(RESULT_CHANGE_EVENT, this, data, null);
if (this.resultChangeEvent !== null && this.resultChangeEvent !== undefined) {
this.resultChangeEvent.emit(ev);
}
};
/**
* @param {?} oldValue
* @param {?} newValue
* @return {?}
*/
AbstractDialogController.prototype.emitBeforeErrorChangeEvent = /**
* @param {?} oldValue
* @param {?} newValue
* @return {?}
*/
function (oldValue, newValue) {
var /** @type {?} */ data = {
oldValue: oldValue,
newValue: newValue
};
var /** @type {?} */ ev = EventUtils.newCustomEvent(BEFORE_ERROR_CHANGE_EVENT, this, data, null);
if (this.beforeErrorChangeEvent !== null && this.beforeErrorChangeEvent !== undefined) {
this.beforeErrorChangeEvent.emit(ev);
}
};
/**
* @param {?} oldValue
* @param {?} newValue
* @return {?}
*/
AbstractDialogController.prototype.emitErrorChangeEvent = /**
* @param {?} oldValue
* @param {?} newValue
* @return {?}
*/
function (oldValue, newValue) {
var /** @type {?} */ data = {
oldValue: oldValue,
newValue: newValue
};
var /** @type {?} */ ev = EventUtils.newCustomEvent(ERROR_CHANGE_EVENT, this, data, null);
if (this.errorChangeEvent !== null && this.errorChangeEvent !== undefined) {
this.errorChangeEvent.emit(ev);
}
};
/**
* @param {?} oldValue
* @param {?} newValue
* @return {?}
*/
AbstractDialogController.prototype.emitBeforeButtonsChangeEvent = /**
* @param {?} oldValue
* @param {?} newValue
* @return {?}
*/
function (oldValue, newValue) {
var /** @type {?} */ data = {
oldValue: oldValue,
newValue: newValue
};
var /** @type {?} */ ev = EventUtils.newCustomEvent(BEFORE_BUTTONS_CHANGE_EVENT, this, data, null);
if (this.beforeButtonsChangeEvent !== null && this.beforeButtonsChangeEvent !== undefined) {
this.beforeButtonsChangeEvent.emit(ev);
}
};
/**
* @param {?} oldValue
* @param {?} newValue
* @return {?}
*/
AbstractDialogController.prototype.emitButtonsChangeEvent = /**
* @param {?} oldValue
* @param {?} newValue
* @return {?}
*/
function (oldValue, newValue) {
var /** @type {?} */ data = {
oldValue: oldValue,
newValue: newValue
};
var /** @type {?} */ ev = EventUtils.newCustomEvent(BUTTONS_CHANGE_EVENT, this, data, null);
if (this.buttonsChangeEvent !== null && this.buttonsChangeEvent !== undefined) {
this.buttonsChangeEvent.emit(ev);
}
};
Object.defineProperty(AbstractDialogController.prototype, "result", {
get: /**
* @return {?}
*/
function () {
return this._result;
},
set: /**
* @param {?} result
* @return {?}
*/
function (result) {
var _this = this;
if (this._result === result) {
return;
}
var /** @type {?} */ oldValue = this._result;
EventUtils.handleBrowserEvent(this, 'beforeResultChangeEvent', undefined, true, function ($event) {
// doEvent
// doEvent
_this._result = result;
}, function ($event) {
// emitBeforeEvent
// emitBeforeEvent
_this.emitBeforeResultChangeEvent(oldValue, result);
}, function ($event) {
// emitAfterEvent
// emitAfterEvent
_this.emitResultChangeEvent(oldValue, result);
}, function ($event) {
// doPrevented
});
},
enumerable: true,
configurable: true
});
Object.defineProperty(AbstractDialogController.prototype, "error", {
get: /**
* @return {?}
*/
function () {
return this._error;
},
set: /**
* @param {?} error
* @return {?}
*/
function (error) {
var _this = this;
if (this._error === error) {
return;
}
var /** @type {?} */ oldValue = this._error;
EventUtils.handleBrowserEvent(this, 'beforeErrorChangeEvent', undefined, true, function ($event) {
// doEvent
// doEvent
_this._error = error;
}, function ($event) {
// emitBeforeEvent
// emitBeforeEvent
_this.emitBeforeErrorChangeEvent(oldValue, error);
}, function ($event) {
// emitAfterEvent
// emitAfterEvent
_this.emitErrorChangeEvent(oldValue, error);
}, function ($event) {
// doPrevented
});
},
enumerable: true,
configurable: true
});
Object.defineProperty(AbstractDialogController.prototype, "dialogButtons", {
get: /**
* @return {?}
*/
function () {
return this._buttons;
},
set: /**
* @param {?} buttons
* @return {?}
*/
function (buttons) {
var _this = this;
if (this._buttons === buttons) {
return;
}
var /** @type {?} */ oldValue = this._buttons;
EventUtils.handleBrowserEvent(this, 'beforeButtonsChangeEvent', undefined, true, function ($event) {
// doEvent
// doEvent
_this._buttons = buttons;
}, function ($event) {
// emitBeforeEvent
// emitBeforeEvent
_this.emitBeforeButtonsChangeEvent(oldValue, buttons);
}, function ($event) {
// emitAfterEvent
// emitAfterEvent
_this.emitButtonsChangeEvent(oldValue, buttons);
}, function ($event) {
// doPrevented
});
},
enumerable: true,
configurable: true
});
/**
* @return {?}
*/
AbstractDialogController.prototype.getDialogResult = /**
* @return {?}
*/
function () {
return this.result;
};
/**
* @param {?} result
* @return {?}
*/
AbstractDialogController.prototype.setDialogResult = /**
* @param {?} result
* @return {?}
*/
function (result) {
this.result = result;
};
/**
* @return {?}
*/
AbstractDialogController.prototype.getDialogError = /**
* @return {?}
*/
function () {
return this.error;
};
/**
* @param {?} error
* @return {?}
*/
AbstractDialogController.prototype.setDialogError = /**
* @param {?} error
* @return {?}
*/
function (error) {
this.error = error;
};
/**
* @return {?}
*/
AbstractDialogController.prototype.getDialogButtons = /**
* @return {?}
*/
function () {
return this.dialogButtons;
};
/**
* @param {?} dialogButtons
* @return {?}
*/
AbstractDialogController.prototype.setDialogButtons = /**
* @param {?} dialogButtons
* @return {?}
*/
function (dialogButtons) {
this.dialogButtons = dialogButtons;
};
/**
* @return {?}
*/
AbstractDialogController.prototype.getBeforeResultChangeEvent = /**
* @return {?}
*/
function () {
return this.beforeResultChangeEvent;
};
/**
* @param {?} event
* @return {?}
*/
AbstractDialogController.prototype.setBeforeResultChangeEvent = /**
* @param {?} event
* @return {?}
*/
function (event) {
this.beforeResultChangeEvent = event;
};
/**
* @return {?}
*/
AbstractDialogController.prototype.getResultChangeEvent = /**
* @return {?}
*/
function () {
return this.resultChangeEvent;
};
/**
* @param {?} event
* @return {?}
*/
AbstractDialogController.prototype.setResultChangeEvent = /**
* @param {?} event
* @return {?}
*/
function (event) {
this.resultChangeEvent = event;
};
/**
* @return {?}
*/
AbstractDialogController.prototype.getBeforeErrorChangeEvent = /**
* @return {?}
*/
function () {
return this.beforeErrorChangeEvent;
};
/**
* @param {?} event
* @return {?}
*/
AbstractDialogController.prototype.setBeforeErrorChangeEvent = /**
* @param {?} event
* @return {?}
*/
function (event) {
this.beforeErrorChangeEvent = event;
};
/**
* @return {?}
*/
AbstractDialogController.prototype.getErrorChangeEvent = /**
* @return {?}
*/
function () {
return this.errorChangeEvent;
};
/**
* @param {?} event
* @return {?}
*/
AbstractDialogController.prototype.setErrorChangeEvent = /**
* @param {?} event
* @return {?}
*/
function (event) {
this.errorChangeEvent = event;
};
/**
* @return {?}
*/
AbstractDialogController.prototype.getBeforeButtonsChangeEvent = /**
* @return {?}
*/
function () {
return this.beforeButtonsChangeEvent;
};
/**
* @param {?} event
* @return {?}
*/
AbstractDialogController.prototype.setBeforeButtonsChangeEvent = /**
* @param {?} event
* @return {?}
*/
function (event) {
this.beforeButtonsChangeEvent = event;
};
/**
* @return {?}
*/
AbstractDialogController.prototype.getButtonsChangeEvent = /**
* @return {?}
*/
function () {
return this.buttonsChangeEvent;
};
/**
* @param {?} event
* @return {?}
*/
AbstractDialogController.prototype.setButtonsChangeEvent = /**
* @param {?} event
* @return {?}
*/
function (event) {
this.buttonsChangeEvent = event;
};
/**
* @return {?}
*/
AbstractDialogController.prototype.doPreload = /**
* @return {?}
*/
function () { return new Promise(function (resolve, reject) { resolve(null); }); };
/**
* @return {?}
*/
AbstractDialogController.prototype.doLoaded = /**
* @return {?}
*/
function () {
};
/**
* @return {?}
*/
AbstractDialogController.prototype.isSelfDataDirty = /**
* @return {?}
*/
function () {
return false;
};
/**
* @param {?} data
* @return {?}
*/
AbstractDialogController.prototype.selfSaveData = /**
* @param {?} data
* @return {?}
*/
function (data) {
};
/**
* @return {?}
*/
AbstractDialogController.prototype.selfResetData = /**
* @return {?}
*/
function () {
};
tslib_1.__decorate([
Option('beforeResultChange'),
tslib_1.__metadata("design:type", EventEmitter)
], AbstractDialogController.prototype, "beforeResultChangeEvent", void 0);
tslib_1.__decorate([
Option('resultChange'),
tslib_1.__metadata("design:type", EventEmitter)
], AbstractDialogController.prototype, "resultChangeEvent", void 0);
tslib_1.__decorate([
Option('beforeErrorChange'),
tslib_1.__metadata("design:type", EventEmitter)
], AbstractDialogController.prototype, "beforeErrorChangeEvent", void 0);
tslib_1.__decorate([
Option('errorChange'),
tslib_1.__metadata("design:type", EventEmitter)
], AbstractDialogController.prototype, "errorChangeEvent", void 0);
tslib_1.__decorate([
Option('beforeButtonsChange'),
tslib_1.__metadata("design:type", EventEmitter)
], AbstractDialogController.prototype, "beforeButtonsChangeEvent", void 0);
tslib_1.__decorate([
Option('buttonsChange'),
tslib_1.__metadata("design:type", EventEmitter)
], AbstractDialogController.prototype, "buttonsChangeEvent", void 0);
return AbstractDialogController;
}(AbstractHasDataHelp));
export { AbstractDialogController };
function AbstractDialogController_tsickle_Closure_declarations() {
/** @type {?} */
AbstractDialogController.prototype._result;
/** @type {?} */
AbstractDialogController.prototype._error;
/** @type {?} */
AbstractDialogController.prototype._buttons;
/** @type {?} */
AbstractDialogController.prototype.beforeResultChangeEvent;
/** @type {?} */
AbstractDialogController.prototype.resultChangeEvent;
/** @type {?} */
AbstractDialogController.prototype.beforeErrorChangeEvent;
/** @type {?} */
AbstractDialogController.prototype.errorChangeEvent;
/** @type {?} */
AbstractDialogController.prototype.beforeButtonsChangeEvent;
/** @type {?} */
AbstractDialogController.prototype.buttonsChangeEvent;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWJzdHJhY3REaWFsb2dDb250cm9sbGVyLmpzIiwic291cmNlUm9vdCI6Im5nOi8vY29tLnBobG94dWkvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50L0Fic3RyYWN0RGlhbG9nQ29udHJvbGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBVSxZQUFZLEVBQWMsTUFBTSxlQUFlLENBQUM7QUFJakUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDNUQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN2RCxPQUFPLEVBQ0wsMEJBQTBCLEVBQUUseUJBQXlCLEVBQUUsMkJBQTJCLEVBQ2xGLG1CQUFtQixFQUFFLGtCQUFrQixFQUFFLG9CQUFvQixFQUM5RCxNQUFNLDBCQUEwQixDQUFDOzs7Ozs7Ozs7Ozs7O0lBWXFCLG9EQUFtQjtJQW1CeEUsa0NBQVksVUFBc0I7UUFBbEMsWUFDRSxrQkFBTSxVQUFVLENBQUMsU0FRbEI7UUFOQyxLQUFJLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNsRCxLQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUM1QyxLQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNqRCxLQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUMzQyxLQUFJLENBQUMsd0JBQXdCLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNuRCxLQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQzs7S0FDOUM7Ozs7SUFFTSwyQ0FBUTs7OztRQUNiLGlCQUFNLFFBQVEsV0FBRSxDQUFDOzs7Ozs7O0lBR1QsOERBQTJCOzs7OztJQUFyQyxVQUFzQyxRQUFhLEVB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QUFZOzs7UUFDeEMsTUFBTSxDQUFDLG1CQUFtQixDQUFDOzBDQUNNLFlBQVk7OztRQUM3QyxNQUFNLENBQUMsYUFBYSxDQUFDOzBDQUNNLFlBQVk7OztRQUN2QyxNQUFNLENBQUMscUJBQXFCLENBQUM7MENBQ00sWUFBWTs7O1FBQy9DLE1BQU0sQ0FBQyxlQUFlLENBQUM7MENBQ00sWUFBWTs7bUNBdkM1QztFQXNCdUQsbUJBQW1CO1NBQXBELHdCQUF3QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9uSW5pdCwgRXZlbnRFbWl0dGVyLCBFbGVtZW50UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJRGlhbG9nQ29udHJvbGxlciB9IGZyb20gJy4vSURpYWxvZ0NvbnRyb2xsZXInO1xuaW1wb3J0IHsgRGlhbG9nTW9kZWwgfSBmcm9tICcuL21vZGVsL0RpYWxvZ01vZGVsJztcbmltcG9ydCB7IENvbXBvbmVudERpYWxvZ01vZGVsLCBCdXR0b25Nb2RlbCB9IGZyb20gJy4vbW9kZWwvQ29tcG9uZW50RGlhbG9nTW9kZWwnO1xuaW1wb3J0IHsgQWJzdHJhY3RIYXNEYXRhSGVscCB9IGZyb20gJy4vQWJzdHJhY3RIYXNEYXRhSGVscCc7XG5pbXBvcnQgeyBPcHRpb24gfSBmcm9tICcuLi9kZWNvcmF0b3IvT3B0aW9uLmRlY29yYXRvcic7XG5pbXBvcnQgeyBFdmVudFV0aWxzIH0gZnJvbSAnLi4vc2hhcmUvdXRpbHMvRXZlbnRVdGlscyc7XG5pbXBvcnQge1xuICBCRUZPUkVfUkVTVUxUX0NIQU5HRV9FVkVOVCwgQkVGT1JFX0VSUk9SX0NIQU5HRV9FVkVOVCwgQkVGT1JFX0JVVFRPTlNfQ0hBTkdFX0VWRU5ULFxuICBSRVNVTFRfQ0hBTkdFX0VWRU5ULCBFUlJPUl9DSEFOR0VfRVZFTlQsIEJVVFRPTlNfQ0hBTkdFX0VWRU5UXG59IGZyb20gJy4uL3NoYXJlL0N1c3RvbUV2ZW50VHlwZSc7XG5cbi8qKlxuICogPHAgc3R5bGU9XCJ0ZXh0LWluZGVudDogMmVtO1wiPlxuICogQW4gYWJzdHJhY3QgYmFzZSBjbGFzcyBvZiBbW0lEaWFsb2dDb250cm9sbGVyXV0gaW50ZXJmYWNlLiBBbGwgZGlhbG9nIGNvbXBvbmVudCBjbGFzc2VzLCBpbmNsdWRpbmcgPGNvZGU+Y3VzdG9tIGNvbXBvbmVudDwvY29kZT5cbiAqIGNsYXNzZXMgdXNlZCBpbiBbW0NvbXBvbmVudERpYWxvZ11dLCBzaG91bGQgZXh0ZW5kIHRoaXMgY2xhc3MuIEhlbmNlLCBpZiB5b3Ugd2FudCB0byBidWlsZCBhIDxjb2RlPmN1c3RvbSBkaWFsb2c8L2NvZGU+LCB5b3Ugc2hvdWxkXG4gKiB1c2UgdGhpcyBjbGFzcyBhcyBhIGJhc2UgY2xhc3MgZm9yIHRoZSBjdXN0b20gPGNvZGU+Y29tcG9uZW50IHR5cGU8L2NvZGU+IGJlaW5nIHVzZWQgYXMgW1tDb21wb25lbnREaWFsb2ddXSdzIGJvZHkgY29tcG9uZW50LlxuICogPC9wPlxuICpcbiAqIEBhdXRob3Igc2hpb3JpbiwgdGVlNGN1dGVcbiAqIEBzZWUgW1tQaGxveERpYWxvZ11dXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdERpYWxvZ0NvbnRyb2xsZXIgZXh0ZW5kcyBBYnN0cmFjdEhhc0RhdGFIZWxwIGltcGxlbWVudHMgT25Jbml0LCBJRGlhbG9nQ29udHJvbGxlciB7XG5cbiAgcHJpdmF0ZSBfcmVzdWx0OiBhbnk7XG4gIHByaXZhdGUgX2Vycm9yOiBhbnk7XG4gIHByaXZhdGUgX2J1dHRvbnM6IEJ1dHRvbk1vZGVsW107XG5cbiAgQE9wdGlvbignYmVmb3JlUmVzdWx0Q2hhbmdlJylcbiAgcHJvdGVjdGVkIGJlZm9yZVJlc3VsdENoYW5nZUV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgQE9wdGlvbigncmVzdWx0Q2hhbmdlJylcbiAgcHJvdGVjdGVkIHJlc3VsdENoYW5nZUV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgQE9wdGlvbignYmVmb3JlRXJyb3JDaGFuZ2UnKVxuICBwcm90ZWN0ZWQgYmVmb3JlRXJyb3JDaGFuZ2VFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPcHRpb24oJ2Vycm9yQ2hhbmdlJylcbiAgcHJvdGVjdGVkIGVycm9yQ2hhbmdlRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBAT3B0aW9uKCdiZWZvcmVCdXR0b25zQ2hhbmdlJylcbiAgcHJvdGVjdGVkIGJlZm9yZUJ1dHRvbnNDaGFuZ2VFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPcHRpb24oJ2J1dHRvbnNDaGFuZ2UnKVxuICBwcm90ZWN0ZWQgYnV0dG9uc0NoYW5nZUV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcblxuICBjb25zdHJ1Y3RvcihlbGVtZW50UmVmOiBFbGVtZW50UmVmKSB7XG4gICAgc3VwZXIoZWxlbWVudFJlZik7XG5cbiAgICB0aGlzLmJlZm9yZVJlc3VsdENoYW5nZUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIHRoaXMucmVzdWx0Q2hhbmdlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgdGhpcy5iZWZvcmVFcnJvckNoYW5nZUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIHRoaXMuZXJyb3JDaGFuZ2VFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICB0aGlzLmJlZm9yZUJ1dHRvbnNDaGFuZ2VFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICB0aGlzLmJ1dHRvbnNDaGFuZ2VFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgfVxuICBcbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZW1pdEJlZm9yZVJlc3VsdENoYW5nZUV2ZW50KG9sZFZhbHVlOiBhbnksIG5ld1ZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICBsZXQgZGF0YTogYW55ID0ge1xuICAgICAgb2xkVmFsdWU6IG9sZFZhbHVlLFxuICAgICAgbmV3VmFsdWU6IG5ld1ZhbHVlXG4gICAgfTtcblxuICAgIGxldCBldiA9IEV2ZW50VXRpbHMubmV3Q3VzdG9tRXZlbnQoQkVGT1JFX1JFU1VMVF9DSEFOR0VfRVZFTlQsIHRoaXMsIGRhdGEsIG51bGwpO1xuXG4gICAgaWYgKHRoaXMuYmVmb3JlUmVzdWx0Q2hhbmdlRXZlbnQgIT09IG51bGwgJiYgdGhpcy5iZWZvcmVSZXN1bHRDaGFuZ2VFdmVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmJlZm9yZVJlc3VsdENoYW5nZUV2ZW50LmVtaXQoZXYpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBlbWl0UmVzdWx0Q2hhbmdlRXZlbnQob2xkVmFsdWU6IGFueSwgbmV3VmFsdWU6IGFueSk6IHZvaWQge1xuICAgIGxldCBkYXRhOiBhbnkgPSB7XG4gICAgICBvbGRWYWx1ZTogb2xkVmFsdWUsXG4gICAgICBuZXdWYWx1ZTogbmV3VmFsdWVcbiAgICB9O1xuXG4gICAgbGV0IGV2ID0gRXZlbnRVdGlscy5uZXdDdXN0b21FdmVudChSRVNVTFRfQ0hBTkdFX0VWRU5ULCB0aGlzLCBkYXRhLCBudWxsKTtcblxuICAgIGlmICh0aGlzLnJlc3VsdENoYW5nZUV2ZW50ICE9PSBudWxsICYmIHRoaXMucmVzdWx0Q2hhbmdlRXZlbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5yZXN1bHRDaGFuZ2VFdmVudC5lbWl0KGV2KTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZW1pdEJlZm9yZUVycm9yQ2hhbmdlRXZlbnQob2xkVmFsdWU6IGFueSwgbmV3VmFsdWU6IGFueSk6IHZvaWQge1xuICAgIGxldCBkYXRhOiBhbnkgPSB7XG4gICAgICBvbGRWYWx1ZTogb2xkVmFsdWUsXG4gICAgICBuZXdWYWx1ZTogbmV3VmFsdWVcbiAgICB9O1xuXG4gICAgbGV0IGV2ID0gRXZlbnRVdGlscy5uZXdDdXN0b21FdmVudChCRUZPUkVfRVJST1JfQ0hBTkdFX0VWRU5ULCB0aGlzLCBkYXRhLCBudWxsKTtcblxuICAgIGlmICh0aGlzLmJlZm9yZUVycm9yQ2hhbmdlRXZlbnQgIT09IG51bGwgJiYgdGhpcy5iZWZvcmVFcnJvckNoYW5nZUV2ZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuYmVmb3JlRXJyb3JDaGFuZ2VFdmVudC5lbWl0KGV2KTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZW1pdEVycm9yQ2hhbmdlRXZlbnQob2xkVmFsdWU6IGFueSwgbmV3VmFsdWU6IGFueSk6IHZvaWQge1xuICAgIGxldCBkYXRhOiBhbnkgPSB7XG4gICAgICBvbGRWYWx1ZTogb2xkVmFsdWUsXG4gICAgICBuZXdWYWx1ZTogbmV3VmFsdWVcbiAgICB9O1xuXG4gICAgbGV0IGV2ID0gRXZlbnRVdGlscy5uZXdDdXN0b21FdmVudChFUlJPUl9DSEFOR0VfRVZFTlQsIHRoaXMsIGRhdGEsIG51bGwpO1xuXG4gICAgaWYgKHRoaXMuZXJyb3JDaGFuZ2VFdmVudCAhPT0gbnVsbCAmJiB0aGlzLmVycm9yQ2hhbmdlRXZlbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5lcnJvckNoYW5nZUV2ZW50LmVtaXQoZXYpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBlbWl0QmVmb3JlQnV0dG9uc0NoYW5nZUV2ZW50KG9sZFZhbHVlOiBhbnksIG5ld1ZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICBsZXQgZGF0YTogYW55ID0ge1xuICAgICAgb2xkVmFsdWU6IG9sZFZhbHVlLFxuICAgICAgbmV3VmFsdWU6IG5ld1ZhbHVlXG4gICAgfTtcblxuICAgIGxldCBldiA9IEV2ZW50VXRpbHMubmV3Q3VzdG9tRXZlbnQoQkVGT1JFX0JVVFRPTlNfQ0hBTkdFX0VWRU5ULCB0aGlzLCBkYXRhLCBudWxsKTtcblxuICAgIGlmICh0aGlzLmJlZm9yZUJ1dHRvbnNDaGFuZ2VFdmVudCAhPT0gbnVsbCAmJiB0aGlzLmJlZm9yZUJ1dHRvbnNDaGFuZ2VFdmVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmJlZm9yZUJ1dHRvbnNDaGFuZ2VFdmVudC5lbWl0KGV2KTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZW1pdEJ1dHRvbnNDaGFuZ2VFdmVudChvbGRWYWx1ZTogYW55LCBuZXdWYWx1ZTogYW55KTogdm9pZCB7XG4gICAgbGV0IGRhdGE6IGFueSA9IHtcbiAgICAgIG9sZFZhbHVlOiBvbGRWYWx1ZSxcbiAgICAgIG5ld1ZhbHVlOiBuZXdWYWx1ZVxuICAgIH07XG5cbiAgICBsZXQgZXYgPSBFdmVudFV0aWxzLm5ld0N1c3RvbUV2ZW50KEJVVFRPTlNfQ0hBTkdFX0VWRU5ULCB0aGlzLCBkYXRhLCBudWxsKTtcblxuICAgIGlmICh0aGlzLmJ1dHRvbnNDaGFuZ2VFdmVudCAhPT0gbnVsbCAmJiB0aGlzLmJ1dHRvbnNDaGFuZ2VFdmVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmJ1dHRvbnNDaGFuZ2VFdmVudC5lbWl0KGV2KTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IHJlc3VsdCgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLl9yZXN1bHQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0IHJlc3VsdChyZXN1bHQ6IGFueSkge1xuICAgIGlmICh0aGlzLl9yZXN1bHQgPT09IHJlc3VsdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBvbGRWYWx1ZSA9IHRoaXMuX3Jlc3VsdDtcblxuICAgIEV2ZW50VXRpbHMuaGFuZGxlQnJvd3NlckV2ZW50KHRoaXMsICdiZWZvcmVSZXN1bHRDaGFuZ2VFdmVudCcsIHVuZGVmaW5lZCwgdHJ1ZSwgKCRldmVudDogRXZlbnQpID0+IHtcbiAgICAgIC8vIGRvRXZlbnRcbiAgICAgIHRoaXMuX3Jlc3VsdCA9IHJlc3VsdDtcbiAgICB9LCAoJGV2ZW50OiBFdmVudCkgPT4ge1xuICAgICAgLy8gZW1pdEJlZm9yZUV2ZW50XG4gICAgICB0aGlzLmVtaXRCZWZvcmVSZXN1bHRDaGFuZ2VFdmVudChvbGRWYWx1ZSwgcmVzdWx0KTtcbiAgICB9LCAoJGV2ZW50OiBFdmVudCkgPT4ge1xuICAgICAgLy8gZW1pdEFmdGVyRXZlbnRcbiAgICAgIHRoaXMuZW1pdFJlc3VsdENoYW5nZUV2ZW50KG9sZFZhbHVlLCByZXN1bHQpO1xuICAgIH0sICgkZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICAvLyBkb1ByZXZlbnRlZFxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCBlcnJvcigpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLl9lcnJvcjtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZXQgZXJyb3IoZXJyb3I6IGFueSkge1xuICAgIGlmICh0aGlzLl9lcnJvciA9PT0gZXJyb3IpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgb2xkVmFsdWUgPSB0aGlzLl9lcnJvcjtcblxuICAgIEV2ZW50VXRpbHMuaGFuZGxlQnJvd3NlckV2ZW50KHRoaXMsICdiZWZvcmVFcnJvckNoYW5nZUV2ZW50JywgdW5kZWZpbmVkLCB0cnVlLCAoJGV2ZW50OiBFdmVudCkgPT4ge1xuICAgICAgLy8gZG9FdmVudFxuICAgICAgdGhpcy5fZXJyb3IgPSBlcnJvcjtcbiAgICB9LCAoJGV2ZW50OiBFdmVudCkgPT4ge1xuICAgICAgLy8gZW1pdEJlZm9yZUV2ZW50XG4gICAgICB0aGlzLmVtaXRCZWZvcmVFcnJvckNoYW5nZUV2ZW50KG9sZFZhbHVlLCBlcnJvcik7XG4gICAgfSwgKCRldmVudDogRXZlbnQpID0+IHtcbiAgICAgIC8vIGVtaXRBZnRlckV2ZW50XG4gICAgICB0aGlzLmVtaXRFcnJvckNoYW5nZUV2ZW50KG9sZFZhbHVlLCBlcnJvcik7XG4gICAgfSwgKCRldmVudDogRXZlbnQpID0+IHtcbiAgICAgIC8vIGRvUHJldmVudGVkXG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IGRpYWxvZ0J1dHRvbnMoKTogQnV0dG9uTW9kZWxbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2J1dHRvbnM7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0IGRpYWxvZ0J1dHRvbnMoYnV0dG9uczogQnV0dG9uTW9kZWxbXSkge1xuICAgIGlmICh0aGlzLl9idXR0b25zID09PSBidXR0b25zKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IG9sZFZhbHVlID0gdGhpcy5fYnV0dG9ucztcblxuICAgIEV2ZW50VXRpbHMuaGFuZGxlQnJvd3NlckV2ZW50KHRoaXMsICdiZWZvcmVCdXR0b25zQ2hhbmdlRXZlbnQnLCB1bmRlZmluZWQsIHRydWUsICgkZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICAvLyBkb0V2ZW50XG4gICAgICB0aGlzLl9idXR0b25zID0gYnV0dG9ucztcbiAgICB9LCAoJGV2ZW50OiBFdmVudCkgPT4ge1xuICAgICAgLy8gZW1pdEJlZm9yZUV2ZW50XG4gICAgICB0aGlzLmVtaXRCZWZvcmVCdXR0b25zQ2hhbmdlRXZlbnQob2xkVmFsdWUsIGJ1dHRvbnMpO1xuICAgIH0sICgkZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICAvLyBlbWl0QWZ0ZXJFdmVudFxuICAgICAgdGhpcy5lbWl0QnV0dG9uc0NoYW5nZUV2ZW50KG9sZFZhbHVlLCBidXR0b25zKTtcbiAgICB9LCAoJGV2ZW50OiBFdmVudCkgPT4ge1xuICAgICAgLy8gZG9QcmV2ZW50ZWRcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXREaWFsb2dSZXN1bHQoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5yZXN1bHQ7XG4gIH1cblxuICBwdWJsaWMgc2V0RGlhbG9nUmVzdWx0KHJlc3VsdDogYW55KTogdm9pZCB7XG4gICAgdGhpcy5yZXN1bHQgPSByZXN1bHQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0RGlhbG9nRXJyb3IoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5lcnJvcjtcbiAgfVxuXG4gIHB1YmxpYyBzZXREaWFsb2dFcnJvcihlcnJvcjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5lcnJvciA9IGVycm9yO1xuICB9XG5cbiAgcHVibGljIGdldERpYWxvZ0J1dHRvbnMoKTogQnV0dG9uTW9kZWxbXSB7XG4gICAgcmV0dXJuIHRoaXMuZGlhbG9nQnV0dG9ucztcbiAgfVxuXG4gIHB1YmxpYyBzZXREaWFsb2dCdXR0b25zKGRpYWxvZ0J1dHRvbnM6IEJ1dHRvbk1vZGVsW10pOiB2b2lkIHtcbiAgICB0aGlzLmRpYWxvZ0J1dHRvbnMgPSBkaWFsb2dCdXR0b25zO1xuICB9XG5cbiAgcHVibGljIGdldEJlZm9yZVJlc3VsdENoYW5nZUV2ZW50KCk6IEV2ZW50RW1pdHRlcjxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5iZWZvcmVSZXN1bHRDaGFuZ2VFdmVudDtcbiAgfVxuXG4gIHB1YmxpYyBzZXRCZWZvcmVSZXN1bHRDaGFuZ2VFdmVudChldmVudDogRXZlbnRFbWl0dGVyPGFueT4pOiB2b2lkIHtcbiAgICB0aGlzLmJlZm9yZVJlc3VsdENoYW5nZUV2ZW50ID0gZXZlbnQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0UmVzdWx0Q2hhbmdlRXZlbnQoKTogRXZlbnRFbWl0dGVyPGFueT4ge1xuICAgIHJldHVybiB0aGlzLnJlc3VsdENoYW5nZUV2ZW50O1xuICB9XG5cbiAgcHVibGljIHNldFJlc3VsdENoYW5nZUV2ZW50KGV2ZW50OiBFdmVudEVtaXR0ZXI8YW55Pik6IHZvaWQge1xuICAgIHRoaXMucmVzdWx0Q2hhbmdlRXZlbnQgPSBldmVudDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRCZWZvcmVFcnJvckNoYW5nZUV2ZW50KCk6IEV2ZW50RW1pdHRlcjxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5iZWZvcmVFcnJvckNoYW5nZUV2ZW50O1xuICB9XG5cbiAgcHVibGljIHNldEJlZm9yZUVycm9yQ2hhbmdlRXZlbnQoZXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+KTogdm9pZCB7XG4gICAgdGhpcy5iZWZvcmVFcnJvckNoYW5nZUV2ZW50ID0gZXZlbnQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0RXJyb3JDaGFuZ2VFdmVudCgpOiBFdmVudEVtaXR0ZXI8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuZXJyb3JDaGFuZ2VFdmVudDtcbiAgfVxuXG4gIHB1YmxpYyBzZXRFcnJvckNoYW5nZUV2ZW50KGV2ZW50OiBFdmVudEVtaXR0ZXI8YW55Pik6IHZvaWQge1xuICAgIHRoaXMuZXJyb3JDaGFuZ2VFdmVudCA9IGV2ZW50O1xuICB9XG5cbiAgcHVibGljIGdldEJlZm9yZUJ1dHRvbnNDaGFuZ2VFdmVudCgpOiBFdmVudEVtaXR0ZXI8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuYmVmb3JlQnV0dG9uc0NoYW5nZUV2ZW50O1xuICB9XG5cbiAgcHVibGljIHNldEJlZm9yZUJ1dHRvbnNDaGFuZ2VFdmVudChldmVudDogRXZlbnRFbWl0dGVyPGFueT4pOiB2b2lkIHtcbiAgICB0aGlzLmJlZm9yZUJ1dHRvbnNDaGFuZ2VFdmVudCA9IGV2ZW50O1xuICB9XG5cbiAgcHVibGljIGdldEJ1dHRvbnNDaGFuZ2VFdmVudCgpOiBFdmVudEVtaXR0ZXI8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuYnV0dG9uc0NoYW5nZUV2ZW50O1xuICB9XG5cbiAgcHVibGljIHNldEJ1dHRvbnNDaGFuZ2VFdmVudChldmVudDogRXZlbnRFbWl0dGVyPGFueT4pOiB2b2lkIHtcbiAgICB0aGlzLmJ1dHRvbnNDaGFuZ2VFdmVudCA9IGV2ZW50O1xuICB9XG5cbiAgcHVibGljIGRvUHJlbG9hZCgpOiBQcm9taXNlPGFueT4geyByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4geyByZXNvbHZlKG51bGwpOyB9KTsgfSBwdWJsaWMgZG9Mb2FkZWQoKTogdm9pZCB7XG4gIH1cblxuICAvLyBEZWZhdWx0IG1ldGhvZCBpbXBsZW1lbnRhdGlvbnNcbiAgcHVibGljIGlzU2VsZkRhdGFEaXJ0eSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgc2VsZlNhdmVEYXRhKGRhdGE6IGFueSk6IHZvaWQge1xuICB9XG5cbiAgcHVibGljIHNlbGZSZXNldERhdGEoKTogdm9pZCB7XG4gIH1cbn1cbiJdfQ==