com.phloxui
Version:
PhloxUI Ng2+ Framework
154 lines (153 loc) • 21.9 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
import { DefaultMenuItem } from '../DefaultMenuItem.component';
import { DefaultMenu } from '../DefaultMenu.component';
import { MenuItemModel } from '../model/MenuItemModel';
import { MenuModel } from '../model/MenuModel';
import { ActionModel } from '../model/ActionModel';
import { ActionModelMenu } from '../model/ActionModelMenu';
const /** @type {?} */ FORM_VIEW = 'form-view';
export class DefaultDataEditorContextMenuFactory {
/**
* @param {?} dataEditor
*/
constructor(dataEditor) {
this.editor = dataEditor;
}
/**
* @param {?} anyModel
* @param {?} context
* @return {?}
*/
getMenuItemModels(anyModel, context) {
let /** @type {?} */ menuItemModelArray = [];
if (anyModel === null || typeof anyModel === 'undefined') {
return menuItemModelArray;
}
let /** @type {?} */ menuItems = [];
if (anyModel instanceof ActionModelMenu) {
let /** @type {?} */ actionMenu = /** @type {?} */ (anyModel);
menuItems = actionMenu.items;
}
for (let /** @type {?} */ action of menuItems) {
if (action.isShow === null) {
continue;
}
if (typeof action.isShow !== 'function') {
continue;
}
if (!action.isShow(context)) {
continue;
}
let /** @type {?} */ isEnable = true;
let /** @type {?} */ menuItem = null;
let /** @type {?} */ actionItems = this.getMenuItemModels(action, context);
if (actionItems.length > 0) {
// is menu
menuItem = new MenuModel(DefaultMenu, action.label, actionItems, action.menuModelFactory);
}
else {
// is item
menuItem = new MenuItemModel(DefaultMenuItem, action.label, isEnable, (actionEvent) => {
if (!isEnable) {
return;
}
let /** @type {?} */ data = null;
if (context !== null && typeof context !== 'undefined') {
let /** @type {?} */ tempContext = context;
if (typeof tempContext.getData === 'function') {
data = tempContext.getData();
}
if (tempContext.constructor.name === 'Tab') {
let /** @type {?} */ tab = /** @type {?} */ (tempContext);
actionEvent.index = tab.getIndex();
let /** @type {?} */ formView = /** @type {?} */ (this.editor.getViewComponentFromType(FORM_VIEW));
if (formView !== null && typeof formView !== 'undefined') {
data = formView.getTabData(actionEvent.index);
}
}
}
actionEvent.data = data;
action.actionPerformedHandler.call(null, actionEvent);
});
}
if (menuItem !== null) {
menuItemModelArray.push(menuItem);
}
}
return menuItemModelArray;
}
/**
* @param {?} context
* @return {?}
*/
createMenuModel(context) {
let /** @type {?} */ menuItemModelArray = [];
for (let /** @type {?} */ action of this.editor.getActionModels()) {
if (action.isShow === null) {
continue;
}
if (typeof action.isShow !== 'function') {
continue;
}
if (!action.isShow(context)) {
continue;
}
let /** @type {?} */ isEnable = false;
if (typeof action.isEnabled === 'function') {
isEnable = action.isEnabled(context);
}
if (action instanceof ActionModelMenu) {
// as menu
let /** @type {?} */ menuModel = null;
if (action.menuModelFactory !== null && typeof action.menuModelFactory !== 'undefined') {
menuModel = action.menuModelFactory.createMenuModel(context);
if (menuModel !== null) {
menuModel.label = action.label;
}
}
else {
let /** @type {?} */ menuItems = this.getMenuItemModels(action, context);
menuModel = new MenuModel(DefaultMenu, action.label, menuItems, action.menuModelFactory);
}
if (menuModel !== null && typeof menuModel !== 'undefined') {
menuItemModelArray.push(menuModel);
}
}
else if (action instanceof ActionModel) {
// as menu item
menuItemModelArray.push(new MenuItemModel(DefaultMenuItem, action.label, isEnable, (actionEvent) => {
if (!isEnable) {
return;
}
let /** @type {?} */ data = null;
if (context !== null && typeof context !== 'undefined') {
let /** @type {?} */ tempContext = context;
if (typeof tempContext.getData === 'function') {
data = tempContext.getData();
}
if (tempContext.constructor.name === 'Tab') {
let /** @type {?} */ tab = /** @type {?} */ (tempContext);
actionEvent.index = tab.getIndex();
let /** @type {?} */ formView = /** @type {?} */ (this.editor.getViewComponentFromType(FORM_VIEW));
if (formView !== null && typeof formView !== 'undefined') {
data = formView.getTabData(actionEvent.index);
}
}
}
actionEvent.data = data;
action.actionPerformedHandler.call(null, actionEvent);
}));
}
}
let /** @type {?} */ model = new MenuModel(DefaultMenuItem, 'action Menu', menuItemModelArray);
return model;
}
}
function DefaultDataEditorContextMenuFactory_tsickle_Closure_declarations() {
/** @type {?} */
DefaultDataEditorContextMenuFactory.prototype.editor;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVmYXVsdERhdGFFZGl0b3JDb250ZXh0TWVudUZhY3RvcnkuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9jb20ucGhsb3h1aS8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnQvZWRpdG9yL0RlZmF1bHREYXRhRWRpdG9yQ29udGV4dE1lbnVGYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFFQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDL0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUkzRCx1QkFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDO0FBRTlCLE1BQU07Ozs7SUFJRixZQUFZLFVBQThCO1FBQ3RDLElBQUksQ0FBQyxNQUFNLEdBQUcsVUFBVSxDQUFDO0tBQzVCOzs7Ozs7SUFFTyxpQkFBaUIsQ0FBQyxRQUFhLEVBQUUsT0FBaUI7UUFDdEQscUJBQUksa0JBQWtCLEdBQW9CLEVBQUUsQ0FBQztRQUU3QyxFQUFFLENBQUMsQ0FBQyxRQUFRLEtBQUssSUFBSSxJQUFJLE9BQU8sUUFBUSxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUM7WUFDdkQsTUFBTSxDQUFDLGtCQUFrQixDQUFDO1NBQzdCO1FBRUQscUJBQUksU0FBUyxHQUFVLEVBQUUsQ0FBQztRQUMxQixFQUFFLENBQUEsQ0FBQyxRQUFRLFlBQWEsZUFBZSxDQUFDLENBQUEsQ0FBQztZQUNyQyxxQkFBSSxVQUFVLHFCQUFHLFFBQTJCLENBQUEsQ0FBQztZQUU3QyxTQUFTLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQztTQUNo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LFFBQVEsRUFBRSxDQUFDOzRCQUVuQyxxQkFBSSxRQUFRLHFCQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsd0JBQXdCLENBQUMsU0FBUyxDQUFhLENBQUEsQ0FBQzs0QkFDM0UsRUFBRSxDQUFDLENBQUMsUUFBUSxLQUFLLElBQUksSUFBSSxPQUFPLFFBQVEsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO2dDQUN2RCxJQUFJLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7NkJBQ2pEO3lCQUNKO3FCQUNKO29CQUVELFdBQVcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO29CQUN4QixNQUFNLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQztpQkFDekQsQ0FBQyxDQUFDLENBQUM7YUFDUDtTQUNKO1FBRUQscUJBQUksS0FBSyxHQUFjLElBQUksU0FBUyxDQUFDLGVBQWUsRUFBRSxhQUFhLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztRQUV6RixNQUFNLENBQUMsS0FBSyxDQUFDOztDQUVwQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElNZW51TW9kZWxGYWN0b3J5IH0gZnJvbSAnLi4vSU1lbnVNb2RlbEZhY3RvcnknO1xuaW1wb3J0IHsgSUNvbnRleHQgfSBmcm9tICcuLi9JQ29udGV4dCc7XG5pbXBvcnQgeyBEZWZhdWx0TWVudUl0ZW0gfSBmcm9tICcuLi9EZWZhdWx0TWVudUl0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7IERlZmF1bHRNZW51IH0gZnJvbSAnLi4vRGVmYXVsdE1lbnUuY29tcG9uZW50JztcbmltcG9ydCB7IE1lbnVJdGVtTW9kZWwgfSBmcm9tICcuLi9tb2RlbC9NZW51SXRlbU1vZGVsJztcbmltcG9ydCB7IE1lbnVNb2RlbCB9IGZyb20gJy4uL21vZGVsL01lbnVNb2RlbCc7XG5pbXBvcnQgeyBBY3Rpb25Nb2RlbCB9IGZyb20gJy4uL21vZGVsL0FjdGlvbk1vZGVsJztcbmltcG9ydCB7IEFjdGlvbk1vZGVsTWVudSB9IGZyb20gJy4uL21vZGVsL0FjdGlvbk1vZGVsTWVudSc7XG5pbXBvcnQgeyBBYnN0cmFjdERhdGFFZGl0b3IgfSBmcm9tICcuL0Fic3RyYWN0RGF0YUVkaXRvcic7XG5pbXBvcnQgeyBUYWIgfSBmcm9tICcuLi9kYXRhdmlldy9UYWJQYW5lLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGb3JtVmlldyB9IGZyb20gJy4uL2VkaXRvci9lZGl0b3IuaW50ZXJuYWwvRm9ybVZpZXcuY29tcG9uZW50JztcbmNvbnN0IEZPUk1fVklFVyA9ICdmb3JtLXZpZXcnO1xuXG5leHBvcnQgY2xhc3MgRGVmYXVsdERhdGFFZGl0b3JDb250ZXh0TWVudUZhY3RvcnkgaW1wbGVtZW50cyBJTWVudU1vZGVsRmFjdG9yeSB7XG5cbiAgICBwcml2YXRlIGVkaXRvcjogQWJzdHJhY3REYXRhRWRpdG9yO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YUVkaXRvcjogQWJzdHJhY3REYXRhRWRpdG9yKSB7XG4gICAgICAgIHRoaXMuZWRpdG9yID0gZGF0YUVkaXRvcjtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE1lbnVJdGVtTW9kZWxzKGFueU1vZGVsOiBhbnksIGNvbnRleHQ6IElDb250ZXh0KTogTWVudUl0ZW1Nb2RlbFtde1xuICAgICAgICBsZXQgbWVudUl0ZW1Nb2RlbEFycmF5OiBNZW51SXRlbU1vZGVsW10gPSBbXTtcblxuICAgICAgICBpZiAoYW55TW9kZWwgPT09IG51bGwgfHwgdHlwZW9mIGFueU1vZGVsID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcmV0dXJuIG1lbnVJdGVtTW9kZWxBcnJheTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBtZW51SXRlbXM6IGFueVtdID0gW107XG4gICAgICAgIGlmKGFueU1vZGVsIGluc3RhbmNlb2YgIEFjdGlvbk1vZGVsTWVudSl7XG4gICAgICAgICAgICBsZXQgYWN0aW9uTWVudSA9IGFueU1vZGVsIGFzIEFjdGlvbk1vZGVsTWVudTtcblxuICAgICAgICAgICAgbWVudUl0ZW1zID0gYWN0aW9uTWVudS5pdGVtcztcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IGFjdGlvbiBvZiBtZW51SXRlbXMpIHtcbiAgICAgICAgICAgIGlmIChhY3Rpb24uaXNTaG93ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgYWN0aW9uLmlzU2hvdyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghYWN0aW9uLmlzU2hvdyhjb250ZXh0KSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgaXNFbmFibGU6IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgICAgICAgICBsZXQgbWVudUl0ZW0gPSBudWxsO1xuICAgICAgICAgICAgbGV0IGFjdGlvbkl0ZW1zID0gdGhpcy5nZXRNZW51SXRlbU1vZGVscyhhY3Rpb24sIGNvbnRleHQpO1xuXG4gICAgICAgICAgICBpZihhY3Rpb25JdGVtcy5sZW5ndGggPiAwKXtcbiAgICAgICAgICAgICAgICAvLyBpcyBtZW51XG4gICAgICAgICAgICAgICAgbWVudUl0ZW0gPSBuZXcgTWVudU1vZGVsKERlZmF1bHRNZW51LCBhY3Rpb24ubGFiZWwsIGFjdGlvbkl0ZW1zLCBhY3Rpb24ubWVudU1vZGVsRmFjdG9yeSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGlzIGl0ZW1cbiAgICAgICAgICAgICAgICBtZW51SXRlbSA9IG5ldyBNZW51SXRlbU1vZGVsKERlZmF1bHRNZW51SXRlbSwgYWN0aW9uLmxhYmVsLCBpc0VuYWJsZSwgKGFjdGlvbkV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYoIWlzRW5hYmxlKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBsZXQgZGF0YSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb250ZXh0ICE9PSBudWxsICYmIHR5cGVvZiBjb250ZXh0ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRlbXBDb250ZXh0OiBhbnkgPSBjb250ZXh0O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0ZW1wQ29udGV4dC5nZXREYXRhID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IHRlbXBDb250ZXh0LmdldERhdGEoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRlbXBDb250ZXh0LmNvbnN0cnVjdG9yLm5hbWUgPT09ICdUYWInKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRhYiA9IHRlbXBDb250ZXh0IGFzIFRhYjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25FdmVudC5pbmRleCA9IHRhYi5nZXRJbmRleCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGZvcm1WaWV3ID0gdGhpcy5lZGl0b3IuZ2V0Vmlld0NvbXBvbmVudEZyb21UeXBlKEZPUk1fVklFVykgYXMgRm9ybVZpZXc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvcm1WaWV3ICE9PSBudWxsICYmIHR5cGVvZiBmb3JtVmlldyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGZvcm1WaWV3LmdldFRhYkRhdGEoYWN0aW9uRXZlbnQuaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbkV2ZW50LmRhdGEgPSBkYXRhO1xuICAgICAgICAgICAgICAgICAgICBhY3Rpb24uYWN0aW9uUGVyZm9ybWVkSGFuZGxlci5jYWxsKG51bGwsIGFjdGlvbkV2ZW50KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYobWVudUl0ZW0gIT09IG51bGwpe1xuICAgICAgICAgICAgICAgIG1lbnVJdGVtTW9kZWxBcnJheS5wdXNoKG1lbnVJdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBtZW51SXRlbU1vZGVsQXJyYXk7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZU1lbnVNb2RlbChjb250ZXh0OiBJQ29udGV4dCk6IE1lbnVNb2RlbCB7XG5cbiAgICAgICAgbGV0IG1lbnVJdGVtTW9kZWxBcnJheTogTWVudUl0ZW1Nb2RlbFtdID0gW107XG5cbiAgICAgICAgZm9yIChsZXQgYWN0aW9uIG9mIHRoaXMuZWRpdG9yLmdldEFjdGlvbk1vZGVscygpKSB7XG4gICAgICAgICAgICBpZiAoYWN0aW9uLmlzU2hvdyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBhY3Rpb24uaXNTaG93ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgIH0gXG4gICAgICAgICAgICBpZiAoIWFjdGlvbi5pc1Nob3coY29udGV4dCkpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBpc0VuYWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBhY3Rpb24uaXNFbmFibGVkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICBpc0VuYWJsZSA9IGFjdGlvbi5pc0VuYWJsZWQoY29udGV4dCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmKGFjdGlvbiBpbnN0YW5jZW9mICBBY3Rpb25Nb2RlbE1lbnUpe1xuICAgICAgICAgICAgICAgIC8vIGFzIG1lbnVcbiAgICAgICAgICAgICAgICBsZXQgbWVudU1vZGVsID0gbnVsbDtcbiAgICAgICAgICAgICAgICBpZihhY3Rpb24ubWVudU1vZGVsRmFjdG9yeSAhPT0gbnVsbCAmJiB0eXBlb2YgYWN0aW9uLm1lbnVNb2RlbEZhY3RvcnkgIT09ICd1bmRlZmluZWQnKXtcbiAgICAgICAgICAgICAgICAgICAgbWVudU1vZGVsID0gYWN0aW9uLm1lbnVNb2RlbEZhY3RvcnkuY3JlYXRlTWVudU1vZGVsKGNvbnRleHQpO1xuICAgICAgICAgICAgICAgICAgICBpZihtZW51TW9kZWwgIT09IG51bGwpe1xuICAgICAgICAgICAgICAgICAgICAgICAgbWVudU1vZGVsLmxhYmVsID0gYWN0aW9uLmxhYmVsO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IG1lbnVJdGVtczogYW55W10gPSB0aGlzLmdldE1lbnVJdGVtTW9kZWxzKGFjdGlvbiwgY29udGV4dCk7XG4gICAgICAgICAgICAgICAgICAgIG1lbnVNb2RlbCA9IG5ldyBNZW51TW9kZWwoRGVmYXVsdE1lbnUsIGFjdGlvbi5sYWJlbCwgbWVudUl0ZW1zLCBhY3Rpb24ubWVudU1vZGVsRmFjdG9yeSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKG1lbnVNb2RlbCAhPT0gbnVsbCAmJiB0eXBlb2YgbWVudU1vZGVsICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICBtZW51SXRlbU1vZGVsQXJyYXkucHVzaChtZW51TW9kZWwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZihhY3Rpb24gaW5zdGFuY2VvZiAgQWN0aW9uTW9kZWwpe1xuICAgICAgICAgICAgICAgIC8vIGFzIG1lbnUgaXRlbVxuICAgICAgICAgICAgICAgIG1lbnVJdGVtTW9kZWxBcnJheS5wdXNoKG5ldyBNZW51SXRlbU1vZGVsKERlZmF1bHRNZW51SXRlbSwgYWN0aW9uLmxhYmVsLCBpc0VuYWJsZSwgKGFjdGlvbkV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYoIWlzRW5hYmxlKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBsZXQgZGF0YSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb250ZXh0ICE9PSBudWxsICYmIHR5cGVvZiBjb250ZXh0ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRlbXBDb250ZXh0OiBhbnkgPSBjb250ZXh0O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0ZW1wQ29udGV4dC5nZXREYXRhID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IHRlbXBDb250ZXh0LmdldERhdGEoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRlbXBDb250ZXh0LmNvbnN0cnVjdG9yLm5hbWUgPT09ICdUYWInKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRhYiA9IHRlbXBDb250ZXh0IGFzIFRhYjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25FdmVudC5pbmRleCA9IHRhYi5nZXRJbmRleCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGZvcm1WaWV3ID0gdGhpcy5lZGl0b3IuZ2V0Vmlld0NvbXBvbmVudEZyb21UeXBlKEZPUk1fVklFVykgYXMgRm9ybVZpZXc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvcm1WaWV3ICE9PSBudWxsICYmIHR5cGVvZiBmb3JtVmlldyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGZvcm1WaWV3LmdldFRhYkRhdGEoYWN0aW9uRXZlbnQuaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbkV2ZW50LmRhdGEgPSBkYXRhO1xuICAgICAgICAgICAgICAgICAgICBhY3Rpb24uYWN0aW9uUGVyZm9ybWVkSGFuZGxlci5jYWxsKG51bGwsIGFjdGlvbkV2ZW50KTtcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbW9kZWw6IE1lbnVNb2RlbCA9IG5ldyBNZW51TW9kZWwoRGVmYXVsdE1lbnVJdGVtLCAnYWN0aW9uIE1lbnUnLCBtZW51SXRlbU1vZGVsQXJyYXkpO1xuXG4gICAgICAgIHJldHVybiBtb2RlbDtcbiAgICB9XG59XG4iXX0=