com.phloxui
Version:
PhloxUI Ng2+ Framework
322 lines (321 loc) • 29.8 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
import * as tslib_1 from "tslib";
import { AbstractDataLangSelector } from './AbstractDataLangSelector';
import { I18N, Option } from '../../decorator/decorators';
/**
* @abstract
*/
var AbstractComponentDataLangSelector = /** @class */ (function (_super) {
tslib_1.__extends(AbstractComponentDataLangSelector, _super);
function AbstractComponentDataLangSelector(elementRef, dialogService) {
var _this = _super.call(this, elementRef, dialogService) || this;
_this.componentInstances = {};
_this.defaultComponentHandler = function (result) {
_this.defaultComponentInstance = result.instance;
var /** @type {?} */ defaultData = _this.getDefaultData();
var /** @type {?} */ defWrapData = _this.getInstanceDefaultData(defaultData);
if (typeof _this.defaultComponentInstance.setData === 'function') {
_this.defaultComponentInstance.setData(defWrapData);
}
};
_this.componentHandler = function (result) {
if (result !== null && typeof result !== 'undefined') {
if (result.setting !== null && typeof result.setting !== 'undefined' &&
result.setting.code !== null && typeof result.setting.code !== 'undefined') {
_this.componentInstances[result.setting.code] = result.instance;
var /** @type {?} */ dataLang = _this.getDataLangFromIndex(result.setting.index);
var /** @type {?} */ dataLangWrapData = _this.getInstanceDataLanguage(dataLang);
if (typeof _this.componentInstances[result.setting.code].setData === 'function') {
_this.componentInstances[result.setting.code].setData(dataLangWrapData);
}
}
}
};
return _this;
}
/**
* @return {?}
*/
AbstractComponentDataLangSelector.prototype.ngOnInit = /**
* @return {?}
*/
function () {
_super.prototype.ngOnInit.call(this);
};
/**
* @param {?} data
* @return {?}
*/
AbstractComponentDataLangSelector.prototype.getIndexFromDataLang = /**
* @param {?} data
* @return {?}
*/
function (data) {
if (data !== null && typeof data !== 'undefined') {
return this.dataLangList.indexOf(data);
}
return -1;
};
/**
* @param {?} index
* @return {?}
*/
AbstractComponentDataLangSelector.prototype.getDataLangFromIndex = /**
* @param {?} index
* @return {?}
*/
function (index) {
if (index !== null && typeof index === 'number' && index > -1) {
if (index < this.dataLangList.length) {
return this.dataLangList[index];
}
}
return null;
};
/**
* @param {?} langCode
* @return {?}
*/
AbstractComponentDataLangSelector.prototype.getLanuageIndexFromCode = /**
* @param {?} langCode
* @return {?}
*/
function (langCode) {
if (langCode === null || typeof langCode === 'undefined') {
return -1;
}
for (var /** @type {?} */ i = 0; i < this.languageList.length; i++) {
var /** @type {?} */ lang = this.languageList[i];
if (lang === null || typeof lang === 'undefined') {
continue;
}
var /** @type {?} */ lCode = lang.code;
if (langCode === lCode) {
return i;
}
}
return -1;
};
/**
* @return {?}
*/
AbstractComponentDataLangSelector.prototype.reAddingDataToInstance = /**
* @return {?}
*/
function () {
var /** @type {?} */ defaultData = this.getDefaultData();
var /** @type {?} */ defWrapData = this.getInstanceDefaultData(defaultData);
if (this.defaultComponentInstance !== null && typeof this.defaultComponentInstance !== 'undefined') {
if (typeof this.defaultComponentInstance.setData === 'function') {
this.defaultComponentInstance.setData(defWrapData);
}
}
for (var /** @type {?} */ i = 0; i < this.dataLangList.length; i++) {
var /** @type {?} */ d = this.dataLangList[i];
var /** @type {?} */ setting = this.getComponentSetting(i);
var /** @type {?} */ langCode = null;
if (setting !== null && typeof setting !== 'undefined') {
langCode = setting.code;
}
if (langCode === null || typeof langCode === 'undefined') {
continue;
}
var /** @type {?} */ instance = null;
if (this.componentInstances !== null && typeof this.componentInstances !== 'undefined') {
instance = this.componentInstances[langCode];
}
if (instance !== null && typeof instance !== 'undefined') {
if (typeof instance.setData === 'function') {
var /** @type {?} */ dWrap = this.getInstanceDataLanguage(d);
instance.setData(dWrap);
}
}
}
};
/**
* @param {?} data
* @return {?}
*/
AbstractComponentDataLangSelector.prototype.setData = /**
* @param {?} data
* @return {?}
*/
function (data) {
_super.prototype.setData.call(this, data);
this.reAddingDataToInstance();
};
/**
* @param {?} langCode string as a language code
* @return {?} any as a component instance of langCode return defaultInstance if langCode is null
*/
AbstractComponentDataLangSelector.prototype.getComponentInstance = /**
* @param {?} langCode string as a language code
* @return {?} any as a component instance of langCode return defaultInstance if langCode is null
*/
function (langCode) {
if (langCode === null) {
// if null should return default instance
return this.defaultComponentInstance;
}
else {
if (typeof langCode !== 'undefined') {
var /** @type {?} */ inst = this.componentInstances[langCode];
if (inst !== null && typeof inst !== 'undefined') {
return inst;
}
}
}
return null;
};
/**
* data null return as a defaultInstanceDirty
* @param {?} data as a dataLanguage
* @return {?} boolean is dataLanguageDirty
*/
AbstractComponentDataLangSelector.prototype.isDataLanguageDirty = /**
* data null return as a defaultInstanceDirty
* @param {?} data as a dataLanguage
* @return {?} boolean is dataLanguageDirty
*/
function (data) {
var /** @type {?} */ inst = null;
if (typeof data !== 'undefined') {
if (data === null) {
// default
inst = this.defaultComponentInstance;
}
else {
// index
var /** @type {?} */ index = this.getIndexFromDataLang(data);
var /** @type {?} */ setting = this.getComponentSetting(index);
var /** @type {?} */ langCode = null;
if (setting !== null && typeof setting !== 'undefined') {
langCode = setting.code;
}
if (langCode !== null && typeof langCode !== 'undefined') {
inst = this.componentInstances[langCode];
}
}
}
if (inst !== null && typeof inst !== 'undefined') {
if (typeof inst.isDataDirty === 'function') {
return inst.isDataDirty();
}
}
return false;
};
/**
* @param {?} index
* @return {?}
*/
AbstractComponentDataLangSelector.prototype.getComponentSetting = /**
* @param {?} index
* @return {?}
*/
function (index) {
var /** @type {?} */ langCode = null;
if (index !== null && typeof index === 'number') {
if (index > -1 && index < this.languageList.length) {
langCode = this.languageList[index].code;
}
}
var /** @type {?} */ setting = {
code: langCode,
index: index
};
return setting;
};
/**
* @return {?}
*/
AbstractComponentDataLangSelector.prototype.getDefaultComponentInstance = /**
* @return {?}
*/
function () {
return this.defaultComponentInstance;
};
/**
* @return {?}
*/
AbstractComponentDataLangSelector.prototype.getComponentInstances = /**
* @return {?}
*/
function () {
return this.componentInstances;
};
/**
* @return {?}
*/
AbstractComponentDataLangSelector.prototype.getDefaultComponentHandler = /**
* @return {?}
*/
function () {
return this.defaultComponentHandler;
};
/**
* @return {?}
*/
AbstractComponentDataLangSelector.prototype.getComponentHandler = /**
* @return {?}
*/
function () {
return this.componentHandler;
};
tslib_1.__decorate([
I18N(),
Option(),
tslib_1.__metadata("design:type", Object)
], AbstractComponentDataLangSelector.prototype, "componentInstances", void 0);
tslib_1.__decorate([
I18N(),
Option(),
tslib_1.__metadata("design:type", Object)
], AbstractComponentDataLangSelector.prototype, "defaultComponentInstance", void 0);
return AbstractComponentDataLangSelector;
}(AbstractDataLangSelector));
export { AbstractComponentDataLangSelector };
function AbstractComponentDataLangSelector_tsickle_Closure_declarations() {
/** @type {?} */
AbstractComponentDataLangSelector.prototype.componentHandler;
/**
* the object map that contains component instances that has langCode as a key
* @type {?}
*/
AbstractComponentDataLangSelector.prototype.defaultComponentHandler;
/** @type {?} */
AbstractComponentDataLangSelector.prototype.componentInstances;
/** @type {?} */
AbstractComponentDataLangSelector.prototype.defaultComponentInstance;
/**
* @abstract
* @return {?}
*/
AbstractComponentDataLangSelector.prototype.getLanguageFieldName = function () { };
/**
* @abstract
* @return {?}
*/
AbstractComponentDataLangSelector.prototype.getObjectIdFieldName = function () { };
/**
* @abstract
* @param {?} data
* @return {?}
*/
AbstractComponentDataLangSelector.prototype.getInstanceDefaultData = function (data) { };
/**
* @abstract
* @param {?} data
* @return {?}
*/
AbstractComponentDataLangSelector.prototype.getInstanceDataLanguage = function (data) { };
/**
* @abstract
* @param {?} langCode
* @return {?}
*/
AbstractComponentDataLangSelector.prototype.parseLanguageButtonModel = function (langCode) { };
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWJzdHJhY3RDb21wb25lbnREYXRhTGFuZ1NlbGVjdG9yLmpzIiwic291cmNlUm9vdCI6Im5nOi8vY29tLnBobG94dWkvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50L2RhdGF2aWV3L0Fic3RyYWN0Q29tcG9uZW50RGF0YUxhbmdTZWxlY3Rvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUVBLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRXRFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7Ozs7O0lBRU0sNkRBQXdCO0lBY3BGLDJDQUFZLFVBQXNCLEVBQUUsYUFBNEI7UUFBaEUsWUFDSSxrQkFBTSxVQUFVLEVBQUUsYUFBYSxDQUFDLFNBNEJuQztRQTFCRyxLQUFJLENBQUMsa0JBQWtCLEdBQUcsRUFBRSxDQUFDO1FBRTdCLEtBQUksQ0FBQyx1QkFBdUIsR0FBRyxVQUFDLE1BQVc7WUFDdkMsS0FBSSxDQUFDLHdCQUF3QixHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUM7WUFFaEQscUJBQUksV0FBVyxHQUFHLEtBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN4QyxxQkFBSSxXQUFXLEdBQUcsS0FBSSxDQUFDLHNCQUFzQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzNELEVBQUUsQ0FBQyxDQUFDLE9BQU8sS0FBSSxDQUFDLHdCQUF3QixDQUFDLE9BQU8sS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDO2dCQUM5RCxLQUFJLENBQUMsd0JBQXdCLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO2FBQ3REO1NBQ0osQ0FBQTtRQUVELEtBQUksQ0FBQyxnQkFBZ0IsR0FBRyxVQUFDLE1BQVc7WUFDaEMsRUFBRSxDQUFDLENBQUMsTUFBTSxLQUFLLElBQUksSUFBSSxPQUFPLE1BQU0sS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO2dCQUNuRCxFQUFFLENBQUMsQ0FBQyxNQUFNLENB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QUksT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQztZQUM5QyxFQUFFLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztnQkFDakQsUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDO2FBQzVDO1NBQ0o7UUFDRCxxQkFBSSxPQUFPLEdBQUc7WUFDVixJQUFJLEVBQUUsUUFBUTtZQUNkLEtBQUssRUFBRSxLQUFLO1NBQ2YsQ0FBQztRQUVGLE1BQU0sQ0FBQyxPQUFPLENBQUM7Ozs7O0lBR1osdUVBQTJCOzs7O1FBQ2hDLE1BQU0sQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUM7Ozs7O0lBR2hDLGlFQUFxQjs7OztRQUMxQixNQUFNLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDOzs7OztJQUcxQixzRUFBMEI7Ozs7UUFDL0IsTUFBTSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQzs7Ozs7SUFHL0IsK0RBQW1COzs7O1FBQ3hCLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7OztRQXRNOUIsSUFBSSxFQUFFO1FBQ04sTUFBTSxFQUFFOzs7O1FBRVIsSUFBSSxFQUFFO1FBQ04sTUFBTSxFQUFFOzs7NENBakJiO0VBTWdFLHdCQUF3QjtTQUFsRSxpQ0FBaUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgRWxlbWVudFJlZiwgSW5wdXQsIE91dHB1dCwgSG9zdExpc3RlbmVyLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlL0RpYWxvZ1NlcnZpY2Uuc2VydmljZSc7XG5pbXBvcnQgeyBBYnN0cmFjdERhdGFMYW5nU2VsZWN0b3IgfSBmcm9tICcuL0Fic3RyYWN0RGF0YUxhbmdTZWxlY3Rvcic7XG5pbXBvcnQgeyBMYW5ndWFnZUJ1dHRvbk1vZGVsIH0gZnJvbSAnLi4vbW9kZWwvTGFuZ3VhZ2VCdXR0b25Nb2RlbCc7XG5pbXBvcnQgeyBJMThOLCBPcHRpb24gfSBmcm9tICcuLi8uLi9kZWNvcmF0b3IvZGVjb3JhdG9ycyc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdENvbXBvbmVudERhdGFMYW5nU2VsZWN0b3IgZXh0ZW5kcyBBYnN0cmFjdERhdGFMYW5nU2VsZWN0b3IgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gICAgcHJvdGVjdGVkIGNvbXBvbmVudEhhbmRsZXI6IEZ1bmN0aW9uO1xuICAgIC8qKlxuICAgICAqIHRoZSBvYmplY3QgbWFwIHRoYXQgY29udGFpbnMgY29tcG9uZW50IGluc3RhbmNlcyB0aGF0IGhhcyBsYW5nQ29kZSBhcyBhIGtleVxuICAgICAqL1xuICAgIHByb3RlY3RlZCBkZWZhdWx0Q29tcG9uZW50SGFuZGxlcjogRnVuY3Rpb247XG4gICAgQEkxOE4oKVxuICAgIEBPcHRpb24oKVxuICAgIHByb3RlY3RlZCBjb21wb25lbnRJbnN0YW5jZXM6IGFueTtcbiAgICBASTE4TigpXG4gICAgQE9wdGlvbigpXG4gICAgcHJvdGVjdGVkIGRlZmF1bHRDb21wb25lbnRJbnN0YW5jZTogYW55O1xuXG4gICAgY29uc3RydWN0b3IoZWxlbWVudFJlZjogRWxlbWVudFJlZiwgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSkge1xuICAgICAgICBzdXBlcihlbGVtZW50UmVmLCBkaWFsb2dTZXJ2aWNlKTtcblxuICAgICAgICB0aGlzLmNvbXBvbmVudEluc3RhbmNlcyA9IHt9O1xuXG4gICAgICAgIHRoaXMuZGVmYXVsdENvbXBvbmVudEhhbmRsZXIgPSAocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZGVmYXVsdENvbXBvbmVudEluc3RhbmNlID0gcmVzdWx0Lmluc3RhbmNlO1xuXG4gICAgICAgICAgICBsZXQgZGVmYXVsdERhdGEgPSB0aGlzLmdldERlZmF1bHREYXRhKCk7XG4gICAgICAgICAgICBsZXQgZGVmV3JhcERhdGEgPSB0aGlzLmdldEluc3RhbmNlRGVmYXVsdERhdGEoZGVmYXVsdERhdGEpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmRlZmF1bHRDb21wb25lbnRJbnN0YW5jZS5zZXREYXRhID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0Q29tcG9uZW50SW5zdGFuY2Uuc2V0RGF0YShkZWZXcmFwRGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbXBvbmVudEhhbmRsZXIgPSAocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXN1bHQgIT09IG51bGwgJiYgdHlwZW9mIHJlc3VsdCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnNldHRpbmcgIT09IG51bGwgJiYgdHlwZW9mIHJlc3VsdC5zZXR0aW5nICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAgICAgICAgICByZXN1bHQuc2V0dGluZy5jb2RlICE9PSBudWxsICYmIHR5cGVvZiByZXN1bHQuc2V0dGluZy5jb2RlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbXBvbmVudEluc3RhbmNlc1tyZXN1bHQuc2V0dGluZy5jb2RlXSA9IHJlc3VsdC5pbnN0YW5jZTtcblxuICAgICAgICAgICAgICAgICAgICBsZXQgZGF0YUxhbmcgPSB0aGlzLmdldERhdGFMYW5nRnJvbUluZGV4KHJlc3VsdC5zZXR0aW5nLmluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGFMYW5nV3JhcERhdGEgPSB0aGlzLmdldEluc3RhbmNlRGF0YUxhbmd1YWdlKGRhdGFMYW5nKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbXBvbmVudEluc3RhbmNlc1tyZXN1bHQuc2V0dGluZy5jb2RlXS5zZXREYXRhID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbXBvbmVudEluc3RhbmNlc1tyZXN1bHQuc2V0dGluZy5jb2RlXS5zZXREYXRhKGRhdGFMYW5nV3JhcERhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0SW5kZXhGcm9tRGF0YUxhbmcoZGF0YTogYW55KTogbnVtYmVyIHtcbiAgICAgICAgaWYgKGRhdGEgIT09IG51bGwgJiYgdHlwZW9mIGRhdGEgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRhTGFuZ0xpc3QuaW5kZXhPZihkYXRhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAtMTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldERhdGFMYW5nRnJvbUluZGV4KGluZGV4OiBudW1iZXIpOiBhbnkge1xuICAgICAgICBpZiAoaW5kZXggIT09IG51bGwgJiYgdHlwZW9mIGluZGV4ID09PSAnbnVtYmVyJyAmJiBpbmRleCA+IC0xKSB7XG4gICAgICAgICAgICBpZiAoaW5kZXggPCB0aGlzLmRhdGFMYW5nTGlzdC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRhTGFuZ0xpc3RbaW5kZXhdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0TGFudWFnZUluZGV4RnJvbUNvZGUobGFuZ0NvZGU6IHN0cmluZyk6IG51bWJlciB7XG4gICAgICAgIGlmIChsYW5nQ29kZSA9PT0gbnVsbCB8fCB0eXBlb2YgbGFuZ0NvZGUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGFuZ3VhZ2VMaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgbGFuZyA9IHRoaXMubGFuZ3VhZ2VMaXN0W2ldO1xuICAgICAgICAgICAgaWYgKGxhbmcgPT09IG51bGwgfHwgdHlwZW9mIGxhbmcgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgbENvZGUgPSBsYW5nLmNvZGU7XG4gICAgICAgICAgICBpZiAobGFuZ0NvZGUgPT09IGxDb2RlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCByZUFkZGluZ0RhdGFUb0luc3RhbmNlKCk6IHZvaWQge1xuICAgICAgICBsZXQgZGVmYXVsdERhdGEgPSB0aGlzLmdldERlZmF1bHREYXRhKCk7XG4gICAgICAgIGxldCBkZWZXcmFwRGF0YSA9IHRoaXMuZ2V0SW5zdGFuY2VEZWZhdWx0RGF0YShkZWZhdWx0RGF0YSk7XG4gICAgICAgIGlmICh0aGlzLmRlZmF1bHRDb21wb25lbnRJbnN0YW5jZSAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5kZWZhdWx0Q29tcG9uZW50SW5zdGFuY2UgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMuZGVmYXVsdENvbXBvbmVudEluc3RhbmNlLnNldERhdGEgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRDb21wb25lbnRJbnN0YW5jZS5zZXREYXRhKGRlZldyYXBEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5kYXRhTGFuZ0xpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGxldCBkID0gdGhpcy5kYXRhTGFuZ0xpc3RbaV07XG4gICAgICAgICAgICBsZXQgc2V0dGluZyA9IHRoaXMuZ2V0Q29tcG9uZW50U2V0dGluZyhpKTtcbiAgICAgICAgICAgIGxldCBsYW5nQ29kZSA9IG51bGw7XG4gICAgICAgICAgICBpZiAoc2V0dGluZyAhPT0gbnVsbCAmJiB0eXBlb2Ygc2V0dGluZyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICBsYW5nQ29kZSA9IHNldHRpbmcuY29kZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGxhbmdDb2RlID09PSBudWxsIHx8IHR5cGVvZiBsYW5nQ29kZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGluc3RhbmNlID0gbnVsbDtcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbXBvbmVudEluc3RhbmNlcyAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5jb21wb25lbnRJbnN0YW5jZXMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgaW5zdGFuY2UgPSB0aGlzLmNvbXBvbmVudEluc3RhbmNlc1tsYW5nQ29kZV07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChpbnN0YW5jZSAhPT0gbnVsbCAmJiB0eXBlb2YgaW5zdGFuY2UgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5zZXREYXRhID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkV3JhcCA9IHRoaXMuZ2V0SW5zdGFuY2VEYXRhTGFuZ3VhZ2UoZCk7XG4gICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLnNldERhdGEoZFdyYXApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzZXREYXRhKGRhdGE6IGFueSk6IHZvaWQge1xuICAgICAgICBzdXBlci5zZXREYXRhKGRhdGEpO1xuICAgICAgICB0aGlzLnJlQWRkaW5nRGF0YVRvSW5zdGFuY2UoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gbGFuZ0NvZGUgc3RyaW5nIGFzIGEgbGFuZ3VhZ2UgY29kZVxuICAgICAqIEByZXR1cm4gYW55IGFzIGEgY29tcG9uZW50IGluc3RhbmNlIG9mIGxhbmdDb2RlIHJldHVybiBkZWZhdWx0SW5zdGFuY2UgaWYgbGFuZ0NvZGUgaXMgbnVsbFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRDb21wb25lbnRJbnN0YW5jZShsYW5nQ29kZTogc3RyaW5nKTogYW55IHtcbiAgICAgICAgaWYgKGxhbmdDb2RlID09PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBpZiBudWxsIHNob3VsZCByZXR1cm4gZGVmYXVsdCBpbnN0YW5jZVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdENvbXBvbmVudEluc3RhbmNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBsYW5nQ29kZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICBsZXQgaW5zdCA9IHRoaXMuY29tcG9uZW50SW5zdGFuY2VzW2xhbmdDb2RlXTtcbiAgICAgICAgICAgICAgICBpZiAoaW5zdCAhPT0gbnVsbCAmJiB0eXBlb2YgaW5zdCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluc3Q7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogZGF0YSBudWxsIHJldHVybiBhcyBhIGRlZmF1bHRJbnN0YW5jZURpcnR5XG4gICAgICogQHBhcmFtIGRhdGEgYXMgYSBkYXRhTGFuZ3VhZ2VcbiAgICAgKiBAcmV0dXJuIGJvb2xlYW4gaXMgZGF0YUxhbmd1YWdlRGlydHlcbiAgICAgKi9cbiAgICBwdWJsaWMgaXNEYXRhTGFuZ3VhZ2VEaXJ0eShkYXRhOiBhbnkpOiBib29sZWFuIHtcbiAgICAgICAgbGV0IGluc3QgPSBudWxsXG4gICAgICAgIGlmICh0eXBlb2YgZGF0YSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGlmIChkYXRhID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgLy8gZGVmYXVsdFxuICAgICAgICAgICAgICAgIGluc3QgPSB0aGlzLmRlZmF1bHRDb21wb25lbnRJbnN0YW5jZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gaW5kZXhcbiAgICAgICAgICAgICAgICBsZXQgaW5kZXggPSB0aGlzLmdldEluZGV4RnJvbURhdGFMYW5nKGRhdGEpO1xuICAgICAgICAgICAgICAgIGxldCBzZXR0aW5nID0gdGhpcy5nZXRDb21wb25lbnRTZXR0aW5nKGluZGV4KTtcbiAgICAgICAgICAgICAgICBsZXQgbGFuZ0NvZGUgPSBudWxsO1xuICAgICAgICAgICAgICAgIGlmIChzZXR0aW5nICE9PSBudWxsICYmIHR5cGVvZiBzZXR0aW5nICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICBsYW5nQ29kZSA9IHNldHRpbmcuY29kZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGxhbmdDb2RlICE9PSBudWxsICYmIHR5cGVvZiBsYW5nQ29kZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5zdCA9IHRoaXMuY29tcG9uZW50SW5zdGFuY2VzW2xhbmdDb2RlXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaW5zdCAhPT0gbnVsbCAmJiB0eXBlb2YgaW5zdCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgaW5zdC5pc0RhdGFEaXJ0eSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBpbnN0LmlzRGF0YURpcnR5KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDb21wb25lbnRTZXR0aW5nKGluZGV4OiBudW1iZXIpOiBhbnkge1xuICAgICAgICBsZXQgbGFuZ0NvZGUgPSBudWxsO1xuICAgICAgICBpZiAoaW5kZXggIT09IG51bGwgJiYgdHlwZW9mIGluZGV4ID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEgJiYgaW5kZXggPCB0aGlzLmxhbmd1YWdlTGlzdC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBsYW5nQ29kZSA9IHRoaXMubGFuZ3VhZ2VMaXN0W2luZGV4XS5jb2RlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCBzZXR0aW5nID0ge1xuICAgICAgICAgICAgY29kZTogbGFuZ0NvZGUsXG4gICAgICAgICAgICBpbmRleDogaW5kZXhcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gc2V0dGluZztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RGVmYXVsdENvbXBvbmVudEluc3RhbmNlKCk6IGFueSB7XG4gICAgICByZXR1cm4gdGhpcy5kZWZhdWx0Q29tcG9uZW50SW5zdGFuY2U7XG4gICAgfVxuXG4gICAgcHVibGljIGdldENvbXBvbmVudEluc3RhbmNlcygpOiBhbnkge1xuICAgICAgcmV0dXJuIHRoaXMuY29tcG9uZW50SW5zdGFuY2VzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXREZWZhdWx0Q29tcG9uZW50SGFuZGxlcigpOiBGdW5jdGlvbiB7XG4gICAgICByZXR1cm4gdGhpcy5kZWZhdWx0Q29tcG9uZW50SGFuZGxlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Q29tcG9uZW50SGFuZGxlcigpOiBGdW5jdGlvbiB7XG4gICAgICByZXR1cm4gdGhpcy5jb21wb25lbnRIYW5kbGVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBhYnN0cmFjdCBnZXRMYW5ndWFnZUZpZWxkTmFtZSgpOiBzdHJpbmc7XG5cbiAgICBwdWJsaWMgYWJzdHJhY3QgZ2V0T2JqZWN0SWRGaWVsZE5hbWUoKTogc3RyaW5nO1xuXG4gICAgcHVibGljIGFic3RyYWN0IGdldEluc3RhbmNlRGVmYXVsdERhdGEoZGF0YTogYW55KTogYW55O1xuXG4gICAgcHVibGljIGFic3RyYWN0IGdldEluc3RhbmNlRGF0YUxhbmd1YWdlKGRhdGE6IGFueSk6IGFueTtcblxuICAgIHB1YmxpYyBhYnN0cmFjdCBwYXJzZUxhbmd1YWdlQnV0dG9uTW9kZWwobGFuZ0NvZGU6IHN0cmluZyk6IExhbmd1YWdlQnV0dG9uTW9kZWw7XG59XG4iXX0=