com.phloxui
Version:
PhloxUI Ng2+ Framework
157 lines (156 loc) • 24.3 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
import { DefaultMenu } from '../DefaultMenu.component';
import { MenuModel } from '../model/MenuModel';
import { CheckMenuItemModel } from '../model/CheckMenuItemModel';
export class DataLanguageMenuFactory {
/**
* @param {?} objArray
* @return {?}
*/
sortLanguageList(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;
}
let /** @type {?} */ code1 = obj1.code;
let /** @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 {?}
*/
createMenuModel(context) {
let /** @type {?} */ menuItemModelArray = [];
if (context === null || typeof context === 'undefined') {
return null;
}
let /** @type {?} */ anyContext = context;
let /** @type {?} */ contentInstance = null;
if (anyContext.constructor.name === 'Tab') {
let /** @type {?} */ tab = /** @type {?} */ (anyContext);
contentInstance = tab.getTabBody();
}
if (typeof anyContext.getData !== 'function') {
return null;
}
let /** @type {?} */ anyData = anyContext.getData();
if (anyData === null || typeof anyData === 'undefined') {
return null;
}
let /** @type {?} */ editor = anyData.editor;
if (editor === null || typeof editor === 'undefined') {
return null;
}
if (editor !== null) {
let /** @type {?} */ langFieldName = editor.getLanguageField();
let /** @type {?} */ dataObjects = anyData.objects;
let /** @type {?} */ defLangObj = null;
let /** @type {?} */ langContainedList = [];
if (dataObjects !== null && typeof dataObjects !== 'undefined') {
for (let /** @type {?} */ obj of dataObjects) {
let /** @type {?} */ langCode = obj[langFieldName];
if (langCode !== null && typeof langCode !== 'undefined') {
if (langContainedList.indexOf(langCode) <= -1) {
langContainedList.push(langCode);
}
}
}
}
let /** @type {?} */ langI18n = editor.getI18NObject('LANG');
let /** @type {?} */ allLangList = [];
let /** @type {?} */ addedLangList = [];
let /** @type {?} */ setting = editor.getAppSetting();
if (setting !== null && typeof setting !== 'undefined') {
let /** @type {?} */ defaultLangs = setting.DEFAULT_DATA_LANGUAGES;
if (defaultLangs !== null && typeof defaultLangs !== 'undefined' && Array.isArray(defaultLangs)) {
// merge all data and default lang
for (let /** @type {?} */ dfLang of defaultLangs) {
allLangList.push(dfLang);
addedLangList.push(dfLang.code);
}
}
}
for (let /** @type {?} */ dLang of langContainedList) {
if (addedLangList.indexOf(dLang) <= -1) {
let /** @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);
}
}
this.sortLanguageList(allLangList);
for (let /** @type {?} */ lang of allLangList) {
let /** @type {?} */ menuItem = new CheckMenuItemModel(lang.label, lang.code, lang.iconURL, true, (actionEvent) => {
if (contentInstance !== null && typeof contentInstance !== 'undefined') {
let /** @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((result) => {
if (result !== null) {
//! editor remove lang
editor.deleteData(result);
}
});
}
}
else {
// create
if (typeof contentInstance.createNewLangWithConfirmDialog === 'function') {
contentInstance.createNewLangWithConfirmDialog(lang.code);
}
}
}
});
menuItemModelArray.push(menuItem);
}
for (let /** @type {?} */ item of menuItemModelArray) {
let /** @type {?} */ lItem = /** @type {?} */ (item);
if (langContainedList.indexOf(lItem.prefixLabel) >= 0) {
lItem.checked = true;
}
}
}
let /** @type {?} */ model = null;
if (menuItemModelArray.length >= 1) {
model = new MenuModel(DefaultMenu, 'Language Data', menuItemModelArray);
}
return model;
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGF0YUxhbmd1YWdlTWVudUZhY3RvcnkuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9jb20ucGhsb3h1aS8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnQvZWRpdG9yL0RhdGFMYW5ndWFnZU1lbnVGYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFHQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFHdkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRy9DLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRWpFLE1BQU07Ozs7O0lBRU0sZ0JBQWdCLENBQUMsUUFBZTtRQUNwQyxFQUFFLENBQUMsQ0FBQyxRQUFRLEtBQUssSUFBSSxJQUFJLE9BQU8sUUFBUSxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUM7WUFDdkQsTUFBTSxDQUFDO1NBQ1Y7UUFFRCxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVMsSUFBSSxFQUFFLElBQUk7WUFDN0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxJQUFJLE9BQU8sSUFBSSxLQUFLLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksSUFBSSxPQUFPLElBQUksS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ25HLE1BQU0sQ0FBQyxDQUFDLENBQUM7YUFDWjtZQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxJQUFJLElBQUksT0FBTyxJQUFJLEtBQUssV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxJQUFJLE9BQU8sSUFBSSxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDMUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2I7WUFBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxJQUFJLE9BQU8s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QUFDLENBQUMscUJBQUksSUFBSSxJQUFJLGtCQUFrQixDQUFDLENBQUMsQ0FBQztnQkFDbEMscUJBQUksS0FBSyxxQkFBRyxJQUEwQixDQUFBLENBQUM7Z0JBQ3ZDLEVBQUUsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDcEQsS0FBSyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7aUJBQ3hCO2FBQ0o7U0FDSjtRQUVELHFCQUFJLEtBQUssR0FBYyxJQUFJLENBQUM7UUFDNUIsRUFBRSxDQUFBLENBQUMsa0JBQWtCLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFBLENBQUM7WUFDL0IsS0FBSyxHQUFHLElBQUksU0FBUyxDQUFDLFdBQVcsRUFBRSxlQUFlLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztTQUMzRTtRQUVELE1BQU0sQ0FBQyxLQUFLLENBQUM7O0NBRXBCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSU1lbnVNb2RlbEZhY3RvcnkgfSBmcm9tICcuLi9JTWVudU1vZGVsRmFjdG9yeSc7XG5pbXBvcnQgeyBJQ29udGV4dCB9IGZyb20gJy4uL0lDb250ZXh0JztcbmltcG9ydCB7IENvbXBvbmVudE1lbnVJdGVtIH0gZnJvbSAnLi4vQ29tcG9uZW50TWVudUl0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7IERlZmF1bHRNZW51IH0gZnJvbSAnLi4vRGVmYXVsdE1lbnUuY29tcG9uZW50JztcbmltcG9ydCB7IFRhYiB9IGZyb20gJy4uL2RhdGF2aWV3L1RhYlBhbmUuY29tcG9uZW50JztcbmltcG9ydCB7IE1lbnVJdGVtTW9kZWwgfSBmcm9tICcuLi9tb2RlbC9NZW51SXRlbU1vZGVsJztcbmltcG9ydCB7IE1lbnVNb2RlbCB9IGZyb20gJy4uL21vZGVsL01lbnVNb2RlbCc7XG5pbXBvcnQgeyBBY3Rpb25Nb2RlbCB9IGZyb20gJy4uL21vZGVsL0FjdGlvbk1vZGVsJztcbmltcG9ydCB7IEFjdGlvbk1vZGVsTWVudSB9IGZyb20gJy4uL21vZGVsL0FjdGlvbk1vZGVsTWVudSc7XG5pbXBvcnQgeyBDaGVja01lbnVJdGVtTW9kZWwgfSBmcm9tICcuLi9tb2RlbC9DaGVja01lbnVJdGVtTW9kZWwnO1xuXG5leHBvcnQgY2xhc3MgRGF0YUxhbmd1YWdlTWVudUZhY3RvcnkgaW1wbGVtZW50cyBJTWVudU1vZGVsRmFjdG9yeSB7XG5cbiAgICBwcml2YXRlIHNvcnRMYW5ndWFnZUxpc3Qob2JqQXJyYXk6IGFueVtdKTogdm9pZCB7XG4gICAgICAgIGlmIChvYmpBcnJheSA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqQXJyYXkgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBvYmpBcnJheS5zb3J0KGZ1bmN0aW9uKG9iajEsIG9iajIpIHtcbiAgICAgICAgICAgIGlmICgob2JqMSA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqMSA9PT0gJ3VuZGVmaW5lZCcpICYmIChvYmoyICE9PSBudWxsICYmIHR5cGVvZiBvYmoyICE9PSAndW5kZWZpbmVkJykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoKG9iajEgIT09IG51bGwgJiYgdHlwZW9mIG9iajEgIT09ICd1bmRlZmluZWQnKSAmJiAob2JqMiA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqMiA9PT0gJ3VuZGVmaW5lZCcpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgICAgfSBlbHNlIGlmICgob2JqMSA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqMSA9PT0gJ3VuZGVmaW5lZCcpICYmIChvYmoyID09PSBudWxsIHx8IHR5cGVvZiBvYmoyID09PSAndW5kZWZpbmVkJykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGNvZGUxOiBzdHJpbmcgPSBvYmoxLmNvZGU7XG4gICAgICAgICAgICBsZXQgY29kZTI6IHN0cmluZyA9IG9iajIuY29kZTtcblxuICAgICAgICAgICAgaWYgKChjb2RlMSA9PT0gbnVsbCB8fCB0eXBlb2YgY29kZTEgPT09ICd1bmRlZmluZWQnKSAmJiAoY29kZTIgIT09IG51bGwgJiYgdHlwZW9mIGNvZGUyICE9PSAndW5kZWZpbmVkJykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoKGNvZGUxICE9PSBudWxsICYmIHR5cGVvZiBjb2RlMSAhPT0gJ3VuZGVmaW5lZCcpICYmIChjb2RlMiA9PT0gbnVsbCB8fCB0eXBlb2YgY29kZTIgPT09ICd1bmRlZmluZWQnKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoKGNvZGUxID09PSBudWxsIHx8IHR5cGVvZiBjb2RlMSA9PT0gJ3VuZGVmaW5lZCcpICYmIChjb2RlMiA9PT0gbnVsbCB8fCB0eXBlb2YgY29kZTIgPT09ICd1bmRlZmluZWQnKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY29kZTEgPCBjb2RlMikge1xuICAgICAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29kZTEgPiBjb2RlMikge1xuICAgICAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZU1lbnVNb2RlbChjb250ZXh0OiBJQ29udGV4dCk6IE1lbnVNb2RlbCB7XG4gICAgICAgIGxldCBtZW51SXRlbU1vZGVsQXJyYXk6IE1lbnVJdGVtTW9kZWxbXSA9IFtdO1xuXG4gICAgICAgIGlmIChjb250ZXh0ID09PSBudWxsIHx8IHR5cGVvZiBjb250ZXh0ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgYW55Q29udGV4dDogYW55ID0gY29udGV4dDtcbiAgICAgICAgbGV0IGNvbnRlbnRJbnN0YW5jZTogYW55ID0gbnVsbDtcbiAgICAgICAgaWYoYW55Q29udGV4dC5jb25zdHJ1Y3Rvci5uYW1lID09PSAnVGFiJyl7XG4gICAgICAgICAgICBsZXQgdGFiID0gYW55Q29udGV4dCBhcyBUYWI7XG4gICAgICAgICAgICBjb250ZW50SW5zdGFuY2UgPSB0YWIuZ2V0VGFiQm9keSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBhbnlDb250ZXh0LmdldERhdGEgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGFueURhdGE6IGFueSA9IGFueUNvbnRleHQuZ2V0RGF0YSgpO1xuICAgICAgICBpZiAoYW55RGF0YSA9PT0gbnVsbCB8fCB0eXBlb2YgYW55RGF0YSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGVkaXRvciA9IGFueURhdGEuZWRpdG9yO1xuICAgICAgICBpZiAoZWRpdG9yID09PSBudWxsIHx8IHR5cGVvZiBlZGl0b3IgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlZGl0b3IgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGxldCBsYW5nRmllbGROYW1lID0gZWRpdG9yLmdldExhbmd1YWdlRmllbGQoKTtcblxuICAgICAgICAgICAgbGV0IGRhdGFPYmplY3RzID0gYW55RGF0YS5vYmplY3RzO1xuICAgICAgICAgICAgbGV0IGRlZkxhbmdPYmogPSBudWxsO1xuICAgICAgICAgICAgbGV0IGxhbmdDb250YWluZWRMaXN0OiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICAgICAgaWYgKGRhdGFPYmplY3RzICE9PSBudWxsICYmIHR5cGVvZiBkYXRhT2JqZWN0cyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBvYmogb2YgZGF0YU9iamVjdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGxhbmdDb2RlID0gb2JqW2xhbmdGaWVsZE5hbWVdO1xuICAgICAgICAgICAgICAgICAgICBpZiAobGFuZ0NvZGUgIT09IG51bGwgJiYgdHlwZW9mIGxhbmdDb2RlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYobGFuZ0NvbnRhaW5lZExpc3QuaW5kZXhPZihsYW5nQ29kZSkgPD0gLTEpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbmdDb250YWluZWRMaXN0LnB1c2gobGFuZ0NvZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgbGFuZ0kxOG4gPSBlZGl0b3IuZ2V0STE4Tk9iamVjdCgnTEFORycpO1xuXG4gICAgICAgICAgICBsZXQgYWxsTGFuZ0xpc3Q6IGFueVtdID0gW107XG4gICAgICAgICAgICBsZXQgYWRkZWRMYW5nTGlzdDogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgICAgIGxldCBzZXR0aW5nID0gZWRpdG9yLmdldEFwcFNldHRpbmcoKTtcbiAgICAgICAgICAgIGlmIChzZXR0aW5nICE9PSBudWxsICYmIHR5cGVvZiBzZXR0aW5nICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIGxldCBkZWZhdWx0TGFuZ3MgPSBzZXR0aW5nLkRFRkFVTFRfREFUQV9MQU5HVUFHRVM7XG5cbiAgICAgICAgICAgICAgICBpZiAoZGVmYXVsdExhbmdzICE9PSBudWxsICYmIHR5cGVvZiBkZWZhdWx0TGFuZ3MgIT09ICd1bmRlZmluZWQnICYmIEFycmF5LmlzQXJyYXkoZGVmYXVsdExhbmdzKSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBtZXJnZSBhbGwgZGF0YSBhbmQgZGVmYXVsdCBsYW5nXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGRmTGFuZyBvZiBkZWZhdWx0TGFuZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsbExhbmdMaXN0LnB1c2goZGZMYW5nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZGVkTGFuZ0xpc3QucHVzaChkZkxhbmcuY29kZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAobGV0IGRMYW5nIG9mIGxhbmdDb250YWluZWRMaXN0KSB7XG4gICAgICAgICAgICAgICAgaWYgKGFkZGVkTGFuZ0xpc3QuaW5kZXhPZihkTGFuZykgPD0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGxhbmdMYWJlbCA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgIGlmIChsYW5nSTE4biAhPT0gbnVsbCAmJiB0eXBlb2YgbGFuZ0kxOG4gIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBsYW5nSTE4bltkTGFuZ10gIT09IG51bGwgJiYgdHlwZW9mIGxhbmdJMThuW2RMYW5nXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhbmdMYWJlbCA9IGxhbmdJMThuW2RMYW5nXS5uYW1lO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGFsbExhbmdMaXN0LnB1c2goeyBjb2RlOiBkTGFuZywgbGFiZWw6IGxhbmdMYWJlbCB9KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkZWRMYW5nTGlzdC5wdXNoKGRMYW5nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc29ydExhbmd1YWdlTGlzdChhbGxMYW5nTGlzdCk7XG5cbiAgICAgICAgICAgIGZvciAobGV0IGxhbmcgb2YgYWxsTGFuZ0xpc3QpIHtcbiAgICAgICAgICAgICAgICBsZXQgbWVudUl0ZW0gPSBuZXcgQ2hlY2tNZW51SXRlbU1vZGVsKGxhbmcubGFiZWwsIGxhbmcuY29kZSwgbGFuZy5pY29uVVJMLCB0cnVlLCAoYWN0aW9uRXZlbnQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29udGVudEluc3RhbmNlICE9PSBudWxsICYmIHR5cGVvZiBjb250ZW50SW5zdGFuY2UgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaGFzRGF0YTogYm9vbGVhbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb250ZW50SW5zdGFuY2UubGFuZ3VhZ2VIYXNEYXRhID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzRGF0YSA9IGNvbnRlbnRJbnN0YW5jZS5sYW5ndWFnZUhhc0RhdGEobGFuZy5jb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0RhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZW1vdmVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbnRlbnRJbnN0YW5jZS5yZW1vdmVMYW5nV2l0aENvbmZpcm1EaWFsb2cgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudEluc3RhbmNlLnJlbW92ZUxhbmdXaXRoQ29uZmlybURpYWxvZyhsYW5nLmNvZGUpLnRoZW4oKHJlc3VsdDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8hIGVkaXRvciByZW1vdmUgbGFuZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRvci5kZWxldGVEYXRhKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY3JlYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb250ZW50SW5zdGFuY2UuY3JlYXRlTmV3TGFuZ1dpdGhDb25maXJtRGlhbG9nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRJbnN0YW5jZS5jcmVhdGVOZXdMYW5nV2l0aENvbmZpcm1EaWFsb2cobGFuZy5jb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBtZW51SXRlbU1vZGVsQXJyYXkucHVzaChtZW51SXRlbSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAobGV0IGl0ZW0gb2YgbWVudUl0ZW1Nb2RlbEFycmF5KSB7XG4gICAgICAgICAgICAgICAgbGV0IGxJdGVtID0gaXRlbSBhcyBDaGVja01lbnVJdGVtTW9kZWw7XG4gICAgICAgICAgICAgICAgaWYgKGxhbmdDb250YWluZWRMaXN0LmluZGV4T2YobEl0ZW0ucHJlZml4TGFiZWwpID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgbEl0ZW0uY2hlY2tlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IG1vZGVsOiBNZW51TW9kZWwgPSBudWxsO1xuICAgICAgICBpZihtZW51SXRlbU1vZGVsQXJyYXkubGVuZ3RoID49IDEpe1xuICAgICAgICAgICAgbW9kZWwgPSBuZXcgTWVudU1vZGVsKERlZmF1bHRNZW51LCAnTGFuZ3VhZ2UgRGF0YScsIG1lbnVJdGVtTW9kZWxBcnJheSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbW9kZWw7XG4gICAgfVxufVxuIl19