UNPKG

com.phloxui

Version:

PhloxUI Ng2+ Framework

263 lines (262 loc) 23.6 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ import * as tslib_1 from "tslib"; import { AbstractInputDataView } from './AbstractInputDataView'; import { Option } from '../../../decorator/Option.decorator'; /** * @abstract */ export class AbstractHasFormatterInputDataView extends AbstractInputDataView { /** * @param {?} elementRef * @param {?} formatterFactory * @param {?} needFocusService */ constructor(elementRef, formatterFactory, needFocusService) { super(elementRef, needFocusService); this.formatterFactory = formatterFactory; this._formatterInited = false; } /** * @param {?} formatter * @param {?} data * @return {?} */ static resolveFormattedData(formatter, data) { if (formatter !== null && typeof formatter !== 'undefined') { return formatter.format(data); } return data; } /** * @param {?} formatter * @param {?} formattedData * @return {?} */ static parseFormattedData(formatter, formattedData) { if (formatter !== null && typeof formatter !== 'undefined') { return formatter.parse(formattedData); } return formattedData; } /** * @return {?} */ get formattedData() { if (!this.formatterUsePropertyValue && this._formatterInited) { return this.getFormattedData(); } else { return this._formattedData; } } /** * @param {?} formattedData * @return {?} */ set formattedData(formattedData) { this.setFormattedData(formattedData); } /** * @return {?} */ ngOnInit() { super.ngOnInit(); // Initialize formatter. if (this.formatter !== null && this.formatter !== undefined) { // Call setFormatter() method to initialize. this.setFormatter(this.formatter); } else if (this.formatterName !== null && this.formatterName !== undefined) { // Call setFormatterName() method to initialize. this.setFormatterName(this.formatterName); } else { this.formatter = null; this.formatterName = null; } this._formatterInited = true; } /** * @param {?} typeOfData * @param {?} inputVal * @return {?} */ _castValueToData(typeOfData, inputVal) { let /** @type {?} */ type = typeOfData; if (inputVal === null || inputVal === undefined) { // Return default behavior from super. return super._castValueToData(typeOfData, inputVal); } if (type === null || type === undefined || type.toLowerCase() === AbstractInputDataView.TYPE_AUTO) { // Auto resolve "typeOfData" of inputVal. type = typeof inputVal; } if (type === 'string' && typeof inputVal !== 'string') { // If inputVal is not string but data type is string, try to parse it to string using formatter. if (this.formatter !== null && this.formatter !== undefined) { return this.formatter.format(inputVal); } } // Return default behavior from super. return super._castValueToData(typeOfData, inputVal); } /** * @param {?} data * @return {?} */ setData(data) { super.setData(data); this._formattedData = this.getFormattedData(); } /** * @param {?} inputVal * @param {?=} $event * @param {?=} fireEvent * @return {?} */ setInputValue(inputVal, $event, fireEvent) { super.setInputValue(inputVal, $event, fireEvent); this._formattedData = this.getFormattedData(); } /** * @return {?} */ isFormatterUsePropertyValue() { return this.formatterUsePropertyValue; } /** * @return {?} */ getFormatterName() { return this.formatterName; } /** * @param {?} formatterName * @return {?} */ setFormatterName(formatterName) { this.formatterName = formatterName; let /** @type {?} */ formatter = null; if (this.formatterFactory !== null && typeof this.formatterFactory !== 'undefined') { formatter = this.formatterFactory.createFormatter(formatterName); } this.formatter = formatter; this.setFormatterOptions(this.formatterOptions); } /** * @return {?} */ getFormatterOptions() { return this.formatterOptions; } /** * @param {?} options * @return {?} */ setFormatterOptions(options) { this.formatterOptions = options; if (this.formatter !== null && typeof this.formatter !== 'undefined') { let /** @type {?} */ f = this.formatter; if (typeof f.setOptions === 'function') { f.setOptions(this.formatterOptions); } } this._formattedData = this.getFormattedData(); } /** * @return {?} */ getFormatter() { return this.formatter; } /** * @param {?} formatter * @return {?} */ setFormatter(formatter) { this.formatter = formatter; if (this.formatter !== null && typeof this.formatter !== 'undefined') { this.formatterName = this.formatter.getName(); } else { this.formatterName = null; } this.setFormatterOptions(this.formatterOptions); } /** * @param {?} options * @return {?} */ setOptions(options) { super.setOptions(options); if (this.formatter !== null && typeof this.formatter !== 'undefined') { this.setFormatter(this.formatter); } else if (this.formatterName !== null && typeof this.formatterName !== 'undefined') { this.setFormatterName(this.formatterName); } else { this.formatter = null; this.formatterName = null; } } /** * @return {?} */ getFormattedData() { return AbstractHasFormatterInputDataView.resolveFormattedData(this.formatter, this.getInputValue()); } /** * @param {?} formattedData * @param {?=} $event * @param {?=} fireEvent * @return {?} */ setFormattedData(formattedData, $event, fireEvent) { this._formattedData = formattedData; let /** @type {?} */ parsed = AbstractHasFormatterInputDataView.parseFormattedData(this.formatter, formattedData); this.setInputValue(parsed, $event, fireEvent); } /** * @return {?} */ refreshFormattedData() { this._formattedData = this.getFormattedData(); } } tslib_1.__decorate([ Option('formatter.name'), tslib_1.__metadata("design:type", String) ], AbstractHasFormatterInputDataView.prototype, "formatterName", void 0); tslib_1.__decorate([ Option('formatter.options'), tslib_1.__metadata("design:type", Object) ], AbstractHasFormatterInputDataView.prototype, "formatterOptions", void 0); tslib_1.__decorate([ Option('formatter.instance'), tslib_1.__metadata("design:type", Object) ], AbstractHasFormatterInputDataView.prototype, "formatter", void 0); tslib_1.__decorate([ Option('formatter.usePropertyValue'), tslib_1.__metadata("design:type", Boolean) ], AbstractHasFormatterInputDataView.prototype, "formatterUsePropertyValue", void 0); function AbstractHasFormatterInputDataView_tsickle_Closure_declarations() { /** @type {?} */ AbstractHasFormatterInputDataView.prototype._formattedData; /** @type {?} */ AbstractHasFormatterInputDataView.prototype.formatterName; /** @type {?} */ AbstractHasFormatterInputDataView.prototype.formatterOptions; /** @type {?} */ AbstractHasFormatterInputDataView.prototype.formatter; /** @type {?} */ AbstractHasFormatterInputDataView.prototype.formatterUsePropertyValue; /** @type {?} */ AbstractHasFormatterInputDataView.prototype.formatterFactory; /** @type {?} */ AbstractHasFormatterInputDataView.prototype._formatterInited; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWJzdHJhY3RIYXNGb3JtYXR0ZXJJbnB1dERhdGFWaWV3LmpzIiwic291cmNlUm9vdCI6Im5nOi8vY29tLnBobG94dWkvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50L2RhdGF2aWV3L2lucHV0L0Fic3RyYWN0SGFzRm9ybWF0dGVySW5wdXREYXRhVmlldy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUNBLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBR2hFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQzs7OztBQUk3RCxNQUFNLHdDQUFrRCxTQUFRLHFCQUFxQjs7Ozs7O0lBNkNuRixZQUFZLFVBQXNCLEVBQUUsZ0JBQWtDLEVBQUUsZ0JBQWtDO1FBQ3hHLEtBQUssQ0FBQyxVQUFVLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUVwQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUM7UUFDekMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztLQUMvQjs7Ozs7O0lBaERNLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxTQUFxQixFQUFFLElBQVM7UUFDakUsRUFBRSxDQUFDLENBQUMsU0FBUyxLQUFLLElBQUksSUFBSSxPQUFPLFNBQVMsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQzNELE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQy9CO1FBRUQsTUFBTSxDQUFDLElBQUksQ0FBQzs7Ozs7OztJQUdQLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxTQUFxQixFQUFFLGFBQWtCO1FBQ3hFLEVBQUUsQ0FBQyxDQUFDLFNBQVMsS0FBSyxJQUFJLElBQUksT0FBTyxTQUFTLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQztZQUMzRCxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztTQUN2QztRQUVELE1BQU0sQ0FBQyxh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RUFBRSxDQUFDLENBQUM7Ozs7Ozs7O0lBRy9GLGdCQUFnQixDQUFDLGFBQWtCLEVBQUUsTUFBYyxFQUFFLFNBQW1CO1FBQzdFLElBQUksQ0FBQyxjQUFjLEdBQUcsYUFBYSxDQUFDO1FBRXBDLHFCQUFJLE1BQU0sR0FBUSxpQ0FBaUMsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBRXRHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQzs7Ozs7SUFHekMsb0JBQW9CO1FBQ3pCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7O0NBRWpEOztJQXhLRSxNQUFNLENBQUMsZ0JBQWdCLENBQUM7Ozs7SUFFeEIsTUFBTSxDQUFDLG1CQUFtQixDQUFDOzs7O0lBRTNCLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQzs7OztJQUU1QixNQUFNLENBQUMsNEJBQTRCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPbkluaXQsIEVsZW1lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0SW5wdXREYXRhVmlldyB9IGZyb20gJy4vQWJzdHJhY3RJbnB1dERhdGFWaWV3JztcbmltcG9ydCB7IElIYXNGb3JtYXR0ZXIgfSBmcm9tICcuLi8uLi9JSGFzRm9ybWF0dGVyJztcbmltcG9ydCB7IElGb3JtYXR0ZXIgfSBmcm9tICcuLi8uLi8uLi9zaGFyZS9mb3JtYXR0ZXIvSUZvcm1hdHRlcic7XG5pbXBvcnQgeyBPcHRpb24gfSBmcm9tICcuLi8uLi8uLi9kZWNvcmF0b3IvT3B0aW9uLmRlY29yYXRvcic7XG5pbXBvcnQgeyBGb3JtYXR0ZXJGYWN0b3J5IH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZS9Gb3JtYXR0ZXJGYWN0b3J5LnNlcnZpY2UnO1xuaW1wb3J0IHsgTmVlZEZvY3VzU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2UvTmVlZEZvY3VzU2VydmljZS5zZXJ2aWNlJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFic3RyYWN0SGFzRm9ybWF0dGVySW5wdXREYXRhVmlldyBleHRlbmRzIEFic3RyYWN0SW5wdXREYXRhVmlldyBpbXBsZW1lbnRzIE9uSW5pdCwgSUhhc0Zvcm1hdHRlciB7XG5cbiAgcHVibGljIHN0YXRpYyByZXNvbHZlRm9ybWF0dGVkRGF0YShmb3JtYXR0ZXI6IElGb3JtYXR0ZXIsIGRhdGE6IGFueSk6IGFueSB7XG4gICAgaWYgKGZvcm1hdHRlciAhPT0gbnVsbCAmJiB0eXBlb2YgZm9ybWF0dGVyICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIGZvcm1hdHRlci5mb3JtYXQoZGF0YSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHBhcnNlRm9ybWF0dGVkRGF0YShmb3JtYXR0ZXI6IElGb3JtYXR0ZXIsIGZvcm1hdHRlZERhdGE6IGFueSk6IGFueSB7XG4gICAgaWYgKGZvcm1hdHRlciAhPT0gbnVsbCAmJiB0eXBlb2YgZm9ybWF0dGVyICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIGZvcm1hdHRlci5wYXJzZShmb3JtYXR0ZWREYXRhKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZm9ybWF0dGVkRGF0YTtcbiAgfVxuXG4gIHB1YmxpYyBfZm9ybWF0dGVkRGF0YTogYW55O1xuXG4gIEBPcHRpb24oJ2Zvcm1hdHRlci5uYW1lJylcbiAgcHJvdGVjdGVkIGZvcm1hdHRlck5hbWU6IHN0cmluZztcbiAgQE9wdGlvbignZm9ybWF0dGVyLm9wdGlvbnMnKVxuICBwcm90ZWN0ZWQgZm9ybWF0dGVyT3B0aW9uczogYW55O1xuICBAT3B0aW9uKCdmb3JtYXR0ZXIuaW5zdGFuY2UnKVxuICBwcm90ZWN0ZWQgZm9ybWF0dGVyOiBJRm9ybWF0dGVyO1xuICBAT3B0aW9uKCdmb3JtYXR0ZXIudXNlUHJvcGVydHlWYWx1ZScpXG4gIHByb3RlY3RlZCBmb3JtYXR0ZXJVc2VQcm9wZXJ0eVZhbHVlOiBib29sZWFuO1xuXG4gIHByb3RlY3RlZCBmb3JtYXR0ZXJGYWN0b3J5OiBGb3JtYXR0ZXJGYWN0b3J5O1xuICBwcm90ZWN0ZWQgX2Zvcm1hdHRlckluaXRlZDogYm9vbGVhbjtcblxuICAvLyBVc2UgdGhpcyBwcm9wZXJ0eSBhY2Nlc3NvciBtZXRob2QgdG8gYmluZCB3aXRoIGh0bWwgdGVtcGxhdGUuXG4gIHB1YmxpYyBnZXQgZm9ybWF0dGVkRGF0YSgpOiBhbnkge1xuICAgIGlmICghdGhpcy5mb3JtYXR0ZXJVc2VQcm9wZXJ0eVZhbHVlICYmIHRoaXMuX2Zvcm1hdHRlckluaXRlZCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Rm9ybWF0dGVkRGF0YSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5fZm9ybWF0dGVkRGF0YTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2V0IGZvcm1hdHRlZERhdGEoZm9ybWF0dGVkRGF0YTogYW55KSB7XG4gICAgdGhpcy5zZXRGb3JtYXR0ZWREYXRhKGZvcm1hdHRlZERhdGEpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoZWxlbWVudFJlZjogRWxlbWVudFJlZiwgZm9ybWF0dGVyRmFjdG9yeTogRm9ybWF0dGVyRmFjdG9yeSwgbmVlZEZvY3VzU2VydmljZTogTmVlZEZvY3VzU2VydmljZSkge1xuICAgIHN1cGVyKGVsZW1lbnRSZWYsIG5lZWRGb2N1c1NlcnZpY2UpO1xuXG4gICAgdGhpcy5mb3JtYXR0ZXJGYWN0b3J5ID0gZm9ybWF0dGVyRmFjdG9yeTtcbiAgICB0aGlzLl9mb3JtYXR0ZXJJbml0ZWQgPSBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSBmb3JtYXR0ZXIuXG4gICAgaWYgKHRoaXMuZm9ybWF0dGVyICE9PSBudWxsICYmIHRoaXMuZm9ybWF0dGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIENhbGwgc2V0Rm9ybWF0dGVyKCkgbWV0aG9kIHRvIGluaXRpYWxpemUuXG4gICAgICB0aGlzLnNldEZvcm1hdHRlcih0aGlzLmZvcm1hdHRlcik7XG4gICAgfSBlbHNlIGlmICh0aGlzLmZvcm1hdHRlck5hbWUgIT09IG51bGwgJiYgdGhpcy5mb3JtYXR0ZXJOYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIENhbGwgc2V0Rm9ybWF0dGVyTmFtZSgpIG1ldGhvZCB0byBpbml0aWFsaXplLlxuICAgICAgdGhpcy5zZXRGb3JtYXR0ZXJOYW1lKHRoaXMuZm9ybWF0dGVyTmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZm9ybWF0dGVyID0gbnVsbDtcbiAgICAgIHRoaXMuZm9ybWF0dGVyTmFtZSA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMuX2Zvcm1hdHRlckluaXRlZCA9IHRydWU7XG4gIH1cblxuICAvLyBPdmVycmlkZSB0byBhdXRvIHBhcnNlIFwiYW55XCIgb2JqZWN0IHZhbHVlIHRvIFwic3RyaW5nXCIgZGF0YSB0eXBlLlxuICBwcm90ZWN0ZWQgX2Nhc3RWYWx1ZVRvRGF0YSh0eXBlT2ZEYXRhOiBzdHJpbmcsIGlucHV0VmFsOiBhbnkpOiBhbnkge1xuICAgIGxldCB0eXBlOiBzdHJpbmcgPSB0eXBlT2ZEYXRhO1xuXG4gICAgaWYgKGlucHV0VmFsID09PSBudWxsIHx8IGlucHV0VmFsID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIFJldHVybiBkZWZhdWx0IGJlaGF2aW9yIGZyb20gc3VwZXIuXG4gICAgICByZXR1cm4gc3VwZXIuX2Nhc3RWYWx1ZVRvRGF0YSh0eXBlT2ZEYXRhLCBpbnB1dFZhbCk7XG4gICAgfVxuICAgIGlmICh0eXBlID09PSBudWxsIHx8IHR5cGUgPT09IHVuZGVmaW5lZCB8fCB0eXBlLnRvTG93ZXJDYXNlKCkgPT09IEFic3RyYWN0SW5wdXREYXRhVmlldy5UWVBFX0FVVE8pIHtcbiAgICAgIC8vIEF1dG8gcmVzb2x2ZSBcInR5cGVPZkRhdGFcIiBvZiBpbnB1dFZhbC5cbiAgICAgIHR5cGUgPSB0eXBlb2YgaW5wdXRWYWw7XG4gICAgfVxuXG4gICAgaWYgKHR5cGUgPT09ICdzdHJpbmcnICYmIHR5cGVvZiBpbnB1dFZhbCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIElmIGlucHV0VmFsIGlzIG5vdCBzdHJpbmcgYnV0IGRhdGEgdHlwZSBpcyBzdHJpbmcsIHRyeSB0byBwYXJzZSBpdCB0byBzdHJpbmcgdXNpbmcgZm9ybWF0dGVyLlxuICAgICAgaWYgKHRoaXMuZm9ybWF0dGVyICE9PSBudWxsICYmIHRoaXMuZm9ybWF0dGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0dGVyLmZvcm1hdChpbnB1dFZhbCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIGRlZmF1bHQgYmVoYXZpb3IgZnJvbSBzdXBlci5cbiAgICByZXR1cm4gc3VwZXIuX2Nhc3RWYWx1ZVRvRGF0YSh0eXBlT2ZEYXRhLCBpbnB1dFZhbCk7XG4gIH1cblxuICAvLyBPdmVycmlkZSBzZXREYXRhKCkgdG8gYXV0byByZXNvbHZlIFwidGhpcy5fZm9ybWF0dGVkRGF0YVwiLlxuICBwdWJsaWMgc2V0RGF0YShkYXRhOiBhbnkpOiB2b2lkIHtcbiAgICBzdXBlci5zZXREYXRhKGRhdGEpO1xuXG4gICAgdGhpcy5fZm9ybWF0dGVkRGF0YSA9IHRoaXMuZ2V0Rm9ybWF0dGVkRGF0YSgpO1xuICB9XG5cbiAgLy8gT3ZlcnJpZGUgc2V0SW5wdXRWYWx1ZSgpIHRvIGF1dG8gcmVzb2x2ZSBcInRoaXMuX2Zvcm1hdHRlZERhdGFcIi5cbiAgcHVibGljIHNldElucHV0VmFsdWUoaW5wdXRWYWw6IGFueSwgJGV2ZW50PzogRXZlbnQsIGZpcmVFdmVudD86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBzdXBlci5zZXRJbnB1dFZhbHVlKGlucHV0VmFsLCAkZXZlbnQsIGZpcmVFdmVudCk7XG5cbiAgICB0aGlzLl9mb3JtYXR0ZWREYXRhID0gdGhpcy5nZXRGb3JtYXR0ZWREYXRhKCk7XG4gIH1cblxuICBwdWJsaWMgaXNGb3JtYXR0ZXJVc2VQcm9wZXJ0eVZhbHVlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmZvcm1hdHRlclVzZVByb3BlcnR5VmFsdWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0Rm9ybWF0dGVyTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmZvcm1hdHRlck5hbWU7XG4gIH1cblxuICBwdWJsaWMgc2V0Rm9ybWF0dGVyTmFtZShmb3JtYXR0ZXJOYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmZvcm1hdHRlck5hbWUgPSBmb3JtYXR0ZXJOYW1lO1xuXG4gICAgbGV0IGZvcm1hdHRlcjogYW55ID0gbnVsbDtcbiAgICBpZiAodGhpcy5mb3JtYXR0ZXJGYWN0b3J5ICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLmZvcm1hdHRlckZhY3RvcnkgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBmb3JtYXR0ZXIgPSB0aGlzLmZvcm1hdHRlckZhY3RvcnkuY3JlYXRlRm9ybWF0dGVyKGZvcm1hdHRlck5hbWUpO1xuICAgIH1cbiAgICB0aGlzLmZvcm1hdHRlciA9IGZvcm1hdHRlcjtcblxuICAgIHRoaXMuc2V0Rm9ybWF0dGVyT3B0aW9ucyh0aGlzLmZvcm1hdHRlck9wdGlvbnMpO1xuICB9XG5cbiAgcHVibGljIGdldEZvcm1hdHRlck9wdGlvbnMoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5mb3JtYXR0ZXJPcHRpb25zO1xuICB9XG5cbiAgcHVibGljIHNldEZvcm1hdHRlck9wdGlvbnMob3B0aW9uczogYW55KTogdm9pZCB7XG4gICAgdGhpcy5mb3JtYXR0ZXJPcHRpb25zID0gb3B0aW9ucztcblxuICAgIGlmICh0aGlzLmZvcm1hdHRlciAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5mb3JtYXR0ZXIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBsZXQgZjogYW55ID0gdGhpcy5mb3JtYXR0ZXI7XG4gICAgICBpZiAodHlwZW9mIGYuc2V0T3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBmLnNldE9wdGlvbnModGhpcy5mb3JtYXR0ZXJPcHRpb25zKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9mb3JtYXR0ZWREYXRhID0gdGhpcy5nZXRGb3JtYXR0ZWREYXRhKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Rm9ybWF0dGVyKCk6IElGb3JtYXR0ZXIge1xuICAgIHJldHVybiB0aGlzLmZvcm1hdHRlcjtcbiAgfVxuXG4gIHB1YmxpYyBzZXRGb3JtYXR0ZXIoZm9ybWF0dGVyOiBJRm9ybWF0dGVyKTogdm9pZCB7XG4gICAgdGhpcy5mb3JtYXR0ZXIgPSBmb3JtYXR0ZXI7XG5cbiAgICBpZiAodGhpcy5mb3JtYXR0ZXIgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMuZm9ybWF0dGVyICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhpcy5mb3JtYXR0ZXJOYW1lID0gdGhpcy5mb3JtYXR0ZXIuZ2V0TmFtZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZvcm1hdHRlck5hbWUgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuc2V0Rm9ybWF0dGVyT3B0aW9ucyh0aGlzLmZvcm1hdHRlck9wdGlvbnMpO1xuICB9XG5cbiAgcHVibGljIHNldE9wdGlvbnMob3B0aW9uczogYW55KTogdm9pZCB7XG4gICAgc3VwZXIuc2V0T3B0aW9ucyhvcHRpb25zKTtcblxuICAgIGlmICh0aGlzLmZvcm1hdHRlciAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5mb3JtYXR0ZXIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aGlzLnNldEZvcm1hdHRlcih0aGlzLmZvcm1hdHRlcik7XG4gICAgfSBlbHNlIGlmICh0aGlzLmZvcm1hdHRlck5hbWUgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMuZm9ybWF0dGVyTmFtZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRoaXMuc2V0Rm9ybWF0dGVyTmFtZSh0aGlzLmZvcm1hdHRlck5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZvcm1hdHRlciA9IG51bGw7XG4gICAgICB0aGlzLmZvcm1hdHRlck5hbWUgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRGb3JtYXR0ZWREYXRhKCk6IGFueSB7XG4gICAgcmV0dXJuIEFic3RyYWN0SGFzRm9ybWF0dGVySW5wdXREYXRhVmlldy5yZXNvbHZlRm9ybWF0dGVkRGF0YSh0aGlzLmZvcm1hdHRlciwgdGhpcy5nZXRJbnB1dFZhbHVlKCkpO1xuICB9XG5cbiAgcHVibGljIHNldEZvcm1hdHRlZERhdGEoZm9ybWF0dGVkRGF0YTogYW55LCAkZXZlbnQ/OiBFdmVudCwgZmlyZUV2ZW50PzogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuX2Zvcm1hdHRlZERhdGEgPSBmb3JtYXR0ZWREYXRhO1xuXG4gICAgbGV0IHBhcnNlZDogYW55ID0gQWJzdHJhY3RIYXNGb3JtYXR0ZXJJbnB1dERhdGFWaWV3LnBhcnNlRm9ybWF0dGVkRGF0YSh0aGlzLmZvcm1hdHRlciwgZm9ybWF0dGVkRGF0YSk7XG5cbiAgICB0aGlzLnNldElucHV0VmFsdWUocGFyc2VkLCAkZXZlbnQsIGZpcmVFdmVudCk7XG4gIH1cblxuICBwdWJsaWMgcmVmcmVzaEZvcm1hdHRlZERhdGEoKTogdm9pZCB7XG4gICAgdGhpcy5fZm9ybWF0dGVkRGF0YSA9IHRoaXMuZ2V0Rm9ybWF0dGVkRGF0YSgpO1xuICB9XG59XG4iXX0=