UNPKG

com.phloxui

Version:

PhloxUI Ng2+ Framework

154 lines (153 loc) 21.9 kB
/** * @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=