com.phloxui
Version:
PhloxUI Ng2+ Framework
263 lines (262 loc) • 23.6 kB
JavaScript
/**
* @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=