diff --git a/AppSchema.json b/AppSchema.json index 81fbc94d6..276fe0962 100644 --- a/AppSchema.json +++ b/AppSchema.json @@ -2682,7 +2682,7 @@ "type": "node", "childType": "Exit Type", "autoAdd": true - }, + }, { "name": "headOfTheMarket", "type": "node", @@ -2973,6 +2973,13 @@ "iconPathOff": "settings", "actionFunction": "uiObject.configEditor.activate" }, + { + "action": "Copy Node Path", + "label": "Copy Node Path", + "iconPathOn": "poloniex", + "iconPathOff": "poloniex", + "actionFunction": "payload.onMenuItemClick" + }, { "action": "Delete UI Object", "askConfirmation": true, @@ -3007,6 +3014,13 @@ "iconPathOff": "settings", "actionFunction": "uiObject.configEditor.activate" }, + { + "action": "Copy Node Path", + "label": "Copy Node Path", + "iconPathOn": "poloniex", + "iconPathOff": "poloniex", + "actionFunction": "payload.onMenuItemClick" + }, { "action": "Delete UI Object", "askConfirmation": true, @@ -3041,6 +3055,13 @@ "iconPathOff": "settings", "actionFunction": "uiObject.configEditor.activate" }, + { + "action": "Copy Node Path", + "label": "Copy Node Path", + "iconPathOn": "poloniex", + "iconPathOff": "poloniex", + "actionFunction": "payload.onMenuItemClick" + }, { "action": "Delete UI Object", "askConfirmation": true, @@ -3075,6 +3096,13 @@ "iconPathOff": "settings", "actionFunction": "uiObject.configEditor.activate" }, + { + "action": "Copy Node Path", + "label": "Copy Node Path", + "iconPathOn": "poloniex", + "iconPathOff": "poloniex", + "actionFunction": "payload.onMenuItemClick" + }, { "action": "Delete UI Object", "askConfirmation": true, @@ -3109,6 +3137,13 @@ "iconPathOff": "settings", "actionFunction": "uiObject.configEditor.activate" }, + { + "action": "Copy Node Path", + "label": "Copy Node Path", + "iconPathOn": "poloniex", + "iconPathOff": "poloniex", + "actionFunction": "payload.onMenuItemClick" + }, { "action": "Delete UI Object", "askConfirmation": true, @@ -3143,6 +3178,13 @@ "iconPathOff": "settings", "actionFunction": "uiObject.configEditor.activate" }, + { + "action": "Copy Node Path", + "label": "Copy Node Path", + "iconPathOn": "poloniex", + "iconPathOff": "poloniex", + "actionFunction": "payload.onMenuItemClick" + }, { "action": "Delete UI Object", "askConfirmation": true, @@ -3177,6 +3219,13 @@ "iconPathOff": "settings", "actionFunction": "uiObject.configEditor.activate" }, + { + "action": "Copy Node Path", + "label": "Copy Node Path", + "iconPathOn": "poloniex", + "iconPathOff": "poloniex", + "actionFunction": "payload.onMenuItemClick" + }, { "action": "Delete UI Object", "askConfirmation": true, @@ -3288,6 +3337,13 @@ "relatedUiObject": "Parameters", "actionFunction": "payload.onMenuItemClick" }, + { + "action": "Copy Node Path", + "label": "Copy Node Path", + "iconPathOn": "poloniex", + "iconPathOff": "poloniex", + "actionFunction": "payload.onMenuItemClick" + }, { "action": "Delete UI Object", "askConfirmation": true, @@ -3342,6 +3398,13 @@ "relatedUiObject": "Parameters", "actionFunction": "payload.onMenuItemClick" }, + { + "action": "Copy Node Path", + "label": "Copy Node Path", + "iconPathOn": "poloniex", + "iconPathOff": "poloniex", + "actionFunction": "payload.onMenuItemClick" + }, { "action": "Delete UI Object", "askConfirmation": true, @@ -3390,6 +3453,13 @@ "iconPathOff": "settings", "actionFunction": "uiObject.configEditor.activate" }, + { + "action": "Copy Node Path", + "label": "Copy Node Path", + "iconPathOn": "poloniex", + "iconPathOff": "poloniex", + "actionFunction": "payload.onMenuItemClick" + }, { "action": "Delete UI Object", "askConfirmation": true, @@ -3424,6 +3494,13 @@ "iconPathOff": "settings", "actionFunction": "uiObject.configEditor.activate" }, + { + "action": "Copy Node Path", + "label": "Copy Node Path", + "iconPathOn": "poloniex", + "iconPathOff": "poloniex", + "actionFunction": "payload.onMenuItemClick" + }, { "action": "Delete UI Object", "askConfirmation": true, @@ -3458,6 +3535,13 @@ "iconPathOff": "settings", "actionFunction": "uiObject.configEditor.activate" }, + { + "action": "Copy Node Path", + "label": "Copy Node Path", + "iconPathOn": "poloniex", + "iconPathOff": "poloniex", + "actionFunction": "payload.onMenuItemClick" + }, { "action": "Delete UI Object", "askConfirmation": true, @@ -3492,6 +3576,13 @@ "iconPathOff": "settings", "actionFunction": "uiObject.configEditor.activate" }, + { + "action": "Copy Node Path", + "label": "Copy Node Path", + "iconPathOn": "poloniex", + "iconPathOff": "poloniex", + "actionFunction": "payload.onMenuItemClick" + }, { "action": "Delete UI Object", "askConfirmation": true, @@ -4178,6 +4269,13 @@ "relatedUiObject": "Formula", "actionFunction": "payload.onMenuItemClick" }, + { + "action": "Copy Node Path", + "label": "Copy Node Path", + "iconPathOn": "poloniex", + "iconPathOff": "poloniex", + "actionFunction": "payload.onMenuItemClick" + }, { "action": "Delete UI Object", "askConfirmation": true, @@ -4220,6 +4318,13 @@ "iconPathOff": "settings", "actionFunction": "uiObject.configEditor.activate" }, + { + "action": "Copy Node Path", + "label": "Copy Node Path", + "iconPathOn": "poloniex", + "iconPathOff": "poloniex", + "actionFunction": "payload.onMenuItemClick" + }, { "action": "Delete UI Object", "askConfirmation": true, @@ -4254,6 +4359,13 @@ "iconPathOff": "settings", "actionFunction": "uiObject.configEditor.activate" }, + { + "action": "Copy Node Path", + "label": "Copy Node Path", + "iconPathOn": "poloniex", + "iconPathOff": "poloniex", + "actionFunction": "payload.onMenuItemClick" + }, { "action": "Delete UI Object", "askConfirmation": true, @@ -4288,6 +4400,13 @@ "iconPathOff": "settings", "actionFunction": "uiObject.configEditor.activate" }, + { + "action": "Copy Node Path", + "label": "Copy Node Path", + "iconPathOn": "poloniex", + "iconPathOff": "poloniex", + "actionFunction": "payload.onMenuItemClick" + }, { "action": "Delete UI Object", "askConfirmation": true, @@ -4322,6 +4441,13 @@ "iconPathOff": "settings", "actionFunction": "uiObject.configEditor.activate" }, + { + "action": "Copy Node Path", + "label": "Copy Node Path", + "iconPathOn": "poloniex", + "iconPathOff": "poloniex", + "actionFunction": "payload.onMenuItemClick" + }, { "action": "Delete UI Object", "askConfirmation": true, @@ -4356,6 +4482,13 @@ "iconPathOff": "settings", "actionFunction": "uiObject.configEditor.activate" }, + { + "action": "Copy Node Path", + "label": "Copy Node Path", + "iconPathOn": "poloniex", + "iconPathOff": "poloniex", + "actionFunction": "payload.onMenuItemClick" + }, { "action": "Delete UI Object", "askConfirmation": true, @@ -4390,6 +4523,13 @@ "iconPathOff": "settings", "actionFunction": "uiObject.configEditor.activate" }, + { + "action": "Copy Node Path", + "label": "Copy Node Path", + "iconPathOn": "poloniex", + "iconPathOff": "poloniex", + "actionFunction": "payload.onMenuItemClick" + }, { "action": "Delete UI Object", "askConfirmation": true, @@ -4424,6 +4564,13 @@ "iconPathOff": "settings", "actionFunction": "uiObject.configEditor.activate" }, + { + "action": "Copy Node Path", + "label": "Copy Node Path", + "iconPathOn": "poloniex", + "iconPathOff": "poloniex", + "actionFunction": "payload.onMenuItemClick" + }, { "action": "Delete UI Object", "askConfirmation": true, @@ -4458,6 +4605,13 @@ "iconPathOff": "settings", "actionFunction": "uiObject.configEditor.activate" }, + { + "action": "Copy Node Path", + "label": "Copy Node Path", + "iconPathOn": "poloniex", + "iconPathOff": "poloniex", + "actionFunction": "payload.onMenuItemClick" + }, { "action": "Delete UI Object", "askConfirmation": true, @@ -4492,6 +4646,13 @@ "iconPathOff": "settings", "actionFunction": "uiObject.configEditor.activate" }, + { + "action": "Copy Node Path", + "label": "Copy Node Path", + "iconPathOn": "poloniex", + "iconPathOff": "poloniex", + "actionFunction": "payload.onMenuItemClick" + }, { "action": "Delete UI Object", "askConfirmation": true, @@ -4526,6 +4687,13 @@ "iconPathOff": "settings", "actionFunction": "uiObject.configEditor.activate" }, + { + "action": "Copy Node Path", + "label": "Copy Node Path", + "iconPathOn": "poloniex", + "iconPathOff": "poloniex", + "actionFunction": "payload.onMenuItemClick" + }, { "action": "Delete UI Object", "askConfirmation": true, @@ -4631,6 +4799,13 @@ "iconPathOff": "settings", "actionFunction": "uiObject.configEditor.activate" }, + { + "action": "Copy Node Path", + "label": "Copy Node Path", + "iconPathOn": "poloniex", + "iconPathOff": "poloniex", + "actionFunction": "payload.onMenuItemClick" + }, { "action": "Delete UI Object", "askConfirmation": true, @@ -4665,6 +4840,13 @@ "iconPathOff": "settings", "actionFunction": "uiObject.configEditor.activate" }, + { + "action": "Copy Node Path", + "label": "Copy Node Path", + "iconPathOn": "poloniex", + "iconPathOff": "poloniex", + "actionFunction": "payload.onMenuItemClick" + }, { "action": "Delete UI Object", "askConfirmation": true, @@ -4699,6 +4881,13 @@ "iconPathOff": "settings", "actionFunction": "uiObject.configEditor.activate" }, + { + "action": "Copy Node Path", + "label": "Copy Node Path", + "iconPathOn": "poloniex", + "iconPathOff": "poloniex", + "actionFunction": "payload.onMenuItemClick" + }, { "action": "Delete UI Object", "askConfirmation": true, @@ -4816,6 +5005,13 @@ "iconPathOff": "settings", "actionFunction": "uiObject.configEditor.activate" }, + { + "action": "Copy Node Path", + "label": "Copy Node Path", + "iconPathOn": "poloniex", + "iconPathOff": "poloniex", + "actionFunction": "payload.onMenuItemClick" + }, { "action": "Delete UI Object", "askConfirmation": true, @@ -4850,6 +5046,13 @@ "iconPathOff": "settings", "actionFunction": "uiObject.configEditor.activate" }, + { + "action": "Copy Node Path", + "label": "Copy Node Path", + "iconPathOn": "poloniex", + "iconPathOff": "poloniex", + "actionFunction": "payload.onMenuItemClick" + }, { "action": "Delete UI Object", "askConfirmation": true, @@ -4884,6 +5087,13 @@ "iconPathOff": "settings", "actionFunction": "uiObject.configEditor.activate" }, + { + "action": "Copy Node Path", + "label": "Copy Node Path", + "iconPathOn": "poloniex", + "iconPathOff": "poloniex", + "actionFunction": "payload.onMenuItemClick" + }, { "action": "Delete UI Object", "askConfirmation": true, @@ -4918,6 +5128,13 @@ "iconPathOff": "settings", "actionFunction": "uiObject.configEditor.activate" }, + { + "action": "Copy Node Path", + "label": "Copy Node Path", + "iconPathOn": "poloniex", + "iconPathOff": "poloniex", + "actionFunction": "payload.onMenuItemClick" + }, { "action": "Delete UI Object", "askConfirmation": true, @@ -4952,6 +5169,13 @@ "iconPathOff": "settings", "actionFunction": "uiObject.configEditor.activate" }, + { + "action": "Copy Node Path", + "label": "Copy Node Path", + "iconPathOn": "poloniex", + "iconPathOff": "poloniex", + "actionFunction": "payload.onMenuItemClick" + }, { "action": "Delete UI Object", "askConfirmation": true, @@ -4986,6 +5210,13 @@ "iconPathOff": "settings", "actionFunction": "uiObject.configEditor.activate" }, + { + "action": "Copy Node Path", + "label": "Copy Node Path", + "iconPathOn": "poloniex", + "iconPathOff": "poloniex", + "actionFunction": "payload.onMenuItemClick" + }, { "action": "Delete UI Object", "askConfirmation": true, @@ -5020,6 +5251,13 @@ "iconPathOff": "settings", "actionFunction": "uiObject.configEditor.activate" }, + { + "action": "Copy Node Path", + "label": "Copy Node Path", + "iconPathOn": "poloniex", + "iconPathOff": "poloniex", + "actionFunction": "payload.onMenuItemClick" + }, { "action": "Delete UI Object", "askConfirmation": true, @@ -5054,6 +5292,13 @@ "iconPathOff": "settings", "actionFunction": "uiObject.configEditor.activate" }, + { + "action": "Copy Node Path", + "label": "Copy Node Path", + "iconPathOn": "poloniex", + "iconPathOff": "poloniex", + "actionFunction": "payload.onMenuItemClick" + }, { "action": "Delete UI Object", "askConfirmation": true, @@ -5088,6 +5333,13 @@ "iconPathOff": "settings", "actionFunction": "uiObject.configEditor.activate" }, + { + "action": "Copy Node Path", + "label": "Copy Node Path", + "iconPathOn": "poloniex", + "iconPathOff": "poloniex", + "actionFunction": "payload.onMenuItemClick" + }, { "action": "Delete UI Object", "askConfirmation": true, @@ -5527,6 +5779,13 @@ "iconPathOff": "settings", "actionFunction": "uiObject.configEditor.activate" }, + { + "action": "Copy Node Path", + "label": "Copy Node Path", + "iconPathOn": "poloniex", + "iconPathOff": "poloniex", + "actionFunction": "payload.onMenuItemClick" + }, { "action": "Delete UI Object", "askConfirmation": true, @@ -5561,6 +5820,13 @@ "iconPathOff": "settings", "actionFunction": "uiObject.configEditor.activate" }, + { + "action": "Copy Node Path", + "label": "Copy Node Path", + "iconPathOn": "poloniex", + "iconPathOff": "poloniex", + "actionFunction": "payload.onMenuItemClick" + }, { "action": "Delete UI Object", "askConfirmation": true, @@ -5595,6 +5861,13 @@ "iconPathOff": "settings", "actionFunction": "uiObject.configEditor.activate" }, + { + "action": "Copy Node Path", + "label": "Copy Node Path", + "iconPathOn": "poloniex", + "iconPathOff": "poloniex", + "actionFunction": "payload.onMenuItemClick" + }, { "action": "Delete UI Object", "askConfirmation": true, @@ -5629,6 +5902,13 @@ "iconPathOff": "settings", "actionFunction": "uiObject.configEditor.activate" }, + { + "action": "Copy Node Path", + "label": "Copy Node Path", + "iconPathOn": "poloniex", + "iconPathOff": "poloniex", + "actionFunction": "payload.onMenuItemClick" + }, { "action": "Delete UI Object", "askConfirmation": true, @@ -5663,6 +5943,13 @@ "iconPathOff": "settings", "actionFunction": "uiObject.configEditor.activate" }, + { + "action": "Copy Node Path", + "label": "Copy Node Path", + "iconPathOn": "poloniex", + "iconPathOff": "poloniex", + "actionFunction": "payload.onMenuItemClick" + }, { "action": "Delete UI Object", "askConfirmation": true, @@ -5697,6 +5984,13 @@ "iconPathOff": "settings", "actionFunction": "uiObject.configEditor.activate" }, + { + "action": "Copy Node Path", + "label": "Copy Node Path", + "iconPathOn": "poloniex", + "iconPathOff": "poloniex", + "actionFunction": "payload.onMenuItemClick" + }, { "action": "Delete UI Object", "askConfirmation": true, @@ -5731,6 +6025,13 @@ "iconPathOff": "settings", "actionFunction": "uiObject.configEditor.activate" }, + { + "action": "Copy Node Path", + "label": "Copy Node Path", + "iconPathOn": "poloniex", + "iconPathOff": "poloniex", + "actionFunction": "payload.onMenuItemClick" + }, { "action": "Delete UI Object", "askConfirmation": true, @@ -5765,6 +6066,13 @@ "iconPathOff": "settings", "actionFunction": "uiObject.configEditor.activate" }, + { + "action": "Copy Node Path", + "label": "Copy Node Path", + "iconPathOn": "poloniex", + "iconPathOff": "poloniex", + "actionFunction": "payload.onMenuItemClick" + }, { "action": "Delete UI Object", "askConfirmation": true, @@ -5799,6 +6107,13 @@ "iconPathOff": "settings", "actionFunction": "uiObject.configEditor.activate" }, + { + "action": "Copy Node Path", + "label": "Copy Node Path", + "iconPathOn": "poloniex", + "iconPathOff": "poloniex", + "actionFunction": "payload.onMenuItemClick" + }, { "action": "Delete UI Object", "askConfirmation": true, @@ -5833,6 +6148,13 @@ "iconPathOff": "settings", "actionFunction": "uiObject.configEditor.activate" }, + { + "action": "Copy Node Path", + "label": "Copy Node Path", + "iconPathOn": "poloniex", + "iconPathOff": "poloniex", + "actionFunction": "payload.onMenuItemClick" + }, { "action": "Delete UI Object", "askConfirmation": true, @@ -5867,6 +6189,13 @@ "iconPathOff": "settings", "actionFunction": "uiObject.configEditor.activate" }, + { + "action": "Copy Node Path", + "label": "Copy Node Path", + "iconPathOn": "poloniex", + "iconPathOff": "poloniex", + "actionFunction": "payload.onMenuItemClick" + }, { "action": "Delete UI Object", "askConfirmation": true, @@ -5901,6 +6230,13 @@ "iconPathOff": "settings", "actionFunction": "uiObject.configEditor.activate" }, + { + "action": "Copy Node Path", + "label": "Copy Node Path", + "iconPathOn": "poloniex", + "iconPathOff": "poloniex", + "actionFunction": "payload.onMenuItemClick" + }, { "action": "Delete UI Object", "askConfirmation": true, @@ -5928,6 +6264,13 @@ { "type": "Open", "menuItems": [ + { + "action": "Copy Node Path", + "label": "Copy Node Path", + "iconPathOn": "poloniex", + "iconPathOff": "poloniex", + "actionFunction": "payload.onMenuItemClick" + }, { "action": "Delete UI Object", "askConfirmation": true, @@ -5949,6 +6292,13 @@ { "type": "Close", "menuItems": [ + { + "action": "Copy Node Path", + "label": "Copy Node Path", + "iconPathOn": "poloniex", + "iconPathOff": "poloniex", + "actionFunction": "payload.onMenuItemClick" + }, { "action": "Delete UI Object", "askConfirmation": true, @@ -5970,6 +6320,13 @@ { "type": "Min", "menuItems": [ + { + "action": "Copy Node Path", + "label": "Copy Node Path", + "iconPathOn": "poloniex", + "iconPathOff": "poloniex", + "actionFunction": "payload.onMenuItemClick" + }, { "action": "Delete UI Object", "askConfirmation": true, @@ -5991,6 +6348,13 @@ { "type": "Max", "menuItems": [ + { + "action": "Copy Node Path", + "label": "Copy Node Path", + "iconPathOn": "poloniex", + "iconPathOff": "poloniex", + "actionFunction": "payload.onMenuItemClick" + }, { "action": "Delete UI Object", "askConfirmation": true, @@ -6019,6 +6383,13 @@ "iconPathOff": "settings", "actionFunction": "uiObject.configEditor.activate" }, + { + "action": "Copy Node Path", + "label": "Copy Node Path", + "iconPathOn": "poloniex", + "iconPathOff": "poloniex", + "actionFunction": "payload.onMenuItemClick" + }, { "action": "Delete UI Object", "askConfirmation": true, @@ -6053,6 +6424,13 @@ "iconPathOff": "settings", "actionFunction": "uiObject.configEditor.activate" }, + { + "action": "Copy Node Path", + "label": "Copy Node Path", + "iconPathOn": "poloniex", + "iconPathOff": "poloniex", + "actionFunction": "payload.onMenuItemClick" + }, { "action": "Delete UI Object", "askConfirmation": true, @@ -6218,6 +6596,13 @@ "iconPathOff": "settings", "actionFunction": "uiObject.configEditor.activate" }, + { + "action": "Copy Node Path", + "label": "Copy Node Path", + "iconPathOn": "poloniex", + "iconPathOff": "poloniex", + "actionFunction": "payload.onMenuItemClick" + }, { "action": "Delete UI Object", "askConfirmation": true, @@ -6252,6 +6637,13 @@ "iconPathOff": "settings", "actionFunction": "uiObject.configEditor.activate" }, + { + "action": "Copy Node Path", + "label": "Copy Node Path", + "iconPathOn": "poloniex", + "iconPathOff": "poloniex", + "actionFunction": "payload.onMenuItemClick" + }, { "action": "Delete UI Object", "askConfirmation": true, @@ -6286,6 +6678,13 @@ "iconPathOff": "settings", "actionFunction": "uiObject.configEditor.activate" }, + { + "action": "Copy Node Path", + "label": "Copy Node Path", + "iconPathOn": "poloniex", + "iconPathOff": "poloniex", + "actionFunction": "payload.onMenuItemClick" + }, { "action": "Delete UI Object", "askConfirmation": true, @@ -6320,6 +6719,13 @@ "iconPathOff": "settings", "actionFunction": "uiObject.configEditor.activate" }, + { + "action": "Copy Node Path", + "label": "Copy Node Path", + "iconPathOn": "poloniex", + "iconPathOff": "poloniex", + "actionFunction": "payload.onMenuItemClick" + }, { "action": "Delete UI Object", "askConfirmation": true, @@ -6354,6 +6760,13 @@ "iconPathOff": "settings", "actionFunction": "uiObject.configEditor.activate" }, + { + "action": "Copy Node Path", + "label": "Copy Node Path", + "iconPathOn": "poloniex", + "iconPathOff": "poloniex", + "actionFunction": "payload.onMenuItemClick" + }, { "action": "Delete UI Object", "askConfirmation": true, @@ -6388,6 +6801,13 @@ "iconPathOff": "settings", "actionFunction": "uiObject.configEditor.activate" }, + { + "action": "Copy Node Path", + "label": "Copy Node Path", + "iconPathOn": "poloniex", + "iconPathOff": "poloniex", + "actionFunction": "payload.onMenuItemClick" + }, { "action": "Delete UI Object", "askConfirmation": true, @@ -6422,6 +6842,13 @@ "iconPathOff": "settings", "actionFunction": "uiObject.configEditor.activate" }, + { + "action": "Copy Node Path", + "label": "Copy Node Path", + "iconPathOn": "poloniex", + "iconPathOff": "poloniex", + "actionFunction": "payload.onMenuItemClick" + }, { "action": "Delete UI Object", "askConfirmation": true, @@ -6456,6 +6883,13 @@ "iconPathOff": "settings", "actionFunction": "uiObject.configEditor.activate" }, + { + "action": "Copy Node Path", + "label": "Copy Node Path", + "iconPathOn": "poloniex", + "iconPathOff": "poloniex", + "actionFunction": "payload.onMenuItemClick" + }, { "action": "Delete UI Object", "askConfirmation": true, @@ -6490,6 +6924,13 @@ "iconPathOff": "settings", "actionFunction": "uiObject.configEditor.activate" }, + { + "action": "Copy Node Path", + "label": "Copy Node Path", + "iconPathOn": "poloniex", + "iconPathOff": "poloniex", + "actionFunction": "payload.onMenuItemClick" + }, { "action": "Delete UI Object", "askConfirmation": true, @@ -6524,6 +6965,13 @@ "iconPathOff": "settings", "actionFunction": "uiObject.configEditor.activate" }, + { + "action": "Copy Node Path", + "label": "Copy Node Path", + "iconPathOn": "poloniex", + "iconPathOff": "poloniex", + "actionFunction": "payload.onMenuItemClick" + }, { "action": "Delete UI Object", "askConfirmation": true, @@ -6558,6 +7006,13 @@ "iconPathOff": "settings", "actionFunction": "uiObject.configEditor.activate" }, + { + "action": "Copy Node Path", + "label": "Copy Node Path", + "iconPathOn": "poloniex", + "iconPathOff": "poloniex", + "actionFunction": "payload.onMenuItemClick" + }, { "action": "Delete UI Object", "askConfirmation": true, @@ -6592,6 +7047,13 @@ "iconPathOff": "settings", "actionFunction": "uiObject.configEditor.activate" }, + { + "action": "Copy Node Path", + "label": "Copy Node Path", + "iconPathOn": "poloniex", + "iconPathOff": "poloniex", + "actionFunction": "payload.onMenuItemClick" + }, { "action": "Delete UI Object", "askConfirmation": true, @@ -6751,6 +7213,13 @@ "relatedUiObject": "Parameters", "actionFunction": "payload.onMenuItemClick" }, + { + "action": "Copy Node Path", + "label": "Copy Node Path", + "iconPathOn": "poloniex", + "iconPathOff": "poloniex", + "actionFunction": "payload.onMenuItemClick" + }, { "action": "Delete UI Object", "askConfirmation": true, diff --git a/BackendServers/WebServer/AppLoader.js b/BackendServers/WebServer/AppLoader.js index 8ef1b92ae..c1266c572 100644 --- a/BackendServers/WebServer/AppLoader.js +++ b/BackendServers/WebServer/AppLoader.js @@ -53,10 +53,12 @@ function newAppLoader() { 'DesignSpace/Workspace/FunctionLibraries/CCXTFunctions.js', 'DesignSpace/Workspace/FunctionLibraries/WebhookFunctions.js', 'DesignSpace/Workspace/FunctionLibraries/DependenciesFilter.js', + 'DesignSpace/Workspace/FunctionLibraries/NodePath.js', 'Utilities/CoordinateTransformations.js', 'Utilities/DateRateTransformations.js', 'Utilities/Download.js', + 'Utilities/Clipboard.js', 'Utilities/DrawPrint.js', 'Utilities/LoadSaveFrame.js', 'Utilities/NodeConfig.js', diff --git a/CanvasApp/DesignSpace/Workspace/FunctionLibraries/NodePath.js b/CanvasApp/DesignSpace/Workspace/FunctionLibraries/NodePath.js new file mode 100644 index 000000000..02dc6362c --- /dev/null +++ b/CanvasApp/DesignSpace/Workspace/FunctionLibraries/NodePath.js @@ -0,0 +1,56 @@ +function newNodePath() { + thisObject = { + getNodePath: getNodePath + } + + return thisObject + + function getNodePath(node) { + + let nodePath = 'value' + + recursiveGet(node) + + return 'tradingEngine.' + nodePath + + function recursiveGet(node) { + + if (node.payload === undefined) { return } + if (node.payload.parentNode === undefined) { return } + + let nodeDefinition = getNodeDefinition(node.payload.parentNode) + if (nodeDefinition === undefined) { return } + if (nodeDefinition.properties === undefined) { return } + + for (let i = 0; i < nodeDefinition.properties.length; i++) { + let property = nodeDefinition.properties[i] + + let parentProperty = node.payload.parentNode[property.name] + if (parentProperty === undefined) { continue } + + switch (property.type) { + case 'node': { + if (parentProperty.id === node.id) { + /* We found it */ + nodePath = property.name + '.' + nodePath + recursiveGet(node.payload.parentNode) + } + } + break + case 'array': { + for (let j = 0; j < parentProperty.length; j++) { + let arrayProperty = parentProperty[j] + if (arrayProperty === undefined) {continue} + if (arrayProperty.id === node.id) { + /* We found it */ + nodePath = property.name + '[' + j + ']' + '.' + nodePath + recursiveGet(node.payload.parentNode) + } + } + } + break + } + } + } + } +} diff --git a/CanvasApp/DesignSpace/Workspace/Workspace.js b/CanvasApp/DesignSpace/Workspace/Workspace.js index 1fc06b306..db4879ff6 100644 --- a/CanvasApp/DesignSpace/Workspace/Workspace.js +++ b/CanvasApp/DesignSpace/Workspace/Workspace.js @@ -64,6 +64,7 @@ function newWorkspace() { let functionLibraryCCXTFunctions = newCCXTFunctions() let functionLibraryWebhookFunctions = newWebhookFunctions() let functionLibraryDependenciesFilter = newDependenciesFilter() + let functionLibraryNodePath = newNodePath() thisObject.nodeChildren = newNodeChildren() @@ -323,7 +324,7 @@ function newWorkspace() { if (stringifyReadyNodes.length > 0) { return JSON.stringify(workspace) } else { - return + return } } @@ -454,6 +455,17 @@ function newWorkspace() { async function onMenuItemClick(payload, action, relatedUiObject, callBackFunction) { switch (action) { + case 'Copy Node Path': + { + let nodePath = functionLibraryNodePath.getNodePath(payload.node) + + copyTextToClipboard(nodePath) + + canvas.cockpitSpace.setStatus( + nodePath + ' copied to the Clipboard.' + , 50, canvas.cockpitSpace.statusTypes.ALL_GOOD) + } + break case 'Add UI Object': { functionLibraryUiObjectsFromNodes.addUIObject(payload.node, relatedUiObject) diff --git a/CanvasApp/Utilities/Clipboard.js b/CanvasApp/Utilities/Clipboard.js new file mode 100644 index 000000000..d6af25c88 --- /dev/null +++ b/CanvasApp/Utilities/Clipboard.js @@ -0,0 +1,35 @@ +function fallbackCopyTextToClipboard(text) { + var textArea = document.createElement("textarea"); + textArea.value = text; + + // Avoid scrolling to bottom + textArea.style.top = "0"; + textArea.style.left = "0"; + textArea.style.position = "fixed"; + + document.body.appendChild(textArea); + textArea.focus(); + textArea.select(); + + try { + var successful = document.execCommand('copy'); + var msg = successful ? 'successful' : 'unsuccessful'; + //console.log('Fallback: Copying text command was ' + msg); + } catch (err) { + console.error('Fallback: Oops, unable to copy', err); + } + + document.body.removeChild(textArea); +} + +function copyTextToClipboard(text) { + if (!navigator.clipboard) { + fallbackCopyTextToClipboard(text); + return; + } + navigator.clipboard.writeText(text).then(function() { + //console.log('Async: Copying to clipboard was successful!'); + }, function(err) { + console.error('Async: Could not copy text: ', err); + }); +} \ No newline at end of file