com.phloxui
Version:
PhloxUI Ng2+ Framework
195 lines (194 loc) • 23.5 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
import * as tslib_1 from "tslib";
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';
var /** @type {?} */ FORM_VIEW = 'form-view';
var DefaultDataEditorContextMenuFactory = /** @class */ (function () {
function DefaultDataEditorContextMenuFactory(dataEditor) {
this.editor = dataEditor;
}
/**
* @param {?} anyModel
* @param {?} context
* @return {?}
*/
DefaultDataEditorContextMenuFactory.prototype.getMenuItemModels = /**
* @param {?} anyModel
* @param {?} context
* @return {?}
*/
function (anyModel, context) {
var _this = this;
var /** @type {?} */ menuItemModelArray = [];
if (anyModel === null || typeof anyModel === 'undefined') {
return menuItemModelArray;
}
var /** @type {?} */ menuItems = [];
if (anyModel instanceof ActionModelMenu) {
var /** @type {?} */ actionMenu = /** @type {?} */ (anyModel);
menuItems = actionMenu.items;
}
var _loop_1 = function (action) {
if (action.isShow === null) {
return "continue";
}
if (typeof action.isShow !== 'function') {
return "continue";
}
if (!action.isShow(context)) {
return "continue";
}
var /** @type {?} */ isEnable = true;
var /** @type {?} */ menuItem = null;
var /** @type {?} */ actionItems = this_1.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, function (actionEvent) {
if (!isEnable) {
return;
}
var /** @type {?} */ data = null;
if (context !== null && typeof context !== 'undefined') {
var /** @type {?} */ tempContext = context;
if (typeof tempContext.getData === 'function') {
data = tempContext.getData();
}
if (tempContext.constructor.name === 'Tab') {
var /** @type {?} */ tab = /** @type {?} */ (tempContext);
actionEvent.index = tab.getIndex();
var /** @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);
}
};
var this_1 = this;
try {
for (var menuItems_1 = tslib_1.__values(menuItems), menuItems_1_1 = menuItems_1.next(); !menuItems_1_1.done; menuItems_1_1 = menuItems_1.next()) {
var action = menuItems_1_1.value;
_loop_1(action);
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (menuItems_1_1 && !menuItems_1_1.done && (_a = menuItems_1.return)) _a.call(menuItems_1);
}
finally { if (e_1) throw e_1.error; }
}
return menuItemModelArray;
var e_1, _a;
};
/**
* @param {?} context
* @return {?}
*/
DefaultDataEditorContextMenuFactory.prototype.createMenuModel = /**
* @param {?} context
* @return {?}
*/
function (context) {
var _this = this;
var /** @type {?} */ menuItemModelArray = [];
var _loop_2 = function (action) {
if (action.isShow === null) {
return "continue";
}
if (typeof action.isShow !== 'function') {
return "continue";
}
if (!action.isShow(context)) {
return "continue";
}
var /** @type {?} */ isEnable = false;
if (typeof action.isEnabled === 'function') {
isEnable = action.isEnabled(context);
}
if (action instanceof ActionModelMenu) {
// as menu
var /** @type {?} */ menuModel = null;
if (action.menuModelFactory !== null && typeof action.menuModelFactory !== 'undefined') {
menuModel = action.menuModelFactory.createMenuModel(context);
if (menuModel !== null) {
menuModel.label = action.label;
}
}
else {
var /** @type {?} */ menuItems = this_2.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, function (actionEvent) {
if (!isEnable) {
return;
}
var /** @type {?} */ data = null;
if (context !== null && typeof context !== 'undefined') {
var /** @type {?} */ tempContext = context;
if (typeof tempContext.getData === 'function') {
data = tempContext.getData();
}
if (tempContext.constructor.name === 'Tab') {
var /** @type {?} */ tab = /** @type {?} */ (tempContext);
actionEvent.index = tab.getIndex();
var /** @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);
}));
}
};
var this_2 = this;
try {
for (var _a = tslib_1.__values(this.editor.getActionModels()), _b = _a.next(); !_b.done; _b = _a.next()) {
var action = _b.value;
_loop_2(action);
}
}
catch (e_2_1) { e_2 = { error: e_2_1 }; }
finally {
try {
if (_b && !_b.done && (_c = _a.return)) _c.call(_a);
}
finally { if (e_2) throw e_2.error; }
}
var /** @type {?} */ model = new MenuModel(DefaultMenuItem, 'action Menu', menuItemModelArray);
return model;
var e_2, _c;
};
return DefaultDataEditorContextMenuFactory;
}());
export { DefaultDataEditorContextMenuFactory };
function DefaultDataEditorContextMenuFactory_tsickle_Closure_declarations() {
/** @type {?} */
DefaultDataEditorContextMenuFactory.prototype.editor;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVmYXVsdERhdGFFZGl0b3JDb250ZXh0TWVudUZhY3RvcnkuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9jb20ucGhsb3h1aS8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnQvZWRpdG9yL0RlZmF1bHREYXRhRWRpdG9yQ29udGV4dE1lbnVGYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBRUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFJM0QscUJBQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQztBQUU5QixJQUFBO0lBSUksNkNBQVksVUFBOEI7UUFDdEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUM7S0FDNUI7Ozs7OztJQUVPLCtEQUFpQjs7Ozs7Y0FBQyxRQUFhLEVBQUUsT0FBaUI7O1FBQ3RELHFCQUFJLGtCQUFrQixHQUFvQixFQUFFLENBQUM7UUFFN0MsRUFBRSxDQUFDLENBQUMsUUFBUSxLQUFLLElBQUksSUFBSSxPQUFPLFFBQVEsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQ3ZELE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQztTQUM3QjtRQUVELHFCQUFJLFNBQVMsR0FBVSxFQUFFLENBQUM7UUFDMUIsRUFBRSxDQUFBLENBQUMsUUFBUSxZQUFhLGVBQWUsQ0FBQyxDQUFBLENBQUM7WUFDckMscUJBQUksVUFBVSxxQkFBRyxRQUEyQixDQUFBLENBQUM7WUFFN0MsU0FBUyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUM7U0FDaEM7Z0NBRVEsTUFBTTtZQUNYLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQzs7YUFFNUI7WUFFRCxFQUFFLENBQUMsQ0FBQyxPQUFPLE1BQU0sQ0FBQyxNQUFNLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQzs7YUFFekM7WUFFRCxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDOzthQUU3QjtZQUVELHFCQUFJLFFBQVEsR0FBWSxJQUFJLENBQUM7WUFFN0IscUJBQUksUUFBUSxHQUFHLElBQUksQ0FBQztZQUNwQixxQkFBSSxXQUFXLEdBQUcsT0FBSyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFFMUQsRUFBRSxDQUFBLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQSxDQUFDOztnQkFFdkIsUUFBUSxHQUFHLElBQUksU0FBUyxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQzthQUM3RjtZQUFDLElBQUksQ0FBQyxDQUFDOztnQkFFSixRQUFRLEdBQUcsSUFBSSxhQUFhLENBQUMsZUFBZSxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLFVBQUMsV0FBZ0I7b0JBQ25GLEVBQUUsQ0FBQSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUEsQ0FBQzt3QkFDVixNQUFNLENBQUM7cUJBQ1Y7b0JBQ0QscUJBQUksSUFBSSxHQUFHLElBQUksQ0FBQztvQkFDaEIsRUFBRSxDQUFDLENBQUMsT0FBTyxLQUFLLElBQUksSUFBSSxPQUFPLE9BQU8sS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO3dCQUNyRCxxQkFBSSxXQUFXLEdBQVEsT0FBTyxDQUFDO3dCQUMvQixFQUFFLENBQUMsQ0FBQyxPQUFPLFdBQVcsQ0FBQyxPQUFPLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQzs0QkFDNUMsSUFBSSxHQUFHLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQzt5QkFDaEM7d0JBRUQsRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQzs0QkFDekMscUJBQUksR0FBRyxxQkFBRyxXQUFrQixDQUFBLENBQUM7NEJBQzdCLFdBQVcsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDOzRCQUVuQyxxQkFBSSxRQUFRLHFCQUFHLEtBQUksQ0FBQyxNQUFNLENBQUMsd0JBQXdCLENBQUMsU0FBUyxDQUFhLENBQUEsQ0FBQzs0QkFDM0UsRUFBRSxDQUFDLENBQUMsUUFBUSxLQUFLLElBQUksSUFBSSxPQUFPLFFBQVEsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO2dDQUN2RCxJQUFJLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7NkJBQ2pEO3lCQUNKO3FCQUNKO29CQUVELFdBQVcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO29CQUN4QixNQUFNLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQztpQkFDekQsQ0FBQyxDQUFDO2FBQ047WUFFRCxFQUFFLENBQUEsQ0FBQyxRQUFRLEtBQUssSUFBSSxDQUFDLENBQUEsQ0FBQztnQkFDbEIsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQ3JDOzs7O1lBcERMLEdBQUcsQ0FBQyxDQUFlLElBQUEsY0FBQSxpQkFBQSxTQUFTLENBQUEsb0NBQUE7Z0JBQXZCLElBQUksTUFBTSxzQkFBQTt3QkFBTixNQUFNO2FBcURkOzs7Ozs7Ozs7UUFFRCxNQUFNLENBQUMsa0JBQWtCLENBQUM7Ozs7Ozs7SUFHdkIsNkRBQWU7Ozs7Y0FBQyxPQUFpQjs7UUFFcEMscUJBQUksa0JBQWtCLEdBQW9CLEVBQUUsQ0FBQztnQ0FFcEMsTUFBTTtZQUNYLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQzs7YUFFNUI7WUFDRCxFQUFFLENBQUMsQ0FBQyxPQUFPLE1BQU0sQ0FBQyxNQUFNLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQzs7YUFFekM7WUFDRCxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDOzthQUU3QjtZQUNELHFCQUFJLFFBQVEsR0FBWSxLQUFLLENBQUM7WUFDOUIsRUFBRSxDQUFDLENBQUMsT0FBTyxNQUFNLENBQUMsU0FBUyxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUM7Z0JBQzFDLFFBQVEsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQ3ZDO1lBRUQsRUFBRSxDQUFBLENBQUMsTUFBTSxZQUFhLGVBQWUsQ0FBQyxDQUFBLENBQUM7O2dCQUVuQyxxQkFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDO2dCQUNyQixFQUFFLENBQUEsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLEtBQUssSUFBSSxJQUFJLE9BQU8sTUFBTSxDQUFDLGdCQUFnQixLQUFLLFdBQVcsQ0FBQyxDQUFBLENBQUM7b0JBQ25GLFNBQVMsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUM3RCxFQUFFLENBQUEsQ0FBQyxTQUFTLEtBQUssSUFBSSxDQUFDLENBQUEsQ0FBQzt3QkFDbkIsU0FBUyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO3FCQUNsQztpQkFDSjtnQkFBQyxJQUFJLENBQUMsQ0FBQztvQkFDSixxQkFBSSxTQUFTLEdBQVUsT0FBSyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7b0JBQy9ELFNBQVMsR0FBRyxJQUFJLFNBQVMsQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7aUJBQzVGO2dCQUVELEVBQUUsQ0FBQyxDQUFDLFNBQVMsS0FBSyxJQUFJLElBQUksT0FBTyxTQUFTLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQztvQkFDekQsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2lCQUN0QzthQUNKO1lBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQSxDQUFDLE1BQU0sWUFBYSxXQUFXLENBQUMsQ0FBQSxDQUFDOztnQkFFdEMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksYUFBYSxDQUFDLGVBQWUsRUFBRSxNQUFNLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxVQUFDLFdBQWdCO29CQUNoRyxFQUFFLENBQUEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFBLENBQUM7d0JBQ1YsTUFBTSxDQUFDO3FCQUNWO29CQUNELHFCQUFJLElBQUksR0FBRyxJQUFJLENBQUM7b0JBQ2hCLEVBQUUsQ0FBQyxDQUFDLE9BQU8sS0FBSyxJQUFJLElBQUksT0FBTyxPQUFPLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQzt3QkFDckQscUJBQUksV0FBVyxHQUFRLE9BQU8sQ0FBQzt3QkFDL0IsRUFBRSxDQUFDLENBQUMsT0FBTyxXQUFXLENBQUMsT0FBTyxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUM7NEJBQzVDLElBQUksR0FBRyxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUM7eUJBQ2hDO3dCQUVELEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUM7NEJBQ3pDLHFCQUFJLEdBQUcscUJBQUcsV0FBa0IsQ0FBQSxDQUFDOzRCQUM3QixXQUFXLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQzs0QkFFbkMscUJBQUksUUFBUSxxQkFBRyxLQUFJLENBQUMsTUFBTSxDQUFDLHdCQUF3QixDQUFDLFNBQVMsQ0FBYSxDQUFBLENBQUM7NEJBQzNFLEVBQUUsQ0FBQyxDQUFDLFFBQVEsS0FBSyxJQUFJLElBQUksT0FBTyxRQUFRLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQztnQ0FDdkQsSUFBSSxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDOzZCQUNqRDt5QkFDSjtxQkFDSjtvQkFFRCxXQUFXLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztvQkFDeEIsTUFBTSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7aUJBQ3pELENBQUMsQ0FBQyxDQUFDO2FBQ1A7Ozs7WUExREwsR0FBRyxDQUFDLENBQWUsSUFBQSxLQUFBLGlCQUFBLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxFQUFFLENBQUEsZ0JBQUE7Z0JBQTNDLElBQUksTUFBTSxXQUFBO3dCQUFOLE1BQU07YUEyRGQ7Ozs7Ozs7OztRQUVELHFCQUFJLEtBQUssR0FBYyxJQUFJLFNBQVMsQ0FBQyxlQUFlLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixDQUFDLENBQUM7UUFFekYsTUFBTSxDQUFDLEtBQUssQ0FBQzs7OzhDQWhLckI7SUFrS0MsQ0FBQTtBQXJKRCwrQ0FxSkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJTWVudU1vZGVsRmFjdG9yeSB9IGZyb20gJy4uL0lNZW51TW9kZWxGYWN0b3J5JztcbmltcG9ydCB7IElDb250ZXh0IH0gZnJvbSAnLi4vSUNvbnRleHQnO1xuaW1wb3J0IHsgRGVmYXVsdE1lbnVJdGVtIH0gZnJvbSAnLi4vRGVmYXVsdE1lbnVJdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEZWZhdWx0TWVudSB9IGZyb20gJy4uL0RlZmF1bHRNZW51LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNZW51SXRlbU1vZGVsIH0gZnJvbSAnLi4vbW9kZWwvTWVudUl0ZW1Nb2RlbCc7XG5pbXBvcnQgeyBNZW51TW9kZWwgfSBmcm9tICcuLi9tb2RlbC9NZW51TW9kZWwnO1xuaW1wb3J0IHsgQWN0aW9uTW9kZWwgfSBmcm9tICcuLi9tb2RlbC9BY3Rpb25Nb2RlbCc7XG5pbXBvcnQgeyBBY3Rpb25Nb2RlbE1lbnUgfSBmcm9tICcuLi9tb2RlbC9BY3Rpb25Nb2RlbE1lbnUnO1xuaW1wb3J0IHsgQWJzdHJhY3REYXRhRWRpdG9yIH0gZnJvbSAnLi9BYnN0cmFjdERhdGFFZGl0b3InO1xuaW1wb3J0IHsgVGFiIH0gZnJvbSAnLi4vZGF0YXZpZXcvVGFiUGFuZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRm9ybVZpZXcgfSBmcm9tICcuLi9lZGl0b3IvZWRpdG9yLmludGVybmFsL0Zvcm1WaWV3LmNvbXBvbmVudCc7XG5jb25zdCBGT1JNX1ZJRVcgPSAnZm9ybS12aWV3JztcblxuZXhwb3J0IGNsYXNzIERlZmF1bHREYXRhRWRpdG9yQ29udGV4dE1lbnVGYWN0b3J5IGltcGxlbWVudHMgSU1lbnVNb2RlbEZhY3Rvcnkge1xuXG4gICAgcHJpdmF0ZSBlZGl0b3I6IEFic3RyYWN0RGF0YUVkaXRvcjtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGFFZGl0b3I6IEFic3RyYWN0RGF0YUVkaXRvcikge1xuICAgICAgICB0aGlzLmVkaXRvciA9IGRhdGFFZGl0b3I7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRNZW51SXRlbU1vZGVscyhhbnlNb2RlbDogYW55LCBjb250ZXh0OiBJQ29udGV4dCk6IE1lbnVJdGVtTW9kZWxbXXtcbiAgICAgICAgbGV0IG1lbnVJdGVtTW9kZWxBcnJheTogTWVudUl0ZW1Nb2RlbFtdID0gW107XG5cbiAgICAgICAgaWYgKGFueU1vZGVsID09PSBudWxsIHx8IHR5cGVvZiBhbnlNb2RlbCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHJldHVybiBtZW51SXRlbU1vZGVsQXJyYXk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbWVudUl0ZW1zOiBhbnlbXSA9IFtdO1xuICAgICAgICBpZihhbnlNb2RlbCBpbnN0YW5jZW9mICBBY3Rpb25Nb2RlbE1lbnUpe1xuICAgICAgICAgICAgbGV0IGFjdGlvbk1lbnUgPSBhbnlNb2RlbCBhcyBBY3Rpb25Nb2RlbE1lbnU7XG5cbiAgICAgICAgICAgIG1lbnVJdGVtcyA9IGFjdGlvbk1lbnUuaXRlbXM7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGxldCBhY3Rpb24gb2YgbWVudUl0ZW1zKSB7XG4gICAgICAgICAgICBpZiAoYWN0aW9uLmlzU2hvdyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIGFjdGlvbi5pc1Nob3cgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIWFjdGlvbi5pc1Nob3coY29udGV4dCkpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGlzRW5hYmxlOiBib29sZWFuID0gdHJ1ZTtcblxuICAgICAgICAgICAgbGV0IG1lbnVJdGVtID0gbnVsbDtcbiAgICAgICAgICAgIGxldCBhY3Rpb25JdGVtcyA9IHRoaXMuZ2V0TWVudUl0ZW1Nb2RlbHMoYWN0aW9uLCBjb250ZXh0KTtcblxuICAgICAgICAgICAgaWYoYWN0aW9uSXRlbXMubGVuZ3RoID4gMCl7XG4gICAgICAgICAgICAgICAgLy8gaXMgbWVudVxuICAgICAgICAgICAgICAgIG1lbnVJdGVtID0gbmV3IE1lbnVNb2RlbChEZWZhdWx0TWVudSwgYWN0aW9uLmxhYmVsLCBhY3Rpb25JdGVtcywgYWN0aW9uLm1lbnVNb2RlbEZhY3RvcnkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBpcyBpdGVtXG4gICAgICAgICAgICAgICAgbWVudUl0ZW0gPSBuZXcgTWVudUl0ZW1Nb2RlbChEZWZhdWx0TWVudUl0ZW0sIGFjdGlvbi5sYWJlbCwgaXNFbmFibGUsIChhY3Rpb25FdmVudDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmKCFpc0VuYWJsZSl7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGEgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29udGV4dCAhPT0gbnVsbCAmJiB0eXBlb2YgY29udGV4dCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0ZW1wQ29udGV4dDogYW55ID0gY29udGV4dDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdGVtcENvbnRleHQuZ2V0RGF0YSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSB0ZW1wQ29udGV4dC5nZXREYXRhKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZW1wQ29udGV4dC5jb25zdHJ1Y3Rvci5uYW1lID09PSAnVGFiJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0YWIgPSB0ZW1wQ29udGV4dCBhcyBUYWI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uRXZlbnQuaW5kZXggPSB0YWIuZ2V0SW5kZXgoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmb3JtVmlldyA9IHRoaXMuZWRpdG9yLmdldFZpZXdDb21wb25lbnRGcm9tVHlwZShGT1JNX1ZJRVcpIGFzIEZvcm1WaWV3O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb3JtVmlldyAhPT0gbnVsbCAmJiB0eXBlb2YgZm9ybVZpZXcgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBmb3JtVmlldy5nZXRUYWJEYXRhKGFjdGlvbkV2ZW50LmluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBhY3Rpb25FdmVudC5kYXRhID0gZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uLmFjdGlvblBlcmZvcm1lZEhhbmRsZXIuY2FsbChudWxsLCBhY3Rpb25FdmVudCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmKG1lbnVJdGVtICE9PSBudWxsKXtcbiAgICAgICAgICAgICAgICBtZW51SXRlbU1vZGVsQXJyYXkucHVzaChtZW51SXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbWVudUl0ZW1Nb2RlbEFycmF5O1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGVNZW51TW9kZWwoY29udGV4dDogSUNvbnRleHQpOiBNZW51TW9kZWwge1xuXG4gICAgICAgIGxldCBtZW51SXRlbU1vZGVsQXJyYXk6IE1lbnVJdGVtTW9kZWxbXSA9IFtdO1xuXG4gICAgICAgIGZvciAobGV0IGFjdGlvbiBvZiB0aGlzLmVkaXRvci5nZXRBY3Rpb25Nb2RlbHMoKSkge1xuICAgICAgICAgICAgaWYgKGFjdGlvbi5pc1Nob3cgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2YgYWN0aW9uLmlzU2hvdyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICB9IFxuICAgICAgICAgICAgaWYgKCFhY3Rpb24uaXNTaG93KGNvbnRleHQpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgaXNFbmFibGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgYWN0aW9uLmlzRW5hYmxlZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgaXNFbmFibGUgPSBhY3Rpb24uaXNFbmFibGVkKGNvbnRleHQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZihhY3Rpb24gaW5zdGFuY2VvZiAgQWN0aW9uTW9kZWxNZW51KXtcbiAgICAgICAgICAgICAgICAvLyBhcyBtZW51XG4gICAgICAgICAgICAgICAgbGV0IG1lbnVNb2RlbCA9IG51bGw7XG4gICAgICAgICAgICAgICAgaWYoYWN0aW9uLm1lbnVNb2RlbEZhY3RvcnkgIT09IG51bGwgJiYgdHlwZW9mIGFjdGlvbi5tZW51TW9kZWxGYWN0b3J5ICE9PSAndW5kZWZpbmVkJyl7XG4gICAgICAgICAgICAgICAgICAgIG1lbnVNb2RlbCA9IGFjdGlvbi5tZW51TW9kZWxGYWN0b3J5LmNyZWF0ZU1lbnVNb2RlbChjb250ZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgaWYobWVudU1vZGVsICE9PSBudWxsKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lbnVNb2RlbC5sYWJlbCA9IGFjdGlvbi5sYWJlbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBtZW51SXRlbXM6IGFueVtdID0gdGhpcy5nZXRNZW51SXRlbU1vZGVscyhhY3Rpb24sIGNvbnRleHQpO1xuICAgICAgICAgICAgICAgICAgICBtZW51TW9kZWwgPSBuZXcgTWVudU1vZGVsKERlZmF1bHRNZW51LCBhY3Rpb24ubGFiZWwsIG1lbnVJdGVtcywgYWN0aW9uLm1lbnVNb2RlbEZhY3RvcnkpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChtZW51TW9kZWwgIT09IG51bGwgJiYgdHlwZW9mIG1lbnVNb2RlbCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgbWVudUl0ZW1Nb2RlbEFycmF5LnB1c2gobWVudU1vZGVsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYoYWN0aW9uIGluc3RhbmNlb2YgIEFjdGlvbk1vZGVsKXtcbiAgICAgICAgICAgICAgICAvLyBhcyBtZW51IGl0ZW1cbiAgICAgICAgICAgICAgICBtZW51SXRlbU1vZGVsQXJyYXkucHVzaChuZXcgTWVudUl0ZW1Nb2RlbChEZWZhdWx0TWVudUl0ZW0sIGFjdGlvbi5sYWJlbCwgaXNFbmFibGUsIChhY3Rpb25FdmVudDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmKCFpc0VuYWJsZSl7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGEgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29udGV4dCAhPT0gbnVsbCAmJiB0eXBlb2YgY29udGV4dCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0ZW1wQ29udGV4dDogYW55ID0gY29udGV4dDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdGVtcENvbnRleHQuZ2V0RGF0YSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSB0ZW1wQ29udGV4dC5nZXREYXRhKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZW1wQ29udGV4dC5jb25zdHJ1Y3Rvci5uYW1lID09PSAnVGFiJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0YWIgPSB0ZW1wQ29udGV4dCBhcyBUYWI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uRXZlbnQuaW5kZXggPSB0YWIuZ2V0SW5kZXgoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmb3JtVmlldyA9IHRoaXMuZWRpdG9yLmdldFZpZXdDb21wb25lbnRGcm9tVHlwZShGT1JNX1ZJRVcpIGFzIEZvcm1WaWV3O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb3JtVmlldyAhPT0gbnVsbCAmJiB0eXBlb2YgZm9ybVZpZXcgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBmb3JtVmlldy5nZXRUYWJEYXRhKGFjdGlvbkV2ZW50LmluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBhY3Rpb25FdmVudC5kYXRhID0gZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uLmFjdGlvblBlcmZvcm1lZEhhbmRsZXIuY2FsbChudWxsLCBhY3Rpb25FdmVudCk7XG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IG1vZGVsOiBNZW51TW9kZWwgPSBuZXcgTWVudU1vZGVsKERlZmF1bHRNZW51SXRlbSwgJ2FjdGlvbiBNZW51JywgbWVudUl0ZW1Nb2RlbEFycmF5KTtcblxuICAgICAgICByZXR1cm4gbW9kZWw7XG4gICAgfVxufVxuIl19