com.phloxui
Version:
PhloxUI Ng2+ Framework
224 lines (223 loc) • 28 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
import * as tslib_1 from "tslib";
import { DefaultMenu } from '../DefaultMenu.component';
import { MenuModel } from '../model/MenuModel';
import { CheckMenuItemModel } from '../model/CheckMenuItemModel';
var DataLanguageMenuFactory = /** @class */ (function () {
function DataLanguageMenuFactory() {
}
/**
* @param {?} objArray
* @return {?}
*/
DataLanguageMenuFactory.prototype.sortLanguageList = /**
* @param {?} objArray
* @return {?}
*/
function (objArray) {
if (objArray === null || typeof objArray === 'undefined') {
return;
}
objArray.sort(function (obj1, obj2) {
if ((obj1 === null || typeof obj1 === 'undefined') && (obj2 !== null && typeof obj2 !== 'undefined')) {
return 1;
}
else if ((obj1 !== null && typeof obj1 !== 'undefined') && (obj2 === null || typeof obj2 === 'undefined')) {
return -1;
}
else if ((obj1 === null || typeof obj1 === 'undefined') && (obj2 === null || typeof obj2 === 'undefined')) {
return 0;
}
var /** @type {?} */ code1 = obj1.code;
var /** @type {?} */ code2 = obj2.code;
if ((code1 === null || typeof code1 === 'undefined') && (code2 !== null && typeof code2 !== 'undefined')) {
return 1;
}
else if ((code1 !== null && typeof code1 !== 'undefined') && (code2 === null || typeof code2 === 'undefined')) {
return -1;
}
else if ((code1 === null || typeof code1 === 'undefined') && (code2 === null || typeof code2 === 'undefined')) {
return 0;
}
if (code1 < code2) {
return -1;
}
else if (code1 > code2) {
return 1;
}
return 0;
});
};
/**
* @param {?} context
* @return {?}
*/
DataLanguageMenuFactory.prototype.createMenuModel = /**
* @param {?} context
* @return {?}
*/
function (context) {
var /** @type {?} */ menuItemModelArray = [];
if (context === null || typeof context === 'undefined') {
return null;
}
var /** @type {?} */ anyContext = context;
var /** @type {?} */ contentInstance = null;
if (anyContext.constructor.name === 'Tab') {
var /** @type {?} */ tab = /** @type {?} */ (anyContext);
contentInstance = tab.getTabBody();
}
if (typeof anyContext.getData !== 'function') {
return null;
}
var /** @type {?} */ anyData = anyContext.getData();
if (anyData === null || typeof anyData === 'undefined') {
return null;
}
var /** @type {?} */ editor = anyData.editor;
if (editor === null || typeof editor === 'undefined') {
return null;
}
if (editor !== null) {
var /** @type {?} */ langFieldName = editor.getLanguageField();
var /** @type {?} */ dataObjects = anyData.objects;
var /** @type {?} */ defLangObj = null;
var /** @type {?} */ langContainedList = [];
if (dataObjects !== null && typeof dataObjects !== 'undefined') {
try {
for (var dataObjects_1 = tslib_1.__values(dataObjects), dataObjects_1_1 = dataObjects_1.next(); !dataObjects_1_1.done; dataObjects_1_1 = dataObjects_1.next()) {
var obj = dataObjects_1_1.value;
var /** @type {?} */ langCode = obj[langFieldName];
if (langCode !== null && typeof langCode !== 'undefined') {
if (langContainedList.indexOf(langCode) <= -1) {
langContainedList.push(langCode);
}
}
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (dataObjects_1_1 && !dataObjects_1_1.done && (_a = dataObjects_1.return)) _a.call(dataObjects_1);
}
finally { if (e_1) throw e_1.error; }
}
}
var /** @type {?} */ langI18n = editor.getI18NObject('LANG');
var /** @type {?} */ allLangList = [];
var /** @type {?} */ addedLangList = [];
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 {
// merge all data and default lang
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 dfLang = defaultLangs_1_1.value;
allLangList.push(dfLang);
addedLangList.push(dfLang.code);
}
}
catch (e_2_1) { e_2 = { error: e_2_1 }; }
finally {
try {
if (defaultLangs_1_1 && !defaultLangs_1_1.done && (_b = defaultLangs_1.return)) _b.call(defaultLangs_1);
}
finally { if (e_2) throw e_2.error; }
}
}
}
try {
for (var langContainedList_1 = tslib_1.__values(langContainedList), langContainedList_1_1 = langContainedList_1.next(); !langContainedList_1_1.done; langContainedList_1_1 = langContainedList_1.next()) {
var dLang = langContainedList_1_1.value;
if (addedLangList.indexOf(dLang) <= -1) {
var /** @type {?} */ langLabel = "";
if (langI18n !== null && typeof langI18n !== 'undefined' &&
langI18n[dLang] !== null && typeof langI18n[dLang] !== 'undefined') {
langLabel = langI18n[dLang].name;
}
allLangList.push({ code: dLang, label: langLabel });
addedLangList.push(dLang);
}
}
}
catch (e_3_1) { e_3 = { error: e_3_1 }; }
finally {
try {
if (langContainedList_1_1 && !langContainedList_1_1.done && (_c = langContainedList_1.return)) _c.call(langContainedList_1);
}
finally { if (e_3) throw e_3.error; }
}
this.sortLanguageList(allLangList);
var _loop_1 = function (lang) {
var /** @type {?} */ menuItem = new CheckMenuItemModel(lang.label, lang.code, lang.iconURL, true, function (actionEvent) {
if (contentInstance !== null && typeof contentInstance !== 'undefined') {
var /** @type {?} */ hasData = false;
if (typeof contentInstance.languageHasData === 'function') {
hasData = contentInstance.languageHasData(lang.code);
}
if (hasData) {
// remove
if (typeof contentInstance.removeLangWithConfirmDialog === 'function') {
contentInstance.removeLangWithConfirmDialog(lang.code).then(function (result) {
if (result !== null) {
//! editor remove lang
editor.deleteData(result);
}
});
}
}
else {
// create
if (typeof contentInstance.createNewLangWithConfirmDialog === 'function') {
contentInstance.createNewLangWithConfirmDialog(lang.code);
}
}
}
});
menuItemModelArray.push(menuItem);
};
try {
for (var allLangList_1 = tslib_1.__values(allLangList), allLangList_1_1 = allLangList_1.next(); !allLangList_1_1.done; allLangList_1_1 = allLangList_1.next()) {
var lang = allLangList_1_1.value;
_loop_1(lang);
}
}
catch (e_4_1) { e_4 = { error: e_4_1 }; }
finally {
try {
if (allLangList_1_1 && !allLangList_1_1.done && (_d = allLangList_1.return)) _d.call(allLangList_1);
}
finally { if (e_4) throw e_4.error; }
}
try {
for (var menuItemModelArray_1 = tslib_1.__values(menuItemModelArray), menuItemModelArray_1_1 = menuItemModelArray_1.next(); !menuItemModelArray_1_1.done; menuItemModelArray_1_1 = menuItemModelArray_1.next()) {
var item = menuItemModelArray_1_1.value;
var /** @type {?} */ lItem = /** @type {?} */ (item);
if (langContainedList.indexOf(lItem.prefixLabel) >= 0) {
lItem.checked = true;
}
}
}
catch (e_5_1) { e_5 = { error: e_5_1 }; }
finally {
try {
if (menuItemModelArray_1_1 && !menuItemModelArray_1_1.done && (_e = menuItemModelArray_1.return)) _e.call(menuItemModelArray_1);
}
finally { if (e_5) throw e_5.error; }
}
}
var /** @type {?} */ model = null;
if (menuItemModelArray.length >= 1) {
model = new MenuModel(DefaultMenu, 'Language Data', menuItemModelArray);
}
return model;
var e_1, _a, e_2, _b, e_3, _c, e_4, _d, e_5, _e;
};
return DataLanguageMenuFactory;
}());
export { DataLanguageMenuFactory };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGF0YUxhbmd1YWdlTWVudUZhY3RvcnkuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9jb20ucGhsb3h1aS8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnQvZWRpdG9yL0RhdGFMYW5ndWFnZU1lbnVGYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBR0EsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBR3ZELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUcvQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUVqRSxJQUFBOzs7Ozs7O0lBRVksa0RBQWdCOzs7O2NBQUMsUUFBZTtRQUNwQyxFQUFFLENBQUMsQ0FBQyxRQUFRLEtBQUssSUFBSSxJQUFJLE9BQU8sUUFBUSxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUM7WUFDdkQsTUFBTSxDQUFDO1NBQ1Y7UUFFRCxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVMsSUFBSSxFQUFFLElBQUk7WUFDN0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxJQUFJLE9BQU8sSUFBSSxLQUFLLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksSUFBSSxPQUFPLElBQUksS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ25HLE1BQU0sQ0FBQyxDQUFDLENBQUM7YUFDWjtZQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxJQUFJLElBQUksT0FBTyxJQUFJLEtBQUssV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxJQUFJLE9BQU8sSUFBSSxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDMUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2I7WUFBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxJQUFJ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LElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzs7O2dCQTFCdEMsR0FBRyxDQUFDLENBQWEsSUFBQSxnQkFBQSxpQkFBQSxXQUFXLENBQUEsd0NBQUE7b0JBQXZCLElBQUksSUFBSSx3QkFBQTs0QkFBSixJQUFJO2lCQTJCWjs7Ozs7Ozs7OztnQkFFRCxHQUFHLENBQUMsQ0FBYSxJQUFBLHVCQUFBLGlCQUFBLGtCQUFrQixDQUFBLHNEQUFBO29CQUE5QixJQUFJLElBQUksK0JBQUE7b0JBQ1QscUJBQUksS0FBSyxxQkFBRyxJQUEwQixDQUFBLENBQUM7b0JBQ3ZDLEVBQUUsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDcEQsS0FBSyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7cUJBQ3hCO2lCQUNKOzs7Ozs7Ozs7U0FDSjtRQUVELHFCQUFJLEtBQUssR0FBYyxJQUFJLENBQUM7UUFDNUIsRUFBRSxDQUFBLENBQUMsa0JBQWtCLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFBLENBQUM7WUFDL0IsS0FBSyxHQUFHLElBQUksU0FBUyxDQUFDLFdBQVcsRUFBRSxlQUFlLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztTQUMzRTtRQUVELE1BQU0sQ0FBQyxLQUFLLENBQUM7OztrQ0F0S3JCO0lBd0tDLENBQUE7QUE3SkQsbUNBNkpDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSU1lbnVNb2RlbEZhY3RvcnkgfSBmcm9tICcuLi9JTWVudU1vZGVsRmFjdG9yeSc7XG5pbXBvcnQgeyBJQ29udGV4dCB9IGZyb20gJy4uL0lDb250ZXh0JztcbmltcG9ydCB7IENvbXBvbmVudE1lbnVJdGVtIH0gZnJvbSAnLi4vQ29tcG9uZW50TWVudUl0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7IERlZmF1bHRNZW51IH0gZnJvbSAnLi4vRGVmYXVsdE1lbnUuY29tcG9uZW50JztcbmltcG9ydCB7IFRhYiB9IGZyb20gJy4uL2RhdGF2aWV3L1RhYlBhbmUuY29tcG9uZW50JztcbmltcG9ydCB7IE1lbnVJdGVtTW9kZWwgfSBmcm9tICcuLi9tb2RlbC9NZW51SXRlbU1vZGVsJztcbmltcG9ydCB7IE1lbnVNb2RlbCB9IGZyb20gJy4uL21vZGVsL01lbnVNb2RlbCc7XG5pbXBvcnQgeyBBY3Rpb25Nb2RlbCB9IGZyb20gJy4uL21vZGVsL0FjdGlvbk1vZGVsJztcbmltcG9ydCB7IEFjdGlvbk1vZGVsTWVudSB9IGZyb20gJy4uL21vZGVsL0FjdGlvbk1vZGVsTWVudSc7XG5pbXBvcnQgeyBDaGVja01lbnVJdGVtTW9kZWwgfSBmcm9tICcuLi9tb2RlbC9DaGVja01lbnVJdGVtTW9kZWwnO1xuXG5leHBvcnQgY2xhc3MgRGF0YUxhbmd1YWdlTWVudUZhY3RvcnkgaW1wbGVtZW50cyBJTWVudU1vZGVsRmFjdG9yeSB7XG5cbiAgICBwcml2YXRlIHNvcnRMYW5ndWFnZUxpc3Qob2JqQXJyYXk6IGFueVtdKTogdm9pZCB7XG4gICAgICAgIGlmIChvYmpBcnJheSA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqQXJyYXkgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBvYmpBcnJheS5zb3J0KGZ1bmN0aW9uKG9iajEsIG9iajIpIHtcbiAgICAgICAgICAgIGlmICgob2JqMSA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqMSA9PT0gJ3VuZGVmaW5lZCcpICYmIChvYmoyICE9PSBudWxsICYmIHR5cGVvZiBvYmoyICE9PSAndW5kZWZpbmVkJykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoKG9iajEgIT09IG51bGwgJiYgdHlwZW9mIG9iajEgIT09ICd1bmRlZmluZWQnKSAmJiAob2JqMiA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqMiA9PT0gJ3VuZGVmaW5lZCcpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgICAgfSBlbHNlIGlmICgob2JqMSA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqMSA9PT0gJ3VuZGVmaW5lZCcpICYmIChvYmoyID09PSBudWxsIHx8IHR5cGVvZiBvYmoyID09PSAndW5kZWZpbmVkJykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGNvZGUxOiBzdHJpbmcgPSBvYmoxLmNvZGU7XG4gICAgICAgICAgICBsZXQgY29kZTI6IHN0cmluZyA9IG9iajIuY29kZTtcblxuICAgICAgICAgICAgaWYgKChjb2RlMSA9PT0gbnVsbCB8fCB0eXBlb2YgY29kZTEgPT09ICd1bmRlZmluZWQnKSAmJiAoY29kZTIgIT09IG51bGwgJiYgdHlwZW9mIGNvZGUyICE9PSAndW5kZWZpbmVkJykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoKGNvZGUxICE9PSBudWxsICYmIHR5cGVvZiBjb2RlMSAhPT0gJ3VuZGVmaW5lZCcpICYmIChjb2RlMiA9PT0gbnVsbCB8fCB0eXBlb2YgY29kZTIgPT09ICd1bmRlZmluZWQnKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoKGNvZGUxID09PSBudWxsIHx8IHR5cGVvZiBjb2RlMSA9PT0gJ3VuZGVmaW5lZCcpICYmIChjb2RlMiA9PT0gbnVsbCB8fCB0eXBlb2YgY29kZTIgPT09ICd1bmRlZmluZWQnKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY29kZTEgPCBjb2RlMikge1xuICAgICAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29kZTEgPiBjb2RlMikge1xuICAgICAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZU1lbnVNb2RlbChjb250ZXh0OiBJQ29udGV4dCk6IE1lbnVNb2RlbCB7XG4gICAgICAgIGxldCBtZW51SXRlbU1vZGVsQXJyYXk6IE1lbnVJdGVtTW9kZWxbXSA9IFtdO1xuXG4gICAgICAgIGlmIChjb250ZXh0ID09PSBudWxsIHx8IHR5cGVvZiBjb250ZXh0ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgYW55Q29udGV4dDogYW55ID0gY29udGV4dDtcbiAgICAgICAgbGV0IGNvbnRlbnRJbnN0YW5jZTogYW55ID0gbnVsbDtcbiAgICAgICAgaWYoYW55Q29udGV4dC5jb25zdHJ1Y3Rvci5uYW1lID09PSAnVGFiJyl7XG4gICAgICAgICAgICBsZXQgdGFiID0gYW55Q29udGV4dCBhcyBUYWI7XG4gICAgICAgICAgICBjb250ZW50SW5zdGFuY2UgPSB0YWIuZ2V0VGFiQm9keSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBhbnlDb250ZXh0LmdldERhdGEgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGFueURhdGE6IGFueSA9IGFueUNvbnRleHQuZ2V0RGF0YSgpO1xuICAgICAgICBpZiAoYW55RGF0YSA9PT0gbnVsbCB8fCB0eXBlb2YgYW55RGF0YSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGVkaXRvciA9IGFueURhdGEuZWRpdG9yO1xuICAgICAgICBpZiAoZWRpdG9yID09PSBudWxsIHx8IHR5cGVvZiBlZGl0b3IgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlZGl0b3IgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGxldCBsYW5nRmllbGROYW1lID0gZWRpdG9yLmdldExhbmd1YWdlRmllbGQoKTtcblxuICAgICAgICAgICAgbGV0IGRhdGFPYmplY3RzID0gYW55RGF0YS5vYmplY3RzO1xuICAgICAgICAgICAgbGV0IGRlZkxhbmdPYmogPSBudWxsO1xuICAgICAgICAgICAgbGV0IGxhbmdDb250YWluZWRMaXN0OiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICAgICAgaWYgKGRhdGFPYmplY3RzICE9PSBudWxsICYmIHR5cGVvZiBkYXRhT2JqZWN0cyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBvYmogb2YgZGF0YU9iamVjdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGxhbmdDb2RlID0gb2JqW2xhbmdGaWVsZE5hbWVdO1xuICAgICAgICAgICAgICAgICAgICBpZiAobGFuZ0NvZGUgIT09IG51bGwgJiYgdHlwZW9mIGxhbmdDb2RlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYobGFuZ0NvbnRhaW5lZExpc3QuaW5kZXhPZihsYW5nQ29kZSkgPD0gLTEpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbmdDb250YWluZWRMaXN0LnB1c2gobGFuZ0NvZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgbGFuZ0kxOG4gPSBlZGl0b3IuZ2V0STE4Tk9iamVjdCgnTEFORycpO1xuXG4gICAgICAgICAgICBsZXQgYWxsTGFuZ0xpc3Q6IGFueVtdID0gW107XG4gICAgICAgICAgICBsZXQgYWRkZWRMYW5nTGlzdDogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgICAgIGxldCBzZXR0aW5nID0gZWRpdG9yLmdldEFwcFNldHRpbmcoKTtcbiAgICAgICAgICAgIGlmIChzZXR0aW5nICE9PSBudWxsICYmIHR5cGVvZiBzZXR0aW5nICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIGxldCBkZWZhdWx0TGFuZ3MgPSBzZXR0aW5nLkRFRkFVTFRfREFUQV9MQU5HVUFHRVM7XG5cbiAgICAgICAgICAgICAgICBpZiAoZGVmYXVsdExhbmdzICE9PSBudWxsICYmIHR5cGVvZiBkZWZhdWx0TGFuZ3MgIT09ICd1bmRlZmluZWQnICYmIEFycmF5LmlzQXJyYXkoZGVmYXVsdExhbmdzKSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBtZXJnZSBhbGwgZGF0YSBhbmQgZGVmYXVsdCBsYW5nXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGRmTGFuZyBvZiBkZWZhdWx0TGFuZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsbExhbmdMaXN0LnB1c2goZGZMYW5nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZGVkTGFuZ0xpc3QucHVzaChkZkxhbmcuY29kZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAobGV0IGRMYW5nIG9mIGxhbmdDb250YWluZWRMaXN0KSB7XG4gICAgICAgICAgICAgICAgaWYgKGFkZGVkTGFuZ0xpc3QuaW5kZXhPZihkTGFuZykgPD0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGxhbmdMYWJlbCA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgIGlmIChsYW5nSTE4biAhPT0gbnVsbCAmJiB0eXBlb2YgbGFuZ0kxOG4gIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBsYW5nSTE4bltkTGFuZ10gIT09IG51bGwgJiYgdHlwZW9mIGxhbmdJMThuW2RMYW5nXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhbmdMYWJlbCA9IGxhbmdJMThuW2RMYW5nXS5uYW1lO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGFsbExhbmdMaXN0LnB1c2goeyBjb2RlOiBkTGFuZywgbGFiZWw6IGxhbmdMYWJlbCB9KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkZWRMYW5nTGlzdC5wdXNoKGRMYW5nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc29ydExhbmd1YWdlTGlzdChhbGxMYW5nTGlzdCk7XG5cbiAgICAgICAgICAgIGZvciAobGV0IGxhbmcgb2YgYWxsTGFuZ0xpc3QpIHtcbiAgICAgICAgICAgICAgICBsZXQgbWVudUl0ZW0gPSBuZXcgQ2hlY2tNZW51SXRlbU1vZGVsKGxhbmcubGFiZWwsIGxhbmcuY29kZSwgbGFuZy5pY29uVVJMLCB0cnVlLCAoYWN0aW9uRXZlbnQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29udGVudEluc3RhbmNlICE9PSBudWxsICYmIHR5cGVvZiBjb250ZW50SW5zdGFuY2UgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaGFzRGF0YTogYm9vbGVhbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb250ZW50SW5zdGFuY2UubGFuZ3VhZ2VIYXNEYXRhID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzRGF0YSA9IGNvbnRlbnRJbnN0YW5jZS5sYW5ndWFnZUhhc0RhdGEobGFuZy5jb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0RhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZW1vdmVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbnRlbnRJbnN0YW5jZS5yZW1vdmVMYW5nV2l0aENvbmZpcm1EaWFsb2cgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudEluc3RhbmNlLnJlbW92ZUxhbmdXaXRoQ29uZmlybURpYWxvZyhsYW5nLmNvZGUpLnRoZW4oKHJlc3VsdDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hIGVkaXRvciByZW1vdmUgbGFuZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRvci5kZWxldGVEYXRhKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY3JlYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb250ZW50SW5zdGFuY2UuY3JlYXRlTmV3TGFuZ1dpdGhDb25maXJtRGlhbG9nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRJbnN0YW5jZS5jcmVhdGVOZXdMYW5nV2l0aENvbmZpcm1EaWFsb2cobGFuZy5jb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBtZW51SXRlbU1vZGVsQXJyYXkucHVzaChtZW51SXRlbSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAobGV0IGl0ZW0gb2YgbWVudUl0ZW1Nb2RlbEFycmF5KSB7XG4gICAgICAgICAgICAgICAgbGV0IGxJdGVtID0gaXRlbSBhcyBDaGVja01lbnVJdGVtTW9kZWw7XG4gICAgICAgICAgICAgICAgaWYgKGxhbmdDb250YWluZWRMaXN0LmluZGV4T2YobEl0ZW0ucHJlZml4TGFiZWwpID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgbEl0ZW0uY2hlY2tlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IG1vZGVsOiBNZW51TW9kZWwgPSBudWxsO1xuICAgICAgICBpZihtZW51SXRlbU1vZGVsQXJyYXkubGVuZ3RoID49IDEpe1xuICAgICAgICAgICAgbW9kZWwgPSBuZXcgTWVudU1vZGVsKERlZmF1bHRNZW51LCAnTGFuZ3VhZ2UgRGF0YScsIG1lbnVJdGVtTW9kZWxBcnJheSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbW9kZWw7XG4gICAgfVxufVxuIl19