com.phloxui
Version:
PhloxUI Ng2+ Framework
356 lines (355 loc) • 34 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
import * as tslib_1 from "tslib";
import { Component, ElementRef } from '@angular/core';
import { DialogService } from '../../../service/DialogService.service';
import { AbstractComponentDataLangSelector } from '../../dataview/AbstractComponentDataLangSelector';
import { LanguageButtonModel } from '../../model/LanguageButtonModel';
import { PhloxAppInfo } from '../../../component/model/PhloxAppInfo';
var /** @type {?} */ TYPE_NAME = "phx-data-lang-selector";
var /** @type {?} */ LANG_BTN_CLICK = 'languageBtnClicked';
var DataLangSelectorPane = /** @class */ (function (_super) {
tslib_1.__extends(DataLangSelectorPane, _super);
function DataLangSelectorPane(elementRef, dialogService) {
var _this = _super.call(this, elementRef, dialogService) || this;
_this.LANGUAGE_FIELD_NAME = PhloxAppInfo.DEFAULT_LANGUAGE_FIELD_NAME;
_this.OBJECT_ID_FIELD_NAME = PhloxAppInfo.DEFAULT_OBJECT_ID_FIELD_NAME;
return _this;
}
/**
* @return {?}
*/
DataLangSelectorPane.prototype.ngOnInit = /**
* @return {?}
*/
function () {
_super.prototype.ngOnInit.call(this);
};
/**
* @return {?}
*/
DataLangSelectorPane.prototype.getEditor = /**
* @return {?}
*/
function () {
if (this.data !== null && typeof this.data !== 'undefined') {
if (this.data.editor !== null && typeof this.data.editor !== 'undefined') {
return this.data.editor;
}
}
return null;
};
/**
* @param {?} dataObject
* @return {?}
*/
DataLangSelectorPane.prototype.getWrapDataObject = /**
* @param {?} dataObject
* @return {?}
*/
function (dataObject) {
var /** @type {?} */ editor = this.getEditor();
var /** @type {?} */ data = {
editor: editor,
objects: dataObject
};
return data;
};
/**
* @return {?} any as one object.
*/
DataLangSelectorPane.prototype.getDefaultData = /**
* @return {?} any as one object.
*/
function () {
var /** @type {?} */ objects = null;
if (this.data !== null && typeof this.data !== 'undefined') {
objects = this.data.objects;
}
if (objects === null || typeof objects === 'undefined') {
return null;
}
var /** @type {?} */ editor = this.getEditor();
var /** @type {?} */ langFieldName = null;
if (editor !== null) {
langFieldName = editor.getLanguageField();
}
var /** @type {?} */ oneObj = null;
if (Array.isArray(objects)) {
var /** @type {?} */ moreThanOneDef = false;
var /** @type {?} */ defObj = null;
try {
for (var objects_1 = tslib_1.__values(objects), objects_1_1 = objects_1.next(); !objects_1_1.done; objects_1_1 = objects_1.next()) {
var obj = objects_1_1.value;
var /** @type {?} */ lang = obj[langFieldName];
if (lang === null || typeof lang === 'undefined') {
if (defObj === null) {
defObj = obj;
}
else {
moreThanOneDef = true;
break;
}
}
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (objects_1_1 && !objects_1_1.done && (_a = objects_1.return)) _a.call(objects_1);
}
finally { if (e_1) throw e_1.error; }
}
if (!moreThanOneDef && defObj !== null && typeof defObj !== 'undefined') {
oneObj = defObj;
}
}
else {
if (objects[langFieldName] === null || typeof objects[langFieldName] === 'undefined') {
oneObj = objects;
}
}
return oneObj;
var e_1, _a;
};
/**
* @return {?}
*/
DataLangSelectorPane.prototype.getDataObjects = /**
* @return {?}
*/
function () {
var /** @type {?} */ objects = null;
if (this.data !== null && typeof this.data !== 'undefined') {
objects = this.data.objects;
}
if (objects === null || typeof objects === 'undefined') {
return null;
}
return objects;
};
/**
* @return {?}
*/
DataLangSelectorPane.prototype.hasModel = /**
* @return {?}
*/
function () {
if (this.model !== null && typeof this.model !== 'undefined') {
return true;
}
return false;
};
/**
* @return {?}
*/
DataLangSelectorPane.prototype.getModel = /**
* @return {?}
*/
function () {
return this.model;
};
/**
* @param {?} model
* @return {?}
*/
DataLangSelectorPane.prototype.setModel = /**
* @param {?} model
* @return {?}
*/
function (model) {
this.model = model;
};
/**
* @return {?}
*/
DataLangSelectorPane.prototype.getLanguageFieldName = /**
* @return {?}
*/
function () {
var /** @type {?} */ editor = this.getEditor();
var /** @type {?} */ langFieldName = (editor === null) ? null : editor.getLanguageField();
if (langFieldName !== null && typeof langFieldName !== 'undefined') {
return langFieldName;
}
return this.LANGUAGE_FIELD_NAME;
};
/**
* @return {?}
*/
DataLangSelectorPane.prototype.getObjectIdFieldName = /**
* @return {?}
*/
function () {
var /** @type {?} */ editor = this.getEditor();
var /** @type {?} */ objIdFieldName = (editor === null) ? null : editor.getObjectIdField();
if (objIdFieldName !== null && typeof objIdFieldName !== 'undefined') {
return objIdFieldName;
}
return this.OBJECT_ID_FIELD_NAME;
};
/**
* @param {?} data
* @return {?}
*/
DataLangSelectorPane.prototype.getInstanceDefaultData = /**
* @param {?} data
* @return {?}
*/
function (data) {
return this.getWrapDataObject([data]);
};
/**
* @param {?} data
* @return {?}
*/
DataLangSelectorPane.prototype.getInstanceDataLanguage = /**
* @param {?} data
* @return {?}
*/
function (data) {
return this.getWrapDataObject([data]);
};
/**
* @return {?} any as object in pattern {iconURL: string, code: string, label: string}
*/
DataLangSelectorPane.prototype.getLanguageList = /**
* @return {?} any as object in pattern {iconURL: string, code: string, label: string}
*/
function () {
var /** @type {?} */ editor = this.getEditor();
var /** @type {?} */ languageList = [];
if (editor !== null) {
var /** @type {?} */ setting = editor.getAppSetting();
if (setting !== null && typeof setting !== 'undefined') {
var /** @type {?} */ defaultLangs = setting.DEFAULT_DATA_LANGUAGES;
if (defaultLangs !== null && typeof defaultLangs !== 'undefined' && Array.isArray(defaultLangs)) {
try {
for (var defaultLangs_1 = tslib_1.__values(defaultLangs), defaultLangs_1_1 = defaultLangs_1.next(); !defaultLangs_1_1.done; defaultLangs_1_1 = defaultLangs_1.next()) {
var lang = defaultLangs_1_1.value;
languageList.push(lang.code);
}
}
catch (e_2_1) { e_2 = { error: e_2_1 }; }
finally {
try {
if (defaultLangs_1_1 && !defaultLangs_1_1.done && (_a = defaultLangs_1.return)) _a.call(defaultLangs_1);
}
finally { if (e_2) throw e_2.error; }
}
}
}
}
return languageList;
var e_2, _a;
};
/**
* @param {?} defaultData
* @return {?}
*/
DataLangSelectorPane.prototype.loadDataLanguageList = /**
* @param {?} defaultData
* @return {?}
*/
function (defaultData) {
var _this = this;
return new Promise(function (resolve, reject) {
var /** @type {?} */ editor = _this.getEditor();
if (editor !== null) {
var /** @type {?} */ langProm = editor.getLanguageList(defaultData);
if (langProm !== null && typeof langProm !== 'undefined') {
langProm.then(function (result) {
var /** @type {?} */ tempArray = [];
if (result !== null && typeof result !== 'undefined') {
if (Array.isArray(result)) {
tempArray = result;
}
else {
tempArray.push(result);
}
}
resolve(tempArray);
});
}
}
else {
resolve([]);
}
});
};
/**
* when new language was created this method will be called
* @param {?} newLangData as any
* @return {?}
*/
DataLangSelectorPane.prototype.onLanguageAdded = /**
* when new language was created this method will be called
* @param {?} newLangData as any
* @return {?}
*/
function (newLangData) {
if (newLangData !== null && typeof newLangData !== 'undefined') {
// do sth here
}
// this.data.objects.push(newLangData);
};
/**
* when language was removed this method will be called
* @param {?} deletedData as any
* @return {?}
*/
DataLangSelectorPane.prototype.onLanguageRemoved = /**
* when language was removed this method will be called
* @param {?} deletedData as any
* @return {?}
*/
function (deletedData) {
// do sth
};
/**
* @param {?} langCode
* @return {?}
*/
DataLangSelectorPane.prototype.parseLanguageButtonModel = /**
* @param {?} langCode
* @return {?}
*/
function (langCode) {
return new LanguageButtonModel('', langCode, 'label');
};
DataLangSelectorPane.TYPE_NAME = TYPE_NAME;
DataLangSelectorPane.decorators = [
{ type: Component, args: [{
moduleId: module.id,
selector: TYPE_NAME,
template: "<div class=\"phx-data-lang-selector\">\n\t<div class=\"wrapper left\" [class.expand]=\"!hasLanguage()\">\n\t\t<div class=\"component-pane\">\n\t\t\t<!-- default -->\n\t\t\t<div class=\"component-wrapper\" [class.show]=\"_isSelectedLanguageByIndex(null)\">\n\t\t\t\t<phx-component-wrapper *ngIf=\"hasModel()\" [type]=\"getModel().tabComponentType\" [model]=\"getModel().tabComponentModel\"\n\t\t\t\t\t[handler]=\"getDefaultComponentHandler()\" [data]=\"getDefaultData()\" [dataParent]=\"this\"></phx-component-wrapper>\n\t\t\t</div>\n\t\t\t<!-- by lang -->\n\t\t\t<ng-template ngFor let-item [ngForOf]=\"_getDataLangList()\" let-i=\"index\">\n\t\t\t\t<div class=\"component-wrapper\" [class.show]=\"_isSelectedLanguageByIndex(i)\">\n\t\t\t\t\t<ng-template [ngIf]=\"item !== null && item !== undefined\">\n\t\t\t\t\t\t<phx-component-wrapper *ngIf=\"hasModel()\" [type]=\"getModel().tabComponentType\" [model]=\"getModel().tabComponentModel\"\n\t\t\t\t\t\t\t[handler]=\"getComponentHandler()\" [setting]=\"getComponentSetting(i)\" [data]=\"item\" [dataParent]=\"this\"></phx-component-wrapper>\n\t\t\t\t\t</ng-template>\n\t\t\t\t</div>\n\t\t\t</ng-template>\n\t\t</div>\n\t</div>\n\t<div class=\"wrapper right\" [class.hide]=\"!hasLanguage()\">\n\t\t<div class=\"lang-pane\">\n\t\t\t<div class=\"language-btn default data\" [class.selected]=\"isSelectedLanguage(null)\" [class.dirty]=\"_isDataDirtyByIndex(null)\"\n\t\t\t\t(click)=\"onActionBtnClicked($event, null, undefined)\">\n\t\t\t\t<div class=\"table-wrapper fluid\">\n\t\t\t\t\t<div class=\"table-cell-wrapper middle\">\n\t\t\t\t\t\tDefault\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div *ngFor=\"let item of getMergedLanguageList(); let i = index\" class=\"language-btn\" [class.data]=\"_langHasDataByIndex(i)\"\n\t\t\t\t[class.dirty]=\"_isDataDirtyByIndex(i)\"\n\t\t\t\t[class.selected]=\"isSelectedLanguage(item)\" (click)=\"onActionBtnClicked($event, item, i)\">\n\t\t\t\t<div class=\"table-wrapper fluid\">\n\t\t\t\t\t<div class=\"table-cell-wrapper middle\">\n\t\t\t\t\t\t<div *ngIf=\"!_hasButtonIcon(item)\">{{item.code}}</div>\n\t\t\t\t\t\t<div *ngIf=\"_hasButtonIcon(item)\">\n\t\t\t\t\t\t\t<img src=\"{{item.iconURL}}\">\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div class=\"mocking-btn\"></div>\n\t\t</div>\n\t</div>\n</div>\n"
},] },
];
/** @nocollapse */
DataLangSelectorPane.ctorParameters = function () { return [
{ type: ElementRef, },
{ type: DialogService, },
]; };
return DataLangSelectorPane;
}(AbstractComponentDataLangSelector));
export { DataLangSelectorPane };
function DataLangSelectorPane_tsickle_Closure_declarations() {
/** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */
DataLangSelectorPane.decorators;
/**
* @nocollapse
* @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}
*/
DataLangSelectorPane.ctorParameters;
/** @type {?} */
DataLangSelectorPane.TYPE_NAME;
/** @type {?} */
DataLangSelectorPane.prototype.LANGUAGE_FIELD_NAME;
/** @type {?} */
DataLangSelectorPane.prototype.OBJECT_ID_FIELD_NAME;
/** @type {?} */
DataLangSelectorPane.prototype.model;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGF0YUxhbmdTZWxlY3RvclBhbmUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vY29tLnBobG94dWkvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50L2VkaXRvci9lZGl0b3IuaW50ZXJuYWwvRGF0YUxhbmdTZWxlY3RvclBhbmUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBeUIsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUV2RSxPQUFPLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUlyRyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFJckUscUJBQU0sU0FBUyxHQUFXLHdCQUF3QixDQUFDO0FBRW5ELHFCQUFNLGNBQWMsR0FBVyxvQkFBb0IsQ0FBQzs7SUFzRFYsZ0RBQWlDO0lBUXpFLDhCQUFZLFVBQXNCLEVBQUUsYUFBNEI7UUFBaEUsWUFDRSxrQkFBTSxVQUFVLEVBQUUsYUFBYSxDQUFDLFNBQ2pDO29DQU5xQyxZQUFZLENBQUMsMkJBQTJCO3FDQUN2QyxZQUFZLENBQUMsNEJBQTRCOztLQUsvRTs7OztJQUVNLHVDQUFROzs7O1FBQ2IsaUJBQU0sUUFBUSxXQUFFLENBQUM7Ozs7O0lBR1gsd0NBQVM7Ozs7UUFDZixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksSUFBSSxPQUFPLElBQUksQ0FBQyxJQUFJLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQztZQUMzRCxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLElBQUksT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxXQUFXLENBQUMs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QUFJLElBQUksT0FBTyxXQUFXLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQzs7U0FFaEU7Ozs7Ozs7O0lBUUksZ0RBQWlCOzs7OztjQUFDLFdBQWdCOzs7Ozs7O0lBSWxDLHVEQUF3Qjs7OztjQUFDLFFBQWdCO1FBQzlDLE1BQU0sQ0FBQyxJQUFJLG1CQUFtQixDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7O3FDQS9NYixTQUFTOztnQkFwRHJELFNBQVMsU0FBQztvQkFDVCxRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUU7b0JBQ25CLFFBQVEsRUFBRSxTQUFTO29CQUNuQixRQUFRLEVBQUUscXlFQTZDWDtpQkFDQTs7OztnQkFuRTBDLFVBQVU7Z0JBQzVDLGFBQWE7OytCQUR0QjtFQW9FMEMsaUNBQWlDO1NBQTlELG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgT25Jbml0LCBFbGVtZW50UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZS9EaWFsb2dTZXJ2aWNlLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWJzdHJhY3REYXRhRWRpdG9yIH0gZnJvbSAnLi4vQWJzdHJhY3REYXRhRWRpdG9yJztcbmltcG9ydCB7IEFic3RyYWN0Q29tcG9uZW50RGF0YUxhbmdTZWxlY3RvciB9IGZyb20gJy4uLy4uL2RhdGF2aWV3L0Fic3RyYWN0Q29tcG9uZW50RGF0YUxhbmdTZWxlY3Rvcic7XG5cbmltcG9ydCB7IElIYXNNb2RlbCB9IGZyb20gJy4uLy4uL0lIYXNNb2RlbCc7XG5pbXBvcnQgeyBEYXRhTGFuZ1NlbGVjdG9yTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbC9EYXRhTGFuZ1NlbGVjdG9yTW9kZWwnO1xuaW1wb3J0IHsgTGFuZ3VhZ2VCdXR0b25Nb2RlbCB9IGZyb20gJy4uLy4uL21vZGVsL0xhbmd1YWdlQnV0dG9uTW9kZWwnO1xuaW1wb3J0IHsgUGhsb3hBcHBJbmZvIH0gZnJvbSAnLi4vLi4vLi4vY29tcG9uZW50L21vZGVsL1BobG94QXBwSW5mbyc7XG5cbmRlY2xhcmUgdmFyICQ6IGFueTtcblxuY29uc3QgVFlQRV9OQU1FOiBzdHJpbmcgPSBcInBoeC1kYXRhLWxhbmctc2VsZWN0b3JcIjtcblxuY29uc3QgTEFOR19CVE5fQ0xJQ0s6IHN0cmluZyA9ICdsYW5ndWFnZUJ0bkNsaWNrZWQnO1xuXG4vLyB1c2UgbWF0ZXJpYWwgRGF0YUxhbmdTZWxlY3RvclBhbmUgaW5zdGFkZSA/PyAoU2hvdWxkIHdlIGRlbGV0ZSB0aGlzIGNvbXBvbmVudClcbi8vIHRyeSB0byBmaW5kIGlmIG5vIGNvbXBvbmVudCB1c2VcbkBDb21wb25lbnQoe1xuICBtb2R1bGVJZDogbW9kdWxlLmlkLFxuICBzZWxlY3RvcjogVFlQRV9OQU1FLFxuICB0ZW1wbGF0ZTogYDxkaXYgY2xhc3M9XCJwaHgtZGF0YS1sYW5nLXNlbGVjdG9yXCI+XG5cdDxkaXYgY2xhc3M9XCJ3cmFwcGVyIGxlZnRcIiBbY2xhc3MuZXhwYW5kXT1cIiFoYXNMYW5ndWFnZSgpXCI+XG5cdFx0PGRpdiBjbGFzcz1cImNvbXBvbmVudC1wYW5lXCI+XG5cdFx0XHQ8IS0tIGRlZmF1bHQgLS0+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwiY29tcG9uZW50LXdyYXBwZXJcIiBbY2xhc3Muc2hvd109XCJfaXNTZWxlY3RlZExhbmd1YWdlQnlJbmRleChudWxsKVwiPlxuXHRcdFx0XHQ8cGh4LWNvbXBvbmVudC13cmFwcGVyICpuZ0lmPVwiaGFzTW9kZWwoKVwiIFt0eXBlXT1cImdldE1vZGVsKCkudGFiQ29tcG9uZW50VHlwZVwiIFttb2RlbF09XCJnZXRNb2RlbCgpLnRhYkNvbXBvbmVudE1vZGVsXCJcblx0XHRcdFx0XHRbaGFuZGxlcl09XCJnZXREZWZhdWx0Q29tcG9uZW50SGFuZGxlcigpXCIgW2RhdGFdPVwiZ2V0RGVmYXVsdERhdGEoKVwiIFtkYXRhUGFyZW50XT1cInRoaXNcIj48L3BoeC1jb21wb25lbnQtd3JhcHBlcj5cblx0XHRcdDwvZGl2PlxuXHRcdFx0PCEtLSBieSBsYW5nIC0tPlxuXHRcdFx0PG5nLXRlbXBsYXRlIG5nRm9yIGxldC1pdGVtIFtuZ0Zvck9mXT1cIl9nZXREYXRhTGFuZ0xpc3QoKVwiIGxldC1pPVwiaW5kZXhcIj5cblx0XHRcdFx0PGRpdiBjbGFzcz1cImNvbXBvbmVudC13cmFwcGVyXCIgW2NsYXNzLnNob3ddPVwiX2lzU2VsZWN0ZWRMYW5ndWFnZUJ5SW5kZXgoaSlcIj5cblx0XHRcdFx0XHQ8bmctdGVtcGxhdGUgW25nSWZdPVwiaXRlbSAhPT0gbnVsbCAmJiBpdGVtICE9PSB1bmRlZmluZWRcIj5cblx0XHRcdFx0XHRcdDxwaHgtY29tcG9uZW50LXdyYXBwZXIgKm5nSWY9XCJoYXNNb2RlbCgpXCIgW3R5cGVdPVwiZ2V0TW9kZWwoKS50YWJDb21wb25lbnRUeXBlXCIgW21vZGVsXT1cImdldE1vZGVsKCkudGFiQ29tcG9uZW50TW9kZWxcIlxuXHRcdFx0XHRcdFx0XHRbaGFuZGxlcl09XCJnZXRDb21wb25lbnRIYW5kbGVyKClcIiBbc2V0dGluZ109XCJnZXRDb21wb25lbnRTZXR0aW5nKGkpXCIgW2RhdGFdPVwiaXRlbVwiIFtkYXRhUGFyZW50XT1cInRoaXNcIj48L3BoeC1jb21wb25lbnQtd3JhcHBlcj5cblx0XHRcdFx0XHQ8L25nLXRlbXBsYXRlPlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdDwvbmctdGVtcGxhdGU+XG5cdFx0PC9kaXY+XG5cdDwvZGl2PlxuXHQ8ZGl2IGNsYXNzPVwid3JhcHBlciByaWdodFwiIFtjbGFzcy5oaWRlXT1cIiFoYXNMYW5ndWFnZSgpXCI+XG5cdFx0PGRpdiBjbGFzcz1cImxhbmctcGFuZVwiPlxuXHRcdFx0PGRpdiBjbGFzcz1cImxhbmd1YWdlLWJ0biBkZWZhdWx0IGRhdGFcIiBbY2xhc3Muc2VsZWN0ZWRdPVwiaXNTZWxlY3RlZExhbmd1YWdlKG51bGwpXCIgW2NsYXNzLmRpcnR5XT1cIl9pc0RhdGFEaXJ0eUJ5SW5kZXgobnVsbClcIlxuXHRcdFx0XHQoY2xpY2spPVwib25BY3Rpb25CdG5DbGlja2VkKCRldmVudCwgbnVsbCwgdW5kZWZpbmVkKVwiPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwidGFibGUtd3JhcHBlciBmbHVpZFwiPlxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJ0YWJsZS1jZWxsLXdyYXBwZXIgbWlkZGxlXCI+XG5cdFx0XHRcdFx0XHREZWZhdWx0XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cdFx0XHQ8ZGl2ICpuZ0Zvcj1cImxldCBpdGVtIG9mIGdldE1lcmdlZExhbmd1YWdlTGlzdCgpOyBsZXQgaSA9IGluZGV4XCIgY2xhc3M9XCJsYW5ndWFnZS1idG5cIiBbY2xhc3MuZGF0YV09XCJfbGFuZ0hhc0RhdGFCeUluZGV4KGkpXCJcblx0XHRcdFx0W2NsYXNzLmRpcnR5XT1cIl9pc0RhdGFEaXJ0eUJ5SW5kZXgoaSlcIlxuXHRcdFx0XHRbY2xhc3Muc2VsZWN0ZWRdPVwiaXNTZWxlY3RlZExhbmd1YWdlKGl0ZW0pXCIgKGNsaWNrKT1cIm9uQWN0aW9uQnRuQ2xpY2tlZCgkZXZlbnQsIGl0ZW0sIGkpXCI+XG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJ0YWJsZS13cmFwcGVyIGZsdWlkXCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cInRhYmxlLWNlbGwtd3JhcHBlciBtaWRkbGVcIj5cblx0XHRcdFx0XHRcdDxkaXYgKm5nSWY9XCIhX2hhc0J1dHRvbkljb24oaXRlbSlcIj57e2l0ZW0uY29kZX19PC9kaXY+XG5cdFx0XHRcdFx0XHQ8ZGl2ICpuZ0lmPVwiX2hhc0J1dHRvbkljb24oaXRlbSlcIj5cblx0XHRcdFx0XHRcdFx0PGltZyBzcmM9XCJ7e2l0ZW0uaWNvblVSTH19XCI+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblx0XHRcdDxkaXYgY2xhc3M9XCJtb2NraW5nLWJ0blwiPjwvZGl2PlxuXHRcdDwvZGl2PlxuXHQ8L2Rpdj5cbjwvZGl2PlxuYFxufSlcbmV4cG9ydCBjbGFzcyBEYXRhTGFuZ1NlbGVjdG9yUGFuZSBleHRlbmRzIEFic3RyYWN0Q29tcG9uZW50RGF0YUxhbmdTZWxlY3RvciBpbXBsZW1lbnRzIE9uSW5pdCwgSUhhc01vZGVsIHtcblxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFRZUEVfTkFNRTogc3RyaW5nID0gVFlQRV9OQU1FO1xuXG4gIHByaXZhdGUgTEFOR1VBR0VfRklFTERfTkFNRTogc3RyaW5nID0gUGhsb3hBcHBJbmZvLkRFRkFVTFRfTEFOR1VBR0VfRklFTERfTkFNRTtcbiAgcHJpdmF0ZSBPQkpFQ1RfSURfRklFTERfTkFNRTogc3RyaW5nID0gUGhsb3hBcHBJbmZvLkRFRkFVTFRfT0JKRUNUX0lEX0ZJRUxEX05BTUU7XG4gIHByaXZhdGUgbW9kZWw6IERhdGFMYW5nU2VsZWN0b3JNb2RlbDtcblxuICBjb25zdHJ1Y3RvcihlbGVtZW50UmVmOiBFbGVtZW50UmVmLCBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlKSB7XG4gICAgc3VwZXIoZWxlbWVudFJlZiwgZGlhbG9nU2VydmljZSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgc3VwZXIubmdPbkluaXQoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RWRpdG9yKCk6IEFic3RyYWN0RGF0YUVkaXRvciB7XG4gICAgaWYgKHRoaXMuZGF0YSAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5kYXRhICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgaWYgKHRoaXMuZGF0YS5lZGl0b3IgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMuZGF0YS5lZGl0b3IgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEuZWRpdG9yO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0V3JhcERhdGFPYmplY3QoZGF0YU9iamVjdDogYW55W10pOiBhbnkge1xuICAgIGxldCBlZGl0b3IgPSB0aGlzLmdldEVkaXRvcigpO1xuICAgIGxldCBkYXRhID0ge1xuICAgICAgZWRpdG9yOiBlZGl0b3IsXG4gICAgICBvYmplY3RzOiBkYXRhT2JqZWN0XG4gICAgfTtcblxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBkYXRhIGFzIGFueVxuICAgKiBAcmV0dXJuIGFueSBhcyBvbmUgb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIGdldERlZmF1bHREYXRhKCk6IGFueSB7XG4gICAgbGV0IG9iamVjdHMgPSBudWxsO1xuXG4gICAgaWYgKHRoaXMuZGF0YSAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5kYXRhICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgb2JqZWN0cyA9IHRoaXMuZGF0YS5vYmplY3RzO1xuICAgIH1cblxuICAgIGlmIChvYmplY3RzID09PSBudWxsIHx8IHR5cGVvZiBvYmplY3RzID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgbGV0IGVkaXRvciA9IHRoaXMuZ2V0RWRpdG9yKCk7XG4gICAgbGV0IGxhbmdGaWVsZE5hbWUgPSBudWxsO1xuICAgIGlmIChlZGl0b3IgIT09IG51bGwpIHtcbiAgICAgIGxhbmdGaWVsZE5hbWUgPSBlZGl0b3IuZ2V0TGFuZ3VhZ2VGaWVsZCgpO1xuICAgIH1cbiAgICBsZXQgb25lT2JqID0gbnVsbDtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShvYmplY3RzKSkge1xuICAgICAgbGV0IG1vcmVUaGFuT25lRGVmOiBib29sZWFuID0gZmFsc2U7XG4gICAgICBsZXQgZGVmT2JqID0gbnVsbDtcbiAgICAgIGZvciAobGV0IG9iaiBvZiBvYmplY3RzKSB7XG4gICAgICAgIGxldCBsYW5nID0gb2JqW2xhbmdGaWVsZE5hbWVdO1xuICAgICAgICBpZiAobGFuZyA9PT0gbnVsbCB8fCB0eXBlb2YgbGFuZyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICBpZiAoZGVmT2JqID09PSBudWxsKSB7XG4gICAgICAgICAgICBkZWZPYmogPSBvYmo7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG1vcmVUaGFuT25lRGVmID0gdHJ1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIW1vcmVUaGFuT25lRGVmICYmIGRlZk9iaiAhPT0gbnVsbCAmJiB0eXBlb2YgZGVmT2JqICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBvbmVPYmogPSBkZWZPYmo7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChvYmplY3RzW2xhbmdGaWVsZE5hbWVdID09PSBudWxsIHx8IHR5cGVvZiBvYmplY3RzW2xhbmdGaWVsZE5hbWVdID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICBvbmVPYmogPSBvYmplY3RzO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBvbmVPYmo7XG4gIH1cblxuICBwdWJsaWMgZ2V0RGF0YU9iamVjdHMoKTogYW55W10ge1xuICAgIGxldCBvYmplY3RzID0gbnVsbDtcblxuICAgIGlmICh0aGlzLmRhdGEgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMuZGF0YSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIG9iamVjdHMgPSB0aGlzLmRhdGEub2JqZWN0cztcbiAgICB9XG5cbiAgICBpZiAob2JqZWN0cyA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqZWN0cyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBvYmplY3RzO1xuICB9XG5cbiAgcHVibGljIGhhc01vZGVsKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLm1vZGVsICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLm1vZGVsICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRNb2RlbCgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG5cbiAgcHVibGljIHNldE1vZGVsKG1vZGVsOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm1vZGVsID0gbW9kZWw7XG4gIH1cblxuICBwdWJsaWMgZ2V0TGFuZ3VhZ2VGaWVsZE5hbWUoKTogc3RyaW5nIHtcbiAgICBsZXQgZWRpdG9yID0gdGhpcy5nZXRFZGl0b3IoKTtcbiAgICBsZXQgbGFuZ0ZpZWxkTmFtZSA9IChlZGl0b3IgPT09IG51bGwpID8gbnVsbCA6IGVkaXRvci5nZXRMYW5ndWFnZUZpZWxkKCk7XG5cbiAgICBpZiAobGFuZ0ZpZWxkTmFtZSAhPT0gbnVsbCAmJiB0eXBlb2YgbGFuZ0ZpZWxkTmFtZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiBsYW5nRmllbGROYW1lO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLkxBTkdVQUdFX0ZJRUxEX05BTUU7XG4gIH1cblxuICBwdWJsaWMgZ2V0T2JqZWN0SWRGaWVsZE5hbWUoKTogc3RyaW5nIHtcbiAgICBsZXQgZWRpdG9yID0gdGhpcy5nZXRFZGl0b3IoKTtcbiAgICBsZXQgb2JqSWRGaWVsZE5hbWUgPSAoZWRpdG9yID09PSBudWxsKSA/IG51bGwgOiBlZGl0b3IuZ2V0T2JqZWN0SWRGaWVsZCgpO1xuICAgIGlmIChvYmpJZEZpZWxkTmFtZSAhPT0gbnVsbCAmJiB0eXBlb2Ygb2JqSWRGaWVsZE5hbWUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gb2JqSWRGaWVsZE5hbWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuT0JKRUNUX0lEX0ZJRUxEX05BTUU7XG4gIH1cblxuICBwdWJsaWMgZ2V0SW5zdGFuY2VEZWZhdWx0RGF0YShkYXRhOiBhbnkpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmdldFdyYXBEYXRhT2JqZWN0KFtkYXRhXSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0SW5zdGFuY2VEYXRhTGFuZ3VhZ2UoZGF0YTogYW55KTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5nZXRXcmFwRGF0YU9iamVjdChbZGF0YV0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBkYXRhIGFzIGFueVxuICAgKiBAcmV0dXJuIGFueSBhcyBvYmplY3QgaW4gcGF0dGVybiB7aWNvblVSTDogc3RyaW5nLCBjb2RlOiBzdHJpbmcsIGxhYmVsOiBzdHJpbmd9XG4gICAqL1xuICBwdWJsaWMgZ2V0TGFuZ3VhZ2VMaXN0KCk6IHN0cmluZ1tdIHtcbiAgICBsZXQgZWRpdG9yID0gdGhpcy5nZXRFZGl0b3IoKTtcblxuICAgIGxldCBsYW5ndWFnZUxpc3Q6IHN0cmluZ1tdID0gW107XG4gICAgaWYgKGVkaXRvciAhPT0gbnVsbCkge1xuICAgICAgbGV0IHNldHRpbmcgPSBlZGl0b3IuZ2V0QXBwU2V0dGluZygpO1xuXG4gICAgICBpZiAoc2V0dGluZyAhPT0gbnVsbCAmJiB0eXBlb2Ygc2V0dGluZyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgbGV0IGRlZmF1bHRMYW5ncyA9IHNldHRpbmcuREVGQVVMVF9EQVRBX0xBTkdVQUdFUztcbiAgICAgICAgaWYgKGRlZmF1bHRMYW5ncyAhPT0gbnVsbCAmJiB0eXBlb2YgZGVmYXVsdExhbmdzICE9PSAndW5kZWZpbmVkJyAmJiBBcnJheS5pc0FycmF5KGRlZmF1bHRMYW5ncykpIHtcbiAgICAgICAgICBmb3IgKGxldCBsYW5nIG9mIGRlZmF1bHRMYW5ncykge1xuICAgICAgICAgICAgbGFuZ3VhZ2VMaXN0LnB1c2gobGFuZy5jb2RlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbGFuZ3VhZ2VMaXN0O1xuICB9XG5cbiAgcHVibGljIGxvYWREYXRhTGFuZ3VhZ2VMaXN0KGRlZmF1bHREYXRhOiBhbnkpOiBQcm9taXNlPGFueVtdPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGxldCBlZGl0b3IgPSB0aGlzLmdldEVkaXRvcigpO1xuICAgICAgaWYgKGVkaXRvciAhPT0gbnVsbCkge1xuICAgICAgICBsZXQgbGFuZ1Byb20gPSBlZGl0b3IuZ2V0TGFuZ3VhZ2VMaXN0KGRlZmF1bHREYXRhKTtcbiAgICAgICAgaWYgKGxhbmdQcm9tICE9PSBudWxsICYmIHR5cGVvZiBsYW5nUHJvbSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICBsYW5nUHJvbS50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgIGxldCB0ZW1wQXJyYXkgPSBbXTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQgIT09IG51bGwgJiYgdHlwZW9mIHJlc3VsdCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVzdWx0KSkge1xuICAgICAgICAgICAgICAgIHRlbXBBcnJheSA9IHJlc3VsdDtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0ZW1wQXJyYXkucHVzaChyZXN1bHQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXNvbHZlKHRlbXBBcnJheSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc29sdmUoW10pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIHdoZW4gbmV3IGxhbmd1YWdlIHdhcyBjcmVhdGVkIHRoaXMgbWV0aG9kIHdpbGwgYmUgY2FsbGVkXG4gICAqIEBwYXJhbSBuZXdMYW5nRGF0YSBhcyBhbnlcbiAgICovXG4gIHB1YmxpYyBvbkxhbmd1YWdlQWRkZWQobmV3TGFuZ0RhdGE6IGFueSk6IHZvaWQge1xuICAgIGlmIChuZXdMYW5nRGF0YSAhPT0gbnVsbCAmJiB0eXBlb2YgbmV3TGFuZ0RhdGEgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAvLyBkbyBzdGggaGVyZVxuICAgIH1cbiAgICAvLyAgICAgICAgdGhpcy5kYXRhLm9iamVjdHMucHVzaChuZXdMYW5nRGF0YSk7XG4gIH1cblxuICAvKipcbiAgKiB3aGVuIGxhbmd1YWdlIHdhcyByZW1vdmVkIHRoaXMgbWV0aG9kIHdpbGwgYmUgY2FsbGVkXG4gICogQHBhcmFtIGRlbGV0ZWREYXRhIGFzIGFueVxuICAqL1xuICBwdWJsaWMgb25MYW5ndWFnZVJlbW92ZWQoZGVsZXRlZERhdGE6IGFueSk6IHZvaWQge1xuICAgIC8vIGRvIHN0aFxuICB9XG5cbiAgcHVibGljIHBhcnNlTGFuZ3VhZ2VCdXR0b25Nb2RlbChsYW5nQ29kZTogc3RyaW5nKTogTGFuZ3VhZ2VCdXR0b25Nb2RlbCB7XG4gICAgcmV0dXJuIG5ldyBMYW5ndWFnZUJ1dHRvbk1vZGVsKCcnLCBsYW5nQ29kZSwgJ2xhYmVsJyk7XG4gIH1cbn1cbiJdfQ==