UNPKG

com.phloxui

Version:

PhloxUI Ng2+ Framework

404 lines (403 loc) 31.6 kB
/** * @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 */ export class AbstractDialogController extends AbstractHasDataHelp { /** * @param {?} elementRef */ constructor(elementRef) { super(elementRef); 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 {?} */ ngOnInit() { super.ngOnInit(); } /** * @param {?} oldValue * @param {?} newValue * @return {?} */ emitBeforeResultChangeEvent(oldValue, newValue) { let /** @type {?} */ data = { oldValue: oldValue, newValue: newValue }; let /** @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 {?} */ emitResultChangeEvent(oldValue, newValue) { let /** @type {?} */ data = { oldValue: oldValue, newValue: newValue }; let /** @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 {?} */ emitBeforeErrorChangeEvent(oldValue, newValue) { let /** @type {?} */ data = { oldValue: oldValue, newValue: newValue }; let /** @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 {?} */ emitErrorChangeEvent(oldValue, newValue) { let /** @type {?} */ data = { oldValue: oldValue, newValue: newValue }; let /** @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 {?} */ emitBeforeButtonsChangeEvent(oldValue, newValue) { let /** @type {?} */ data = { oldValue: oldValue, newValue: newValue }; let /** @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 {?} */ emitButtonsChangeEvent(oldValue, newValue) { let /** @type {?} */ data = { oldValue: oldValue, newValue: newValue }; let /** @type {?} */ ev = EventUtils.newCustomEvent(BUTTONS_CHANGE_EVENT, this, data, null); if (this.buttonsChangeEvent !== null && this.buttonsChangeEvent !== undefined) { this.buttonsChangeEvent.emit(ev); } } /** * @return {?} */ get result() { return this._result; } /** * @param {?} result * @return {?} */ set result(result) { if (this._result === result) { return; } let /** @type {?} */ oldValue = this._result; EventUtils.handleBrowserEvent(this, 'beforeResultChangeEvent', undefined, true, ($event) => { // doEvent this._result = result; }, ($event) => { // emitBeforeEvent this.emitBeforeResultChangeEvent(oldValue, result); }, ($event) => { // emitAfterEvent this.emitResultChangeEvent(oldValue, result); }, ($event) => { // doPrevented }); } /** * @return {?} */ get error() { return this._error; } /** * @param {?} error * @return {?} */ set error(error) { if (this._error === error) { return; } let /** @type {?} */ oldValue = this._error; EventUtils.handleBrowserEvent(this, 'beforeErrorChangeEvent', undefined, true, ($event) => { // doEvent this._error = error; }, ($event) => { // emitBeforeEvent this.emitBeforeErrorChangeEvent(oldValue, error); }, ($event) => { // emitAfterEvent this.emitErrorChangeEvent(oldValue, error); }, ($event) => { // doPrevented }); } /** * @return {?} */ get dialogButtons() { return this._buttons; } /** * @param {?} buttons * @return {?} */ set dialogButtons(buttons) { if (this._buttons === buttons) { return; } let /** @type {?} */ oldValue = this._buttons; EventUtils.handleBrowserEvent(this, 'beforeButtonsChangeEvent', undefined, true, ($event) => { // doEvent this._buttons = buttons; }, ($event) => { // emitBeforeEvent this.emitBeforeButtonsChangeEvent(oldValue, buttons); }, ($event) => { // emitAfterEvent this.emitButtonsChangeEvent(oldValue, buttons); }, ($event) => { // doPrevented }); } /** * @return {?} */ getDialogResult() { return this.result; } /** * @param {?} result * @return {?} */ setDialogResult(result) { this.result = result; } /** * @return {?} */ getDialogError() { return this.error; } /** * @param {?} error * @return {?} */ setDialogError(error) { this.error = error; } /** * @return {?} */ getDialogButtons() { return this.dialogButtons; } /** * @param {?} dialogButtons * @return {?} */ setDialogButtons(dialogButtons) { this.dialogButtons = dialogButtons; } /** * @return {?} */ getBeforeResultChangeEvent() { return this.beforeResultChangeEvent; } /** * @param {?} event * @return {?} */ setBeforeResultChangeEvent(event) { this.beforeResultChangeEvent = event; } /** * @return {?} */ getResultChangeEvent() { return this.resultChangeEvent; } /** * @param {?} event * @return {?} */ setResultChangeEvent(event) { this.resultChangeEvent = event; } /** * @return {?} */ getBeforeErrorChangeEvent() { return this.beforeErrorChangeEvent; } /** * @param {?} event * @return {?} */ setBeforeErrorChangeEvent(event) { this.beforeErrorChangeEvent = event; } /** * @return {?} */ getErrorChangeEvent() { return this.errorChangeEvent; } /** * @param {?} event * @return {?} */ setErrorChangeEvent(event) { this.errorChangeEvent = event; } /** * @return {?} */ getBeforeButtonsChangeEvent() { return this.beforeButtonsChangeEvent; } /** * @param {?} event * @return {?} */ setBeforeButtonsChangeEvent(event) { this.beforeButtonsChangeEvent = event; } /** * @return {?} */ getButtonsChangeEvent() { return this.buttonsChangeEvent; } /** * @param {?} event * @return {?} */ setButtonsChangeEvent(event) { this.buttonsChangeEvent = event; } /** * @return {?} */ doPreload() { return new Promise((resolve, reject) => { resolve(null); }); } /** * @return {?} */ doLoaded() { } /** * @return {?} */ isSelfDataDirty() { return false; } /** * @param {?} data * @return {?} */ selfSaveData(data) { } /** * @return {?} */ selfResetData() { } } 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); 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWJzdHJhY3REaWFsb2dDb250cm9sbGVyLmpzIiwic291cmNlUm9vdCI6Im5nOi8vY29tLnBobG94dWkvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50L0Fic3RyYWN0RGlhbG9nQ29udHJvbGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBVSxZQUFZLEVBQWMsTUFBTSxlQUFlLENBQUM7QUFJakUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDNUQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN2RCxPQUFPLEVBQ0wsMEJBQTBCLEVBQUUseUJBQXlCLEVBQUUsMkJBQTJCLEVBQ2xGLG1CQUFtQixFQUFFLGtCQUFrQixFQUFFLG9CQUFvQixFQUM5RCxNQUFNLDBCQUEwQixDQUFDOzs7Ozs7Ozs7Ozs7QUFZbEMsTUFBTSwrQkFBeUMsU0FBUSxtQkFBbUI7Ozs7SUFtQnhFLFlBQVksVUFBc0I7UUFDaEMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRWxCLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ2xELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzVDLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ2pELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzNDLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ25ELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0tBQzlDOzs7O0lBRU0sUUFBUTtRQUNiLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQzs7Ozs7OztJQUdULDJCQUEyQixDQUFDLFFB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dFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSURpYWxvZ0NvbnRyb2xsZXIgfSBmcm9tICcuL0lEaWFsb2dDb250cm9sbGVyJztcbmltcG9ydCB7IERpYWxvZ01vZGVsIH0gZnJvbSAnLi9tb2RlbC9EaWFsb2dNb2RlbCc7XG5pbXBvcnQgeyBDb21wb25lbnREaWFsb2dNb2RlbCwgQnV0dG9uTW9kZWwgfSBmcm9tICcuL21vZGVsL0NvbXBvbmVudERpYWxvZ01vZGVsJztcbmltcG9ydCB7IEFic3RyYWN0SGFzRGF0YUhlbHAgfSBmcm9tICcuL0Fic3RyYWN0SGFzRGF0YUhlbHAnO1xuaW1wb3J0IHsgT3B0aW9uIH0gZnJvbSAnLi4vZGVjb3JhdG9yL09wdGlvbi5kZWNvcmF0b3InO1xuaW1wb3J0IHsgRXZlbnRVdGlscyB9IGZyb20gJy4uL3NoYXJlL3V0aWxzL0V2ZW50VXRpbHMnO1xuaW1wb3J0IHtcbiAgQkVGT1JFX1JFU1VMVF9DSEFOR0VfRVZFTlQsIEJFRk9SRV9FUlJPUl9DSEFOR0VfRVZFTlQsIEJFRk9SRV9CVVRUT05TX0NIQU5HRV9FVkVOVCxcbiAgUkVTVUxUX0NIQU5HRV9FVkVOVCwgRVJST1JfQ0hBTkdFX0VWRU5ULCBCVVRUT05TX0NIQU5HRV9FVkVOVFxufSBmcm9tICcuLi9zaGFyZS9DdXN0b21FdmVudFR5cGUnO1xuXG4vKipcbiAqIDxwIHN0eWxlPVwidGV4dC1pbmRlbnQ6IDJlbTtcIj5cbiAqIEFuIGFic3RyYWN0IGJhc2UgY2xhc3Mgb2YgW1tJRGlhbG9nQ29udHJvbGxlcl1dIGludGVyZmFjZS4gQWxsIGRpYWxvZyBjb21wb25lbnQgY2xhc3NlcywgaW5jbHVkaW5nIDxjb2RlPmN1c3RvbSBjb21wb25lbnQ8L2NvZGU+XG4gKiBjbGFzc2VzIHVzZWQgaW4gW1tDb21wb25lbnREaWFsb2ddXSwgc2hvdWxkIGV4dGVuZCB0aGlzIGNsYXNzLiBIZW5jZSwgaWYgeW91IHdhbnQgdG8gYnVpbGQgYSA8Y29kZT5jdXN0b20gZGlhbG9nPC9jb2RlPiwgeW91IHNob3VsZFxuICogdXNlIHRoaXMgY2xhc3MgYXMgYSBiYXNlIGNsYXNzIGZvciB0aGUgY3VzdG9tIDxjb2RlPmNvbXBvbmVudCB0eXBlPC9jb2RlPiBiZWluZyB1c2VkIGFzIFtbQ29tcG9uZW50RGlhbG9nXV0ncyBib2R5IGNvbXBvbmVudC5cbiAqIDwvcD5cbiAqXG4gKiBAYXV0aG9yIHNoaW9yaW4sIHRlZTRjdXRlXG4gKiBAc2VlIFtbUGhsb3hEaWFsb2ddXVxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3REaWFsb2dDb250cm9sbGVyIGV4dGVuZHMgQWJzdHJhY3RIYXNEYXRhSGVscCBpbXBsZW1lbnRzIE9uSW5pdCwgSURpYWxvZ0NvbnRyb2xsZXIge1xuXG4gIHByaXZhdGUgX3Jlc3VsdDogYW55O1xuICBwcml2YXRlIF9lcnJvcjogYW55O1xuICBwcml2YXRlIF9idXR0b25zOiBCdXR0b25Nb2RlbFtdO1xuXG4gIEBPcHRpb24oJ2JlZm9yZVJlc3VsdENoYW5nZScpXG4gIHByb3RlY3RlZCBiZWZvcmVSZXN1bHRDaGFuZ2VFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPcHRpb24oJ3Jlc3VsdENoYW5nZScpXG4gIHByb3RlY3RlZCByZXN1bHRDaGFuZ2VFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPcHRpb24oJ2JlZm9yZUVycm9yQ2hhbmdlJylcbiAgcHJvdGVjdGVkIGJlZm9yZUVycm9yQ2hhbmdlRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBAT3B0aW9uKCdlcnJvckNoYW5nZScpXG4gIHByb3RlY3RlZCBlcnJvckNoYW5nZUV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgQE9wdGlvbignYmVmb3JlQnV0dG9uc0NoYW5nZScpXG4gIHByb3RlY3RlZCBiZWZvcmVCdXR0b25zQ2hhbmdlRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBAT3B0aW9uKCdidXR0b25zQ2hhbmdlJylcbiAgcHJvdGVjdGVkIGJ1dHRvbnNDaGFuZ2VFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XG5cbiAgY29uc3RydWN0b3IoZWxlbWVudFJlZjogRWxlbWVudFJlZikge1xuICAgIHN1cGVyKGVsZW1lbnRSZWYpO1xuXG4gICAgdGhpcy5iZWZvcmVSZXN1bHRDaGFuZ2VFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICB0aGlzLnJlc3VsdENoYW5nZUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIHRoaXMuYmVmb3JlRXJyb3JDaGFuZ2VFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICB0aGlzLmVycm9yQ2hhbmdlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgdGhpcy5iZWZvcmVCdXR0b25zQ2hhbmdlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgdGhpcy5idXR0b25zQ2hhbmdlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIH1cbiAgXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGVtaXRCZWZvcmVSZXN1bHRDaGFuZ2VFdmVudChvbGRWYWx1ZTogYW55LCBuZXdWYWx1ZTogYW55KTogdm9pZCB7XG4gICAgbGV0IGRhdGE6IGFueSA9IHtcbiAgICAgIG9sZFZhbHVlOiBvbGRWYWx1ZSxcbiAgICAgIG5ld1ZhbHVlOiBuZXdWYWx1ZVxuICAgIH07XG5cbiAgICBsZXQgZXYgPSBFdmVudFV0aWxzLm5ld0N1c3RvbUV2ZW50KEJFRk9SRV9SRVNVTFRfQ0hBTkdFX0VWRU5ULCB0aGlzLCBkYXRhLCBudWxsKTtcblxuICAgIGlmICh0aGlzLmJlZm9yZVJlc3VsdENoYW5nZUV2ZW50ICE9PSBudWxsICYmIHRoaXMuYmVmb3JlUmVzdWx0Q2hhbmdlRXZlbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5iZWZvcmVSZXN1bHRDaGFuZ2VFdmVudC5lbWl0KGV2KTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZW1pdFJlc3VsdENoYW5nZUV2ZW50KG9sZFZhbHVlOiBhbnksIG5ld1ZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICBsZXQgZGF0YTogYW55ID0ge1xuICAgICAgb2xkVmFsdWU6IG9sZFZhbHVlLFxuICAgICAgbmV3VmFsdWU6IG5ld1ZhbHVlXG4gICAgfTtcblxuICAgIGxldCBldiA9IEV2ZW50VXRpbHMubmV3Q3VzdG9tRXZlbnQoUkVTVUxUX0NIQU5HRV9FVkVOVCwgdGhpcywgZGF0YSwgbnVsbCk7XG5cbiAgICBpZiAodGhpcy5yZXN1bHRDaGFuZ2VFdmVudCAhPT0gbnVsbCAmJiB0aGlzLnJlc3VsdENoYW5nZUV2ZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMucmVzdWx0Q2hhbmdlRXZlbnQuZW1pdChldik7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGVtaXRCZWZvcmVFcnJvckNoYW5nZUV2ZW50KG9sZFZhbHVlOiBhbnksIG5ld1ZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICBsZXQgZGF0YTogYW55ID0ge1xuICAgICAgb2xkVmFsdWU6IG9sZFZhbHVlLFxuICAgICAgbmV3VmFsdWU6IG5ld1ZhbHVlXG4gICAgfTtcblxuICAgIGxldCBldiA9IEV2ZW50VXRpbHMubmV3Q3VzdG9tRXZlbnQoQkVGT1JFX0VSUk9SX0NIQU5HRV9FVkVOVCwgdGhpcywgZGF0YSwgbnVsbCk7XG5cbiAgICBpZiAodGhpcy5iZWZvcmVFcnJvckNoYW5nZUV2ZW50ICE9PSBudWxsICYmIHRoaXMuYmVmb3JlRXJyb3JDaGFuZ2VFdmVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmJlZm9yZUVycm9yQ2hhbmdlRXZlbnQuZW1pdChldik7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGVtaXRFcnJvckNoYW5nZUV2ZW50KG9sZFZhbHVlOiBhbnksIG5ld1ZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICBsZXQgZGF0YTogYW55ID0ge1xuICAgICAgb2xkVmFsdWU6IG9sZFZhbHVlLFxuICAgICAgbmV3VmFsdWU6IG5ld1ZhbHVlXG4gICAgfTtcblxuICAgIGxldCBldiA9IEV2ZW50VXRpbHMubmV3Q3VzdG9tRXZlbnQoRVJST1JfQ0hBTkdFX0VWRU5ULCB0aGlzLCBkYXRhLCBudWxsKTtcblxuICAgIGlmICh0aGlzLmVycm9yQ2hhbmdlRXZlbnQgIT09IG51bGwgJiYgdGhpcy5lcnJvckNoYW5nZUV2ZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZXJyb3JDaGFuZ2VFdmVudC5lbWl0KGV2KTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZW1pdEJlZm9yZUJ1dHRvbnNDaGFuZ2VFdmVudChvbGRWYWx1ZTogYW55LCBuZXdWYWx1ZTogYW55KTogdm9pZCB7XG4gICAgbGV0IGRhdGE6IGFueSA9IHtcbiAgICAgIG9sZFZhbHVlOiBvbGRWYWx1ZSxcbiAgICAgIG5ld1ZhbHVlOiBuZXdWYWx1ZVxuICAgIH07XG5cbiAgICBsZXQgZXYgPSBFdmVudFV0aWxzLm5ld0N1c3RvbUV2ZW50KEJFRk9SRV9CVVRUT05TX0NIQU5HRV9FVkVOVCwgdGhpcywgZGF0YSwgbnVsbCk7XG5cbiAgICBpZiAodGhpcy5iZWZvcmVCdXR0b25zQ2hhbmdlRXZlbnQgIT09IG51bGwgJiYgdGhpcy5iZWZvcmVCdXR0b25zQ2hhbmdlRXZlbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5iZWZvcmVCdXR0b25zQ2hhbmdlRXZlbnQuZW1pdChldik7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGVtaXRCdXR0b25zQ2hhbmdlRXZlbnQob2xkVmFsdWU6IGFueSwgbmV3VmFsdWU6IGFueSk6IHZvaWQge1xuICAgIGxldCBkYXRhOiBhbnkgPSB7XG4gICAgICBvbGRWYWx1ZTogb2xkVmFsdWUsXG4gICAgICBuZXdWYWx1ZTogbmV3VmFsdWVcbiAgICB9O1xuXG4gICAgbGV0IGV2ID0gRXZlbnRVdGlscy5uZXdDdXN0b21FdmVudChCVVRUT05TX0NIQU5HRV9FVkVOVCwgdGhpcywgZGF0YSwgbnVsbCk7XG5cbiAgICBpZiAodGhpcy5idXR0b25zQ2hhbmdlRXZlbnQgIT09IG51bGwgJiYgdGhpcy5idXR0b25zQ2hhbmdlRXZlbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5idXR0b25zQ2hhbmdlRXZlbnQuZW1pdChldik7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGdldCByZXN1bHQoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5fcmVzdWx0O1xuICB9XG5cbiAgcHJvdGVjdGVkIHNldCByZXN1bHQocmVzdWx0OiBhbnkpIHtcbiAgICBpZiAodGhpcy5fcmVzdWx0ID09PSByZXN1bHQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgb2xkVmFsdWUgPSB0aGlzLl9yZXN1bHQ7XG5cbiAgICBFdmVudFV0aWxzLmhhbmRsZUJyb3dzZXJFdmVudCh0aGlzLCAnYmVmb3JlUmVzdWx0Q2hhbmdlRXZlbnQnLCB1bmRlZmluZWQsIHRydWUsICgkZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICAvLyBkb0V2ZW50XG4gICAgICB0aGlzLl9yZXN1bHQgPSByZXN1bHQ7XG4gICAgfSwgKCRldmVudDogRXZlbnQpID0+IHtcbiAgICAgIC8vIGVtaXRCZWZvcmVFdmVudFxuICAgICAgdGhpcy5lbWl0QmVmb3JlUmVzdWx0Q2hhbmdlRXZlbnQob2xkVmFsdWUsIHJlc3VsdCk7XG4gICAgfSwgKCRldmVudDogRXZlbnQpID0+IHtcbiAgICAgIC8vIGVtaXRBZnRlckV2ZW50XG4gICAgICB0aGlzLmVtaXRSZXN1bHRDaGFuZ2VFdmVudChvbGRWYWx1ZSwgcmVzdWx0KTtcbiAgICB9LCAoJGV2ZW50OiBFdmVudCkgPT4ge1xuICAgICAgLy8gZG9QcmV2ZW50ZWRcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgZXJyb3IoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5fZXJyb3I7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0IGVycm9yKGVycm9yOiBhbnkpIHtcbiAgICBpZiAodGhpcy5fZXJyb3IgPT09IGVycm9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IG9sZFZhbHVlID0gdGhpcy5fZXJyb3I7XG5cbiAgICBFdmVudFV0aWxzLmhhbmRsZUJyb3dzZXJFdmVudCh0aGlzLCAnYmVmb3JlRXJyb3JDaGFuZ2VFdmVudCcsIHVuZGVmaW5lZCwgdHJ1ZSwgKCRldmVudDogRXZlbnQpID0+IHtcbiAgICAgIC8vIGRvRXZlbnRcbiAgICAgIHRoaXMuX2Vycm9yID0gZXJyb3I7XG4gICAgfSwgKCRldmVudDogRXZlbnQpID0+IHtcbiAgICAgIC8vIGVtaXRCZWZvcmVFdmVudFxuICAgICAgdGhpcy5lbWl0QmVmb3JlRXJyb3JDaGFuZ2VFdmVudChvbGRWYWx1ZSwgZXJyb3IpO1xuICAgIH0sICgkZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICAvLyBlbWl0QWZ0ZXJFdmVudFxuICAgICAgdGhpcy5lbWl0RXJyb3JDaGFuZ2VFdmVudChvbGRWYWx1ZSwgZXJyb3IpO1xuICAgIH0sICgkZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICAvLyBkb1ByZXZlbnRlZFxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCBkaWFsb2dCdXR0b25zKCk6IEJ1dHRvbk1vZGVsW10ge1xuICAgIHJldHVybiB0aGlzLl9idXR0b25zO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNldCBkaWFsb2dCdXR0b25zKGJ1dHRvbnM6IEJ1dHRvbk1vZGVsW10pIHtcbiAgICBpZiAodGhpcy5fYnV0dG9ucyA9PT0gYnV0dG9ucykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBvbGRWYWx1ZSA9IHRoaXMuX2J1dHRvbnM7XG5cbiAgICBFdmVudFV0aWxzLmhhbmRsZUJyb3dzZXJFdmVudCh0aGlzLCAnYmVmb3JlQnV0dG9uc0NoYW5nZUV2ZW50JywgdW5kZWZpbmVkLCB0cnVlLCAoJGV2ZW50OiBFdmVudCkgPT4ge1xuICAgICAgLy8gZG9FdmVudFxuICAgICAgdGhpcy5fYnV0dG9ucyA9IGJ1dHRvbnM7XG4gICAgfSwgKCRldmVudDogRXZlbnQpID0+IHtcbiAgICAgIC8vIGVtaXRCZWZvcmVFdmVudFxuICAgICAgdGhpcy5lbWl0QmVmb3JlQnV0dG9uc0NoYW5nZUV2ZW50KG9sZFZhbHVlLCBidXR0b25zKTtcbiAgICB9LCAoJGV2ZW50OiBFdmVudCkgPT4ge1xuICAgICAgLy8gZW1pdEFmdGVyRXZlbnRcbiAgICAgIHRoaXMuZW1pdEJ1dHRvbnNDaGFuZ2VFdmVudChvbGRWYWx1ZSwgYnV0dG9ucyk7XG4gICAgfSwgKCRldmVudDogRXZlbnQpID0+IHtcbiAgICAgIC8vIGRvUHJldmVudGVkXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0RGlhbG9nUmVzdWx0KCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMucmVzdWx0O1xuICB9XG5cbiAgcHVibGljIHNldERpYWxvZ1Jlc3VsdChyZXN1bHQ6IGFueSk6IHZvaWQge1xuICAgIHRoaXMucmVzdWx0ID0gcmVzdWx0O1xuICB9XG5cbiAgcHVibGljIGdldERpYWxvZ0Vycm9yKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZXJyb3I7XG4gIH1cblxuICBwdWJsaWMgc2V0RGlhbG9nRXJyb3IoZXJyb3I6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuZXJyb3IgPSBlcnJvcjtcbiAgfVxuXG4gIHB1YmxpYyBnZXREaWFsb2dCdXR0b25zKCk6IEJ1dHRvbk1vZGVsW10ge1xuICAgIHJldHVybiB0aGlzLmRpYWxvZ0J1dHRvbnM7XG4gIH1cblxuICBwdWJsaWMgc2V0RGlhbG9nQnV0dG9ucyhkaWFsb2dCdXR0b25zOiBCdXR0b25Nb2RlbFtdKTogdm9pZCB7XG4gICAgdGhpcy5kaWFsb2dCdXR0b25zID0gZGlhbG9nQnV0dG9ucztcbiAgfVxuXG4gIHB1YmxpYyBnZXRCZWZvcmVSZXN1bHRDaGFuZ2VFdmVudCgpOiBFdmVudEVtaXR0ZXI8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuYmVmb3JlUmVzdWx0Q2hhbmdlRXZlbnQ7XG4gIH1cblxuICBwdWJsaWMgc2V0QmVmb3JlUmVzdWx0Q2hhbmdlRXZlbnQoZXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+KTogdm9pZCB7XG4gICAgdGhpcy5iZWZvcmVSZXN1bHRDaGFuZ2VFdmVudCA9IGV2ZW50O1xuICB9XG5cbiAgcHVibGljIGdldFJlc3VsdENoYW5nZUV2ZW50KCk6IEV2ZW50RW1pdHRlcjxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5yZXN1bHRDaGFuZ2VFdmVudDtcbiAgfVxuXG4gIHB1YmxpYyBzZXRSZXN1bHRDaGFuZ2VFdmVudChldmVudDogRXZlbnRFbWl0dGVyPGFueT4pOiB2b2lkIHtcbiAgICB0aGlzLnJlc3VsdENoYW5nZUV2ZW50ID0gZXZlbnQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0QmVmb3JlRXJyb3JDaGFuZ2VFdmVudCgpOiBFdmVudEVtaXR0ZXI8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuYmVmb3JlRXJyb3JDaGFuZ2VFdmVudDtcbiAgfVxuXG4gIHB1YmxpYyBzZXRCZWZvcmVFcnJvckNoYW5nZUV2ZW50KGV2ZW50OiBFdmVudEVtaXR0ZXI8YW55Pik6IHZvaWQge1xuICAgIHRoaXMuYmVmb3JlRXJyb3JDaGFuZ2VFdmVudCA9IGV2ZW50O1xuICB9XG5cbiAgcHVibGljIGdldEVycm9yQ2hhbmdlRXZlbnQoKTogRXZlbnRFbWl0dGVyPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmVycm9yQ2hhbmdlRXZlbnQ7XG4gIH1cblxuICBwdWJsaWMgc2V0RXJyb3JDaGFuZ2VFdmVudChldmVudDogRXZlbnRFbWl0dGVyPGFueT4pOiB2b2lkIHtcbiAgICB0aGlzLmVycm9yQ2hhbmdlRXZlbnQgPSBldmVudDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRCZWZvcmVCdXR0b25zQ2hhbmdlRXZlbnQoKTogRXZlbnRFbWl0dGVyPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmJlZm9yZUJ1dHRvbnNDaGFuZ2VFdmVudDtcbiAgfVxuXG4gIHB1YmxpYyBzZXRCZWZvcmVCdXR0b25zQ2hhbmdlRXZlbnQoZXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+KTogdm9pZCB7XG4gICAgdGhpcy5iZWZvcmVCdXR0b25zQ2hhbmdlRXZlbnQgPSBldmVudDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRCdXR0b25zQ2hhbmdlRXZlbnQoKTogRXZlbnRFbWl0dGVyPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmJ1dHRvbnNDaGFuZ2VFdmVudDtcbiAgfVxuXG4gIHB1YmxpYyBzZXRCdXR0b25zQ2hhbmdlRXZlbnQoZXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+KTogdm9pZCB7XG4gICAgdGhpcy5idXR0b25zQ2hhbmdlRXZlbnQgPSBldmVudDtcbiAgfVxuXG4gIHB1YmxpYyBkb1ByZWxvYWQoKTogUHJvbWlzZTxhbnk+IHsgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHsgcmVzb2x2ZShudWxsKTsgfSk7IH0gcHVibGljIGRvTG9hZGVkKCk6IHZvaWQge1xuICB9XG5cbiAgLy8gRGVmYXVsdCBtZXRob2QgaW1wbGVtZW50YXRpb25zXG4gIHB1YmxpYyBpc1NlbGZEYXRhRGlydHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIHNlbGZTYXZlRGF0YShkYXRhOiBhbnkpOiB2b2lkIHtcbiAgfVxuXG4gIHB1YmxpYyBzZWxmUmVzZXREYXRhKCk6IHZvaWQge1xuICB9XG59XG4iXX0=