UNPKG

com.phloxui

Version:

PhloxUI Ng2+ Framework

324 lines (323 loc) 29.1 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ import * as tslib_1 from "tslib"; import { AbstractDataLangSelector } from './AbstractDataLangSelector'; /** * @abstract */ var /** * @abstract */ 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 = 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; }; return AbstractComponentDataLangSelector; }(AbstractDataLangSelector)); /** * @abstract */ 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.componentInstances; /** @type {?} */ AbstractComponentDataLangSelector.prototype.defaultComponentHandler; /** @type {?} */ AbstractComponentDataLangSelector.prototype.defaultComponentInstance; /** * @abstract * @return {?} any as one object. */ AbstractComponentDataLangSelector.prototype.getDefaultData = function () { }; /** * @abstract * @return {?} */ AbstractComponentDataLangSelector.prototype.getDataObjects = function () { }; /** * @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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWJzdHJhY3RDb21wb25lbnREYXRhTGFuZ1NlbGVjdG9yLmpzIiwic291cmNlUm9vdCI6Im5nOi8vY29tLnBobG94dWkvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50L0Fic3RyYWN0Q29tcG9uZW50RGF0YUxhbmdTZWxlY3Rvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUVBLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7O0FBR3RFOzs7QUFBQTtJQUFnRSw2REFBd0I7SUFVcEYsMkNBQVksVUFBc0IsRUFBRSxhQUE0QjtRQUFoRSxZQUNJLGtCQUFNLFVBQVUsRUFBRSxhQUFhLENBQUMsU0E0Qm5DO1FBMUJHLEtBQUksQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUM7UUFFN0IsS0FBSSxDQUFDLHVCQUF1QixHQUFHLFVBQUMsTUFBVztZQUN2QyxLQUFJLENBQUMsd0JBQXdCLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQztZQUVoRCxxQkFBSSxXQUFXLEdBQUcsS0FBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3hDLHFCQUFJLFdBQVcsR0FBRyxLQUFJLENBQUMsc0JBQXNCLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDM0QsRUFBRSxDQUFDLENBQUMsT0FBTyxLQUFJLENBQUMsd0JBQXdCLENBQUMsT0FBTyxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUM7Z0JBQzlELEtBQUksQ0FBQyx3QkFBd0IsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7YUFDdEQ7U0FDSixDQUFBO1FBRUQsS0FBSSxDQUFDLGdCQUFnQixHQUFHLFVBQUMsTUFBVztZQUNoQyxFQUFFLENBQUMsQ0FBQyxNQUFNLEtBQUssSUFBSSxJQUFJLE9BQU8sTUFBTSxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUM7Z0JBQ25ELEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEtBQUssSUFBSSxJQUFJLE9BQU8sTUFBTSxDQUFDLE9BQU8sS0FBSyxX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Q0FBQyxJQUFJLENBQUM7YUFDNUM7U0FDSjtRQUNELHFCQUFJLE9BQU8sR0FBRztZQUNWLElBQUksRUFBRSxRQUFRO1lBQ2QsS0FBSyxFQUFFLEtBQUs7U0FDZixDQUFDO1FBRUYsTUFBTSxDQUFDLE9BQU8sQ0FBQzs7Ozs7SUFHWix1RUFBMkI7Ozs7UUFDaEMsTUFBTSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQzs7Ozs7SUFHaEMsaUVBQXFCOzs7O1FBQzFCLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUM7Ozs7O0lBRzFCLHNFQUEwQjs7OztRQUMvQixNQUFNLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDOzs7OztJQUcvQiwrREFBbUI7Ozs7UUFDeEIsTUFBTSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQzs7NENBMU1uQztFQUtnRSx3QkFBd0IsRUF5TnZGLENBQUE7Ozs7QUF6TkQsNkNBeU5DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIEVsZW1lbnRSZWYsIElucHV0LCBPdXRwdXQsIEhvc3RMaXN0ZW5lciwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZS9EaWFsb2dTZXJ2aWNlLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWJzdHJhY3REYXRhTGFuZ1NlbGVjdG9yIH0gZnJvbSAnLi9BYnN0cmFjdERhdGFMYW5nU2VsZWN0b3InO1xuaW1wb3J0IHsgTGFuZ3VhZ2VCdXR0b25Nb2RlbCB9IGZyb20gJy4vbW9kZWwvTGFuZ3VhZ2VCdXR0b25Nb2RlbCc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdENvbXBvbmVudERhdGFMYW5nU2VsZWN0b3IgZXh0ZW5kcyBBYnN0cmFjdERhdGFMYW5nU2VsZWN0b3IgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gICAgcHJvdGVjdGVkIGNvbXBvbmVudEhhbmRsZXI6IEZ1bmN0aW9uO1xuICAgIC8qKlxuICAgICAqIHRoZSBvYmplY3QgbWFwIHRoYXQgY29udGFpbnMgY29tcG9uZW50IGluc3RhbmNlcyB0aGF0IGhhcyBsYW5nQ29kZSBhcyBhIGtleVxuICAgICAqL1xuICAgIHByb3RlY3RlZCBjb21wb25lbnRJbnN0YW5jZXM6IGFueTtcbiAgICBwcm90ZWN0ZWQgZGVmYXVsdENvbXBvbmVudEhhbmRsZXI6IEZ1bmN0aW9uO1xuICAgIHByb3RlY3RlZCBkZWZhdWx0Q29tcG9uZW50SW5zdGFuY2U6IGFueTtcblxuICAgIGNvbnN0cnVjdG9yKGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UpIHtcbiAgICAgICAgc3VwZXIoZWxlbWVudFJlZiwgZGlhbG9nU2VydmljZSk7XG5cbiAgICAgICAgdGhpcy5jb21wb25lbnRJbnN0YW5jZXMgPSB7fTtcblxuICAgICAgICB0aGlzLmRlZmF1bHRDb21wb25lbnRIYW5kbGVyID0gKHJlc3VsdDogYW55KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRDb21wb25lbnRJbnN0YW5jZSA9IHJlc3VsdC5pbnN0YW5jZTtcblxuICAgICAgICAgICAgbGV0IGRlZmF1bHREYXRhID0gdGhpcy5nZXREZWZhdWx0RGF0YSgpO1xuICAgICAgICAgICAgbGV0IGRlZldyYXBEYXRhID0gdGhpcy5nZXRJbnN0YW5jZURlZmF1bHREYXRhKGRlZmF1bHREYXRhKTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5kZWZhdWx0Q29tcG9uZW50SW5zdGFuY2Uuc2V0RGF0YSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVmYXVsdENvbXBvbmVudEluc3RhbmNlLnNldERhdGEoZGVmV3JhcERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb21wb25lbnRIYW5kbGVyID0gKHJlc3VsdDogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzdWx0ICE9PSBudWxsICYmIHR5cGVvZiByZXN1bHQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5zZXR0aW5nICE9PSBudWxsICYmIHR5cGVvZiByZXN1bHQuc2V0dGluZyAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnNldHRpbmcuY29kZSAhPT0gbnVsbCAmJiB0eXBlb2YgcmVzdWx0LnNldHRpbmcuY29kZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21wb25lbnRJbnN0YW5jZXNbcmVzdWx0LnNldHRpbmcuY29kZV0gPSByZXN1bHQuaW5zdGFuY2U7XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGFMYW5nID0gdGhpcy5nZXREYXRhTGFuZ0Zyb21JbmRleChyZXN1bHQuc2V0dGluZy5pbmRleCk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkYXRhTGFuZ1dyYXBEYXRhID0gdGhpcy5nZXRJbnN0YW5jZURhdGFMYW5ndWFnZShkYXRhTGFuZyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5jb21wb25lbnRJbnN0YW5jZXNbcmVzdWx0LnNldHRpbmcuY29kZV0uc2V0RGF0YSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21wb25lbnRJbnN0YW5jZXNbcmVzdWx0LnNldHRpbmcuY29kZV0uc2V0RGF0YShkYXRhTGFuZ1dyYXBEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEluZGV4RnJvbURhdGFMYW5nKGRhdGE6IGFueSk6IG51bWJlciB7XG4gICAgICAgIGlmIChkYXRhICE9PSBudWxsICYmIHR5cGVvZiBkYXRhICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YUxhbmdMaXN0LmluZGV4T2YoZGF0YSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gLTE7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXREYXRhTGFuZ0Zyb21JbmRleChpbmRleDogbnVtYmVyKTogYW55IHtcbiAgICAgICAgaWYgKGluZGV4ICE9PSBudWxsICYmIHR5cGVvZiBpbmRleCA9PT0gJ251bWJlcicgJiYgaW5kZXggPiAtMSkge1xuICAgICAgICAgICAgaWYgKGluZGV4IDwgdGhpcy5kYXRhTGFuZ0xpc3QubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YUxhbmdMaXN0W2luZGV4XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldExhbnVhZ2VJbmRleEZyb21Db2RlKGxhbmdDb2RlOiBzdHJpbmcpOiBudW1iZXIge1xuICAgICAgICBpZiAobGFuZ0NvZGUgPT09IG51bGwgfHwgdHlwZW9mIGxhbmdDb2RlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxhbmd1YWdlTGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbGV0IGxhbmcgPSB0aGlzLmxhbmd1YWdlTGlzdFtpXTtcbiAgICAgICAgICAgIGlmIChsYW5nID09PSBudWxsIHx8IHR5cGVvZiBsYW5nID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IGxDb2RlID0gbGFuZy5jb2RlO1xuICAgICAgICAgICAgaWYgKGxhbmdDb2RlID09PSBsQ29kZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAtMTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcmVBZGRpbmdEYXRhVG9JbnN0YW5jZSgpOiB2b2lkIHtcbiAgICAgICAgbGV0IGRlZmF1bHREYXRhID0gdGhpcy5nZXREZWZhdWx0RGF0YSgpO1xuICAgICAgICBsZXQgZGVmV3JhcERhdGEgPSB0aGlzLmdldEluc3RhbmNlRGVmYXVsdERhdGEoZGVmYXVsdERhdGEpO1xuICAgICAgICBpZiAodGhpcy5kZWZhdWx0Q29tcG9uZW50SW5zdGFuY2UgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMuZGVmYXVsdENvbXBvbmVudEluc3RhbmNlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmRlZmF1bHRDb21wb25lbnRJbnN0YW5jZS5zZXREYXRhID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0Q29tcG9uZW50SW5zdGFuY2Uuc2V0RGF0YShkZWZXcmFwRGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZGF0YUxhbmdMaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgZCA9IHRoaXMuZGF0YUxhbmdMaXN0W2ldO1xuICAgICAgICAgICAgbGV0IHNldHRpbmcgPSB0aGlzLmdldENvbXBvbmVudFNldHRpbmcoaSk7XG4gICAgICAgICAgICBsZXQgbGFuZ0NvZGUgPSBudWxsO1xuICAgICAgICAgICAgaWYgKHNldHRpbmcgIT09IG51bGwgJiYgdHlwZW9mIHNldHRpbmcgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgbGFuZ0NvZGUgPSBzZXR0aW5nLmNvZGU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChsYW5nQ29kZSA9PT0gbnVsbCB8fCB0eXBlb2YgbGFuZ0NvZGUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBpbnN0YW5jZSA9IHRoaXMuY29tcG9uZW50SW5zdGFuY2VzW2xhbmdDb2RlXTtcbiAgICAgICAgICAgIGlmIChpbnN0YW5jZSAhPT0gbnVsbCAmJiB0eXBlb2YgaW5zdGFuY2UgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5zZXREYXRhID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkV3JhcCA9IHRoaXMuZ2V0SW5zdGFuY2VEYXRhTGFuZ3VhZ2UoZCk7XG4gICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLnNldERhdGEoZFdyYXApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzZXREYXRhKGRhdGE6IGFueSk6IHZvaWQge1xuICAgICAgICBzdXBlci5zZXREYXRhKGRhdGEpO1xuICAgICAgICB0aGlzLnJlQWRkaW5nRGF0YVRvSW5zdGFuY2UoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gbGFuZ0NvZGUgc3RyaW5nIGFzIGEgbGFuZ3VhZ2UgY29kZVxuICAgICAqIEByZXR1cm4gYW55IGFzIGEgY29tcG9uZW50IGluc3RhbmNlIG9mIGxhbmdDb2RlIHJldHVybiBkZWZhdWx0SW5zdGFuY2UgaWYgbGFuZ0NvZGUgaXMgbnVsbFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRDb21wb25lbnRJbnN0YW5jZShsYW5nQ29kZTogc3RyaW5nKTogYW55IHtcbiAgICAgICAgaWYgKGxhbmdDb2RlID09PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBpZiBudWxsIHNob3VsZCByZXR1cm4gZGVmYXVsdCBpbnN0YW5jZVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdENvbXBvbmVudEluc3RhbmNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBsYW5nQ29kZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICBsZXQgaW5zdCA9IHRoaXMuY29tcG9uZW50SW5zdGFuY2VzW2xhbmdDb2RlXTtcbiAgICAgICAgICAgICAgICBpZiAoaW5zdCAhPT0gbnVsbCAmJiB0eXBlb2YgaW5zdCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluc3Q7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogZGF0YSBudWxsIHJldHVybiBhcyBhIGRlZmF1bHRJbnN0YW5jZURpcnR5XG4gICAgICogQHBhcmFtIGRhdGEgYXMgYSBkYXRhTGFuZ3VhZ2VcbiAgICAgKiBAcmV0dXJuIGJvb2xlYW4gaXMgZGF0YUxhbmd1YWdlRGlydHlcbiAgICAgKi9cbiAgICBwdWJsaWMgaXNEYXRhTGFuZ3VhZ2VEaXJ0eShkYXRhOiBhbnkpOiBib29sZWFuIHtcbiAgICAgICAgbGV0IGluc3QgPSBudWxsXG4gICAgICAgIGlmICh0eXBlb2YgZGF0YSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGlmIChkYXRhID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgLy8gZGVmYXVsdFxuICAgICAgICAgICAgICAgIGluc3QgPSB0aGlzLmRlZmF1bHRDb21wb25lbnRJbnN0YW5jZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gaW5kZXhcbiAgICAgICAgICAgICAgICBsZXQgaW5kZXggPSB0aGlzLmdldEluZGV4RnJvbURhdGFMYW5nKGRhdGEpO1xuICAgICAgICAgICAgICAgIGxldCBzZXR0aW5nID0gdGhpcy5nZXRDb21wb25lbnRTZXR0aW5nKGluZGV4KTtcbiAgICAgICAgICAgICAgICBsZXQgbGFuZ0NvZGUgPSBudWxsO1xuICAgICAgICAgICAgICAgIGlmIChzZXR0aW5nICE9PSBudWxsICYmIHR5cGVvZiBzZXR0aW5nICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICBsYW5nQ29kZSA9IHNldHRpbmcuY29kZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGxhbmdDb2RlICE9PSBudWxsICYmIHR5cGVvZiBsYW5nQ29kZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5zdCA9IHRoaXMuY29tcG9uZW50SW5zdGFuY2VzW2xhbmdDb2RlXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaW5zdCAhPT0gbnVsbCAmJiB0eXBlb2YgaW5zdCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgaW5zdC5pc0RhdGFEaXJ0eSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBpbnN0LmlzRGF0YURpcnR5KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDb21wb25lbnRTZXR0aW5nKGluZGV4OiBudW1iZXIpOiBhbnkge1xuICAgICAgICBsZXQgbGFuZ0NvZGUgPSBudWxsO1xuICAgICAgICBpZiAoaW5kZXggIT09IG51bGwgJiYgdHlwZW9mIGluZGV4ID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEgJiYgaW5kZXggPCB0aGlzLmxhbmd1YWdlTGlzdC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBsYW5nQ29kZSA9IHRoaXMubGFuZ3VhZ2VMaXN0W2luZGV4XS5jb2RlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCBzZXR0aW5nID0ge1xuICAgICAgICAgICAgY29kZTogbGFuZ0NvZGUsXG4gICAgICAgICAgICBpbmRleDogaW5kZXhcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gc2V0dGluZztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RGVmYXVsdENvbXBvbmVudEluc3RhbmNlKCk6IGFueSB7XG4gICAgICByZXR1cm4gdGhpcy5kZWZhdWx0Q29tcG9uZW50SW5zdGFuY2U7XG4gICAgfVxuXG4gICAgcHVibGljIGdldENvbXBvbmVudEluc3RhbmNlcygpOiBhbnkge1xuICAgICAgcmV0dXJuIHRoaXMuY29tcG9uZW50SW5zdGFuY2VzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXREZWZhdWx0Q29tcG9uZW50SGFuZGxlcigpOiBGdW5jdGlvbiB7XG4gICAgICByZXR1cm4gdGhpcy5kZWZhdWx0Q29tcG9uZW50SGFuZGxlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Q29tcG9uZW50SGFuZGxlcigpOiBGdW5jdGlvbiB7XG4gICAgICByZXR1cm4gdGhpcy5jb21wb25lbnRIYW5kbGVyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSBkYXRhIGFzIGFueVxuICAgICAqIEByZXR1cm4gYW55IGFzIG9uZSBvYmplY3QuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IGdldERlZmF1bHREYXRhKCk6IGFueTtcblxuICAgIHByb3RlY3RlZCBhYnN0cmFjdCBnZXREYXRhT2JqZWN0cygpOiBhbnlbXTtcblxuICAgIHB1YmxpYyBhYnN0cmFjdCBnZXRMYW5ndWFnZUZpZWxkTmFtZSgpOiBzdHJpbmc7XG5cbiAgICBwdWJsaWMgYWJzdHJhY3QgZ2V0T2JqZWN0SWRGaWVsZE5hbWUoKTogc3RyaW5nO1xuXG4gICAgcHVibGljIGFic3RyYWN0IGdldEluc3RhbmNlRGVmYXVsdERhdGEoZGF0YTogYW55KTogYW55O1xuXG4gICAgcHVibGljIGFic3RyYWN0IGdldEluc3RhbmNlRGF0YUxhbmd1YWdlKGRhdGE6IGFueSk6IGFueTtcblxuICAgIHB1YmxpYyBhYnN0cmFjdCBwYXJzZUxhbmd1YWdlQnV0dG9uTW9kZWwobGFuZ0NvZGU6IHN0cmluZyk6IExhbmd1YWdlQnV0dG9uTW9kZWw7XG59XG4iXX0=