From 1ac791a6900341db86df499f4fa0c002320bc044 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Fri, 11 Oct 2019 13:58:58 +0200 Subject: [PATCH 01/48] Key now can be attached to the Parameers --- FloatingSpace/StrategyPart.js | 2 +- .../FunctionLibraries/AttachDetach.js | 19 ++++++++++++++----- .../FunctionLibraries/NodeChildren.js | 6 ++++++ .../FunctionLibraries/NodeDeleter.js | 16 ++++++++++++---- .../FunctionLibraries/PartsFromNodes.js | 3 +++ .../FunctionLibraries/ProtocolNode.js | 3 ++- .../FunctionLibraries/StringifyNode.js | 1 + 7 files changed, 39 insertions(+), 11 deletions(-) diff --git a/FloatingSpace/StrategyPart.js b/FloatingSpace/StrategyPart.js index c0a8f2f6b..b03ace8a0 100644 --- a/FloatingSpace/StrategyPart.js +++ b/FloatingSpace/StrategyPart.js @@ -223,7 +223,7 @@ function newStrategyPart () { compatibleSubType = undefined break case 'Exchange Account Key': - compatibleType = '->' + 'Exchange Account' + '->' + compatibleType = '->' + 'Exchange Account' + '->' + 'Parameters' + '->' compatibleSubType = undefined break case 'Parameters': diff --git a/StrategySpace/Workspace/FunctionLibraries/AttachDetach.js b/StrategySpace/Workspace/FunctionLibraries/AttachDetach.js index 4ae7812ea..9c50a3254 100644 --- a/StrategySpace/Workspace/FunctionLibraries/AttachDetach.js +++ b/StrategySpace/Workspace/FunctionLibraries/AttachDetach.js @@ -56,12 +56,17 @@ function newAttachDetach () { } case 'Exchange Account Key': { let payload = node.payload - for (let i = 0; i < payload.parentNode.keys.length; i++) { - let key = payload.parentNode.keys[i] - if (key.id === node.id) { - payload.parentNode.keys.splice(i, 1) + if (payload.parentNode.keys !== undefined) { + for (let i = 0; i < payload.parentNode.keys.length; i++) { + let key = payload.parentNode.keys[i] + if (key.id === node.id) { + payload.parentNode.keys.splice(i, 1) + } } } + if (payload.parentNode.key !== undefined) { + payload.parentNode.key = undefined + } completeDetachment(node, rootNodes) return } @@ -450,7 +455,11 @@ function newAttachDetach () { case 'Exchange Account Key': { node.payload.parentNode = attachToNode node.payload.chainParent = attachToNode - node.payload.parentNode.keys.push(node) + if (node.payload.parentNode.keys !== undefined) { + node.payload.parentNode.keys.push(node) + } else { + node.payload.parentNode.key = node + } completeAttachment(node, rootNodes) } break diff --git a/StrategySpace/Workspace/FunctionLibraries/NodeChildren.js b/StrategySpace/Workspace/FunctionLibraries/NodeChildren.js index 49c404ae2..f126e5105 100644 --- a/StrategySpace/Workspace/FunctionLibraries/NodeChildren.js +++ b/StrategySpace/Workspace/FunctionLibraries/NodeChildren.js @@ -525,6 +525,12 @@ function newNodeChildren () { response.childIndex = response.childrenCount } } + if (parentNode.key !== undefined) { + response.childrenCount++ + if (parentNode.key.id === childNode.id) { + response.childIndex = response.childrenCount + } + } return response } diff --git a/StrategySpace/Workspace/FunctionLibraries/NodeDeleter.js b/StrategySpace/Workspace/FunctionLibraries/NodeDeleter.js index 1b62f728b..12d21ef71 100644 --- a/StrategySpace/Workspace/FunctionLibraries/NodeDeleter.js +++ b/StrategySpace/Workspace/FunctionLibraries/NodeDeleter.js @@ -586,12 +586,17 @@ function newNodeDeleter () { function deleteExchangeAccountKey (node, rootNodes) { let payload = node.payload if (payload.parentNode !== undefined) { - for (let j = 0; j < payload.parentNode.keys.length; j++) { - let key = payload.parentNode.keys[j] - if (key.id === node.id) { - payload.parentNode.keys.splice(j, 1) + if (payload.parentNode.keys !== undefined) { + for (let j = 0; j < payload.parentNode.keys.length; j++) { + let key = payload.parentNode.keys[j] + if (key.id === node.id) { + payload.parentNode.keys.splice(j, 1) + } } } + if (payload.parentNode.key !== undefined) { + payload.parentNode.key = undefined + } } else { completeDeletion(node, rootNodes) } @@ -643,6 +648,9 @@ function newNodeDeleter () { if (node.feeStructure !== undefined) { deleteFeeStructure(node.feeStructure, rootNodes) } + if (node.key !== undefined) { + deleteExchangeAccountKey(node.key, rootNodes) + } destroyPart(node) cleanNode(node) } diff --git a/StrategySpace/Workspace/FunctionLibraries/PartsFromNodes.js b/StrategySpace/Workspace/FunctionLibraries/PartsFromNodes.js index e4a946d14..980432664 100644 --- a/StrategySpace/Workspace/FunctionLibraries/PartsFromNodes.js +++ b/StrategySpace/Workspace/FunctionLibraries/PartsFromNodes.js @@ -294,6 +294,9 @@ function newPartsFromNodes () { if (node.feeStructure !== undefined) { createPartFromNode(node.feeStructure, node, node) } + if (node.key !== undefined) { + createPartFromNode(node.key, node, node) + } return } case 'Trading System': { diff --git a/StrategySpace/Workspace/FunctionLibraries/ProtocolNode.js b/StrategySpace/Workspace/FunctionLibraries/ProtocolNode.js index 0e57a98dd..4b52ac24c 100644 --- a/StrategySpace/Workspace/FunctionLibraries/ProtocolNode.js +++ b/StrategySpace/Workspace/FunctionLibraries/ProtocolNode.js @@ -375,7 +375,8 @@ function newProtocolNode () { timeRange: getProtocolNode(node.timeRange, removePersonalData, parseJSONStrings, includeIds), timePeriod: getProtocolNode(node.timePeriod, removePersonalData, parseJSONStrings, includeIds), slippage: getProtocolNode(node.slippage, removePersonalData, parseJSONStrings, includeIds), - feeStructure: getProtocolNode(node.feeStructure, removePersonalData, parseJSONStrings, includeIds) + feeStructure: getProtocolNode(node.feeStructure, removePersonalData, parseJSONStrings, includeIds), + key: getProtocolNode(node.key, removePersonalData, parseJSONStrings, includeIds) } if (includeIds) { object.id = node.id diff --git a/StrategySpace/Workspace/FunctionLibraries/StringifyNode.js b/StrategySpace/Workspace/FunctionLibraries/StringifyNode.js index b243f3286..754fe3c1d 100644 --- a/StrategySpace/Workspace/FunctionLibraries/StringifyNode.js +++ b/StrategySpace/Workspace/FunctionLibraries/StringifyNode.js @@ -353,6 +353,7 @@ function newStringifyNode () { timePeriod: prepareForStringify(node.timePeriod, removePersonalData), slippage: prepareForStringify(node.slippage, removePersonalData), feeStructure: prepareForStringify(node.feeStructure, removePersonalData), + key: prepareForStringify(node.key, removePersonalData), savedPayload: getSavedPayload(node) } return object From c2b284d4f5858b81aef0f8313dd2f55f5ea338d4 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Fri, 11 Oct 2019 14:41:19 +0200 Subject: [PATCH 02/48] Menu improved --- FloatingSpace/StrategyPartConstructor.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/FloatingSpace/StrategyPartConstructor.js b/FloatingSpace/StrategyPartConstructor.js index b38f3eee0..c38b0c527 100644 --- a/FloatingSpace/StrategyPartConstructor.js +++ b/FloatingSpace/StrategyPartConstructor.js @@ -581,7 +581,7 @@ function newStrategyPartConstructor () { rawRadius: 8, targetRadius: 0, currentRadius: 0, - angle: -65 + angle: -75 } ) menuItemsInitialValues.push( @@ -594,7 +594,7 @@ function newStrategyPartConstructor () { rawRadius: 8, targetRadius: 0, currentRadius: 0, - angle: -30 + angle: -35 } ) menuItemsInitialValues.push( @@ -607,7 +607,7 @@ function newStrategyPartConstructor () { rawRadius: 8, targetRadius: 0, currentRadius: 0, - angle: -10 + angle: -12 } ) menuItemsInitialValues.push( @@ -620,7 +620,7 @@ function newStrategyPartConstructor () { rawRadius: 8, targetRadius: 0, currentRadius: 0, - angle: 10 + angle: 12 } ) menuItemsInitialValues.push( @@ -636,7 +636,7 @@ function newStrategyPartConstructor () { rawRadius: 8, targetRadius: 0, currentRadius: 0, - angle: +30 + angle: +35 } ) menuItemsInitialValues.push( @@ -650,7 +650,7 @@ function newStrategyPartConstructor () { rawRadius: 8, targetRadius: 0, currentRadius: 0, - angle: 65 + angle: 75 } ) break From c6099d59088c016889a86359987d63c8a302d6ad Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Fri, 11 Oct 2019 16:40:06 +0200 Subject: [PATCH 03/48] Key to open and close the designer --- Canvas.js | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/Canvas.js b/Canvas.js index fc29a3bdf..442fde11c 100644 --- a/Canvas.js +++ b/Canvas.js @@ -69,6 +69,8 @@ function newCanvas () { browserCanvas.removeEventListener('dragleave', onDragLeave, false) browserCanvas.removeEventListener('dragover', onDragOver, false) browserCanvas.removeEventListener('drop', onDragDrop, false) + + browserCanvas.removeEventListener('keydown', onKeyDown, false) } catch (err) { if (ERROR_LOG === true) { logger.write('[ERROR] finalize -> err = ' + err.stack) } } @@ -151,6 +153,11 @@ function newCanvas () { function addCanvasEvents () { try { + /* Keyboard events */ + window.addEventListener('keydown', onKeyDown, true) + + /* Mouse Events */ + browserCanvas.addEventListener('mousedown', onMouseDown, false) browserCanvas.addEventListener('mouseup', onMouseUp, false) browserCanvas.addEventListener('mousemove', onMouseMove, false) @@ -178,6 +185,24 @@ function newCanvas () { } } + function onKeyDown (event) { + if (event.shiftKey === true && event.code === 'ArrowUp') { + thisObject.cockpitSpace.toTop() + } + + if (event.shiftKey === true && event.code === 'ArrowDown') { + thisObject.cockpitSpace.toBottom() + } + + if (event.keyCode === 37) { + alert('Left key pressed') + } + + if (event.keyCode === 39) { + alert('Rigth key pressed') + } + } + function onDragEnter (event) { try { event.preventDefault() @@ -709,4 +734,3 @@ function newCanvas () { } } } - From 60915592b679110beff0dd36b297c58a379e7371 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Fri, 11 Oct 2019 17:09:10 +0200 Subject: [PATCH 04/48] Designer moving with the arrows --- Canvas.js | 28 +++++++++++++++++++++------ Spaces/FloatingSpace.js | 42 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+), 6 deletions(-) diff --git a/Canvas.js b/Canvas.js index 442fde11c..ceb602a3c 100644 --- a/Canvas.js +++ b/Canvas.js @@ -186,20 +186,36 @@ function newCanvas () { } function onKeyDown (event) { - if (event.shiftKey === true && event.code === 'ArrowUp') { + if (event.altKey === true && event.code === 'ArrowUp') { thisObject.cockpitSpace.toTop() } - if (event.shiftKey === true && event.code === 'ArrowDown') { + if (event.altKey === true && event.code === 'ArrowDown') { thisObject.cockpitSpace.toBottom() } - if (event.keyCode === 37) { - alert('Left key pressed') + if (event.shiftKey === true && event.code === 'ArrowLeft') { + alert('charts to the Left') } - if (event.keyCode === 39) { - alert('Rigth key pressed') + if (event.shiftKey === true && event.code === 'ArrowRight') { + alert('charts to the Rigth') + } + + if (event.ctrlKey === true && event.code === 'ArrowLeft') { + canvas.floatingSpace.oneScreenLeft() + } + + if (event.ctrlKey === true && event.code === 'ArrowRight') { + canvas.floatingSpace.oneScreenRight() + } + + if (event.ctrlKey === true && event.code === 'ArrowUp') { + canvas.floatingSpace.oneScreenUp() + } + + if (event.ctrlKey === true && event.code === 'ArrowDown') { + canvas.floatingSpace.oneScreenDown() } } diff --git a/Spaces/FloatingSpace.js b/Spaces/FloatingSpace.js index e6a5d4cd3..2bf3e12c8 100644 --- a/Spaces/FloatingSpace.js +++ b/Spaces/FloatingSpace.js @@ -13,6 +13,10 @@ function newFloatingSpace () { strategyPartConstructor: undefined, noteSets: undefined, container: undefined, + oneScreenUp: oneScreenUp, + oneScreenDown: oneScreenDown, + oneScreenLeft: oneScreenLeft, + oneScreenRight: oneScreenRight, fitIntoVisibleArea: fitIntoVisibleArea, isThisPointVisible: isThisPointVisible, makeVisible: makeVisible, @@ -41,6 +45,8 @@ function newFloatingSpace () { thisObject.container.frame.position.y = browserCanvas.height / 2 - thisObject.container.frame.height / 2 let visible = false + + const PERCENTAGE_OF_SCREEN_FOR_DISPLACEMENT = 50 return thisObject function finalize () { @@ -93,6 +99,42 @@ function newFloatingSpace () { return returnPoint } + function oneScreenUp () { + let displaceVector = { + x: 0, + y: browserCanvas.height * PERCENTAGE_OF_SCREEN_FOR_DISPLACEMENT / 100 + } + + thisObject.container.displace(displaceVector) + } + + function oneScreenDown () { + let displaceVector = { + x: 0, + y: -browserCanvas.height * PERCENTAGE_OF_SCREEN_FOR_DISPLACEMENT / 100 + } + + thisObject.container.displace(displaceVector) + } + + function oneScreenLeft () { + let displaceVector = { + x: browserCanvas.width * PERCENTAGE_OF_SCREEN_FOR_DISPLACEMENT / 100, + y: 0 + } + + thisObject.container.displace(displaceVector) + } + + function oneScreenRight () { + let displaceVector = { + x: -browserCanvas.width * PERCENTAGE_OF_SCREEN_FOR_DISPLACEMENT / 100, + y: 0 + } + + thisObject.container.displace(displaceVector) + } + function isThisPointVisible (point) { if (point.x > browserCanvas.width) { return false From b3e3795e41ecda943eb319648893316758d3c2bf Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Fri, 11 Oct 2019 17:26:01 +0200 Subject: [PATCH 05/48] Scrolling with keys charts and designer --- Canvas.js | 12 ++++++++++-- Spaces/ChartSpace.js | 41 +++++++++++++++++++++++++++++++++++++++++ Spaces/FloatingSpace.js | 2 +- 3 files changed, 52 insertions(+), 3 deletions(-) diff --git a/Canvas.js b/Canvas.js index ceb602a3c..d5013536c 100644 --- a/Canvas.js +++ b/Canvas.js @@ -195,11 +195,19 @@ function newCanvas () { } if (event.shiftKey === true && event.code === 'ArrowLeft') { - alert('charts to the Left') + canvas.chartSpace.oneScreenLeft() } if (event.shiftKey === true && event.code === 'ArrowRight') { - alert('charts to the Rigth') + canvas.chartSpace.oneScreenRight() + } + + if (event.shiftKey === true && event.code === 'ArrowUp') { + canvas.chartSpace.oneScreenUp() + } + + if (event.shiftKey === true && event.code === 'ArrowDown') { + canvas.chartSpace.oneScreenDown() } if (event.ctrlKey === true && event.code === 'ArrowLeft') { diff --git a/Spaces/ChartSpace.js b/Spaces/ChartSpace.js index 5820e17e2..a6faba6a5 100644 --- a/Spaces/ChartSpace.js +++ b/Spaces/ChartSpace.js @@ -16,6 +16,10 @@ function newChartSpace () { visible: true, container: undefined, timeMachines: [], + oneScreenUp: oneScreenUp, + oneScreenDown: oneScreenDown, + oneScreenLeft: oneScreenLeft, + oneScreenRight: oneScreenRight, fitIntoVisibleArea: fitIntoVisibleArea, isThisPointVisible: isThisPointVisible, physics: physics, @@ -34,6 +38,7 @@ function newChartSpace () { let canvasBrowserResizedEventSubscriptionId + const PERCENTAGE_OF_SCREEN_FOR_DISPLACEMENT = 25 return thisObject function finalize () { @@ -112,6 +117,42 @@ function newChartSpace () { thisObject.container.frame.height = COCKPIT_SPACE_POSITION } + function oneScreenUp () { + let displaceVector = { + x: 0, + y: +browserCanvas.height * PERCENTAGE_OF_SCREEN_FOR_DISPLACEMENT / 100 + } + + viewPort.displace(displaceVector) + } + + function oneScreenDown () { + let displaceVector = { + x: 0, + y: -browserCanvas.height * PERCENTAGE_OF_SCREEN_FOR_DISPLACEMENT / 100 + } + + viewPort.displace(displaceVector) + } + + function oneScreenLeft () { + let displaceVector = { + x: -browserCanvas.width * PERCENTAGE_OF_SCREEN_FOR_DISPLACEMENT / 100, + y: 0 + } + + viewPort.displace(displaceVector) + } + + function oneScreenRight () { + let displaceVector = { + x: +browserCanvas.width * PERCENTAGE_OF_SCREEN_FOR_DISPLACEMENT / 100, + y: 0 + } + + viewPort.displace(displaceVector) + } + function fitIntoVisibleArea (point) { /* Here we check the boundaries of the resulting points, so they dont go out of the visible area. */ diff --git a/Spaces/FloatingSpace.js b/Spaces/FloatingSpace.js index 2bf3e12c8..f87dcd5da 100644 --- a/Spaces/FloatingSpace.js +++ b/Spaces/FloatingSpace.js @@ -46,7 +46,7 @@ function newFloatingSpace () { let visible = false - const PERCENTAGE_OF_SCREEN_FOR_DISPLACEMENT = 50 + const PERCENTAGE_OF_SCREEN_FOR_DISPLACEMENT = 25 return thisObject function finalize () { From af1683b5aa3fab48753f186b9e9da0737991b546 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Mon, 14 Oct 2019 15:30:36 +0200 Subject: [PATCH 06/48] shortcut key library added --- .../FunctionLibraries/ShortcutKeys.js | 653 ++++++++++++++++++ .../FunctionLibraries/StringifyNode.js | 3 +- 2 files changed, 655 insertions(+), 1 deletion(-) create mode 100644 StrategySpace/Workspace/FunctionLibraries/ShortcutKeys.js diff --git a/StrategySpace/Workspace/FunctionLibraries/ShortcutKeys.js b/StrategySpace/Workspace/FunctionLibraries/ShortcutKeys.js new file mode 100644 index 000000000..1c52662b1 --- /dev/null +++ b/StrategySpace/Workspace/FunctionLibraries/ShortcutKeys.js @@ -0,0 +1,653 @@ +function newShortcutKeys () { + thisObject = { + getShortcutKey: getShortcutKey + } + return thisObject + + function getShortcutKey (node, searchingKey) { + if (node === undefined) { return } + switch (node.type) { + case 'Code': + { + if (node.payload.uiObject.shortcutKey === searchingKey) { + return node + } else { + return + } + } + case 'Condition': + { + let child + child = getShortcutKey(node.code, searchingKey) + if (child !== undefined) { + return child + } + if (node.payload.uiObject.shortcutKey === searchingKey) { + return node + } else { + return + } + } + case 'Situation': { + let child + for (let m = 0; m < node.conditions.length; m++) { + child = getShortcutKey(node.conditions[m], searchingKey) + if (child !== undefined) { + return child + } + } + if (node.payload.uiObject.shortcutKey === searchingKey) { + return node + } else { + return + } + } + case 'Formula': + { + if (node.payload.uiObject.shortcutKey === searchingKey) { + return node + } else { + return + } + } + case 'Next Phase Event': + { + let child + for (let m = 0; m < node.situations.length; m++) { + child = getShortcutKey(node.situations[m], searchingKey) + if (child !== undefined) { + return child + } + } + if (node.payload.uiObject.shortcutKey === searchingKey) { + return node + } else { + return + } + } + case 'Phase': { + let child + child = getShortcutKey(node.formula, searchingKey) + if (child !== undefined) { + return child + } + child = getShortcutKey(node.nextPhaseEvent, searchingKey) + if (child !== undefined) { + return child + } + if (node.payload.uiObject.shortcutKey === searchingKey) { + return node + } else { + return + } + } + case 'Stop': { + let child + for (let m = 0; m < node.phases.length; m++) { + child = getShortcutKey(node.phases[m], searchingKey) + if (child !== undefined) { + return child + } + } + if (node.payload.uiObject.shortcutKey === searchingKey) { + return node + } else { + return + } + } + case 'Take Profit': { + let child + for (let m = 0; m < node.phases.length; m++) { + child = getShortcutKey(node.phases[m], searchingKey) + if (child !== undefined) { + return child + } + } + if (node.payload.uiObject.shortcutKey === searchingKey) { + return node + } else { + return + } + } + case 'Take Position Event': { + let child + for (let m = 0; m < node.situations.length; m++) { + child = getShortcutKey(node.situations[m], searchingKey) + if (child !== undefined) { + return child + } + } + if (node.payload.uiObject.shortcutKey === searchingKey) { + return node + } else { + return + } + } + case 'Trigger On Event': { + let child + for (let m = 0; m < node.situations.length; m++) { + child = getShortcutKey(node.situations[m], searchingKey) + if (child !== undefined) { + return child + } + } + if (node.payload.uiObject.shortcutKey === searchingKey) { + return node + } else { + return + } + } + case 'Trigger Off Event': { + let child + for (let m = 0; m < node.situations.length; m++) { + child = getShortcutKey(node.situations[m], searchingKey) + if (child !== undefined) { + return child + } + } + if (node.payload.uiObject.shortcutKey === searchingKey) { + return node + } else { + return + } + } + case 'Initial Definition': { + let child + child = getShortcutKey(node.stopLoss, searchingKey) + if (child !== undefined) { + return child + } + child = getShortcutKey(node.takeProfit, searchingKey) + if (child !== undefined) { + return child + } + child = getShortcutKey(node.positionSize, searchingKey) + if (child !== undefined) { + return child + } + child = getShortcutKey(node.positionRate, searchingKey) + if (child !== undefined) { + return child + } + if (node.payload.uiObject.shortcutKey === searchingKey) { + return node + } else { + return + } + } + case 'Open Execution': { + if (node.payload.uiObject.shortcutKey === searchingKey) { + return node + } else { + return + } + } + case 'Close Execution': { + if (node.payload.uiObject.shortcutKey === searchingKey) { + return node + } else { + return + } + } + case 'Position Size': { + let child + child = getShortcutKey(node.formula, searchingKey) + if (child !== undefined) { + return child + } + if (node.payload.uiObject.shortcutKey === searchingKey) { + return node + } else { + return + } + } + case 'Position Rate': { + let child + child = getShortcutKey(node.formula, searchingKey) + if (child !== undefined) { + return child + } + if (node.payload.uiObject.shortcutKey === searchingKey) { + return node + } else { + return + } + } + case 'Trigger Stage': { + let child + child = getShortcutKey(node.triggerOn, searchingKey) + if (child !== undefined) { + return child + } + child = getShortcutKey(node.triggerOff, searchingKey) + if (child !== undefined) { + return child + } + child = getShortcutKey(node.takePosition, searchingKey) + if (child !== undefined) { + return child + } + if (node.payload.uiObject.shortcutKey === searchingKey) { + return node + } else { + return + } + } + case 'Open Stage': { + let child + child = getShortcutKey(node.initialDefinition, searchingKey) + if (child !== undefined) { + return child + } + child = getShortcutKey(node.openExecution, searchingKey) + if (child !== undefined) { + return child + } + if (node.payload.uiObject.shortcutKey === searchingKey) { + return node + } else { + return + } + } + case 'Manage Stage': { + let child + child = getShortcutKey(node.stopLoss, searchingKey) + if (child !== undefined) { + return child + } + child = getShortcutKey(node.takeProfit, searchingKey) + if (child !== undefined) { + return child + } + if (node.payload.uiObject.shortcutKey === searchingKey) { + return node + } else { + return + } + } + case 'Close Stage': { + let child + child = getShortcutKey(node.closeExecution, searchingKey) + if (child !== undefined) { + return child + } + if (node.payload.uiObject.shortcutKey === searchingKey) { + return node + } else { + return + } + } + case 'Strategy': { + let child + child = getShortcutKey(node.triggerStage, searchingKey) + if (child !== undefined) { + return child + } + child = getShortcutKey(node.openStage, searchingKey) + if (child !== undefined) { + return child + } + child = getShortcutKey(node.manageStage, searchingKey) + if (child !== undefined) { + return child + } + child = getShortcutKey(node.closeStage, searchingKey) + if (child !== undefined) { + return child + } + if (node.payload.uiObject.shortcutKey === searchingKey) { + return node + } else { + return + } + } + case 'Base Asset': { + if (node.payload.uiObject.shortcutKey === searchingKey) { + return node + } else { + return + } + } + case 'Time Range': { + if (node.payload.uiObject.shortcutKey === searchingKey) { + return node + } else { + return + } + } + case 'Time Period': { + if (node.payload.uiObject.shortcutKey === searchingKey) { + return node + } else { + return + } + } + case 'Slippage': { + if (node.payload.uiObject.shortcutKey === searchingKey) { + return node + } else { + return + } + } + case 'Fee Structure': { + if (node.payload.uiObject.shortcutKey === searchingKey) { + return node + } else { + return + } + } + case 'Parameters': { + let child + child = getShortcutKey(node.baseAsset, searchingKey) + if (child !== undefined) { + return child + } + child = getShortcutKey(node.timeRange, searchingKey) + if (child !== undefined) { + return child + } + child = getShortcutKey(node.timePeriod, searchingKey) + if (child !== undefined) { + return child + } + child = getShortcutKey(node.slippage, searchingKey) + if (child !== undefined) { + return child + } + child = getShortcutKey(node.feeStructure, searchingKey) + if (child !== undefined) { + return child + } + if (node.payload.uiObject.shortcutKey === searchingKey) { + return node + } else { + return + } + } + case 'Trading System': { + let child + child = getShortcutKey(node.parameters, searchingKey) + if (child !== undefined) { + return child + } + for (let m = 0; m < node.strategies.length; m++) { + child = getShortcutKey(node.strategies[m], searchingKey) + if (child !== undefined) { + return child + } + } + if (node.payload.uiObject.shortcutKey === searchingKey) { + return node + } else { + return + } + } + case 'Personal Data': { + let child + for (let m = 0; m < node.exchangeAccounts.length; m++) { + child = getShortcutKey(node.exchangeAccounts[m], searchingKey) + if (child !== undefined) { + return child + } + } + if (node.payload.uiObject.shortcutKey === searchingKey) { + return node + } else { + return + } + } + case 'Exchange Account': { + let child + for (let m = 0; m < node.assets.length; m++) { + child = getShortcutKey(node.assets[m], searchingKey) + if (child !== undefined) { + return child + } + } + for (let m = 0; m < node.keys.length; m++) { + child = getShortcutKey(node.keys[m], searchingKey) + if (child !== undefined) { + return child + } + } + if (node.payload.uiObject.shortcutKey === searchingKey) { + return node + } else { + return + } + } + case 'Exchange Account Asset': { + if (node.payload.uiObject.shortcutKey === searchingKey) { + return node + } else { + return + } + } + case 'Exchange Account Key': { + if (node.payload.uiObject.shortcutKey === searchingKey) { + return node + } else { + return + } + } + case 'Layer Manager': { + let child + for (let m = 0; m < node.layers.length; m++) { + child = getShortcutKey(node.layers[m], searchingKey) + if (child !== undefined) { + return child + } + } + if (node.payload.uiObject.shortcutKey === searchingKey) { + return node + } else { + return + } + } + case 'Layer': { + if (node.payload.uiObject.shortcutKey === searchingKey) { + return node + } else { + return + } + } + case 'Task Manager': { + let child + for (let m = 0; m < node.tasks.length; m++) { + child = getShortcutKey(node.tasks[m], searchingKey) + if (child !== undefined) { + return child + } + } + if (node.payload.uiObject.shortcutKey === searchingKey) { + return node + } else { + return + } + } + case 'Task': { + let child + child = getShortcutKey(node.bot, searchingKey) + if (child !== undefined) { + return child + } + if (node.payload.uiObject.shortcutKey === searchingKey) { + return node + } else { + return + } + } + case 'Sensor': { + let child + for (let m = 0; m < node.processes.length; m++) { + child = getShortcutKey(node.processes[m], searchingKey) + if (child !== undefined) { + return child + } + } + if (node.payload.uiObject.shortcutKey === searchingKey) { + return node + } else { + return + } + } + case 'Indicator': { + let child + for (let m = 0; m < node.processes.length; m++) { + child = getShortcutKey(node.processes[m], searchingKey) + if (child !== undefined) { + return child + } + } + if (node.payload.uiObject.shortcutKey === searchingKey) { + return node + } else { + return + } + } + case 'Trading Engine': { + let child + for (let m = 0; m < node.processes.length; m++) { + child = getShortcutKey(node.processes[m], searchingKey) + if (child !== undefined) { + return child + } + } + if (node.payload.uiObject.shortcutKey === searchingKey) { + return node + } else { + return + } + } + case 'Process': { + let child + child = getShortcutKey(node.session, searchingKey) + if (child !== undefined) { + return child + } + if (node.payload.uiObject.shortcutKey === searchingKey) { + return node + } else { + return + } + } + + case 'Backtesting Session': { + let child + child = getShortcutKey(node.parameters, searchingKey) + if (child !== undefined) { + return child + } + child = getShortcutKey(node.layerManager, searchingKey) + if (child !== undefined) { + return child + } + if (node.payload.uiObject.shortcutKey === searchingKey) { + return node + } else { + return + } + } + + case 'Live Trading Session': { + let child + child = getShortcutKey(node.parameters, searchingKey) + if (child !== undefined) { + return child + } + child = getShortcutKey(node.layerManager, searchingKey) + if (child !== undefined) { + return child + } + if (node.payload.uiObject.shortcutKey === searchingKey) { + return node + } else { + return + } + } + + case 'Fordward Testing Session': { + let child + child = getShortcutKey(node.parameters, searchingKey) + if (child !== undefined) { + return child + } + child = getShortcutKey(node.layerManager, searchingKey) + if (child !== undefined) { + return child + } + if (node.payload.uiObject.shortcutKey === searchingKey) { + return node + } else { + return + } + } + + case 'Paper Trading Session': { + let child + child = getShortcutKey(node.parameters, searchingKey) + if (child !== undefined) { + return child + } + child = getShortcutKey(node.layerManager, searchingKey) + if (child !== undefined) { + return child + } + if (node.payload.uiObject.shortcutKey === searchingKey) { + return node + } else { + return + } + } + + case 'Network Node': { + let child + for (let m = 0; m < node.taskManagers.length; m++) { + child = getShortcutKey(node.taskManagers[m], searchingKey) + if (child !== undefined) { + return child + } + } + if (node.payload.uiObject.shortcutKey === searchingKey) { + return node + } else { + return + } + } + case 'Network': { + let child + for (let m = 0; m < node.networkNodes.length; m++) { + child = getShortcutKey(node.networkNodes[m], searchingKey) + if (child !== undefined) { + return child + } + } + if (node.payload.uiObject.shortcutKey === searchingKey) { + return node + } else { + return + } + } + case 'Definition': { + let child + child = getShortcutKey(node.tradingSystem, searchingKey) + if (child !== undefined) { + return child + } + child = getShortcutKey(node.personalData, searchingKey) + if (child !== undefined) { + return child + } + child = getShortcutKey(node.network, searchingKey) + if (child !== undefined) { + return child + } + if (node.payload.uiObject.shortcutKey === searchingKey) { + return node + } else { + return + } + } + } + } +} diff --git a/StrategySpace/Workspace/FunctionLibraries/StringifyNode.js b/StrategySpace/Workspace/FunctionLibraries/StringifyNode.js index 754fe3c1d..b292b7882 100644 --- a/StrategySpace/Workspace/FunctionLibraries/StringifyNode.js +++ b/StrategySpace/Workspace/FunctionLibraries/StringifyNode.js @@ -680,7 +680,8 @@ function newStringifyNode () { isTensed: (node.payload.floatingObject.isTensed && node.payload.floatingObject.tensedManually) }, uiObject: { - isRunning: node.payload.uiObject.isRunning + isRunning: node.payload.uiObject.isRunning, + shortcutKey: node.payload.uiObject.shortcutKey } } return savedPayload From 3ec14cb02dbcafbd0f8de55775c1cb01e6d88647 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Mon, 14 Oct 2019 15:36:50 +0200 Subject: [PATCH 07/48] Saving and retrieving shortcut keys --- FloatingSpace/StrategyPart.js | 1 + FloatingSpace/StrategyPartConstructor.js | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/FloatingSpace/StrategyPart.js b/FloatingSpace/StrategyPart.js index b03ace8a0..da5264bee 100644 --- a/FloatingSpace/StrategyPart.js +++ b/FloatingSpace/StrategyPart.js @@ -19,6 +19,7 @@ function newStrategyPart () { circularProgressBar: undefined, isExecuting: undefined, isRunning: undefined, + shortcutKey: undefined, run: run, stop: stop, getReadyToAttach: getReadyToAttach, diff --git a/FloatingSpace/StrategyPartConstructor.js b/FloatingSpace/StrategyPartConstructor.js index c38b0c527..91c3807e0 100644 --- a/FloatingSpace/StrategyPartConstructor.js +++ b/FloatingSpace/StrategyPartConstructor.js @@ -73,6 +73,12 @@ function newStrategyPartConstructor () { floatingLayer.addFloatingObject(floatingObject) + if (payload.node.savedPayload !== undefined) { + if (payload.node.savedPayload.uiObject !== undefined) { + payload.uiObject.shortcutKey = payload.node.savedPayload.uiObject.shortcutKey + } + } + return } From 16169abdff55772d5ab2df0af3a09ec67af18ac4 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Mon, 14 Oct 2019 15:56:40 +0200 Subject: [PATCH 08/48] On Focus library implemented --- .../Workspace/FunctionLibraries/OnFocus.js | 653 ++++++++++++++++++ .../FunctionLibraries/ShortcutKeys.js | 120 ++-- StrategySpace/Workspace/Workspace.js | 26 + 3 files changed, 739 insertions(+), 60 deletions(-) create mode 100644 StrategySpace/Workspace/FunctionLibraries/OnFocus.js diff --git a/StrategySpace/Workspace/FunctionLibraries/OnFocus.js b/StrategySpace/Workspace/FunctionLibraries/OnFocus.js new file mode 100644 index 000000000..dcb462b21 --- /dev/null +++ b/StrategySpace/Workspace/FunctionLibraries/OnFocus.js @@ -0,0 +1,653 @@ +function newOnFocus () { + thisObject = { + getNodeThatIsOnFocus: getNodeThatIsOnFocus + } + return thisObject + + function getNodeThatIsOnFocus (node) { + if (node === undefined) { return } + switch (node.type) { + case 'Code': + { + if (node.payload.uiObject.isOnFocus === true) { + return node + } else { + return + } + } + case 'Condition': + { + let child + child = getNodeThatIsOnFocus(node.code) + if (child !== undefined) { + return child + } + if (node.payload.uiObject.isOnFocus === true) { + return node + } else { + return + } + } + case 'Situation': { + let child + for (let m = 0; m < node.conditions.length; m++) { + child = getNodeThatIsOnFocus(node.conditions[m]) + if (child !== undefined) { + return child + } + } + if (node.payload.uiObject.isOnFocus === true) { + return node + } else { + return + } + } + case 'Formula': + { + if (node.payload.uiObject.isOnFocus === true) { + return node + } else { + return + } + } + case 'Next Phase Event': + { + let child + for (let m = 0; m < node.situations.length; m++) { + child = getNodeThatIsOnFocus(node.situations[m]) + if (child !== undefined) { + return child + } + } + if (node.payload.uiObject.isOnFocus === true) { + return node + } else { + return + } + } + case 'Phase': { + let child + child = getNodeThatIsOnFocus(node.formula) + if (child !== undefined) { + return child + } + child = getNodeThatIsOnFocus(node.nextPhaseEvent) + if (child !== undefined) { + return child + } + if (node.payload.uiObject.isOnFocus === true) { + return node + } else { + return + } + } + case 'Stop': { + let child + for (let m = 0; m < node.phases.length; m++) { + child = getNodeThatIsOnFocus(node.phases[m]) + if (child !== undefined) { + return child + } + } + if (node.payload.uiObject.isOnFocus === true) { + return node + } else { + return + } + } + case 'Take Profit': { + let child + for (let m = 0; m < node.phases.length; m++) { + child = getNodeThatIsOnFocus(node.phases[m]) + if (child !== undefined) { + return child + } + } + if (node.payload.uiObject.isOnFocus === true) { + return node + } else { + return + } + } + case 'Take Position Event': { + let child + for (let m = 0; m < node.situations.length; m++) { + child = getNodeThatIsOnFocus(node.situations[m]) + if (child !== undefined) { + return child + } + } + if (node.payload.uiObject.isOnFocus === true) { + return node + } else { + return + } + } + case 'Trigger On Event': { + let child + for (let m = 0; m < node.situations.length; m++) { + child = getNodeThatIsOnFocus(node.situations[m]) + if (child !== undefined) { + return child + } + } + if (node.payload.uiObject.isOnFocus === true) { + return node + } else { + return + } + } + case 'Trigger Off Event': { + let child + for (let m = 0; m < node.situations.length; m++) { + child = getNodeThatIsOnFocus(node.situations[m]) + if (child !== undefined) { + return child + } + } + if (node.payload.uiObject.isOnFocus === true) { + return node + } else { + return + } + } + case 'Initial Definition': { + let child + child = getNodeThatIsOnFocus(node.stopLoss) + if (child !== undefined) { + return child + } + child = getNodeThatIsOnFocus(node.takeProfit) + if (child !== undefined) { + return child + } + child = getNodeThatIsOnFocus(node.positionSize) + if (child !== undefined) { + return child + } + child = getNodeThatIsOnFocus(node.positionRate) + if (child !== undefined) { + return child + } + if (node.payload.uiObject.isOnFocus === true) { + return node + } else { + return + } + } + case 'Open Execution': { + if (node.payload.uiObject.isOnFocus === true) { + return node + } else { + return + } + } + case 'Close Execution': { + if (node.payload.uiObject.isOnFocus === true) { + return node + } else { + return + } + } + case 'Position Size': { + let child + child = getNodeThatIsOnFocus(node.formula) + if (child !== undefined) { + return child + } + if (node.payload.uiObject.isOnFocus === true) { + return node + } else { + return + } + } + case 'Position Rate': { + let child + child = getNodeThatIsOnFocus(node.formula) + if (child !== undefined) { + return child + } + if (node.payload.uiObject.isOnFocus === true) { + return node + } else { + return + } + } + case 'Trigger Stage': { + let child + child = getNodeThatIsOnFocus(node.triggerOn) + if (child !== undefined) { + return child + } + child = getNodeThatIsOnFocus(node.triggerOff) + if (child !== undefined) { + return child + } + child = getNodeThatIsOnFocus(node.takePosition) + if (child !== undefined) { + return child + } + if (node.payload.uiObject.isOnFocus === true) { + return node + } else { + return + } + } + case 'Open Stage': { + let child + child = getNodeThatIsOnFocus(node.initialDefinition) + if (child !== undefined) { + return child + } + child = getNodeThatIsOnFocus(node.openExecution) + if (child !== undefined) { + return child + } + if (node.payload.uiObject.isOnFocus === true) { + return node + } else { + return + } + } + case 'Manage Stage': { + let child + child = getNodeThatIsOnFocus(node.stopLoss) + if (child !== undefined) { + return child + } + child = getNodeThatIsOnFocus(node.takeProfit) + if (child !== undefined) { + return child + } + if (node.payload.uiObject.isOnFocus === true) { + return node + } else { + return + } + } + case 'Close Stage': { + let child + child = getNodeThatIsOnFocus(node.closeExecution) + if (child !== undefined) { + return child + } + if (node.payload.uiObject.isOnFocus === true) { + return node + } else { + return + } + } + case 'Strategy': { + let child + child = getNodeThatIsOnFocus(node.triggerStage) + if (child !== undefined) { + return child + } + child = getNodeThatIsOnFocus(node.openStage) + if (child !== undefined) { + return child + } + child = getNodeThatIsOnFocus(node.manageStage) + if (child !== undefined) { + return child + } + child = getNodeThatIsOnFocus(node.closeStage) + if (child !== undefined) { + return child + } + if (node.payload.uiObject.isOnFocus === true) { + return node + } else { + return + } + } + case 'Base Asset': { + if (node.payload.uiObject.isOnFocus === true) { + return node + } else { + return + } + } + case 'Time Range': { + if (node.payload.uiObject.isOnFocus === true) { + return node + } else { + return + } + } + case 'Time Period': { + if (node.payload.uiObject.isOnFocus === true) { + return node + } else { + return + } + } + case 'Slippage': { + if (node.payload.uiObject.isOnFocus === true) { + return node + } else { + return + } + } + case 'Fee Structure': { + if (node.payload.uiObject.isOnFocus === true) { + return node + } else { + return + } + } + case 'Parameters': { + let child + child = getNodeThatIsOnFocus(node.baseAsset) + if (child !== undefined) { + return child + } + child = getNodeThatIsOnFocus(node.timeRange) + if (child !== undefined) { + return child + } + child = getNodeThatIsOnFocus(node.timePeriod) + if (child !== undefined) { + return child + } + child = getNodeThatIsOnFocus(node.slippage) + if (child !== undefined) { + return child + } + child = getNodeThatIsOnFocus(node.feeStructure) + if (child !== undefined) { + return child + } + if (node.payload.uiObject.isOnFocus === true) { + return node + } else { + return + } + } + case 'Trading System': { + let child + child = getNodeThatIsOnFocus(node.parameters) + if (child !== undefined) { + return child + } + for (let m = 0; m < node.strategies.length; m++) { + child = getNodeThatIsOnFocus(node.strategies[m]) + if (child !== undefined) { + return child + } + } + if (node.payload.uiObject.isOnFocus === true) { + return node + } else { + return + } + } + case 'Personal Data': { + let child + for (let m = 0; m < node.exchangeAccounts.length; m++) { + child = getNodeThatIsOnFocus(node.exchangeAccounts[m]) + if (child !== undefined) { + return child + } + } + if (node.payload.uiObject.isOnFocus === true) { + return node + } else { + return + } + } + case 'Exchange Account': { + let child + for (let m = 0; m < node.assets.length; m++) { + child = getNodeThatIsOnFocus(node.assets[m]) + if (child !== undefined) { + return child + } + } + for (let m = 0; m < node.keys.length; m++) { + child = getNodeThatIsOnFocus(node.keys[m]) + if (child !== undefined) { + return child + } + } + if (node.payload.uiObject.isOnFocus === true) { + return node + } else { + return + } + } + case 'Exchange Account Asset': { + if (node.payload.uiObject.isOnFocus === true) { + return node + } else { + return + } + } + case 'Exchange Account Key': { + if (node.payload.uiObject.isOnFocus === true) { + return node + } else { + return + } + } + case 'Layer Manager': { + let child + for (let m = 0; m < node.layers.length; m++) { + child = getNodeThatIsOnFocus(node.layers[m]) + if (child !== undefined) { + return child + } + } + if (node.payload.uiObject.isOnFocus === true) { + return node + } else { + return + } + } + case 'Layer': { + if (node.payload.uiObject.isOnFocus === true) { + return node + } else { + return + } + } + case 'Task Manager': { + let child + for (let m = 0; m < node.tasks.length; m++) { + child = getNodeThatIsOnFocus(node.tasks[m]) + if (child !== undefined) { + return child + } + } + if (node.payload.uiObject.isOnFocus === true) { + return node + } else { + return + } + } + case 'Task': { + let child + child = getNodeThatIsOnFocus(node.bot) + if (child !== undefined) { + return child + } + if (node.payload.uiObject.isOnFocus === true) { + return node + } else { + return + } + } + case 'Sensor': { + let child + for (let m = 0; m < node.processes.length; m++) { + child = getNodeThatIsOnFocus(node.processes[m]) + if (child !== undefined) { + return child + } + } + if (node.payload.uiObject.isOnFocus === true) { + return node + } else { + return + } + } + case 'Indicator': { + let child + for (let m = 0; m < node.processes.length; m++) { + child = getNodeThatIsOnFocus(node.processes[m]) + if (child !== undefined) { + return child + } + } + if (node.payload.uiObject.isOnFocus === true) { + return node + } else { + return + } + } + case 'Trading Engine': { + let child + for (let m = 0; m < node.processes.length; m++) { + child = getNodeThatIsOnFocus(node.processes[m]) + if (child !== undefined) { + return child + } + } + if (node.payload.uiObject.isOnFocus === true) { + return node + } else { + return + } + } + case 'Process': { + let child + child = getNodeThatIsOnFocus(node.session) + if (child !== undefined) { + return child + } + if (node.payload.uiObject.isOnFocus === true) { + return node + } else { + return + } + } + + case 'Backtesting Session': { + let child + child = getNodeThatIsOnFocus(node.parameters) + if (child !== undefined) { + return child + } + child = getNodeThatIsOnFocus(node.layerManager) + if (child !== undefined) { + return child + } + if (node.payload.uiObject.isOnFocus === true) { + return node + } else { + return + } + } + + case 'Live Trading Session': { + let child + child = getNodeThatIsOnFocus(node.parameters) + if (child !== undefined) { + return child + } + child = getNodeThatIsOnFocus(node.layerManager) + if (child !== undefined) { + return child + } + if (node.payload.uiObject.isOnFocus === true) { + return node + } else { + return + } + } + + case 'Fordward Testing Session': { + let child + child = getNodeThatIsOnFocus(node.parameters) + if (child !== undefined) { + return child + } + child = getNodeThatIsOnFocus(node.layerManager) + if (child !== undefined) { + return child + } + if (node.payload.uiObject.isOnFocus === true) { + return node + } else { + return + } + } + + case 'Paper Trading Session': { + let child + child = getNodeThatIsOnFocus(node.parameters) + if (child !== undefined) { + return child + } + child = getNodeThatIsOnFocus(node.layerManager) + if (child !== undefined) { + return child + } + if (node.payload.uiObject.isOnFocus === true) { + return node + } else { + return + } + } + + case 'Network Node': { + let child + for (let m = 0; m < node.taskManagers.length; m++) { + child = getNodeThatIsOnFocus(node.taskManagers[m]) + if (child !== undefined) { + return child + } + } + if (node.payload.uiObject.isOnFocus === true) { + return node + } else { + return + } + } + case 'Network': { + let child + for (let m = 0; m < node.networkNodes.length; m++) { + child = getNodeThatIsOnFocus(node.networkNodes[m]) + if (child !== undefined) { + return child + } + } + if (node.payload.uiObject.isOnFocus === true) { + return node + } else { + return + } + } + case 'Definition': { + let child + child = getNodeThatIsOnFocus(node.tradingSystem) + if (child !== undefined) { + return child + } + child = getNodeThatIsOnFocus(node.personalData) + if (child !== undefined) { + return child + } + child = getNodeThatIsOnFocus(node.network) + if (child !== undefined) { + return child + } + if (node.payload.uiObject.isOnFocus === true) { + return node + } else { + return + } + } + } + } +} diff --git a/StrategySpace/Workspace/FunctionLibraries/ShortcutKeys.js b/StrategySpace/Workspace/FunctionLibraries/ShortcutKeys.js index 1c52662b1..ea239095a 100644 --- a/StrategySpace/Workspace/FunctionLibraries/ShortcutKeys.js +++ b/StrategySpace/Workspace/FunctionLibraries/ShortcutKeys.js @@ -1,10 +1,10 @@ function newShortcutKeys () { thisObject = { - getShortcutKey: getShortcutKey + getNodeByShortcutKey: getNodeByShortcutKey } return thisObject - function getShortcutKey (node, searchingKey) { + function getNodeByShortcutKey (node, searchingKey) { if (node === undefined) { return } switch (node.type) { case 'Code': @@ -18,7 +18,7 @@ function newShortcutKeys () { case 'Condition': { let child - child = getShortcutKey(node.code, searchingKey) + child = getNodeByShortcutKey(node.code, searchingKey) if (child !== undefined) { return child } @@ -31,7 +31,7 @@ function newShortcutKeys () { case 'Situation': { let child for (let m = 0; m < node.conditions.length; m++) { - child = getShortcutKey(node.conditions[m], searchingKey) + child = getNodeByShortcutKey(node.conditions[m], searchingKey) if (child !== undefined) { return child } @@ -54,7 +54,7 @@ function newShortcutKeys () { { let child for (let m = 0; m < node.situations.length; m++) { - child = getShortcutKey(node.situations[m], searchingKey) + child = getNodeByShortcutKey(node.situations[m], searchingKey) if (child !== undefined) { return child } @@ -67,11 +67,11 @@ function newShortcutKeys () { } case 'Phase': { let child - child = getShortcutKey(node.formula, searchingKey) + child = getNodeByShortcutKey(node.formula, searchingKey) if (child !== undefined) { return child } - child = getShortcutKey(node.nextPhaseEvent, searchingKey) + child = getNodeByShortcutKey(node.nextPhaseEvent, searchingKey) if (child !== undefined) { return child } @@ -84,7 +84,7 @@ function newShortcutKeys () { case 'Stop': { let child for (let m = 0; m < node.phases.length; m++) { - child = getShortcutKey(node.phases[m], searchingKey) + child = getNodeByShortcutKey(node.phases[m], searchingKey) if (child !== undefined) { return child } @@ -98,7 +98,7 @@ function newShortcutKeys () { case 'Take Profit': { let child for (let m = 0; m < node.phases.length; m++) { - child = getShortcutKey(node.phases[m], searchingKey) + child = getNodeByShortcutKey(node.phases[m], searchingKey) if (child !== undefined) { return child } @@ -112,7 +112,7 @@ function newShortcutKeys () { case 'Take Position Event': { let child for (let m = 0; m < node.situations.length; m++) { - child = getShortcutKey(node.situations[m], searchingKey) + child = getNodeByShortcutKey(node.situations[m], searchingKey) if (child !== undefined) { return child } @@ -126,7 +126,7 @@ function newShortcutKeys () { case 'Trigger On Event': { let child for (let m = 0; m < node.situations.length; m++) { - child = getShortcutKey(node.situations[m], searchingKey) + child = getNodeByShortcutKey(node.situations[m], searchingKey) if (child !== undefined) { return child } @@ -140,7 +140,7 @@ function newShortcutKeys () { case 'Trigger Off Event': { let child for (let m = 0; m < node.situations.length; m++) { - child = getShortcutKey(node.situations[m], searchingKey) + child = getNodeByShortcutKey(node.situations[m], searchingKey) if (child !== undefined) { return child } @@ -153,19 +153,19 @@ function newShortcutKeys () { } case 'Initial Definition': { let child - child = getShortcutKey(node.stopLoss, searchingKey) + child = getNodeByShortcutKey(node.stopLoss, searchingKey) if (child !== undefined) { return child } - child = getShortcutKey(node.takeProfit, searchingKey) + child = getNodeByShortcutKey(node.takeProfit, searchingKey) if (child !== undefined) { return child } - child = getShortcutKey(node.positionSize, searchingKey) + child = getNodeByShortcutKey(node.positionSize, searchingKey) if (child !== undefined) { return child } - child = getShortcutKey(node.positionRate, searchingKey) + child = getNodeByShortcutKey(node.positionRate, searchingKey) if (child !== undefined) { return child } @@ -191,7 +191,7 @@ function newShortcutKeys () { } case 'Position Size': { let child - child = getShortcutKey(node.formula, searchingKey) + child = getNodeByShortcutKey(node.formula, searchingKey) if (child !== undefined) { return child } @@ -203,7 +203,7 @@ function newShortcutKeys () { } case 'Position Rate': { let child - child = getShortcutKey(node.formula, searchingKey) + child = getNodeByShortcutKey(node.formula, searchingKey) if (child !== undefined) { return child } @@ -215,15 +215,15 @@ function newShortcutKeys () { } case 'Trigger Stage': { let child - child = getShortcutKey(node.triggerOn, searchingKey) + child = getNodeByShortcutKey(node.triggerOn, searchingKey) if (child !== undefined) { return child } - child = getShortcutKey(node.triggerOff, searchingKey) + child = getNodeByShortcutKey(node.triggerOff, searchingKey) if (child !== undefined) { return child } - child = getShortcutKey(node.takePosition, searchingKey) + child = getNodeByShortcutKey(node.takePosition, searchingKey) if (child !== undefined) { return child } @@ -235,11 +235,11 @@ function newShortcutKeys () { } case 'Open Stage': { let child - child = getShortcutKey(node.initialDefinition, searchingKey) + child = getNodeByShortcutKey(node.initialDefinition, searchingKey) if (child !== undefined) { return child } - child = getShortcutKey(node.openExecution, searchingKey) + child = getNodeByShortcutKey(node.openExecution, searchingKey) if (child !== undefined) { return child } @@ -251,11 +251,11 @@ function newShortcutKeys () { } case 'Manage Stage': { let child - child = getShortcutKey(node.stopLoss, searchingKey) + child = getNodeByShortcutKey(node.stopLoss, searchingKey) if (child !== undefined) { return child } - child = getShortcutKey(node.takeProfit, searchingKey) + child = getNodeByShortcutKey(node.takeProfit, searchingKey) if (child !== undefined) { return child } @@ -267,7 +267,7 @@ function newShortcutKeys () { } case 'Close Stage': { let child - child = getShortcutKey(node.closeExecution, searchingKey) + child = getNodeByShortcutKey(node.closeExecution, searchingKey) if (child !== undefined) { return child } @@ -279,19 +279,19 @@ function newShortcutKeys () { } case 'Strategy': { let child - child = getShortcutKey(node.triggerStage, searchingKey) + child = getNodeByShortcutKey(node.triggerStage, searchingKey) if (child !== undefined) { return child } - child = getShortcutKey(node.openStage, searchingKey) + child = getNodeByShortcutKey(node.openStage, searchingKey) if (child !== undefined) { return child } - child = getShortcutKey(node.manageStage, searchingKey) + child = getNodeByShortcutKey(node.manageStage, searchingKey) if (child !== undefined) { return child } - child = getShortcutKey(node.closeStage, searchingKey) + child = getNodeByShortcutKey(node.closeStage, searchingKey) if (child !== undefined) { return child } @@ -338,23 +338,23 @@ function newShortcutKeys () { } case 'Parameters': { let child - child = getShortcutKey(node.baseAsset, searchingKey) + child = getNodeByShortcutKey(node.baseAsset, searchingKey) if (child !== undefined) { return child } - child = getShortcutKey(node.timeRange, searchingKey) + child = getNodeByShortcutKey(node.timeRange, searchingKey) if (child !== undefined) { return child } - child = getShortcutKey(node.timePeriod, searchingKey) + child = getNodeByShortcutKey(node.timePeriod, searchingKey) if (child !== undefined) { return child } - child = getShortcutKey(node.slippage, searchingKey) + child = getNodeByShortcutKey(node.slippage, searchingKey) if (child !== undefined) { return child } - child = getShortcutKey(node.feeStructure, searchingKey) + child = getNodeByShortcutKey(node.feeStructure, searchingKey) if (child !== undefined) { return child } @@ -366,12 +366,12 @@ function newShortcutKeys () { } case 'Trading System': { let child - child = getShortcutKey(node.parameters, searchingKey) + child = getNodeByShortcutKey(node.parameters, searchingKey) if (child !== undefined) { return child } for (let m = 0; m < node.strategies.length; m++) { - child = getShortcutKey(node.strategies[m], searchingKey) + child = getNodeByShortcutKey(node.strategies[m], searchingKey) if (child !== undefined) { return child } @@ -385,7 +385,7 @@ function newShortcutKeys () { case 'Personal Data': { let child for (let m = 0; m < node.exchangeAccounts.length; m++) { - child = getShortcutKey(node.exchangeAccounts[m], searchingKey) + child = getNodeByShortcutKey(node.exchangeAccounts[m], searchingKey) if (child !== undefined) { return child } @@ -399,13 +399,13 @@ function newShortcutKeys () { case 'Exchange Account': { let child for (let m = 0; m < node.assets.length; m++) { - child = getShortcutKey(node.assets[m], searchingKey) + child = getNodeByShortcutKey(node.assets[m], searchingKey) if (child !== undefined) { return child } } for (let m = 0; m < node.keys.length; m++) { - child = getShortcutKey(node.keys[m], searchingKey) + child = getNodeByShortcutKey(node.keys[m], searchingKey) if (child !== undefined) { return child } @@ -433,7 +433,7 @@ function newShortcutKeys () { case 'Layer Manager': { let child for (let m = 0; m < node.layers.length; m++) { - child = getShortcutKey(node.layers[m], searchingKey) + child = getNodeByShortcutKey(node.layers[m], searchingKey) if (child !== undefined) { return child } @@ -454,7 +454,7 @@ function newShortcutKeys () { case 'Task Manager': { let child for (let m = 0; m < node.tasks.length; m++) { - child = getShortcutKey(node.tasks[m], searchingKey) + child = getNodeByShortcutKey(node.tasks[m], searchingKey) if (child !== undefined) { return child } @@ -467,7 +467,7 @@ function newShortcutKeys () { } case 'Task': { let child - child = getShortcutKey(node.bot, searchingKey) + child = getNodeByShortcutKey(node.bot, searchingKey) if (child !== undefined) { return child } @@ -480,7 +480,7 @@ function newShortcutKeys () { case 'Sensor': { let child for (let m = 0; m < node.processes.length; m++) { - child = getShortcutKey(node.processes[m], searchingKey) + child = getNodeByShortcutKey(node.processes[m], searchingKey) if (child !== undefined) { return child } @@ -494,7 +494,7 @@ function newShortcutKeys () { case 'Indicator': { let child for (let m = 0; m < node.processes.length; m++) { - child = getShortcutKey(node.processes[m], searchingKey) + child = getNodeByShortcutKey(node.processes[m], searchingKey) if (child !== undefined) { return child } @@ -508,7 +508,7 @@ function newShortcutKeys () { case 'Trading Engine': { let child for (let m = 0; m < node.processes.length; m++) { - child = getShortcutKey(node.processes[m], searchingKey) + child = getNodeByShortcutKey(node.processes[m], searchingKey) if (child !== undefined) { return child } @@ -521,7 +521,7 @@ function newShortcutKeys () { } case 'Process': { let child - child = getShortcutKey(node.session, searchingKey) + child = getNodeByShortcutKey(node.session, searchingKey) if (child !== undefined) { return child } @@ -534,11 +534,11 @@ function newShortcutKeys () { case 'Backtesting Session': { let child - child = getShortcutKey(node.parameters, searchingKey) + child = getNodeByShortcutKey(node.parameters, searchingKey) if (child !== undefined) { return child } - child = getShortcutKey(node.layerManager, searchingKey) + child = getNodeByShortcutKey(node.layerManager, searchingKey) if (child !== undefined) { return child } @@ -551,11 +551,11 @@ function newShortcutKeys () { case 'Live Trading Session': { let child - child = getShortcutKey(node.parameters, searchingKey) + child = getNodeByShortcutKey(node.parameters, searchingKey) if (child !== undefined) { return child } - child = getShortcutKey(node.layerManager, searchingKey) + child = getNodeByShortcutKey(node.layerManager, searchingKey) if (child !== undefined) { return child } @@ -568,11 +568,11 @@ function newShortcutKeys () { case 'Fordward Testing Session': { let child - child = getShortcutKey(node.parameters, searchingKey) + child = getNodeByShortcutKey(node.parameters, searchingKey) if (child !== undefined) { return child } - child = getShortcutKey(node.layerManager, searchingKey) + child = getNodeByShortcutKey(node.layerManager, searchingKey) if (child !== undefined) { return child } @@ -585,11 +585,11 @@ function newShortcutKeys () { case 'Paper Trading Session': { let child - child = getShortcutKey(node.parameters, searchingKey) + child = getNodeByShortcutKey(node.parameters, searchingKey) if (child !== undefined) { return child } - child = getShortcutKey(node.layerManager, searchingKey) + child = getNodeByShortcutKey(node.layerManager, searchingKey) if (child !== undefined) { return child } @@ -603,7 +603,7 @@ function newShortcutKeys () { case 'Network Node': { let child for (let m = 0; m < node.taskManagers.length; m++) { - child = getShortcutKey(node.taskManagers[m], searchingKey) + child = getNodeByShortcutKey(node.taskManagers[m], searchingKey) if (child !== undefined) { return child } @@ -617,7 +617,7 @@ function newShortcutKeys () { case 'Network': { let child for (let m = 0; m < node.networkNodes.length; m++) { - child = getShortcutKey(node.networkNodes[m], searchingKey) + child = getNodeByShortcutKey(node.networkNodes[m], searchingKey) if (child !== undefined) { return child } @@ -630,15 +630,15 @@ function newShortcutKeys () { } case 'Definition': { let child - child = getShortcutKey(node.tradingSystem, searchingKey) + child = getNodeByShortcutKey(node.tradingSystem, searchingKey) if (child !== undefined) { return child } - child = getShortcutKey(node.personalData, searchingKey) + child = getNodeByShortcutKey(node.personalData, searchingKey) if (child !== undefined) { return child } - child = getShortcutKey(node.network, searchingKey) + child = getNodeByShortcutKey(node.network, searchingKey) if (child !== undefined) { return child } diff --git a/StrategySpace/Workspace/Workspace.js b/StrategySpace/Workspace/Workspace.js index da54cfde4..2025e408d 100644 --- a/StrategySpace/Workspace/Workspace.js +++ b/StrategySpace/Workspace/Workspace.js @@ -11,6 +11,7 @@ function newWorkspace () { container: undefined, enabled: false, nodeChildren: undefined, + getNodeByShortcutKey: getNodeByShortcutKey, getAllTradingEngines: getAllTradingEngines, stopAllRunningTasks: stopAllRunningTasks, onMenuItemClick: onMenuItemClick, @@ -49,6 +50,9 @@ function newWorkspace () { let functionLibraryWorkspaceNodes = newStringifyNode() let functionLibraryTaskFunctions = newTaskFunctions() let functionLibrarySessionFunctions = newSessionFunctions() + let functionLibraryShortcutKeys = newShortcutKeys() + let functionLibraryOnFocus = newOnFocus() + thisObject.nodeChildren = newNodeChildren() return thisObject @@ -188,6 +192,28 @@ function newWorkspace () { return tradingEngines } + function getNodeByShortcutKey (searchingKey) { + for (let i = 0; i < thisObject.workspaceNode.rootNodes.length; i++) { + let rootNode = thisObject.workspaceNode.rootNodes[i] + if (rootNode.type === 'Definition') { + let definition = rootNode + let node = functionLibraryShortcutKeys.getNodeByShortcutKey(searchingKey) + if (node !== undefined) { return node } + } + } + } + + function getNodeThatIsOnFocus () { + for (let i = 0; i < thisObject.workspaceNode.rootNodes.length; i++) { + let rootNode = thisObject.workspaceNode.rootNodes[i] + if (rootNode.type === 'Definition') { + let definition = rootNode + let node = functionLibraryOnFocus.getNodeThatIsOnFocus() + if (node !== undefined) { return node } + } + } + } + function spawn (nodeText, point) { try { point = canvas.floatingSpace.container.frame.unframeThisPoint(point) From 56c5d0a82668f6bbc1b116d0bb4f81e4bd640c8f Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Mon, 14 Oct 2019 16:07:03 +0200 Subject: [PATCH 09/48] Setting shortcut key --- Canvas.js | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/Canvas.js b/Canvas.js index d5013536c..ae6478c70 100644 --- a/Canvas.js +++ b/Canvas.js @@ -188,42 +188,63 @@ function newCanvas () { function onKeyDown (event) { if (event.altKey === true && event.code === 'ArrowUp') { thisObject.cockpitSpace.toTop() + return } if (event.altKey === true && event.code === 'ArrowDown') { thisObject.cockpitSpace.toBottom() + return } if (event.shiftKey === true && event.code === 'ArrowLeft') { canvas.chartSpace.oneScreenLeft() + return } if (event.shiftKey === true && event.code === 'ArrowRight') { canvas.chartSpace.oneScreenRight() + return } if (event.shiftKey === true && event.code === 'ArrowUp') { canvas.chartSpace.oneScreenUp() + return } if (event.shiftKey === true && event.code === 'ArrowDown') { canvas.chartSpace.oneScreenDown() + return } if (event.ctrlKey === true && event.code === 'ArrowLeft') { canvas.floatingSpace.oneScreenLeft() + return } if (event.ctrlKey === true && event.code === 'ArrowRight') { canvas.floatingSpace.oneScreenRight() + return } if (event.ctrlKey === true && event.code === 'ArrowUp') { canvas.floatingSpace.oneScreenUp() + return } if (event.ctrlKey === true && event.code === 'ArrowDown') { canvas.floatingSpace.oneScreenDown() + return + } + + if (event.ctrlKey === true) { + if (event.keyCode > 52 && event.keyCode < 100) { + let nodeOnFocus = canvas.strategySpace.workspace.getNodeThatIsOnFocus() + if (nodeOnFocus !== undefined) { + nodeOnFocus.payload.uiObject.shortcutKey = event.code + nodeOnFocus.payload.uiObject.setValue('Shortcut Key: Ctrl + ' + event.code) + } + } + return } } From 24148d0d8d4b89473729bc3c2280a54ba4ac2d96 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Mon, 14 Oct 2019 16:29:54 +0200 Subject: [PATCH 10/48] Setting shortcuts working --- Canvas.js | 24 ++++++++++++++++++++---- StrategySpace/Workspace/Workspace.js | 5 +++-- 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/Canvas.js b/Canvas.js index ae6478c70..98b7d1a56 100644 --- a/Canvas.js +++ b/Canvas.js @@ -186,6 +186,7 @@ function newCanvas () { } function onKeyDown (event) { + event.preventDefault() if (event.altKey === true && event.code === 'ArrowUp') { thisObject.cockpitSpace.toTop() return @@ -237,12 +238,27 @@ function newCanvas () { } if (event.ctrlKey === true) { - if (event.keyCode > 52 && event.keyCode < 100) { + if (event.keyCode >= 65 && event.keyCode <= 90) { let nodeOnFocus = canvas.strategySpace.workspace.getNodeThatIsOnFocus() - if (nodeOnFocus !== undefined) { - nodeOnFocus.payload.uiObject.shortcutKey = event.code - nodeOnFocus.payload.uiObject.setValue('Shortcut Key: Ctrl + ' + event.code) + if (nodeOnFocus === undefined) { + return } + + let nodeUsingThisKey = canvas.strategySpace.workspace.getNodeByShortcutKey(event.key) + + if (nodeUsingThisKey !== undefined) { + if (nodeUsingThisKey.id === nodeOnFocus.id) { + nodeOnFocus.payload.uiObject.shortcutKey = '' + nodeOnFocus.payload.uiObject.setValue('Shortcut Key Removed ') + return + } else { + nodeOnFocus.payload.uiObject.setErrorMessage('Key already in use by ' + nodeUsingThisKey.type + ' ' + nodeUsingThisKey.name) + return + } + } + + nodeOnFocus.payload.uiObject.shortcutKey = event.key + nodeOnFocus.payload.uiObject.setValue('Shortcut Key: Ctrl + ' + event.key) } return } diff --git a/StrategySpace/Workspace/Workspace.js b/StrategySpace/Workspace/Workspace.js index 2025e408d..d22b2a769 100644 --- a/StrategySpace/Workspace/Workspace.js +++ b/StrategySpace/Workspace/Workspace.js @@ -11,6 +11,7 @@ function newWorkspace () { container: undefined, enabled: false, nodeChildren: undefined, + getNodeThatIsOnFocus: getNodeThatIsOnFocus, getNodeByShortcutKey: getNodeByShortcutKey, getAllTradingEngines: getAllTradingEngines, stopAllRunningTasks: stopAllRunningTasks, @@ -197,7 +198,7 @@ function newWorkspace () { let rootNode = thisObject.workspaceNode.rootNodes[i] if (rootNode.type === 'Definition') { let definition = rootNode - let node = functionLibraryShortcutKeys.getNodeByShortcutKey(searchingKey) + let node = functionLibraryShortcutKeys.getNodeByShortcutKey(rootNode, searchingKey) if (node !== undefined) { return node } } } @@ -208,7 +209,7 @@ function newWorkspace () { let rootNode = thisObject.workspaceNode.rootNodes[i] if (rootNode.type === 'Definition') { let definition = rootNode - let node = functionLibraryOnFocus.getNodeThatIsOnFocus() + let node = functionLibraryOnFocus.getNodeThatIsOnFocus(rootNode) if (node !== undefined) { return node } } } From adb506d4341262e1b8e3ffdb387ad5855f64d9a6 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Tue, 15 Oct 2019 13:26:31 +0200 Subject: [PATCH 11/48] Positioning Shortcut keys working --- Canvas.js | 9 ++++++--- Spaces/ChartSpace.js | 4 ++-- Spaces/FloatingSpace.js | 12 ++++++++++++ 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/Canvas.js b/Canvas.js index 98b7d1a56..8eae9a667 100644 --- a/Canvas.js +++ b/Canvas.js @@ -186,7 +186,6 @@ function newCanvas () { } function onKeyDown (event) { - event.preventDefault() if (event.altKey === true && event.code === 'ArrowUp') { thisObject.cockpitSpace.toTop() return @@ -239,13 +238,17 @@ function newCanvas () { if (event.ctrlKey === true) { if (event.keyCode >= 65 && event.keyCode <= 90) { + event.preventDefault() let nodeOnFocus = canvas.strategySpace.workspace.getNodeThatIsOnFocus() + let nodeUsingThisKey = canvas.strategySpace.workspace.getNodeByShortcutKey(event.key) + if (nodeOnFocus === undefined) { + /* Then we displace the whole workspace to center it at the node using this key */ + nodeUsingThisKey = canvas.floatingSpace.positionAtNode(nodeUsingThisKey) return } - let nodeUsingThisKey = canvas.strategySpace.workspace.getNodeByShortcutKey(event.key) - + /* If there is a node in focus, we try to assign the key to it. */ if (nodeUsingThisKey !== undefined) { if (nodeUsingThisKey.id === nodeOnFocus.id) { nodeOnFocus.payload.uiObject.shortcutKey = '' diff --git a/Spaces/ChartSpace.js b/Spaces/ChartSpace.js index a6faba6a5..763247dce 100644 --- a/Spaces/ChartSpace.js +++ b/Spaces/ChartSpace.js @@ -137,7 +137,7 @@ function newChartSpace () { function oneScreenLeft () { let displaceVector = { - x: -browserCanvas.width * PERCENTAGE_OF_SCREEN_FOR_DISPLACEMENT / 100, + x: browserCanvas.width * PERCENTAGE_OF_SCREEN_FOR_DISPLACEMENT / 100, y: 0 } @@ -146,7 +146,7 @@ function newChartSpace () { function oneScreenRight () { let displaceVector = { - x: +browserCanvas.width * PERCENTAGE_OF_SCREEN_FOR_DISPLACEMENT / 100, + x: -browserCanvas.width * PERCENTAGE_OF_SCREEN_FOR_DISPLACEMENT / 100, y: 0 } diff --git a/Spaces/FloatingSpace.js b/Spaces/FloatingSpace.js index f87dcd5da..f4f0f9574 100644 --- a/Spaces/FloatingSpace.js +++ b/Spaces/FloatingSpace.js @@ -17,6 +17,7 @@ function newFloatingSpace () { oneScreenDown: oneScreenDown, oneScreenLeft: oneScreenLeft, oneScreenRight: oneScreenRight, + positionAtNode: positionAtNode, fitIntoVisibleArea: fitIntoVisibleArea, isThisPointVisible: isThisPointVisible, makeVisible: makeVisible, @@ -135,6 +136,17 @@ function newFloatingSpace () { thisObject.container.displace(displaceVector) } + function positionAtNode (node) { + let position = thisObject.container.frame.frameThisPoint(node.payload.position) + + let displaceVector = { + x: browserCanvas.width / 2 - position.x, + y: browserCanvas.height / 2 - position.y + } + + thisObject.container.displace(displaceVector) + } + function isThisPointVisible (point) { if (point.x > browserCanvas.width) { return false From e07a2f9263e49c9a61b97d44a95f53081a6a2afc Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Wed, 16 Oct 2019 18:43:22 +0200 Subject: [PATCH 12/48] Bug fixed --- FloatingSpace/StrategyPartConstructor.js | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/FloatingSpace/StrategyPartConstructor.js b/FloatingSpace/StrategyPartConstructor.js index 91c3807e0..57186cfdf 100644 --- a/FloatingSpace/StrategyPartConstructor.js +++ b/FloatingSpace/StrategyPartConstructor.js @@ -69,15 +69,14 @@ function newStrategyPartConstructor () { setFloatingObjectBasicProperties(floatingObject, payload) - payload.node.savedPayload = undefined - - floatingLayer.addFloatingObject(floatingObject) - if (payload.node.savedPayload !== undefined) { if (payload.node.savedPayload.uiObject !== undefined) { payload.uiObject.shortcutKey = payload.node.savedPayload.uiObject.shortcutKey } } + payload.node.savedPayload = undefined + + floatingLayer.addFloatingObject(floatingObject) return } From 67c9b06cd6dc8dc7db54969e22443b2dd1cd3562 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Wed, 16 Oct 2019 19:16:11 +0200 Subject: [PATCH 13/48] Showing id when Period key pressed --- Canvas.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Canvas.js b/Canvas.js index 8eae9a667..98358cc03 100644 --- a/Canvas.js +++ b/Canvas.js @@ -236,6 +236,14 @@ function newCanvas () { return } + if (event.code === 'Period') { + let nodeOnFocus = canvas.strategySpace.workspace.getNodeThatIsOnFocus() + if (nodeOnFocus !== undefined) { + nodeOnFocus.payload.uiObject.setValue('Id: ' + nodeOnFocus.id) + return + } + } + if (event.ctrlKey === true) { if (event.keyCode >= 65 && event.keyCode <= 90) { event.preventDefault() From 84fd943174ae0bbed19495504a72802a5ee7e8c8 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Wed, 16 Oct 2019 19:44:59 +0200 Subject: [PATCH 14/48] Session to Panels --- ChartsSpace/PlottersManager.js | 2 +- Panels/ProductCard.js | 2 +- Spaces/PanelsSpace.js | 3 ++- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/ChartsSpace/PlottersManager.js b/ChartsSpace/PlottersManager.js index f4b5daa07..8b9fb6a7c 100644 --- a/ChartsSpace/PlottersManager.js +++ b/ChartsSpace/PlottersManager.js @@ -200,7 +200,7 @@ function newPlottersManager () { panelCodeName: panelConfig.codeName } let panelOwner = exchange + ' ' + market.assetB + '/' + market.assetA - let plotterPanelHandle = canvas.panelsSpace.createNewPanel('Plotter Panel', parameters, panelOwner) + let plotterPanelHandle = canvas.panelsSpace.createNewPanel('Plotter Panel', parameters, panelOwner, pProductCard.session) let plotterPanel = canvas.panelsSpace.getPanel(plotterPanelHandle, panelOwner) /* Connect Panel to the Plotter via an Event. */ if (panelConfig.event !== undefined) { diff --git a/Panels/ProductCard.js b/Panels/ProductCard.js index 251e40b47..a44786c07 100644 --- a/Panels/ProductCard.js +++ b/Panels/ProductCard.js @@ -649,7 +649,7 @@ function newProductCard () { if (thisObject.session !== undefined) { const MAX_LABEL_LENGTH = 30 - if (thisObject.session.name > MAX_LABEL_LENGTH) { + if (thisObject.session.name.length > MAX_LABEL_LENGTH) { label = thisObject.session.name.substring(0, MAX_LABEL_LENGTH) + '...' + ' - ' + label } else { label = thisObject.session.name + ' - ' + label diff --git a/Spaces/PanelsSpace.js b/Spaces/PanelsSpace.js index 677bb486f..34f3d6c13 100644 --- a/Spaces/PanelsSpace.js +++ b/Spaces/PanelsSpace.js @@ -35,7 +35,7 @@ function newPanelsSpace () { } - function createNewPanel (pType, pParameters, pOwner) { + function createNewPanel (pType, pParameters, pOwner, pSession) { let panel switch (pType) { @@ -59,6 +59,7 @@ function newPanelsSpace () { panel = getNewPlotterPanel(pParameters.devTeam, pParameters.plotterCodeName, pParameters.moduleCodeName, pParameters.panelCodeName) panel.fitFunction = canvas.chartSpace.fitIntoVisibleArea panel.container.isVisibleFunction = canvas.chartSpace.isThisPointVisible + panel.session = pSession panel.initialize() break } From a207651eaab248736131e6f38fdd56b79ceb8eb2 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Thu, 17 Oct 2019 08:32:27 +0200 Subject: [PATCH 15/48] Fine tuning --- Panels/ProductCard.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Panels/ProductCard.js b/Panels/ProductCard.js index a44786c07..990f6a76e 100644 --- a/Panels/ProductCard.js +++ b/Panels/ProductCard.js @@ -648,7 +648,7 @@ function newProductCard () { label = thisObject.product.displayName if (thisObject.session !== undefined) { - const MAX_LABEL_LENGTH = 30 + const MAX_LABEL_LENGTH = 20 if (thisObject.session.name.length > MAX_LABEL_LENGTH) { label = thisObject.session.name.substring(0, MAX_LABEL_LENGTH) + '...' + ' - ' + label } else { From 28b5a2dff5a84ea916a3fe7db12d3f47d1e22f03 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Thu, 17 Oct 2019 09:14:01 +0200 Subject: [PATCH 16/48] Editor in Sessions and bug fixed with editor open and shortcut keys --- Canvas.js | 14 +- FloatingSpace/StrategyPartConstructor.js | 112 ++++++++++++-- .../FunctionLibraries/PartsFromNodes.js | 13 +- .../FunctionLibraries/ProtocolNode.js | 145 ++++++++++-------- .../FunctionLibraries/StringifyNode.js | 4 + 5 files changed, 201 insertions(+), 87 deletions(-) diff --git a/Canvas.js b/Canvas.js index 98358cc03..caffa0046 100644 --- a/Canvas.js +++ b/Canvas.js @@ -239,6 +239,11 @@ function newCanvas () { if (event.code === 'Period') { let nodeOnFocus = canvas.strategySpace.workspace.getNodeThatIsOnFocus() if (nodeOnFocus !== undefined) { + if (nodeOnFocus.payload.uiObject.codeEditor !== undefined) { + if (nodeOnFocus.payload.uiObject.codeEditor.visible === true) { + return + } + } nodeOnFocus.payload.uiObject.setValue('Id: ' + nodeOnFocus.id) return } @@ -246,7 +251,6 @@ function newCanvas () { if (event.ctrlKey === true) { if (event.keyCode >= 65 && event.keyCode <= 90) { - event.preventDefault() let nodeOnFocus = canvas.strategySpace.workspace.getNodeThatIsOnFocus() let nodeUsingThisKey = canvas.strategySpace.workspace.getNodeByShortcutKey(event.key) @@ -255,6 +259,14 @@ function newCanvas () { nodeUsingThisKey = canvas.floatingSpace.positionAtNode(nodeUsingThisKey) return } + if (nodeOnFocus.payload.uiObject.codeEditor !== undefined) { + if (nodeOnFocus.payload.uiObject.codeEditor.visible === true) { + return + } + } + + /* From here we prevent the default behaviour */ + event.preventDefault() /* If there is a node in focus, we try to assign the key to it. */ if (nodeUsingThisKey !== undefined) { diff --git a/FloatingSpace/StrategyPartConstructor.js b/FloatingSpace/StrategyPartConstructor.js index 57186cfdf..b45e3151e 100644 --- a/FloatingSpace/StrategyPartConstructor.js +++ b/FloatingSpace/StrategyPartConstructor.js @@ -1022,6 +1022,11 @@ function newStrategyPartConstructor () { break } case 'Backtesting Session': { + strategyPart.codeEditor = newCodeEditor() + strategyPart.codeEditor.isVisibleFunction = strategyPart.isVisibleFunction + strategyPart.codeEditor.initialize() + strategyPart.codeEditor.container.connectToParent(strategyPart.container, false, false, true, true, false, false, false, false) + addLeftIcons(menuItemsInitialValues, floatingObject) menuItemsInitialValues.push( { @@ -1043,7 +1048,7 @@ function newStrategyPartConstructor () { rawRadius: 8, targetRadius: 0, currentRadius: 0, - angle: -60 + angle: -70 } ) menuItemsInitialValues.push( @@ -1056,7 +1061,22 @@ function newStrategyPartConstructor () { rawRadius: 8, targetRadius: 0, currentRadius: 0, - angle: -20 + angle: -30 + } + ) + menuItemsInitialValues.push( + { + action: 'Edit Session', + actionFunction: strategyPart.codeEditor.activate, + label: 'Edit Session', + visible: true, + iconPathOn: 'html', + iconPathOff: 'html', + rawRadius: 8, + targetRadius: 0, + currentRadius: 0, + angle: 0, + dontShowAtFullscreen: true } ) menuItemsInitialValues.push( @@ -1072,7 +1092,7 @@ function newStrategyPartConstructor () { rawRadius: 8, targetRadius: 0, currentRadius: 0, - angle: 20 + angle: 30 } ) menuItemsInitialValues.push( @@ -1086,12 +1106,17 @@ function newStrategyPartConstructor () { rawRadius: 8, targetRadius: 0, currentRadius: 0, - angle: 60 + angle: 70 } ) break } case 'Live Trading Session': { + strategyPart.codeEditor = newCodeEditor() + strategyPart.codeEditor.isVisibleFunction = strategyPart.isVisibleFunction + strategyPart.codeEditor.initialize() + strategyPart.codeEditor.container.connectToParent(strategyPart.container, false, false, true, true, false, false, false, false) + addLeftIcons(menuItemsInitialValues, floatingObject) menuItemsInitialValues.push( { @@ -1113,7 +1138,7 @@ function newStrategyPartConstructor () { rawRadius: 8, targetRadius: 0, currentRadius: 0, - angle: -60 + angle: -70 } ) menuItemsInitialValues.push( @@ -1126,9 +1151,24 @@ function newStrategyPartConstructor () { rawRadius: 8, targetRadius: 0, currentRadius: 0, - angle: -20 + angle: -30 } ) + menuItemsInitialValues.push( + { + action: 'Edit Session', + actionFunction: strategyPart.codeEditor.activate, + label: 'Edit Session', + visible: true, + iconPathOn: 'html', + iconPathOff: 'html', + rawRadius: 8, + targetRadius: 0, + currentRadius: 0, + angle: 0, + dontShowAtFullscreen: true + } + ) menuItemsInitialValues.push( { action: 'Delete Live Trading Session', @@ -1142,7 +1182,7 @@ function newStrategyPartConstructor () { rawRadius: 8, targetRadius: 0, currentRadius: 0, - angle: 20 + angle: 30 } ) menuItemsInitialValues.push( @@ -1156,12 +1196,17 @@ function newStrategyPartConstructor () { rawRadius: 8, targetRadius: 0, currentRadius: 0, - angle: 60 + angle: 70 } ) break } case 'Fordward Testing Session': { + strategyPart.codeEditor = newCodeEditor() + strategyPart.codeEditor.isVisibleFunction = strategyPart.isVisibleFunction + strategyPart.codeEditor.initialize() + strategyPart.codeEditor.container.connectToParent(strategyPart.container, false, false, true, true, false, false, false, false) + addLeftIcons(menuItemsInitialValues, floatingObject) menuItemsInitialValues.push( { @@ -1183,7 +1228,7 @@ function newStrategyPartConstructor () { rawRadius: 8, targetRadius: 0, currentRadius: 0, - angle: -60 + angle: -70 } ) menuItemsInitialValues.push( @@ -1196,9 +1241,24 @@ function newStrategyPartConstructor () { rawRadius: 8, targetRadius: 0, currentRadius: 0, - angle: -20 + angle: -30 } ) + menuItemsInitialValues.push( + { + action: 'Edit Session', + actionFunction: strategyPart.codeEditor.activate, + label: 'Edit Session', + visible: true, + iconPathOn: 'html', + iconPathOff: 'html', + rawRadius: 8, + targetRadius: 0, + currentRadius: 0, + angle: 0, + dontShowAtFullscreen: true + } + ) menuItemsInitialValues.push( { action: 'Delete Fordward Testing Session', @@ -1212,7 +1272,7 @@ function newStrategyPartConstructor () { rawRadius: 8, targetRadius: 0, currentRadius: 0, - angle: 20 + angle: 30 } ) menuItemsInitialValues.push( @@ -1226,12 +1286,17 @@ function newStrategyPartConstructor () { rawRadius: 8, targetRadius: 0, currentRadius: 0, - angle: 60 + angle: 70 } ) break } case 'Paper Trading Session': { + strategyPart.codeEditor = newCodeEditor() + strategyPart.codeEditor.isVisibleFunction = strategyPart.isVisibleFunction + strategyPart.codeEditor.initialize() + strategyPart.codeEditor.container.connectToParent(strategyPart.container, false, false, true, true, false, false, false, false) + addLeftIcons(menuItemsInitialValues, floatingObject) menuItemsInitialValues.push( { @@ -1253,7 +1318,7 @@ function newStrategyPartConstructor () { rawRadius: 8, targetRadius: 0, currentRadius: 0, - angle: -60 + angle: -70 } ) menuItemsInitialValues.push( @@ -1266,9 +1331,24 @@ function newStrategyPartConstructor () { rawRadius: 8, targetRadius: 0, currentRadius: 0, - angle: -20 + angle: -30 } ) + menuItemsInitialValues.push( + { + action: 'Edit Session', + actionFunction: strategyPart.codeEditor.activate, + label: 'Edit Session', + visible: true, + iconPathOn: 'html', + iconPathOff: 'html', + rawRadius: 8, + targetRadius: 0, + currentRadius: 0, + angle: 0, + dontShowAtFullscreen: true + } + ) menuItemsInitialValues.push( { action: 'Delete Paper Trading Session', @@ -1282,7 +1362,7 @@ function newStrategyPartConstructor () { rawRadius: 8, targetRadius: 0, currentRadius: 0, - angle: 20 + angle: 30 } ) menuItemsInitialValues.push( @@ -1296,7 +1376,7 @@ function newStrategyPartConstructor () { rawRadius: 8, targetRadius: 0, currentRadius: 0, - angle: 60 + angle: 70 } ) break diff --git a/StrategySpace/Workspace/FunctionLibraries/PartsFromNodes.js b/StrategySpace/Workspace/FunctionLibraries/PartsFromNodes.js index 980432664..3d0ac7844 100644 --- a/StrategySpace/Workspace/FunctionLibraries/PartsFromNodes.js +++ b/StrategySpace/Workspace/FunctionLibraries/PartsFromNodes.js @@ -600,6 +600,7 @@ function newPartsFromNodes () { function addProcess (node) { let process = { + name: 'New Process', code: '{}' } @@ -629,7 +630,8 @@ function newPartsFromNodes () { function addBacktestingSession (node) { if (node.session === undefined) { node.session = { - name: 'New Backtesting Session' + name: 'New Backtesting Session', + code: '{}' } createPart('Backtesting Session', '', node.session, node, node) } @@ -640,7 +642,8 @@ function newPartsFromNodes () { function addLiveTradingSession (node) { if (node.session === undefined) { node.session = { - name: 'New Live Trading Session' + name: 'New Live Trading Session', + code: '{}' } createPart('Live Trading Session', '', node.session, node, node) } @@ -651,7 +654,8 @@ function newPartsFromNodes () { function addFordwardTestingSession (node) { if (node.session === undefined) { node.session = { - name: 'New Fordward Testing Session' + name: 'New Fordward Testing Session', + code: '{}' } createPart('Fordward Testing Session', '', node.session, node, node) } @@ -662,7 +666,8 @@ function newPartsFromNodes () { function addPaperTradingSession (node) { if (node.session === undefined) { node.session = { - name: 'New Paper Trading Session' + name: 'New Paper Trading Session', + code: '{}' } createPart('Paper Trading Session', '', node.session, node, node) } diff --git a/StrategySpace/Workspace/FunctionLibraries/ProtocolNode.js b/StrategySpace/Workspace/FunctionLibraries/ProtocolNode.js index 4b52ac24c..184efe7c1 100644 --- a/StrategySpace/Workspace/FunctionLibraries/ProtocolNode.js +++ b/StrategySpace/Workspace/FunctionLibraries/ProtocolNode.js @@ -4,7 +4,7 @@ function newProtocolNode () { } return thisObject - function getProtocolNode (node, removePersonalData, parseJSONStrings, includeIds) { + function getProtocolNode (node, removePersonalData, parseCode, includeIds) { if (node === undefined) { return } switch (node.type) { case 'Code': @@ -26,7 +26,7 @@ function newProtocolNode () { type: node.type, subType: node.subType, name: node.name, - code: getProtocolNode(node.code, removePersonalData, parseJSONStrings, includeIds) + code: getProtocolNode(node.code, removePersonalData, parseCode, includeIds) } if (includeIds) { condition.id = node.id @@ -42,7 +42,7 @@ function newProtocolNode () { } for (let m = 0; m < node.conditions.length; m++) { - let condition = getProtocolNode(node.conditions[m], removePersonalData, parseJSONStrings, includeIds) + let condition = getProtocolNode(node.conditions[m], removePersonalData, parseCode, includeIds) situation.conditions.push(condition) } if (includeIds) { @@ -72,7 +72,7 @@ function newProtocolNode () { situations: [] } for (let m = 0; m < node.situations.length; m++) { - let situation = getProtocolNode(node.situations[m], removePersonalData, parseJSONStrings, includeIds) + let situation = getProtocolNode(node.situations[m], removePersonalData, parseCode, includeIds) event.situations.push(situation) } if (includeIds) { @@ -85,8 +85,8 @@ function newProtocolNode () { type: node.type, subType: node.subType, name: node.name, - formula: getProtocolNode(node.formula, removePersonalData, parseJSONStrings, includeIds), - nextPhaseEvent: getProtocolNode(node.nextPhaseEvent, removePersonalData, parseJSONStrings, includeIds) + formula: getProtocolNode(node.formula, removePersonalData, parseCode, includeIds), + nextPhaseEvent: getProtocolNode(node.nextPhaseEvent, removePersonalData, parseCode, includeIds) } if (includeIds) { phase.id = node.id @@ -102,7 +102,7 @@ function newProtocolNode () { } for (let m = 0; m < node.phases.length; m++) { - let phase = getProtocolNode(node.phases[m], removePersonalData, parseJSONStrings, includeIds) + let phase = getProtocolNode(node.phases[m], removePersonalData, parseCode, includeIds) stop.phases.push(phase) } if (includeIds) { @@ -119,7 +119,7 @@ function newProtocolNode () { } for (let m = 0; m < node.phases.length; m++) { - let phase = getProtocolNode(node.phases[m], removePersonalData, parseJSONStrings, includeIds) + let phase = getProtocolNode(node.phases[m], removePersonalData, parseCode, includeIds) takeProfit.phases.push(phase) } if (includeIds) { @@ -136,7 +136,7 @@ function newProtocolNode () { } for (let m = 0; m < node.situations.length; m++) { - let situation = getProtocolNode(node.situations[m], removePersonalData, parseJSONStrings, includeIds) + let situation = getProtocolNode(node.situations[m], removePersonalData, parseCode, includeIds) event.situations.push(situation) } if (includeIds) { @@ -153,7 +153,7 @@ function newProtocolNode () { } for (let m = 0; m < node.situations.length; m++) { - let situation = getProtocolNode(node.situations[m], removePersonalData, parseJSONStrings, includeIds) + let situation = getProtocolNode(node.situations[m], removePersonalData, parseCode, includeIds) event.situations.push(situation) } if (includeIds) { @@ -170,7 +170,7 @@ function newProtocolNode () { } for (let m = 0; m < node.situations.length; m++) { - let situation = getProtocolNode(node.situations[m], removePersonalData, parseJSONStrings, includeIds) + let situation = getProtocolNode(node.situations[m], removePersonalData, parseCode, includeIds) event.situations.push(situation) } if (includeIds) { @@ -183,10 +183,10 @@ function newProtocolNode () { type: node.type, subType: node.subType, name: node.name, - stopLoss: getProtocolNode(node.stopLoss, removePersonalData, parseJSONStrings, includeIds), - takeProfit: getProtocolNode(node.takeProfit, removePersonalData, parseJSONStrings, includeIds), - positionSize: getProtocolNode(node.positionSize, removePersonalData, parseJSONStrings, includeIds), - positionRate: getProtocolNode(node.positionRate, removePersonalData, parseJSONStrings, includeIds) + stopLoss: getProtocolNode(node.stopLoss, removePersonalData, parseCode, includeIds), + takeProfit: getProtocolNode(node.takeProfit, removePersonalData, parseCode, includeIds), + positionSize: getProtocolNode(node.positionSize, removePersonalData, parseCode, includeIds), + positionRate: getProtocolNode(node.positionRate, removePersonalData, parseCode, includeIds) } if (includeIds) { object.id = node.id @@ -220,7 +220,7 @@ function newProtocolNode () { type: node.type, subType: node.subType, name: node.name, - formula: getProtocolNode(node.formula, removePersonalData, parseJSONStrings, includeIds) + formula: getProtocolNode(node.formula, removePersonalData, parseCode, includeIds) } if (includeIds) { object.id = node.id @@ -232,7 +232,7 @@ function newProtocolNode () { type: node.type, subType: node.subType, name: node.name, - formula: getProtocolNode(node.formula, removePersonalData, parseJSONStrings, includeIds) + formula: getProtocolNode(node.formula, removePersonalData, parseCode, includeIds) } if (includeIds) { object.id = node.id @@ -244,9 +244,9 @@ function newProtocolNode () { type: node.type, subType: node.subType, name: node.name, - triggerOn: getProtocolNode(node.triggerOn, removePersonalData, parseJSONStrings, includeIds), - triggerOff: getProtocolNode(node.triggerOff, removePersonalData, parseJSONStrings, includeIds), - takePosition: getProtocolNode(node.takePosition, removePersonalData, parseJSONStrings, includeIds) + triggerOn: getProtocolNode(node.triggerOn, removePersonalData, parseCode, includeIds), + triggerOff: getProtocolNode(node.triggerOff, removePersonalData, parseCode, includeIds), + takePosition: getProtocolNode(node.takePosition, removePersonalData, parseCode, includeIds) } if (includeIds) { stage.id = node.id @@ -258,8 +258,8 @@ function newProtocolNode () { type: node.type, subType: node.subType, name: node.name, - initialDefinition: getProtocolNode(node.initialDefinition, removePersonalData, parseJSONStrings, includeIds), - openExecution: getProtocolNode(node.openExecution, removePersonalData, parseJSONStrings, includeIds) + initialDefinition: getProtocolNode(node.initialDefinition, removePersonalData, parseCode, includeIds), + openExecution: getProtocolNode(node.openExecution, removePersonalData, parseCode, includeIds) } if (includeIds) { stage.id = node.id @@ -271,8 +271,8 @@ function newProtocolNode () { type: node.type, subType: node.subType, name: node.name, - stopLoss: getProtocolNode(node.stopLoss, removePersonalData, parseJSONStrings, includeIds), - takeProfit: getProtocolNode(node.takeProfit, removePersonalData, parseJSONStrings, includeIds) + stopLoss: getProtocolNode(node.stopLoss, removePersonalData, parseCode, includeIds), + takeProfit: getProtocolNode(node.takeProfit, removePersonalData, parseCode, includeIds) } if (includeIds) { stage.id = node.id @@ -284,7 +284,7 @@ function newProtocolNode () { type: node.type, subType: node.subType, name: node.name, - closeExecution: getProtocolNode(node.closeExecution, removePersonalData, parseJSONStrings, includeIds) + closeExecution: getProtocolNode(node.closeExecution, removePersonalData, parseCode, includeIds) } if (includeIds) { stage.id = node.id @@ -296,10 +296,10 @@ function newProtocolNode () { type: node.type, subType: node.subType, name: node.name, - triggerStage: getProtocolNode(node.triggerStage, removePersonalData, parseJSONStrings, includeIds), - openStage: getProtocolNode(node.openStage, removePersonalData, parseJSONStrings, includeIds), - manageStage: getProtocolNode(node.manageStage, removePersonalData, parseJSONStrings, includeIds), - closeStage: getProtocolNode(node.closeStage, removePersonalData, parseJSONStrings, includeIds) + triggerStage: getProtocolNode(node.triggerStage, removePersonalData, parseCode, includeIds), + openStage: getProtocolNode(node.openStage, removePersonalData, parseCode, includeIds), + manageStage: getProtocolNode(node.manageStage, removePersonalData, parseCode, includeIds), + closeStage: getProtocolNode(node.closeStage, removePersonalData, parseCode, includeIds) } if (includeIds) { strategy.id = node.id @@ -371,12 +371,12 @@ function newProtocolNode () { type: node.type, subType: node.subType, name: node.name, - baseAsset: getProtocolNode(node.baseAsset, removePersonalData, parseJSONStrings, includeIds), - timeRange: getProtocolNode(node.timeRange, removePersonalData, parseJSONStrings, includeIds), - timePeriod: getProtocolNode(node.timePeriod, removePersonalData, parseJSONStrings, includeIds), - slippage: getProtocolNode(node.slippage, removePersonalData, parseJSONStrings, includeIds), - feeStructure: getProtocolNode(node.feeStructure, removePersonalData, parseJSONStrings, includeIds), - key: getProtocolNode(node.key, removePersonalData, parseJSONStrings, includeIds) + baseAsset: getProtocolNode(node.baseAsset, removePersonalData, parseCode, includeIds), + timeRange: getProtocolNode(node.timeRange, removePersonalData, parseCode, includeIds), + timePeriod: getProtocolNode(node.timePeriod, removePersonalData, parseCode, includeIds), + slippage: getProtocolNode(node.slippage, removePersonalData, parseCode, includeIds), + feeStructure: getProtocolNode(node.feeStructure, removePersonalData, parseCode, includeIds), + key: getProtocolNode(node.key, removePersonalData, parseCode, includeIds) } if (includeIds) { object.id = node.id @@ -389,11 +389,11 @@ function newProtocolNode () { subType: node.subType, name: node.name, strategies: [], - parameters: getProtocolNode(node.parameters, removePersonalData, parseJSONStrings, includeIds) + parameters: getProtocolNode(node.parameters, removePersonalData, parseCode, includeIds) } for (let m = 0; m < node.strategies.length; m++) { - let strategy = getProtocolNode(node.strategies[m], removePersonalData, parseJSONStrings, includeIds) + let strategy = getProtocolNode(node.strategies[m], removePersonalData, parseCode, includeIds) tradingSystem.strategies.push(strategy) } if (includeIds) { @@ -411,7 +411,7 @@ function newProtocolNode () { } for (let m = 0; m < node.exchangeAccounts.length; m++) { - let exchangeAccount = getProtocolNode(node.exchangeAccounts[m], removePersonalData, parseJSONStrings, includeIds) + let exchangeAccount = getProtocolNode(node.exchangeAccounts[m], removePersonalData, parseCode, includeIds) personalData.exchangeAccounts.push(exchangeAccount) } if (includeIds) { @@ -430,11 +430,11 @@ function newProtocolNode () { } for (let m = 0; m < node.assets.length; m++) { - let asset = getProtocolNode(node.assets[m], removePersonalData, parseJSONStrings, includeIds) + let asset = getProtocolNode(node.assets[m], removePersonalData, parseCode, includeIds) exchangeAccount.assets.push(asset) } for (let m = 0; m < node.keys.length; m++) { - let key = getProtocolNode(node.keys[m], removePersonalData, parseJSONStrings, includeIds) + let key = getProtocolNode(node.keys[m], removePersonalData, parseCode, includeIds) exchangeAccount.keys.push(key) } if (includeIds) { @@ -476,7 +476,7 @@ function newProtocolNode () { } for (let m = 0; m < node.layers.length; m++) { - let layer = getProtocolNode(node.layers[m], removePersonalData, parseJSONStrings, includeIds) + let layer = getProtocolNode(node.layers[m], removePersonalData, parseCode, includeIds) layerManager.layers.push(layer) } if (includeIds) { @@ -505,7 +505,7 @@ function newProtocolNode () { } for (let m = 0; m < node.tasks.length; m++) { - let task = getProtocolNode(node.tasks[m], removePersonalData, parseJSONStrings, includeIds) + let task = getProtocolNode(node.tasks[m], removePersonalData, parseCode, includeIds) taskManager.tasks.push(task) } if (includeIds) { @@ -518,7 +518,7 @@ function newProtocolNode () { type: node.type, subType: node.subType, name: node.name, - bot: getProtocolNode(node.bot, removePersonalData, parseJSONStrings, includeIds) + bot: getProtocolNode(node.bot, removePersonalData, parseCode, includeIds) } if (includeIds) { object.id = node.id @@ -535,10 +535,10 @@ function newProtocolNode () { } for (let m = 0; m < node.processes.length; m++) { - let process = getProtocolNode(node.processes[m], removePersonalData, parseJSONStrings, includeIds) + let process = getProtocolNode(node.processes[m], removePersonalData, parseCode, includeIds) bot.processes.push(process) } - if (parseJSONStrings) { + if (parseCode) { bot.code = JSON.parse(bot.code) } if (includeIds) { @@ -556,10 +556,10 @@ function newProtocolNode () { } for (let m = 0; m < node.processes.length; m++) { - let process = getProtocolNode(node.processes[m], removePersonalData, parseJSONStrings, includeIds) + let process = getProtocolNode(node.processes[m], removePersonalData, parseCode, includeIds) bot.processes.push(process) } - if (parseJSONStrings) { + if (parseCode) { bot.code = JSON.parse(bot.code) } if (includeIds) { @@ -577,10 +577,10 @@ function newProtocolNode () { } for (let m = 0; m < node.processes.length; m++) { - let process = getProtocolNode(node.processes[m], removePersonalData, parseJSONStrings, includeIds) + let process = getProtocolNode(node.processes[m], removePersonalData, parseCode, includeIds) bot.processes.push(process) } - if (parseJSONStrings) { + if (parseCode) { bot.code = JSON.parse(bot.code) } if (includeIds) { @@ -594,9 +594,9 @@ function newProtocolNode () { subType: node.subType, name: node.name, code: node.code, - session: getProtocolNode(node.session, removePersonalData, parseJSONStrings, includeIds) + session: getProtocolNode(node.session, removePersonalData, parseCode, includeIds) } - if (parseJSONStrings) { + if (parseCode) { object.code = JSON.parse(object.code) } if (includeIds) { @@ -610,8 +610,12 @@ function newProtocolNode () { type: node.type, subType: node.subType, name: node.name, - parameters: getProtocolNode(node.parameters, removePersonalData, parseJSONStrings, includeIds), - layerManager: getProtocolNode(node.layerManager, removePersonalData, parseJSONStrings, includeIds) + code: node.code, + parameters: getProtocolNode(node.parameters, removePersonalData, parseCode, includeIds), + layerManager: getProtocolNode(node.layerManager, removePersonalData, parseCode, includeIds) + } + if (parseCode) { + object.code = JSON.parse(object.code) } if (includeIds) { object.id = node.id @@ -624,8 +628,12 @@ function newProtocolNode () { type: node.type, subType: node.subType, name: node.name, - parameters: getProtocolNode(node.parameters, removePersonalData, parseJSONStrings, includeIds), - layerManager: getProtocolNode(node.layerManager, removePersonalData, parseJSONStrings, includeIds) + code: node.code, + parameters: getProtocolNode(node.parameters, removePersonalData, parseCode, includeIds), + layerManager: getProtocolNode(node.layerManager, removePersonalData, parseCode, includeIds) + } + if (parseCode) { + object.code = JSON.parse(object.code) } if (includeIds) { object.id = node.id @@ -638,8 +646,12 @@ function newProtocolNode () { type: node.type, subType: node.subType, name: node.name, - parameters: getProtocolNode(node.parameters, removePersonalData, parseJSONStrings, includeIds), - layerManager: getProtocolNode(node.layerManager, removePersonalData, parseJSONStrings, includeIds) + code: node.code, + parameters: getProtocolNode(node.parameters, removePersonalData, parseCode, includeIds), + layerManager: getProtocolNode(node.layerManager, removePersonalData, parseCode, includeIds) + } + if (parseCode) { + object.code = JSON.parse(object.code) } if (includeIds) { object.id = node.id @@ -652,11 +664,12 @@ function newProtocolNode () { type: node.type, subType: node.subType, name: node.name, - parameters: getProtocolNode(node.parameters, removePersonalData, parseJSONStrings, includeIds), - layerManager: getProtocolNode(node.layerManager, removePersonalData, parseJSONStrings, includeIds) + code: node.code, + parameters: getProtocolNode(node.parameters, removePersonalData, parseCode, includeIds), + layerManager: getProtocolNode(node.layerManager, removePersonalData, parseCode, includeIds) } - if (includeIds) { - object.id = node.id + if (parseCode) { + object.code = JSON.parse(object.code) } if (includeIds) { object.id = node.id @@ -673,7 +686,7 @@ function newProtocolNode () { } if (node.taskManagers !== undefined) { for (let m = 0; m < node.taskManagers.length; m++) { - let taskManager = getProtocolNode(node.taskManagers[m], removePersonalData, parseJSONStrings, includeIds) + let taskManager = getProtocolNode(node.taskManagers[m], removePersonalData, parseCode, includeIds) object.taskManagers.push(taskManager) } } @@ -691,7 +704,7 @@ function newProtocolNode () { } if (node.networkNodes !== undefined) { for (let m = 0; m < node.networkNodes.length; m++) { - let networkNode = getProtocolNode(node.networkNodes[m], removePersonalData, parseJSONStrings, includeIds) + let networkNode = getProtocolNode(node.networkNodes[m], removePersonalData, parseCode, includeIds) object.networkNodes.push(networkNode) } } @@ -705,9 +718,9 @@ function newProtocolNode () { type: node.type, subType: node.subType, name: node.name, - tradingSystem: getProtocolNode(node.tradingSystem, removePersonalData, parseJSONStrings, includeIds), - personalData: getProtocolNode(node.personalData, removePersonalData, parseJSONStrings, includeIds), - network: getProtocolNode(node.network, removePersonalData, parseJSONStrings, includeIds) + tradingSystem: getProtocolNode(node.tradingSystem, removePersonalData, parseCode, includeIds), + personalData: getProtocolNode(node.personalData, removePersonalData, parseCode, includeIds), + network: getProtocolNode(node.network, removePersonalData, parseCode, includeIds) } if (includeIds) { object.id = node.id diff --git a/StrategySpace/Workspace/FunctionLibraries/StringifyNode.js b/StrategySpace/Workspace/FunctionLibraries/StringifyNode.js index b292b7882..ff0d1d6db 100644 --- a/StrategySpace/Workspace/FunctionLibraries/StringifyNode.js +++ b/StrategySpace/Workspace/FunctionLibraries/StringifyNode.js @@ -568,6 +568,7 @@ function newStringifyNode () { type: node.type, subType: node.subType, name: node.name, + code: node.code, parameters: prepareForStringify(node.parameters, removePersonalData), layerManager: prepareForStringify(node.layerManager, removePersonalData), savedPayload: getSavedPayload(node) @@ -580,6 +581,7 @@ function newStringifyNode () { type: node.type, subType: node.subType, name: node.name, + code: node.code, parameters: prepareForStringify(node.parameters, removePersonalData), layerManager: prepareForStringify(node.layerManager, removePersonalData), savedPayload: getSavedPayload(node) @@ -592,6 +594,7 @@ function newStringifyNode () { type: node.type, subType: node.subType, name: node.name, + code: node.code, parameters: prepareForStringify(node.parameters, removePersonalData), layerManager: prepareForStringify(node.layerManager, removePersonalData), savedPayload: getSavedPayload(node) @@ -604,6 +607,7 @@ function newStringifyNode () { type: node.type, subType: node.subType, name: node.name, + code: node.code, parameters: prepareForStringify(node.parameters, removePersonalData), layerManager: prepareForStringify(node.layerManager, removePersonalData), savedPayload: getSavedPayload(node) From 23cc4d52b79816d8208948dcc7fac82466e603d8 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Thu, 17 Oct 2019 10:44:32 +0200 Subject: [PATCH 17/48] Bug Fixed --- Canvas.js | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/Canvas.js b/Canvas.js index caffa0046..1e9188f51 100644 --- a/Canvas.js +++ b/Canvas.js @@ -186,6 +186,15 @@ function newCanvas () { } function onKeyDown (event) { + let nodeOnFocus = canvas.strategySpace.workspace.getNodeThatIsOnFocus() + if (nodeOnFocus !== undefined) { + if (nodeOnFocus.payload.uiObject.codeEditor !== undefined) { + if (nodeOnFocus.payload.uiObject.codeEditor.visible === true) { + return + } + } + } + if (event.altKey === true && event.code === 'ArrowUp') { thisObject.cockpitSpace.toTop() return @@ -237,13 +246,7 @@ function newCanvas () { } if (event.code === 'Period') { - let nodeOnFocus = canvas.strategySpace.workspace.getNodeThatIsOnFocus() if (nodeOnFocus !== undefined) { - if (nodeOnFocus.payload.uiObject.codeEditor !== undefined) { - if (nodeOnFocus.payload.uiObject.codeEditor.visible === true) { - return - } - } nodeOnFocus.payload.uiObject.setValue('Id: ' + nodeOnFocus.id) return } @@ -251,7 +254,6 @@ function newCanvas () { if (event.ctrlKey === true) { if (event.keyCode >= 65 && event.keyCode <= 90) { - let nodeOnFocus = canvas.strategySpace.workspace.getNodeThatIsOnFocus() let nodeUsingThisKey = canvas.strategySpace.workspace.getNodeByShortcutKey(event.key) if (nodeOnFocus === undefined) { @@ -259,11 +261,6 @@ function newCanvas () { nodeUsingThisKey = canvas.floatingSpace.positionAtNode(nodeUsingThisKey) return } - if (nodeOnFocus.payload.uiObject.codeEditor !== undefined) { - if (nodeOnFocus.payload.uiObject.codeEditor.visible === true) { - return - } - } /* From here we prevent the default behaviour */ event.preventDefault() From ee3a45d39709cac0a01d174c836e8aa8a7f5f02b Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Thu, 17 Oct 2019 11:25:08 +0200 Subject: [PATCH 18/48] Excluding title for shortcut keys --- Canvas.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Canvas.js b/Canvas.js index 1e9188f51..3db233a5c 100644 --- a/Canvas.js +++ b/Canvas.js @@ -193,6 +193,11 @@ function newCanvas () { return } } + if (nodeOnFocus.payload.uiObject.partTitle !== undefined) { + if (nodeOnFocus.payload.uiObject.partTitle.editMode === true) { + return + } + } } if (event.altKey === true && event.code === 'ArrowUp') { From 953b3de82b97c49e6fa95240adaddd41d37b4752 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Thu, 17 Oct 2019 17:28:07 +0200 Subject: [PATCH 19/48] New icons, plus MAC Command key --- Canvas.js | 10 +++++----- Spaces/StrategySpace.js | 17 +++++++++++------ 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/Canvas.js b/Canvas.js index 3db233a5c..5d41e1bc4 100644 --- a/Canvas.js +++ b/Canvas.js @@ -230,22 +230,22 @@ function newCanvas () { return } - if (event.ctrlKey === true && event.code === 'ArrowLeft') { + if ((event.ctrlKey === true || event.metaKey === true) && event.code === 'ArrowLeft') { canvas.floatingSpace.oneScreenLeft() return } - if (event.ctrlKey === true && event.code === 'ArrowRight') { + if ((event.ctrlKey === true || event.metaKey === true) && event.code === 'ArrowRight') { canvas.floatingSpace.oneScreenRight() return } - if (event.ctrlKey === true && event.code === 'ArrowUp') { + if ((event.ctrlKey === true || event.metaKey === true) && event.code === 'ArrowUp') { canvas.floatingSpace.oneScreenUp() return } - if (event.ctrlKey === true && event.code === 'ArrowDown') { + if ((event.ctrlKey === true || event.metaKey === true) && event.code === 'ArrowDown') { canvas.floatingSpace.oneScreenDown() return } @@ -257,7 +257,7 @@ function newCanvas () { } } - if (event.ctrlKey === true) { + if ((event.ctrlKey === true || event.metaKey === true)) { if (event.keyCode >= 65 && event.keyCode <= 90) { let nodeUsingThisKey = canvas.strategySpace.workspace.getNodeByShortcutKey(event.key) diff --git a/Spaces/StrategySpace.js b/Spaces/StrategySpace.js index 97631485c..f1d23c5f3 100644 --- a/Spaces/StrategySpace.js +++ b/Spaces/StrategySpace.js @@ -42,14 +42,14 @@ function newStrategySpace () { ['Definition', 'text'], ['Network', 'network'], ['Network Node', 'network-node'], - ['Layer Manager', 'video-player'], + ['Layer Manager', 'layer-manager'], ['Layer', 'attractive'], ['Task Manager', 'task'], ['Task', 'timeline'], - ['Sensor', 'pipette'], - ['Indicator', 'vector'], - ['Trading Engine', 'brainstorming'], - ['Process', 'grid'], + ['Sensor', 'bot-sensor'], + ['Indicator', 'bot-indicator'], + ['Trading Engine', 'trading-engine'], + ['Process', 'process'], ['Backtesting Session', 'session-backtesting'], ['Live Trading Session', 'session-live-trading'], ['Fordward Testing Session', 'session-forward-testing'], @@ -174,7 +174,12 @@ function newStrategySpace () { 'session-backtesting', 'session-forward-testing', 'network', - 'network-node' + 'network-node', + 'trading-engine', + 'layer-manager', + 'process', + 'bot-indicator', + 'bot-sensor' ] for (let i = 0; i < iconsNames.length; i++) { From 5c897dad0eda21a3277443e100404157639b8987 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Thu, 17 Oct 2019 22:19:51 +0200 Subject: [PATCH 20/48] Fixing displacement by keyboar on market files --- ChartsSpace/ViewPort.js | 5 +++-- Spaces/ChartSpace.js | 4 ++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/ChartsSpace/ViewPort.js b/ChartsSpace/ViewPort.js index 40f5154f9..55146cbd0 100644 --- a/ChartsSpace/ViewPort.js +++ b/ChartsSpace/ViewPort.js @@ -149,14 +149,15 @@ function newViewPort () { } } - function displace (displaceVector) { + function displace (displaceVector, recalculate) { offset.x = offset.x + displaceVector.x offset.y = offset.y + displaceVector.y saveObjectState() let event = { - newOffset: offset + newOffset: offset, + recalculate: recalculate } thisObject.eventHandler.raiseEvent('Offset Changed', event) diff --git a/Spaces/ChartSpace.js b/Spaces/ChartSpace.js index 763247dce..226ce4795 100644 --- a/Spaces/ChartSpace.js +++ b/Spaces/ChartSpace.js @@ -141,7 +141,7 @@ function newChartSpace () { y: 0 } - viewPort.displace(displaceVector) + viewPort.displace(displaceVector, true) } function oneScreenRight () { @@ -150,7 +150,7 @@ function newChartSpace () { y: 0 } - viewPort.displace(displaceVector) + viewPort.displace(displaceVector, true) } function fitIntoVisibleArea (point) { From 059b231dd2f88390bb07e157412dd2ed01cef849 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Fri, 18 Oct 2019 12:26:11 +0200 Subject: [PATCH 21/48] new icon --- Spaces/StrategySpace.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Spaces/StrategySpace.js b/Spaces/StrategySpace.js index f1d23c5f3..73acf491d 100644 --- a/Spaces/StrategySpace.js +++ b/Spaces/StrategySpace.js @@ -62,8 +62,8 @@ function newStrategySpace () { ['Trading System', 'analysis'], ['Parameters', 'settings'], ['Base Asset', 'loading'], - ['Time Range', 'chronometer'], - ['Time Period', 'schedule'], + ['Time Range', 'schedule'], + ['Time Period', 'time-period'], ['Slippage', 'support'], ['Fee Structure', 'sitemap'], ['Strategy', 'quality'], @@ -179,7 +179,8 @@ function newStrategySpace () { 'layer-manager', 'process', 'bot-indicator', - 'bot-sensor' + 'bot-sensor', + 'time-period' ] for (let i = 0; i < iconsNames.length; i++) { From 7071e80b0e93ecba621b8b9028d158688017de12 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Fri, 18 Oct 2019 12:57:33 +0200 Subject: [PATCH 22/48] Attacheabiity --- FloatingSpace/StrategyPart.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/FloatingSpace/StrategyPart.js b/FloatingSpace/StrategyPart.js index da5264bee..e921d012b 100644 --- a/FloatingSpace/StrategyPart.js +++ b/FloatingSpace/StrategyPart.js @@ -275,6 +275,18 @@ function newStrategyPart () { compatibleType = '->' + 'Layer Manager' + '->' compatibleSubType = undefined break + case 'Social Bots': + compatibleType = '->' + 'Backtesting Session' + '->' + 'Live Trading Session' + '->' + 'Paper Trading Session' + '->' + 'Fordward Testing Session' + '->' + compatibleSubType = undefined + break + case 'Telegram Bot': + compatibleType = '->' + 'Social Bots' + '->' + compatibleSubType = undefined + break + case 'Announcement': + compatibleType = '->' + 'Telegram Bot' + '->' + 'Trigger On Event' + '->' + 'Trigger Off Event' + '->' + 'Take Position Event' + '->' + compatibleSubType = undefined + break case 'Task Manager': compatibleType = '->' + 'Network Node' + '->' compatibleSubType = undefined From 3b68ddb4205e267c33732fbdc7fb3d32aeb2826b Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Fri, 18 Oct 2019 13:08:37 +0200 Subject: [PATCH 23/48] Menues Definitions ready --- FloatingSpace/StrategyPartConstructor.js | 178 +++++++++++++++++++++++ 1 file changed, 178 insertions(+) diff --git a/FloatingSpace/StrategyPartConstructor.js b/FloatingSpace/StrategyPartConstructor.js index b45e3151e..45ec6037c 100644 --- a/FloatingSpace/StrategyPartConstructor.js +++ b/FloatingSpace/StrategyPartConstructor.js @@ -389,6 +389,172 @@ function newStrategyPartConstructor () { ) break } + case 'Social Bots': { + addLeftIcons(menuItemsInitialValues, floatingObject) + menuItemsInitialValues.push( + { + action: 'Add Telegram Bot', + actionFunction: payload.onMenuItemClick, + label: 'Add Telegram Bot', + visible: true, + relatedStrategyPart: 'Telegram Bot', + rawRadius: 8, + targetRadius: 0, + currentRadius: 0, + angle: -40 + } + ) + menuItemsInitialValues.push( + { + action: 'Delete Social Bots', + askConfirmation: true, + confirmationLabel: 'Confirm to Delete', + actionFunction: payload.onMenuItemClick, + label: 'Delete Social Bots', + visible: true, + iconPathOn: 'delete', + iconPathOff: 'delete', + rawRadius: 8, + targetRadius: 0, + currentRadius: 0, + angle: 0 + } + ) + menuItemsInitialValues.push( + { + action: 'Share', + actionFunction: payload.onMenuItemClick, + label: 'Share', + visible: true, + iconPathOn: 'menu-share', + iconPathOff: 'menu-share', + rawRadius: 8, + targetRadius: 0, + currentRadius: 0, + angle: 40 + } + ) + break + } + case 'Telegram Bot': { + strategyPart.codeEditor = newCodeEditor() + strategyPart.codeEditor.isVisibleFunction = strategyPart.isVisibleFunction + strategyPart.codeEditor.initialize() + strategyPart.codeEditor.container.connectToParent(strategyPart.container, false, false, true, true, false, false, false, false) + addLeftIcons(menuItemsInitialValues, floatingObject) + menuItemsInitialValues.push( + { + action: 'Add Announcement', + actionFunction: payload.onMenuItemClick, + label: 'Add Announcement', + visible: true, + relatedStrategyPart: 'Announcement', + rawRadius: 8, + targetRadius: 0, + currentRadius: 0, + angle: -60 + } + ) + menuItemsInitialValues.push( + { + action: 'Edit Telegram Bot', + actionFunction: strategyPart.codeEditor.activate, + label: 'Edit Telegram Bot', + visible: true, + iconPathOn: 'html', + iconPathOff: 'html', + rawRadius: 8, + targetRadius: 0, + currentRadius: 0, + angle: -20, + dontShowAtFullscreen: true + } + ) + menuItemsInitialValues.push( + { + action: 'Delete Telegram Bot', + askConfirmation: true, + confirmationLabel: 'Confirm to Delete', + actionFunction: payload.onMenuItemClick, + label: 'Delete Telegram Bot', + visible: true, + iconPathOn: 'delete', + iconPathOff: 'delete', + rawRadius: 8, + targetRadius: 0, + currentRadius: 0, + angle: 20 + } + ) + menuItemsInitialValues.push( + { + action: 'Share', + actionFunction: payload.onMenuItemClick, + label: 'Share', + visible: true, + iconPathOn: 'menu-share', + iconPathOff: 'menu-share', + rawRadius: 8, + targetRadius: 0, + currentRadius: 0, + angle: 60 + } + ) + break + } + case 'Announcement': { + strategyPart.codeEditor = newCodeEditor() + strategyPart.codeEditor.isVisibleFunction = strategyPart.isVisibleFunction + strategyPart.codeEditor.initialize() + strategyPart.codeEditor.container.connectToParent(strategyPart.container, false, false, true, true, false, false, false, false) + addLeftIcons(menuItemsInitialValues, floatingObject) + menuItemsInitialValues.push( + { + action: 'Edit Announcement', + actionFunction: strategyPart.codeEditor.activate, + label: 'Edit Announcement', + visible: true, + iconPathOn: 'html', + iconPathOff: 'html', + rawRadius: 8, + targetRadius: 0, + currentRadius: 0, + angle: -40, + dontShowAtFullscreen: true + } + ) + menuItemsInitialValues.push( + { + action: 'Delete Announcement', + askConfirmation: true, + confirmationLabel: 'Confirm to Delete', + actionFunction: payload.onMenuItemClick, + label: 'Delete Announcement', + visible: true, + iconPathOn: 'delete', + iconPathOff: 'delete', + rawRadius: 8, + targetRadius: 0, + currentRadius: 0, + angle: 0 + } + ) + menuItemsInitialValues.push( + { + action: 'Share', + actionFunction: payload.onMenuItemClick, + label: 'Share', + visible: true, + iconPathOn: 'menu-share', + iconPathOff: 'menu-share', + rawRadius: 8, + targetRadius: 0, + currentRadius: 0, + angle: 40 + } + ) + break + } case 'Layer Manager': { addLeftIcons(menuItemsInitialValues, floatingObject) menuItemsInitialValues.push( @@ -2922,6 +3088,18 @@ function newStrategyPartConstructor () { level_1() break } + case 'Social Bots': { + level_3() + break + } + case 'Telegram Bot': { + level_4() + break + } + case 'Announcement': { + level_4() + break + } case 'Layer Manager': { level_3() break From dd35aec5e9003eb7576dd8a08c66f219572eed47 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Fri, 18 Oct 2019 13:10:24 +0200 Subject: [PATCH 24/48] Titles ready --- FloatingSpace/StrategyPartTitle.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/FloatingSpace/StrategyPartTitle.js b/FloatingSpace/StrategyPartTitle.js index 9507b0e70..c397723a3 100644 --- a/FloatingSpace/StrategyPartTitle.js +++ b/FloatingSpace/StrategyPartTitle.js @@ -59,6 +59,16 @@ function newStrategyPartTitle () { case 'Network Node': { break } + case 'Social Bots': { + break + } + case 'Telegram Bot': { + break + } + case 'Announcement': { + thisObject.allwaysVisible = true + break + } case 'Layer Manager': { break } From 8f699a7a9ee0d18791cbc4569c6723394589859e Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Fri, 18 Oct 2019 13:13:00 +0200 Subject: [PATCH 25/48] icons selection --- Spaces/StrategySpace.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Spaces/StrategySpace.js b/Spaces/StrategySpace.js index 73acf491d..608dd3e75 100644 --- a/Spaces/StrategySpace.js +++ b/Spaces/StrategySpace.js @@ -42,6 +42,9 @@ function newStrategySpace () { ['Definition', 'text'], ['Network', 'network'], ['Network Node', 'network-node'], + ['Social Bots', 'support'], + ['Telegram Bot', 'paper-plane'], + ['Announcement', 'promotion'], ['Layer Manager', 'layer-manager'], ['Layer', 'attractive'], ['Task Manager', 'task'], From 378470baf687d8e86ec70942bc58989961951817 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Fri, 18 Oct 2019 13:19:57 +0200 Subject: [PATCH 26/48] Attach / Detach ready --- .../FunctionLibraries/AttachDetach.js | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/StrategySpace/Workspace/FunctionLibraries/AttachDetach.js b/StrategySpace/Workspace/FunctionLibraries/AttachDetach.js index 9c50a3254..43a73a8b5 100644 --- a/StrategySpace/Workspace/FunctionLibraries/AttachDetach.js +++ b/StrategySpace/Workspace/FunctionLibraries/AttachDetach.js @@ -70,6 +70,33 @@ function newAttachDetach () { completeDetachment(node, rootNodes) return } + case 'Social Bots': { + node.payload.parentNode.socialBots = undefined + completeDetachment(node, rootNodes) + return + } + case 'Telegram Bot': { + let payload = node.payload + for (let i = 0; i < payload.parentNode.bots.length; i++) { + let bot = payload.parentNode.bots[i] + if (bot.id === node.id) { + payload.parentNode.bots.splice(i, 1) + } + } + completeDetachment(node, rootNodes) + return + } + case 'Announcement': { + let payload = node.payload + for (let i = 0; i < payload.parentNode.announcements.length; i++) { + let announcement = payload.parentNode.announcements[i] + if (announcement.id === node.id) { + payload.parentNode.announcements.splice(i, 1) + } + } + completeDetachment(node, rootNodes) + return + } case 'Layer Manager': { node.payload.parentNode.layerManager = undefined completeDetachment(node, rootNodes) @@ -347,6 +374,27 @@ function newAttachDetach () { completeAttachment(node, rootNodes) } break + case 'Social Bots': { + node.payload.parentNode = attachToNode + node.payload.chainParent = attachToNode + node.payload.parentNode.socialBots = node + completeAttachment(node, rootNodes) + } + break + case 'Telegram Bot': { + node.payload.parentNode = attachToNode + node.payload.chainParent = attachToNode + node.payload.parentNode.bots.push(node) + completeAttachment(node, rootNodes) + } + break + case 'Announcement': { + node.payload.parentNode = attachToNode + node.payload.chainParent = attachToNode + node.payload.parentNode.announcements.push(node) + completeAttachment(node, rootNodes) + } + break case 'Layer Manager': { node.payload.parentNode = attachToNode node.payload.chainParent = attachToNode From 78cd4a475bdbb3630ac11d3e02ab6851fbf9bbe5 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Fri, 18 Oct 2019 13:26:59 +0200 Subject: [PATCH 27/48] Count Children done --- .../FunctionLibraries/NodeChildren.js | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/StrategySpace/Workspace/FunctionLibraries/NodeChildren.js b/StrategySpace/Workspace/FunctionLibraries/NodeChildren.js index f126e5105..a776a8d7d 100644 --- a/StrategySpace/Workspace/FunctionLibraries/NodeChildren.js +++ b/StrategySpace/Workspace/FunctionLibraries/NodeChildren.js @@ -17,6 +17,15 @@ function newNodeChildren () { case 'Network Node': { return countChildrenNetworkNode(parentNode, childNode) } + case 'Social Bots': { + return countChildrenSocialBots(parentNode, childNode) + } + case 'Telegram Bot': { + return countChildrenTelegramBot(parentNode, childNode) + } + case 'Announcement': { + return countChildrenAnnouncement(parentNode, childNode) + } case 'Layer Manager': { return countChildrenLayerManager(parentNode, childNode) } @@ -215,6 +224,46 @@ function newNodeChildren () { return response } + function countChildrenSocialBots (parentNode, childNode) { + let response = { + childrenCount: 0, + childIndex: undefined + } + + for (let i = 0; i < parentNode.bots.length; i++) { + let child = parentNode.bots[i] + response.childrenCount++ + if (child.id === childNode.id) { + response.childIndex = response.childrenCount + } + } + return response + } + + function countChildrenTelegramBot (parentNode, childNode) { + let response = { + childrenCount: 0, + childIndex: undefined + } + + for (let i = 0; i < parentNode.announcements.length; i++) { + let child = parentNode.announcements[i] + response.childrenCount++ + if (child.id === childNode.id) { + response.childIndex = response.childrenCount + } + } + return response + } + + function countChildrenAnnouncement (parentNode, childNode) { + let response = { + childrenCount: 0, + childIndex: undefined + } + return response + } + function countChildrenLayerManager (parentNode, childNode) { let response = { childrenCount: 0, From ea6dc80a99763e8a37aacb441408ad3462309cdb Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Fri, 18 Oct 2019 13:47:26 +0200 Subject: [PATCH 28/48] Deleting done --- FloatingSpace/StrategyPart.js | 2 +- FloatingSpace/StrategyPartConstructor.js | 2 +- .../FunctionLibraries/NodeDeleter.js | 86 +++++++++++++++++++ 3 files changed, 88 insertions(+), 2 deletions(-) diff --git a/FloatingSpace/StrategyPart.js b/FloatingSpace/StrategyPart.js index e921d012b..092aa0e1b 100644 --- a/FloatingSpace/StrategyPart.js +++ b/FloatingSpace/StrategyPart.js @@ -284,7 +284,7 @@ function newStrategyPart () { compatibleSubType = undefined break case 'Announcement': - compatibleType = '->' + 'Telegram Bot' + '->' + 'Trigger On Event' + '->' + 'Trigger Off Event' + '->' + 'Take Position Event' + '->' + compatibleType = '->' + 'Telegram Bot' + '->' + 'Trigger On Event' + '->' + 'Trigger Off Event' + '->' + 'Take Position Event' + '->' + 'Next Phase Event' + '->' compatibleSubType = undefined break case 'Task Manager': diff --git a/FloatingSpace/StrategyPartConstructor.js b/FloatingSpace/StrategyPartConstructor.js index 45ec6037c..dc42ece18 100644 --- a/FloatingSpace/StrategyPartConstructor.js +++ b/FloatingSpace/StrategyPartConstructor.js @@ -472,7 +472,7 @@ function newStrategyPartConstructor () { ) menuItemsInitialValues.push( { - action: 'Delete Telegram Bot', + action: 'Delete Social Bot', askConfirmation: true, confirmationLabel: 'Confirm to Delete', actionFunction: payload.onMenuItemClick, diff --git a/StrategySpace/Workspace/FunctionLibraries/NodeDeleter.js b/StrategySpace/Workspace/FunctionLibraries/NodeDeleter.js index 12d21ef71..4bf3d9ad1 100644 --- a/StrategySpace/Workspace/FunctionLibraries/NodeDeleter.js +++ b/StrategySpace/Workspace/FunctionLibraries/NodeDeleter.js @@ -3,6 +3,9 @@ function newNodeDeleter () { deleteDefinition: deleteDefinition, deleteNetwork: deleteNetwork, deleteNetworkNode: deleteNetworkNode, + deleteSocialBots: deleteSocialBots, + deleteSocialBot: deleteTelegramBot, + deleteAnnouncement: deleteAnnouncement, deleteLayerManager: deleteLayerManager, deleteLayer: deleteLayer, deleteTaskManager: deleteTaskManager, @@ -70,6 +73,18 @@ function newNodeDeleter () { deleteNetworkNode(rootNode, rootNodes) break } + case 'Social Bots': { + deleteSocialBots(rootNode, rootNodes) + break + } + case 'Telegram Bot': { + deleteSocialBot(rootNode, rootNodes) + break + } + case 'Announcement': { + deleteAnnouncement(rootNode, rootNodes) + break + } case 'Layer Manager': { deleteLayerManager(rootNode, rootNodes) break @@ -326,6 +341,56 @@ function newNodeDeleter () { cleanNode(node) } + function deleteSocialBots (node, rootNodes) { + let payload = node.payload + if (payload.parentNode !== undefined) { + payload.parentNode.socialBots = undefined + } + if (node.bots !== undefined) { + while (node.bots.length > 0) { + deleteSocialBot(node.bots[0], rootNodes) + } + } + completeDeletion(node, rootNodes) + destroyPart(node) + cleanNode(node) + } + + function deleteSocialBot (node, rootNodes) { + let payload = node.payload + if (payload.parentNode !== undefined) { + for (let j = 0; j < payload.parentNode.bots.length; j++) { + let bot = payload.parentNode.bots[j] + if (bot.id === node.id) { + payload.parentNode.bots.splice(j, 1) + } + } + } + if (node.announcements !== undefined) { + while (node.announcements.length > 0) { + deleteAnnouncement(node.announcements[0], rootNodes) + } + } + completeDeletion(node, rootNodes) + destroyPart(node) + cleanNode(node) + } + + function deleteAnnouncement (node, rootNodes) { + let payload = node.payload + if (payload.parentNode !== undefined) { + for (let j = 0; j < payload.parentNode.announcements.length; j++) { + let announcement = payload.parentNode.announcements[j] + if (announcement.id === node.id) { + payload.parentNode.announcements.splice(j, 1) + } + } + } + completeDeletion(node, rootNodes) + destroyPart(node) + cleanNode(node) + } + function deleteLayerManager (node, rootNodes) { let payload = node.payload if (payload.parentNode !== undefined) { @@ -461,6 +526,10 @@ function newNodeDeleter () { if (node.layerManager !== undefined) { deleteLayerManager(node.layerManager, rootNodes) } + + if (node.socialBots !== undefined) { + deleteSocialBots(node.socialBots, rootNodes) + } completeDeletion(node, rootNodes) destroyPart(node) cleanNode(node) @@ -480,6 +549,10 @@ function newNodeDeleter () { if (node.layerManager !== undefined) { deleteLayerManager(node.layerManager, rootNodes) } + + if (node.socialBots !== undefined) { + deleteSocialBots(node.socialBots, rootNodes) + } completeDeletion(node, rootNodes) destroyPart(node) cleanNode(node) @@ -499,6 +572,10 @@ function newNodeDeleter () { if (node.layerManager !== undefined) { deleteLayerManager(node.layerManager, rootNodes) } + + if (node.socialBots !== undefined) { + deleteSocialBots(node.socialBots, rootNodes) + } completeDeletion(node, rootNodes) destroyPart(node) cleanNode(node) @@ -518,6 +595,10 @@ function newNodeDeleter () { if (node.layerManager !== undefined) { deleteLayerManager(node.layerManager, rootNodes) } + + if (node.socialBots !== undefined) { + deleteSocialBots(node.socialBots, rootNodes) + } completeDeletion(node, rootNodes) destroyPart(node) cleanNode(node) @@ -912,6 +993,11 @@ function newNodeDeleter () { } } + if (node.announcements !== undefined) { + while (node.announcements.length > 0) { + deleteAnnouncement(node.announcements[0], rootNodes) + } + } destroyPart(node) cleanNode(node) } From 37978e1f43b4f3934258a291fc52144ba0155508 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Fri, 18 Oct 2019 13:59:49 +0200 Subject: [PATCH 29/48] On Focus Done --- .../Workspace/FunctionLibraries/OnFocus.js | 59 +++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/StrategySpace/Workspace/FunctionLibraries/OnFocus.js b/StrategySpace/Workspace/FunctionLibraries/OnFocus.js index dcb462b21..584414cb8 100644 --- a/StrategySpace/Workspace/FunctionLibraries/OnFocus.js +++ b/StrategySpace/Workspace/FunctionLibraries/OnFocus.js @@ -59,6 +59,12 @@ function newOnFocus () { return child } } + for (let m = 0; m < node.announcements.length; m++) { + child = getNodeThatIsOnFocus(node.announcements[m]) + if (child !== undefined) { + return child + } + } if (node.payload.uiObject.isOnFocus === true) { return node } else { @@ -117,6 +123,12 @@ function newOnFocus () { return child } } + for (let m = 0; m < node.announcements.length; m++) { + child = getNodeThatIsOnFocus(node.announcements[m]) + if (child !== undefined) { + return child + } + } if (node.payload.uiObject.isOnFocus === true) { return node } else { @@ -131,6 +143,12 @@ function newOnFocus () { return child } } + for (let m = 0; m < node.announcements.length; m++) { + child = getNodeThatIsOnFocus(node.announcements[m]) + if (child !== undefined) { + return child + } + } if (node.payload.uiObject.isOnFocus === true) { return node } else { @@ -145,6 +163,12 @@ function newOnFocus () { return child } } + for (let m = 0; m < node.announcements.length; m++) { + child = getNodeThatIsOnFocus(node.announcements[m]) + if (child !== undefined) { + return child + } + } if (node.payload.uiObject.isOnFocus === true) { return node } else { @@ -430,6 +454,41 @@ function newOnFocus () { return } } + case 'Social Bots': { + let child + for (let m = 0; m < node.socialBots.length; m++) { + child = getNodeThatIsOnFocus(node.socialBots[m]) + if (child !== undefined) { + return child + } + } + if (node.payload.uiObject.isOnFocus === true) { + return node + } else { + return + } + } + case 'Telegram Bot': { + let child + for (let m = 0; m < node.announcements.length; m++) { + child = getNodeThatIsOnFocus(node.announcements[m]) + if (child !== undefined) { + return child + } + } + if (node.payload.uiObject.isOnFocus === true) { + return node + } else { + return + } + } + case 'Announcement': { + if (node.payload.uiObject.isOnFocus === true) { + return node + } else { + return + } + } case 'Layer Manager': { let child for (let m = 0; m < node.layers.length; m++) { From 212ac46601144bf69045118ac870fd8592cf0817 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Fri, 18 Oct 2019 16:28:02 +0200 Subject: [PATCH 30/48] Parts From Nodes done --- .../FunctionLibraries/PartsFromNodes.js | 98 ++++++++++++++++++- 1 file changed, 94 insertions(+), 4 deletions(-) diff --git a/StrategySpace/Workspace/FunctionLibraries/PartsFromNodes.js b/StrategySpace/Workspace/FunctionLibraries/PartsFromNodes.js index 3d0ac7844..651339d16 100644 --- a/StrategySpace/Workspace/FunctionLibraries/PartsFromNodes.js +++ b/StrategySpace/Workspace/FunctionLibraries/PartsFromNodes.js @@ -4,6 +4,9 @@ function newPartsFromNodes () { addDefinition: addDefinition, addNetwork: addNetwork, addNetworkNode: addNetworkNode, + addSocialBots: addSocialBots, + addTelegramBot: addTelegramBot, + addAnnouncement: addAnnouncement, addLayerManager: addLayerManager, addLayer: addLayer, addTaskManager: addTaskManager, @@ -76,6 +79,13 @@ function newPartsFromNodes () { let situation = node.situations[m] createPartFromNode(situation, node, node) } + if (node.announcements === undefined) { + node.announcements = [] + } + for (let m = 0; m < node.announcements.length; m++) { + let announcement = node.announcements[m] + createPartFromNode(announcement, node, node) + } return } case 'Phase': { @@ -158,6 +168,13 @@ function newPartsFromNodes () { let situation = node.situations[m] createPartFromNode(situation, event, event) } + if (node.announcements === undefined) { + node.announcements = [] + } + for (let m = 0; m < node.announcements.length; m++) { + let announcement = node.announcements[m] + createPartFromNode(announcement, node, node) + } return } case 'Trigger On Event': { @@ -167,6 +184,13 @@ function newPartsFromNodes () { let situation = node.situations[m] createPartFromNode(situation, event, event) } + if (node.announcements === undefined) { + node.announcements = [] + } + for (let m = 0; m < node.announcements.length; m++) { + let announcement = node.announcements[m] + createPartFromNode(announcement, node, node) + } return } case 'Trigger Off Event': { @@ -176,6 +200,13 @@ function newPartsFromNodes () { let situation = node.situations[m] createPartFromNode(situation, event, event) } + if (node.announcements === undefined) { + node.announcements = [] + } + for (let m = 0; m < node.announcements.length; m++) { + let announcement = node.announcements[m] + createPartFromNode(announcement, node, node) + } return } case 'Position Size': { @@ -377,6 +408,26 @@ function newPartsFromNodes () { } return } + case 'Social Bots': { + createPart('Social Bots', node.name, node, parentNode, chainParent, 'Social Bots') + for (let m = 0; m < node.bots.length; m++) { + let bot = node.bots[m] + createPartFromNode(bot, node, node) + } + return + } + case 'Telegram Bot': { + createPart('Telegram Bot', node.name, node, parentNode, chainParent, 'Telegram Bot') + for (let m = 0; m < node.announcements.length; m++) { + let announcement = node.announcements[m] + createPartFromNode(announcement, node, node) + } + return + } + case 'Announcement': { + createPart('Announcement', node.name, node, parentNode, chainParent, 'Announcement') + return + } case 'Layer Manager': { createPart('Layer Manager', node.name, node, parentNode, chainParent, 'Layer Manager') for (let m = 0; m < node.layers.length; m++) { @@ -518,6 +569,41 @@ function newPartsFromNodes () { return networkNode } + function addSocialBots (node) { + if (node.socialBots === undefined) { + node.socialBots = { + name: 'New Social Bots', + bots: [] + } + createPart('Social Bots', node.socialBots.name, node.socialBots, node, node, 'Social Bots') + } + + return node.socialBots + } + + function addTelegramBot (node) { + let bot = { + name: 'New Telegram Bot', + code: '{}', + announcements: [] + } + node.bots.push(bot) + createPart('Telegram Bot', bot.name, bot, node, node, 'Telegram Bot') + + return bot + } + + function addAnnouncement (node) { + let announcement = { + name: 'New Announcement', + code: '{}' + } + node.announcements.push(announcement) + createPart('Announcement', announcement.name, announcement, node, node, 'Announcement') + + return announcement + } + function addLayerManager (node) { if (node.layerManager === undefined) { node.layerManager = { @@ -925,19 +1011,22 @@ function newPartsFromNodes () { function addMissingEvents (node) { if (node.triggerOn === undefined) { node.triggerOn = { - situations: [] + situations: [], + announcements: [] } createPart('Trigger On Event', '', node.triggerOn, node, node) } if (node.triggerOff === undefined) { node.triggerOff = { - situations: [] + situations: [], + announcements: [] } createPart('Trigger Off Event', '', node.triggerOff, node, node) } if (node.takePosition === undefined) { node.takePosition = { - situations: [] + situations: [], + announcements: [] } createPart('Take Position Event', '', node.takePosition, node, node) } @@ -1051,7 +1140,8 @@ function newPartsFromNodes () { function addNextPhaseEvent (node) { if (node.nextPhaseEvent === undefined) { node.nextPhaseEvent = { - situations: [] + situations: [], + announcements: [] } createPart('Next Phase Event', '', node.nextPhaseEvent, node, node) } From 6f89600a53fb45b03305f742f6f49c07a0c22199 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Fri, 18 Oct 2019 16:45:18 +0200 Subject: [PATCH 31/48] Protocol node done --- .../FunctionLibraries/ProtocolNode.js | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) diff --git a/StrategySpace/Workspace/FunctionLibraries/ProtocolNode.js b/StrategySpace/Workspace/FunctionLibraries/ProtocolNode.js index 184efe7c1..1d969c0f3 100644 --- a/StrategySpace/Workspace/FunctionLibraries/ProtocolNode.js +++ b/StrategySpace/Workspace/FunctionLibraries/ProtocolNode.js @@ -75,6 +75,10 @@ function newProtocolNode () { let situation = getProtocolNode(node.situations[m], removePersonalData, parseCode, includeIds) event.situations.push(situation) } + for (let m = 0; m < node.announcements.length; m++) { + let announcement = getProtocolNode(node.announcements[m], removePersonalData, parseCode, includeIds) + event.announcements.push(announcement) + } if (includeIds) { event.id = node.id } @@ -139,6 +143,10 @@ function newProtocolNode () { let situation = getProtocolNode(node.situations[m], removePersonalData, parseCode, includeIds) event.situations.push(situation) } + for (let m = 0; m < node.announcements.length; m++) { + let announcement = getProtocolNode(node.announcements[m], removePersonalData, parseCode, includeIds) + event.announcements.push(announcement) + } if (includeIds) { event.id = node.id } @@ -156,6 +164,10 @@ function newProtocolNode () { let situation = getProtocolNode(node.situations[m], removePersonalData, parseCode, includeIds) event.situations.push(situation) } + for (let m = 0; m < node.announcements.length; m++) { + let announcement = getProtocolNode(node.announcements[m], removePersonalData, parseCode, includeIds) + event.announcements.push(announcement) + } if (includeIds) { event.id = node.id } @@ -173,6 +185,10 @@ function newProtocolNode () { let situation = getProtocolNode(node.situations[m], removePersonalData, parseCode, includeIds) event.situations.push(situation) } + for (let m = 0; m < node.announcements.length; m++) { + let announcement = getProtocolNode(node.announcements[m], removePersonalData, parseCode, includeIds) + event.announcements.push(announcement) + } if (includeIds) { event.id = node.id } @@ -467,6 +483,53 @@ function newProtocolNode () { } return key } + case 'Social Bots': { + let socialBots = { + type: node.type, + subType: node.subType, + name: node.name, + bots: [] + } + + for (let m = 0; m < node.bots.length; m++) { + let bot = getProtocolNode(node.bots[m], removePersonalData, parseCode, includeIds) + socialBots.bots.push(bot) + } + if (includeIds) { + socialBots.id = node.id + } + return layerManager + } + case 'Telegram Bot': { + let bot = { + type: node.type, + subType: node.subType, + name: node.name, + code: node.code, + announcements: [] + } + + for (let m = 0; m < node.announcements.length; m++) { + let announcement = getProtocolNode(node.announcements[m], removePersonalData, parseCode, includeIds) + bot.announcements.push(announcement) + } + if (includeIds) { + bot.id = node.id + } + return bot + } + case 'Announcement': { + let object = { + type: node.type, + subType: node.subType, + name: node.name, + code: node.code + } + if (includeIds) { + object.id = node.id + } + return object + } case 'Layer Manager': { let layerManager = { type: node.type, From eb92342bde5f91f9c0729ae893d98a575198ccd5 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Fri, 18 Oct 2019 16:51:07 +0200 Subject: [PATCH 32/48] shortcuts keys done --- .../FunctionLibraries/ShortcutKeys.js | 59 +++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/StrategySpace/Workspace/FunctionLibraries/ShortcutKeys.js b/StrategySpace/Workspace/FunctionLibraries/ShortcutKeys.js index ea239095a..826ad1b8a 100644 --- a/StrategySpace/Workspace/FunctionLibraries/ShortcutKeys.js +++ b/StrategySpace/Workspace/FunctionLibraries/ShortcutKeys.js @@ -59,6 +59,12 @@ function newShortcutKeys () { return child } } + for (let m = 0; m < node.announcements.length; m++) { + child = getNodeByShortcutKey(node.announcements[m], searchingKey) + if (child !== undefined) { + return child + } + } if (node.payload.uiObject.shortcutKey === searchingKey) { return node } else { @@ -117,6 +123,12 @@ function newShortcutKeys () { return child } } + for (let m = 0; m < node.announcements.length; m++) { + child = getNodeByShortcutKey(node.announcements[m], searchingKey) + if (child !== undefined) { + return child + } + } if (node.payload.uiObject.shortcutKey === searchingKey) { return node } else { @@ -131,6 +143,12 @@ function newShortcutKeys () { return child } } + for (let m = 0; m < node.announcements.length; m++) { + child = getNodeByShortcutKey(node.announcements[m], searchingKey) + if (child !== undefined) { + return child + } + } if (node.payload.uiObject.shortcutKey === searchingKey) { return node } else { @@ -145,6 +163,12 @@ function newShortcutKeys () { return child } } + for (let m = 0; m < node.announcements.length; m++) { + child = getNodeByShortcutKey(node.announcements[m], searchingKey) + if (child !== undefined) { + return child + } + } if (node.payload.uiObject.shortcutKey === searchingKey) { return node } else { @@ -430,6 +454,41 @@ function newShortcutKeys () { return } } + case 'Social Bots': { + let child + for (let m = 0; m < node.bots.length; m++) { + child = getNodeByShortcutKey(node.bots[m], searchingKey) + if (child !== undefined) { + return child + } + } + if (node.payload.uiObject.shortcutKey === searchingKey) { + return node + } else { + return + } + } + case 'Telegram Bot': { + let child + for (let m = 0; m < node.announcements.length; m++) { + child = getNodeByShortcutKey(node.announcements[m], searchingKey) + if (child !== undefined) { + return child + } + } + if (node.payload.uiObject.shortcutKey === searchingKey) { + return node + } else { + return + } + } + case 'Announcement': { + if (node.payload.uiObject.shortcutKey === searchingKey) { + return node + } else { + return + } + } case 'Layer Manager': { let child for (let m = 0; m < node.layers.length; m++) { From bdb015b1c538dc2db3b65fb86e8cd9d88b70624e Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Fri, 18 Oct 2019 17:04:58 +0200 Subject: [PATCH 33/48] Stringify Nodes done --- .../FunctionLibraries/PartsFromNodes.js | 12 +++ .../FunctionLibraries/ProtocolNode.js | 24 ++++-- .../FunctionLibraries/StringifyNode.js | 80 +++++++++++++++++++ 3 files changed, 108 insertions(+), 8 deletions(-) diff --git a/StrategySpace/Workspace/FunctionLibraries/PartsFromNodes.js b/StrategySpace/Workspace/FunctionLibraries/PartsFromNodes.js index 651339d16..844519643 100644 --- a/StrategySpace/Workspace/FunctionLibraries/PartsFromNodes.js +++ b/StrategySpace/Workspace/FunctionLibraries/PartsFromNodes.js @@ -510,6 +510,9 @@ function newPartsFromNodes () { if (node.layerManager !== undefined) { createPartFromNode(node.layerManager, node, node) } + if (node.socialBots !== undefined) { + createPartFromNode(node.socialBots, node, node) + } return } case 'Live Trading Session': { @@ -520,6 +523,9 @@ function newPartsFromNodes () { if (node.layerManager !== undefined) { createPartFromNode(node.layerManager, node, node) } + if (node.socialBots !== undefined) { + createPartFromNode(node.socialBots, node, node) + } return } case 'Fordward Testing Session': { @@ -530,6 +536,9 @@ function newPartsFromNodes () { if (node.layerManager !== undefined) { createPartFromNode(node.layerManager, node, node) } + if (node.socialBots !== undefined) { + createPartFromNode(node.socialBots, node, node) + } return } case 'Paper Trading Session': { @@ -540,6 +549,9 @@ function newPartsFromNodes () { if (node.layerManager !== undefined) { createPartFromNode(node.layerManager, node, node) } + if (node.socialBots !== undefined) { + createPartFromNode(node.socialBots, node, node) + } return } } diff --git a/StrategySpace/Workspace/FunctionLibraries/ProtocolNode.js b/StrategySpace/Workspace/FunctionLibraries/ProtocolNode.js index 1d969c0f3..b0039a1e3 100644 --- a/StrategySpace/Workspace/FunctionLibraries/ProtocolNode.js +++ b/StrategySpace/Workspace/FunctionLibraries/ProtocolNode.js @@ -69,7 +69,8 @@ function newProtocolNode () { type: node.type, subType: node.subType, name: node.name, - situations: [] + situations: [], + announcements: [] } for (let m = 0; m < node.situations.length; m++) { let situation = getProtocolNode(node.situations[m], removePersonalData, parseCode, includeIds) @@ -136,7 +137,8 @@ function newProtocolNode () { type: node.type, subType: node.subType, name: node.name, - situations: [] + situations: [], + announcements: [] } for (let m = 0; m < node.situations.length; m++) { @@ -157,7 +159,8 @@ function newProtocolNode () { type: node.type, subType: node.subType, name: node.name, - situations: [] + situations: [], + announcements: [] } for (let m = 0; m < node.situations.length; m++) { @@ -178,7 +181,8 @@ function newProtocolNode () { type: node.type, subType: node.subType, name: node.name, - situations: [] + situations: [], + announcements: [] } for (let m = 0; m < node.situations.length; m++) { @@ -675,7 +679,8 @@ function newProtocolNode () { name: node.name, code: node.code, parameters: getProtocolNode(node.parameters, removePersonalData, parseCode, includeIds), - layerManager: getProtocolNode(node.layerManager, removePersonalData, parseCode, includeIds) + layerManager: getProtocolNode(node.layerManager, removePersonalData, parseCode, includeIds), + socialBots: getProtocolNode(node.socialBots, removePersonalData, parseCode, includeIds) } if (parseCode) { object.code = JSON.parse(object.code) @@ -693,7 +698,8 @@ function newProtocolNode () { name: node.name, code: node.code, parameters: getProtocolNode(node.parameters, removePersonalData, parseCode, includeIds), - layerManager: getProtocolNode(node.layerManager, removePersonalData, parseCode, includeIds) + layerManager: getProtocolNode(node.layerManager, removePersonalData, parseCode, includeIds), + socialBots: getProtocolNode(node.socialBots, removePersonalData, parseCode, includeIds) } if (parseCode) { object.code = JSON.parse(object.code) @@ -711,7 +717,8 @@ function newProtocolNode () { name: node.name, code: node.code, parameters: getProtocolNode(node.parameters, removePersonalData, parseCode, includeIds), - layerManager: getProtocolNode(node.layerManager, removePersonalData, parseCode, includeIds) + layerManager: getProtocolNode(node.layerManager, removePersonalData, parseCode, includeIds), + socialBots: getProtocolNode(node.socialBots, removePersonalData, parseCode, includeIds) } if (parseCode) { object.code = JSON.parse(object.code) @@ -729,7 +736,8 @@ function newProtocolNode () { name: node.name, code: node.code, parameters: getProtocolNode(node.parameters, removePersonalData, parseCode, includeIds), - layerManager: getProtocolNode(node.layerManager, removePersonalData, parseCode, includeIds) + layerManager: getProtocolNode(node.layerManager, removePersonalData, parseCode, includeIds), + socialBots: getProtocolNode(node.socialBots, removePersonalData, parseCode, includeIds) } if (parseCode) { object.code = JSON.parse(object.code) diff --git a/StrategySpace/Workspace/FunctionLibraries/StringifyNode.js b/StrategySpace/Workspace/FunctionLibraries/StringifyNode.js index ff0d1d6db..d72abbc07 100644 --- a/StrategySpace/Workspace/FunctionLibraries/StringifyNode.js +++ b/StrategySpace/Workspace/FunctionLibraries/StringifyNode.js @@ -67,12 +67,19 @@ function newStringifyNode () { subType: node.subType, name: node.name, situations: [], + announcements: [], savedPayload: getSavedPayload(node) } for (let m = 0; m < node.situations.length; m++) { let situation = prepareForStringify(node.situations[m], removePersonalData) event.situations.push(situation) } + if (node.announcements !== undefined) { + for (let m = 0; m < node.announcements.length; m++) { + let announcement = prepareForStringify(node.announcements[m], removePersonalData) + event.announcements.push(announcement) + } + } return event } case 'Phase': { @@ -128,6 +135,7 @@ function newStringifyNode () { subType: node.subType, name: node.name, situations: [], + announcements: [], savedPayload: getSavedPayload(node) } @@ -135,6 +143,12 @@ function newStringifyNode () { let situation = prepareForStringify(node.situations[m], removePersonalData) event.situations.push(situation) } + if (node.announcements !== undefined) { + for (let m = 0; m < node.announcements.length; m++) { + let announcement = prepareForStringify(node.announcements[m], removePersonalData) + event.announcements.push(announcement) + } + } return event } case 'Trigger On Event': { @@ -144,6 +158,7 @@ function newStringifyNode () { subType: node.subType, name: node.name, situations: [], + announcements: [], savedPayload: getSavedPayload(node) } @@ -151,6 +166,12 @@ function newStringifyNode () { let situation = prepareForStringify(node.situations[m], removePersonalData) event.situations.push(situation) } + if (node.announcements !== undefined) { + for (let m = 0; m < node.announcements.length; m++) { + let announcement = prepareForStringify(node.announcements[m], removePersonalData) + event.announcements.push(announcement) + } + } return event } case 'Trigger Off Event': { @@ -160,6 +181,7 @@ function newStringifyNode () { subType: node.subType, name: node.name, situations: [], + announcements: [], savedPayload: getSavedPayload(node) } @@ -167,6 +189,12 @@ function newStringifyNode () { let situation = prepareForStringify(node.situations[m], removePersonalData) event.situations.push(situation) } + if (node.announcements !== undefined) { + for (let m = 0; m < node.announcements.length; m++) { + let announcement = prepareForStringify(node.announcements[m], removePersonalData) + event.announcements.push(announcement) + } + } return event } case 'Initial Definition': { @@ -438,6 +466,54 @@ function newStringifyNode () { } return key } + case 'Social Bots': { + let object = { + id: node.id, + type: node.type, + subType: node.subType, + name: node.name, + bots: [], + savedPayload: getSavedPayload(node) + } + + if (node.announcements !== undefined) { + for (let m = 0; m < node.bots.length; m++) { + let bot = prepareForStringify(node.bots[m], removePersonalData) + object.bots.push(bot) + } + } + return object + } + case 'Telegram Bot': { + let object = { + id: node.id, + type: node.type, + subType: node.subType, + name: node.name, + code: node.code, + announcements: [], + savedPayload: getSavedPayload(node) + } + + if (node.announcements !== undefined) { + for (let m = 0; m < node.announcements.length; m++) { + let announcement = prepareForStringify(node.announcements[m], removePersonalData) + object.announcements.push(announcement) + } + } + return object + } + case 'Announcement': { + let object = { + id: node.id, + type: node.type, + subType: node.subType, + name: node.name, + code: node.code, + savedPayload: getSavedPayload(node) + } + return object + } case 'Layer Manager': { let layerManager = { id: node.id, @@ -571,6 +647,7 @@ function newStringifyNode () { code: node.code, parameters: prepareForStringify(node.parameters, removePersonalData), layerManager: prepareForStringify(node.layerManager, removePersonalData), + socialBots: prepareForStringify(node.socialBots, removePersonalData), savedPayload: getSavedPayload(node) } return object @@ -584,6 +661,7 @@ function newStringifyNode () { code: node.code, parameters: prepareForStringify(node.parameters, removePersonalData), layerManager: prepareForStringify(node.layerManager, removePersonalData), + socialBots: prepareForStringify(node.socialBots, removePersonalData), savedPayload: getSavedPayload(node) } return object @@ -597,6 +675,7 @@ function newStringifyNode () { code: node.code, parameters: prepareForStringify(node.parameters, removePersonalData), layerManager: prepareForStringify(node.layerManager, removePersonalData), + socialBots: prepareForStringify(node.socialBots, removePersonalData), savedPayload: getSavedPayload(node) } return object @@ -610,6 +689,7 @@ function newStringifyNode () { code: node.code, parameters: prepareForStringify(node.parameters, removePersonalData), layerManager: prepareForStringify(node.layerManager, removePersonalData), + socialBots: prepareForStringify(node.socialBots, removePersonalData), savedPayload: getSavedPayload(node) } return object From 647fba6b456e45d80619612050e9c7f8da0580b9 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Fri, 18 Oct 2019 17:10:36 +0200 Subject: [PATCH 34/48] Workspace done --- StrategySpace/Workspace/Workspace.js | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/StrategySpace/Workspace/Workspace.js b/StrategySpace/Workspace/Workspace.js index d22b2a769..7b8d5d05d 100644 --- a/StrategySpace/Workspace/Workspace.js +++ b/StrategySpace/Workspace/Workspace.js @@ -334,6 +334,21 @@ function newWorkspace () { functionLibraryPartsFromNodes.addNetworkNode(payload.node) } break + case 'Add Social Bots': + { + functionLibraryPartsFromNodes.addSocialBots(payload.node) + } + break + case 'Add Telegram Bot': + { + functionLibraryPartsFromNodes.addTelegramBot(payload.node) + } + break + case 'Add Announcement': + { + functionLibraryPartsFromNodes.addAnnouncement(payload.node) + } + break case 'Add Layer Manager': { functionLibraryPartsFromNodes.addLayerManager(payload.node) @@ -502,6 +517,18 @@ function newWorkspace () { functionLibraryNodeDeleter.deleteNetworkNode(payload.node, thisObject.workspaceNode.rootNodes) break } + case 'Delete Social Bots': { + functionLibraryNodeDeleter.deleteSocialBots(payload.node, thisObject.workspaceNode.rootNodes) + break + } + case 'Delete Social Bot': { + functionLibraryNodeDeleter.deleteSocialBot(payload.node, thisObject.workspaceNode.rootNodes) + break + } + case 'Delete Announcement': { + functionLibraryNodeDeleter.deleteAnnouncement(payload.node, thisObject.workspaceNode.rootNodes) + break + } case 'Delete Layer Manager': { functionLibraryNodeDeleter.deleteLayerManager(payload.node, thisObject.workspaceNode.rootNodes) break From 238e01d8ba903ec6c11c316ff64598b428e5d509 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Fri, 18 Oct 2019 17:23:11 +0200 Subject: [PATCH 35/48] Missing Menu Items --- FloatingSpace/StrategyPartConstructor.js | 152 +++++++++++++++--- .../FunctionLibraries/NodeDeleter.js | 2 +- 2 files changed, 129 insertions(+), 25 deletions(-) diff --git a/FloatingSpace/StrategyPartConstructor.js b/FloatingSpace/StrategyPartConstructor.js index dc42ece18..e80811903 100644 --- a/FloatingSpace/StrategyPartConstructor.js +++ b/FloatingSpace/StrategyPartConstructor.js @@ -1214,7 +1214,7 @@ function newStrategyPartConstructor () { rawRadius: 8, targetRadius: 0, currentRadius: 0, - angle: -70 + angle: -75 } ) menuItemsInitialValues.push( @@ -1227,9 +1227,35 @@ function newStrategyPartConstructor () { rawRadius: 8, targetRadius: 0, currentRadius: 0, - angle: -30 + angle: -40 } ) + menuItemsInitialValues.push( + { + action: 'Add Parameters', + actionFunction: payload.onMenuItemClick, + label: 'Add Parameters', + visible: true, + relatedStrategyPart: 'Parameters', + rawRadius: 8, + targetRadius: 0, + currentRadius: 0, + angle: -20 + } + ) + menuItemsInitialValues.push( + { + action: 'Add Social Bots', + actionFunction: payload.onMenuItemClick, + label: 'Add Social Bots', + visible: true, + relatedStrategyPart: 'Social Bots', + rawRadius: 8, + targetRadius: 0, + currentRadius: 0, + angle: 0 + } + ) menuItemsInitialValues.push( { action: 'Edit Session', @@ -1241,7 +1267,7 @@ function newStrategyPartConstructor () { rawRadius: 8, targetRadius: 0, currentRadius: 0, - angle: 0, + angle: 20, dontShowAtFullscreen: true } ) @@ -1258,7 +1284,7 @@ function newStrategyPartConstructor () { rawRadius: 8, targetRadius: 0, currentRadius: 0, - angle: 30 + angle: 40 } ) menuItemsInitialValues.push( @@ -1272,7 +1298,7 @@ function newStrategyPartConstructor () { rawRadius: 8, targetRadius: 0, currentRadius: 0, - angle: 70 + angle: 75 } ) break @@ -1304,7 +1330,7 @@ function newStrategyPartConstructor () { rawRadius: 8, targetRadius: 0, currentRadius: 0, - angle: -70 + angle: -75 } ) menuItemsInitialValues.push( @@ -1317,9 +1343,35 @@ function newStrategyPartConstructor () { rawRadius: 8, targetRadius: 0, currentRadius: 0, - angle: -30 + angle: -40 } ) + menuItemsInitialValues.push( + { + action: 'Add Parameters', + actionFunction: payload.onMenuItemClick, + label: 'Add Parameters', + visible: true, + relatedStrategyPart: 'Parameters', + rawRadius: 8, + targetRadius: 0, + currentRadius: 0, + angle: -20 + } + ) + menuItemsInitialValues.push( + { + action: 'Add Social Bots', + actionFunction: payload.onMenuItemClick, + label: 'Add Social Bots', + visible: true, + relatedStrategyPart: 'Social Bots', + rawRadius: 8, + targetRadius: 0, + currentRadius: 0, + angle: 0 + } + ) menuItemsInitialValues.push( { action: 'Edit Session', @@ -1331,7 +1383,7 @@ function newStrategyPartConstructor () { rawRadius: 8, targetRadius: 0, currentRadius: 0, - angle: 0, + angle: 20, dontShowAtFullscreen: true } ) @@ -1348,7 +1400,7 @@ function newStrategyPartConstructor () { rawRadius: 8, targetRadius: 0, currentRadius: 0, - angle: 30 + angle: 40 } ) menuItemsInitialValues.push( @@ -1362,7 +1414,7 @@ function newStrategyPartConstructor () { rawRadius: 8, targetRadius: 0, currentRadius: 0, - angle: 70 + angle: 75 } ) break @@ -1394,7 +1446,7 @@ function newStrategyPartConstructor () { rawRadius: 8, targetRadius: 0, currentRadius: 0, - angle: -70 + angle: -75 } ) menuItemsInitialValues.push( @@ -1407,9 +1459,35 @@ function newStrategyPartConstructor () { rawRadius: 8, targetRadius: 0, currentRadius: 0, - angle: -30 + angle: -40 } ) + menuItemsInitialValues.push( + { + action: 'Add Parameters', + actionFunction: payload.onMenuItemClick, + label: 'Add Parameters', + visible: true, + relatedStrategyPart: 'Parameters', + rawRadius: 8, + targetRadius: 0, + currentRadius: 0, + angle: -20 + } + ) + menuItemsInitialValues.push( + { + action: 'Add Social Bots', + actionFunction: payload.onMenuItemClick, + label: 'Add Social Bots', + visible: true, + relatedStrategyPart: 'Social Bots', + rawRadius: 8, + targetRadius: 0, + currentRadius: 0, + angle: 0 + } + ) menuItemsInitialValues.push( { action: 'Edit Session', @@ -1421,7 +1499,7 @@ function newStrategyPartConstructor () { rawRadius: 8, targetRadius: 0, currentRadius: 0, - angle: 0, + angle: 20, dontShowAtFullscreen: true } ) @@ -1438,7 +1516,7 @@ function newStrategyPartConstructor () { rawRadius: 8, targetRadius: 0, currentRadius: 0, - angle: 30 + angle: 40 } ) menuItemsInitialValues.push( @@ -1452,7 +1530,7 @@ function newStrategyPartConstructor () { rawRadius: 8, targetRadius: 0, currentRadius: 0, - angle: 70 + angle: 75 } ) break @@ -1484,7 +1562,7 @@ function newStrategyPartConstructor () { rawRadius: 8, targetRadius: 0, currentRadius: 0, - angle: -70 + angle: -75 } ) menuItemsInitialValues.push( @@ -1497,9 +1575,35 @@ function newStrategyPartConstructor () { rawRadius: 8, targetRadius: 0, currentRadius: 0, - angle: -30 + angle: -40 } ) + menuItemsInitialValues.push( + { + action: 'Add Parameters', + actionFunction: payload.onMenuItemClick, + label: 'Add Parameters', + visible: true, + relatedStrategyPart: 'Parameters', + rawRadius: 8, + targetRadius: 0, + currentRadius: 0, + angle: -20 + } + ) + menuItemsInitialValues.push( + { + action: 'Add Social Bots', + actionFunction: payload.onMenuItemClick, + label: 'Add Social Bots', + visible: true, + relatedStrategyPart: 'Social Bots', + rawRadius: 8, + targetRadius: 0, + currentRadius: 0, + angle: 0 + } + ) menuItemsInitialValues.push( { action: 'Edit Session', @@ -1511,7 +1615,7 @@ function newStrategyPartConstructor () { rawRadius: 8, targetRadius: 0, currentRadius: 0, - angle: 0, + angle: 20, dontShowAtFullscreen: true } ) @@ -1528,7 +1632,7 @@ function newStrategyPartConstructor () { rawRadius: 8, targetRadius: 0, currentRadius: 0, - angle: 30 + angle: 40 } ) menuItemsInitialValues.push( @@ -1542,7 +1646,7 @@ function newStrategyPartConstructor () { rawRadius: 8, targetRadius: 0, currentRadius: 0, - angle: 70 + angle: 75 } ) break @@ -3133,19 +3237,19 @@ function newStrategyPartConstructor () { break } case 'Backtesting Session': { - level_4() + level_2() break } case 'Live Trading Session': { - level_4() + level_2() break } case 'Fordward Testing Session': { - level_4() + level_2() break } case 'Paper Trading Session': { - level_4() + level_2() break } case 'Exchange Account': { diff --git a/StrategySpace/Workspace/FunctionLibraries/NodeDeleter.js b/StrategySpace/Workspace/FunctionLibraries/NodeDeleter.js index 4bf3d9ad1..d72cc8d7c 100644 --- a/StrategySpace/Workspace/FunctionLibraries/NodeDeleter.js +++ b/StrategySpace/Workspace/FunctionLibraries/NodeDeleter.js @@ -4,7 +4,7 @@ function newNodeDeleter () { deleteNetwork: deleteNetwork, deleteNetworkNode: deleteNetworkNode, deleteSocialBots: deleteSocialBots, - deleteSocialBot: deleteTelegramBot, + deleteSocialBot: deleteSocialBot, deleteAnnouncement: deleteAnnouncement, deleteLayerManager: deleteLayerManager, deleteLayer: deleteLayer, From 1528e52fb17242a61ac42da85fec65ae0cf15115 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Fri, 18 Oct 2019 17:25:40 +0200 Subject: [PATCH 36/48] Update NodeChildren.js --- .../FunctionLibraries/NodeChildren.js | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/StrategySpace/Workspace/FunctionLibraries/NodeChildren.js b/StrategySpace/Workspace/FunctionLibraries/NodeChildren.js index a776a8d7d..3bce0a287 100644 --- a/StrategySpace/Workspace/FunctionLibraries/NodeChildren.js +++ b/StrategySpace/Workspace/FunctionLibraries/NodeChildren.js @@ -397,6 +397,12 @@ function newNodeChildren () { response.childIndex = response.childrenCount } } + if (parentNode.socialBots !== undefined) { + response.childrenCount++ + if (parentNode.socialBots.id === childNode.id) { + response.childIndex = response.childrenCount + } + } return response } @@ -417,6 +423,12 @@ function newNodeChildren () { response.childIndex = response.childrenCount } } + if (parentNode.socialBots !== undefined) { + response.childrenCount++ + if (parentNode.socialBots.id === childNode.id) { + response.childIndex = response.childrenCount + } + } return response } @@ -437,6 +449,12 @@ function newNodeChildren () { response.childIndex = response.childrenCount } } + if (parentNode.socialBots !== undefined) { + response.childrenCount++ + if (parentNode.socialBots.id === childNode.id) { + response.childIndex = response.childrenCount + } + } return response } @@ -457,6 +475,12 @@ function newNodeChildren () { response.childIndex = response.childrenCount } } + if (parentNode.socialBots !== undefined) { + response.childrenCount++ + if (parentNode.socialBots.id === childNode.id) { + response.childIndex = response.childrenCount + } + } return response } @@ -823,6 +847,13 @@ function newNodeChildren () { response.childIndex = response.childrenCount } } + for (let i = 0; i < parentNode.announcements.length; i++) { + let child = parentNode.announcements[i] + response.childrenCount++ + if (child.id === childNode.id) { + response.childIndex = response.childrenCount + } + } return response } From c5f1446de5d012124cd3933e1611ecefff90c351 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Fri, 18 Oct 2019 17:32:36 +0200 Subject: [PATCH 37/48] Bug fixed --- StrategySpace/Workspace/FunctionLibraries/ProtocolNode.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/StrategySpace/Workspace/FunctionLibraries/ProtocolNode.js b/StrategySpace/Workspace/FunctionLibraries/ProtocolNode.js index b0039a1e3..9970dbb4a 100644 --- a/StrategySpace/Workspace/FunctionLibraries/ProtocolNode.js +++ b/StrategySpace/Workspace/FunctionLibraries/ProtocolNode.js @@ -502,7 +502,7 @@ function newProtocolNode () { if (includeIds) { socialBots.id = node.id } - return layerManager + return socialBots } case 'Telegram Bot': { let bot = { From fcc11a0b632160bb0beb3ad72a74db11d424a1d1 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Fri, 18 Oct 2019 17:55:15 +0200 Subject: [PATCH 38/48] Refining default code --- StrategySpace/Workspace/FunctionLibraries/PartsFromNodes.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/StrategySpace/Workspace/FunctionLibraries/PartsFromNodes.js b/StrategySpace/Workspace/FunctionLibraries/PartsFromNodes.js index 844519643..5ca13c5c6 100644 --- a/StrategySpace/Workspace/FunctionLibraries/PartsFromNodes.js +++ b/StrategySpace/Workspace/FunctionLibraries/PartsFromNodes.js @@ -596,7 +596,7 @@ function newPartsFromNodes () { function addTelegramBot (node) { let bot = { name: 'New Telegram Bot', - code: '{}', + code: '{ \n\"botToken\": \"Paste here the bot token obtained from Telegram Bot Father\",\n\"chatId\": Write here the chat or group id where the announcements are going to be sent to, as it is a number with no quotes please.\n}', announcements: [] } node.bots.push(bot) @@ -607,8 +607,8 @@ function newPartsFromNodes () { function addAnnouncement (node) { let announcement = { - name: 'New Announcement', - code: '{}' + name: 'Announcement via ' + node.type, + code: '{ \n\"text\": \"Write here what you want to announce.\",\n\"botType\": \"' + node.type + '\",\n\"botId\": \"' + node.id + '\"\n}' } node.announcements.push(announcement) createPart('Announcement', announcement.name, announcement, node, node, 'Announcement') From 01ba1226afc804202f3ec376e3e3adc32778bce9 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Fri, 18 Oct 2019 20:00:51 +0200 Subject: [PATCH 39/48] Fixes with no loading new objects --- Canvas.js | 12 ++++++----- .../Workspace/FunctionLibraries/OnFocus.js | 20 +++++++++++++++++-- .../FunctionLibraries/StringifyNode.js | 2 +- StrategySpace/Workspace/Workspace.js | 4 ++-- 4 files changed, 28 insertions(+), 10 deletions(-) diff --git a/Canvas.js b/Canvas.js index 5d41e1bc4..fc63decf1 100644 --- a/Canvas.js +++ b/Canvas.js @@ -261,7 +261,7 @@ function newCanvas () { if (event.keyCode >= 65 && event.keyCode <= 90) { let nodeUsingThisKey = canvas.strategySpace.workspace.getNodeByShortcutKey(event.key) - if (nodeOnFocus === undefined) { + if (nodeOnFocus === undefined && nodeUsingThisKey !== undefined) { /* Then we displace the whole workspace to center it at the node using this key */ nodeUsingThisKey = canvas.floatingSpace.positionAtNode(nodeUsingThisKey) return @@ -271,7 +271,7 @@ function newCanvas () { event.preventDefault() /* If there is a node in focus, we try to assign the key to it. */ - if (nodeUsingThisKey !== undefined) { + if (nodeUsingThisKey !== undefined && nodeOnFocus !== undefined) { if (nodeUsingThisKey.id === nodeOnFocus.id) { nodeOnFocus.payload.uiObject.shortcutKey = '' nodeOnFocus.payload.uiObject.setValue('Shortcut Key Removed ') @@ -281,9 +281,11 @@ function newCanvas () { return } } - - nodeOnFocus.payload.uiObject.shortcutKey = event.key - nodeOnFocus.payload.uiObject.setValue('Shortcut Key: Ctrl + ' + event.key) + /* If there is not node using this key and a node in focus, we assign this key to this node */ + if (nodeUsingThisKey === undefined && nodeOnFocus !== undefined) { + nodeOnFocus.payload.uiObject.shortcutKey = event.key + nodeOnFocus.payload.uiObject.setValue('Shortcut Key: Ctrl + ' + event.key) + } } return } diff --git a/StrategySpace/Workspace/FunctionLibraries/OnFocus.js b/StrategySpace/Workspace/FunctionLibraries/OnFocus.js index 584414cb8..add0f0f78 100644 --- a/StrategySpace/Workspace/FunctionLibraries/OnFocus.js +++ b/StrategySpace/Workspace/FunctionLibraries/OnFocus.js @@ -456,8 +456,8 @@ function newOnFocus () { } case 'Social Bots': { let child - for (let m = 0; m < node.socialBots.length; m++) { - child = getNodeThatIsOnFocus(node.socialBots[m]) + for (let m = 0; m < node.bots.length; m++) { + child = getNodeThatIsOnFocus(node.bots[m]) if (child !== undefined) { return child } @@ -601,6 +601,10 @@ function newOnFocus () { if (child !== undefined) { return child } + child = getNodeThatIsOnFocus(node.socialBots) + if (child !== undefined) { + return child + } if (node.payload.uiObject.isOnFocus === true) { return node } else { @@ -618,6 +622,10 @@ function newOnFocus () { if (child !== undefined) { return child } + child = getNodeThatIsOnFocus(node.socialBots) + if (child !== undefined) { + return child + } if (node.payload.uiObject.isOnFocus === true) { return node } else { @@ -635,6 +643,10 @@ function newOnFocus () { if (child !== undefined) { return child } + child = getNodeThatIsOnFocus(node.socialBots) + if (child !== undefined) { + return child + } if (node.payload.uiObject.isOnFocus === true) { return node } else { @@ -652,6 +664,10 @@ function newOnFocus () { if (child !== undefined) { return child } + child = getNodeThatIsOnFocus(node.socialBots) + if (child !== undefined) { + return child + } if (node.payload.uiObject.isOnFocus === true) { return node } else { diff --git a/StrategySpace/Workspace/FunctionLibraries/StringifyNode.js b/StrategySpace/Workspace/FunctionLibraries/StringifyNode.js index d72abbc07..1ec385fd4 100644 --- a/StrategySpace/Workspace/FunctionLibraries/StringifyNode.js +++ b/StrategySpace/Workspace/FunctionLibraries/StringifyNode.js @@ -476,7 +476,7 @@ function newStringifyNode () { savedPayload: getSavedPayload(node) } - if (node.announcements !== undefined) { + if (node.bots !== undefined) { for (let m = 0; m < node.bots.length; m++) { let bot = prepareForStringify(node.bots[m], removePersonalData) object.bots.push(bot) diff --git a/StrategySpace/Workspace/Workspace.js b/StrategySpace/Workspace/Workspace.js index 7b8d5d05d..43b13aa87 100644 --- a/StrategySpace/Workspace/Workspace.js +++ b/StrategySpace/Workspace/Workspace.js @@ -48,7 +48,7 @@ function newWorkspace () { let functionLibraryNodeDeleter = newNodeDeleter() let functionLibraryPartsFromNodes = newPartsFromNodes() let functionLibraryProtocolNode = newProtocolNode() - let functionLibraryWorkspaceNodes = newStringifyNode() + let functionLibraryStringifyNodes = newStringifyNode() let functionLibraryTaskFunctions = newTaskFunctions() let functionLibrarySessionFunctions = newSessionFunctions() let functionLibraryShortcutKeys = newShortcutKeys() @@ -132,7 +132,7 @@ function newWorkspace () { let stringifyReadyNodes = [] for (let i = 0; i < thisObject.workspaceNode.rootNodes.length; i++) { let rootNode = thisObject.workspaceNode.rootNodes[i] - let node = functionLibraryWorkspaceNodes.prepareForStringify(rootNode, removePersonalData) + let node = functionLibraryStringifyNodes.prepareForStringify(rootNode, removePersonalData) if (node) { stringifyReadyNodes.push(node) } From db327d80f75b83574440f805ed47e14f5cd1fcd6 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Fri, 18 Oct 2019 20:19:32 +0200 Subject: [PATCH 40/48] Bug Fixes when an object is private --- FloatingSpace/StrategyPartConstructor.js | 2 +- .../FunctionLibraries/ProtocolNode.js | 93 ++++++++++++++----- 2 files changed, 71 insertions(+), 24 deletions(-) diff --git a/FloatingSpace/StrategyPartConstructor.js b/FloatingSpace/StrategyPartConstructor.js index e80811903..217bc9ab0 100644 --- a/FloatingSpace/StrategyPartConstructor.js +++ b/FloatingSpace/StrategyPartConstructor.js @@ -3197,7 +3197,7 @@ function newStrategyPartConstructor () { break } case 'Telegram Bot': { - level_4() + level_2() break } case 'Announcement': { diff --git a/StrategySpace/Workspace/FunctionLibraries/ProtocolNode.js b/StrategySpace/Workspace/FunctionLibraries/ProtocolNode.js index 9970dbb4a..4b5411a21 100644 --- a/StrategySpace/Workspace/FunctionLibraries/ProtocolNode.js +++ b/StrategySpace/Workspace/FunctionLibraries/ProtocolNode.js @@ -43,7 +43,9 @@ function newProtocolNode () { for (let m = 0; m < node.conditions.length; m++) { let condition = getProtocolNode(node.conditions[m], removePersonalData, parseCode, includeIds) - situation.conditions.push(condition) + if (condition !== undefined) { + situation.conditions.push(condition) + } } if (includeIds) { situation.id = node.id @@ -74,11 +76,15 @@ function newProtocolNode () { } for (let m = 0; m < node.situations.length; m++) { let situation = getProtocolNode(node.situations[m], removePersonalData, parseCode, includeIds) - event.situations.push(situation) + if (situation !== undefined) { + event.situations.push(situation) + } } for (let m = 0; m < node.announcements.length; m++) { let announcement = getProtocolNode(node.announcements[m], removePersonalData, parseCode, includeIds) - event.announcements.push(announcement) + if (announcement !== undefined) { + event.announcements.push(announcement) + } } if (includeIds) { event.id = node.id @@ -108,7 +114,9 @@ function newProtocolNode () { for (let m = 0; m < node.phases.length; m++) { let phase = getProtocolNode(node.phases[m], removePersonalData, parseCode, includeIds) - stop.phases.push(phase) + if (phase !== undefined) { + stop.phases.push(phase) + } } if (includeIds) { stop.id = node.id @@ -125,7 +133,9 @@ function newProtocolNode () { for (let m = 0; m < node.phases.length; m++) { let phase = getProtocolNode(node.phases[m], removePersonalData, parseCode, includeIds) - takeProfit.phases.push(phase) + if (phase !== undefined) { + takeProfit.phases.push(phase) + } } if (includeIds) { takeProfit.id = node.id @@ -143,11 +153,15 @@ function newProtocolNode () { for (let m = 0; m < node.situations.length; m++) { let situation = getProtocolNode(node.situations[m], removePersonalData, parseCode, includeIds) - event.situations.push(situation) + if (situation !== undefined) { + event.situations.push(situation) + } } for (let m = 0; m < node.announcements.length; m++) { let announcement = getProtocolNode(node.announcements[m], removePersonalData, parseCode, includeIds) - event.announcements.push(announcement) + if (announcement !== undefined) { + event.announcements.push(announcement) + } } if (includeIds) { event.id = node.id @@ -169,7 +183,9 @@ function newProtocolNode () { } for (let m = 0; m < node.announcements.length; m++) { let announcement = getProtocolNode(node.announcements[m], removePersonalData, parseCode, includeIds) - event.announcements.push(announcement) + if (announcement !== undefined) { + event.announcements.push(announcement) + } } if (includeIds) { event.id = node.id @@ -187,11 +203,15 @@ function newProtocolNode () { for (let m = 0; m < node.situations.length; m++) { let situation = getProtocolNode(node.situations[m], removePersonalData, parseCode, includeIds) - event.situations.push(situation) + if (situation !== undefined) { + event.situations.push(situation) + } } for (let m = 0; m < node.announcements.length; m++) { let announcement = getProtocolNode(node.announcements[m], removePersonalData, parseCode, includeIds) - event.announcements.push(announcement) + if (announcement !== undefined) { + event.announcements.push(announcement) + } } if (includeIds) { event.id = node.id @@ -414,7 +434,9 @@ function newProtocolNode () { for (let m = 0; m < node.strategies.length; m++) { let strategy = getProtocolNode(node.strategies[m], removePersonalData, parseCode, includeIds) - tradingSystem.strategies.push(strategy) + if (strategy !== undefined) { + tradingSystem.strategies.push(strategy) + } } if (includeIds) { tradingSystem.id = node.id @@ -432,7 +454,9 @@ function newProtocolNode () { for (let m = 0; m < node.exchangeAccounts.length; m++) { let exchangeAccount = getProtocolNode(node.exchangeAccounts[m], removePersonalData, parseCode, includeIds) - personalData.exchangeAccounts.push(exchangeAccount) + if (exchangeAccount !== undefined) { + personalData.exchangeAccounts.push(exchangeAccount) + } } if (includeIds) { personalData.id = node.id @@ -451,11 +475,15 @@ function newProtocolNode () { for (let m = 0; m < node.assets.length; m++) { let asset = getProtocolNode(node.assets[m], removePersonalData, parseCode, includeIds) - exchangeAccount.assets.push(asset) + if (asset !== undefined) { + exchangeAccount.assets.push(asset) + } } for (let m = 0; m < node.keys.length; m++) { let key = getProtocolNode(node.keys[m], removePersonalData, parseCode, includeIds) - exchangeAccount.keys.push(key) + if (key !== undefined) { + exchangeAccount.keys.push(key) + } } if (includeIds) { exchangeAccount.id = node.id @@ -497,7 +525,9 @@ function newProtocolNode () { for (let m = 0; m < node.bots.length; m++) { let bot = getProtocolNode(node.bots[m], removePersonalData, parseCode, includeIds) - socialBots.bots.push(bot) + if (bot !== undefined) { + socialBots.bots.push(bot) + } } if (includeIds) { socialBots.id = node.id @@ -505,6 +535,7 @@ function newProtocolNode () { return socialBots } case 'Telegram Bot': { + if (removePersonalData === true) { return } let bot = { type: node.type, subType: node.subType, @@ -515,7 +546,9 @@ function newProtocolNode () { for (let m = 0; m < node.announcements.length; m++) { let announcement = getProtocolNode(node.announcements[m], removePersonalData, parseCode, includeIds) - bot.announcements.push(announcement) + if (announcement !== undefined) { + bot.announcements.push(announcement) + } } if (includeIds) { bot.id = node.id @@ -544,7 +577,9 @@ function newProtocolNode () { for (let m = 0; m < node.layers.length; m++) { let layer = getProtocolNode(node.layers[m], removePersonalData, parseCode, includeIds) - layerManager.layers.push(layer) + if (layer !== undefined) { + layerManager.layers.push(layer) + } } if (includeIds) { layerManager.id = node.id @@ -573,7 +608,9 @@ function newProtocolNode () { for (let m = 0; m < node.tasks.length; m++) { let task = getProtocolNode(node.tasks[m], removePersonalData, parseCode, includeIds) - taskManager.tasks.push(task) + if (task !== undefined) { + taskManager.tasks.push(task) + } } if (includeIds) { taskManager.id = node.id @@ -603,7 +640,9 @@ function newProtocolNode () { for (let m = 0; m < node.processes.length; m++) { let process = getProtocolNode(node.processes[m], removePersonalData, parseCode, includeIds) - bot.processes.push(process) + if (process !== undefined) { + bot.processes.push(process) + } } if (parseCode) { bot.code = JSON.parse(bot.code) @@ -624,7 +663,9 @@ function newProtocolNode () { for (let m = 0; m < node.processes.length; m++) { let process = getProtocolNode(node.processes[m], removePersonalData, parseCode, includeIds) - bot.processes.push(process) + if (process !== undefined) { + bot.processes.push(process) + } } if (parseCode) { bot.code = JSON.parse(bot.code) @@ -645,7 +686,9 @@ function newProtocolNode () { for (let m = 0; m < node.processes.length; m++) { let process = getProtocolNode(node.processes[m], removePersonalData, parseCode, includeIds) - bot.processes.push(process) + if (process !== undefined) { + bot.processes.push(process) + } } if (parseCode) { bot.code = JSON.parse(bot.code) @@ -758,7 +801,9 @@ function newProtocolNode () { if (node.taskManagers !== undefined) { for (let m = 0; m < node.taskManagers.length; m++) { let taskManager = getProtocolNode(node.taskManagers[m], removePersonalData, parseCode, includeIds) - object.taskManagers.push(taskManager) + if (taskManager !== undefined) { + object.taskManagers.push(taskManager) + } } } if (includeIds) { @@ -776,7 +821,9 @@ function newProtocolNode () { if (node.networkNodes !== undefined) { for (let m = 0; m < node.networkNodes.length; m++) { let networkNode = getProtocolNode(node.networkNodes[m], removePersonalData, parseCode, includeIds) - object.networkNodes.push(networkNode) + if (networkNode !== undefined) { + object.networkNodes.push(networkNode) + } } } if (includeIds) { From d1f3d3c27844e53b661d94549f0fec20ab7aa149 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Sat, 19 Oct 2019 09:29:20 +0200 Subject: [PATCH 41/48] Stringify Library deprecated --- .../FunctionLibraries/ProtocolNode.js | 546 ++++++++----- .../FunctionLibraries/StringifyNode.js | 773 ------------------ StrategySpace/Workspace/Workspace.js | 3 +- 3 files changed, 360 insertions(+), 962 deletions(-) delete mode 100644 StrategySpace/Workspace/FunctionLibraries/StringifyNode.js diff --git a/StrategySpace/Workspace/FunctionLibraries/ProtocolNode.js b/StrategySpace/Workspace/FunctionLibraries/ProtocolNode.js index 4b5411a21..13a2f564f 100644 --- a/StrategySpace/Workspace/FunctionLibraries/ProtocolNode.js +++ b/StrategySpace/Workspace/FunctionLibraries/ProtocolNode.js @@ -4,37 +4,43 @@ function newProtocolNode () { } return thisObject - function getProtocolNode (node, removePersonalData, parseCode, includeIds) { + function getProtocolNode (node, removePersonalData, parseCode, includeIds, includePayload) { if (node === undefined) { return } switch (node.type) { case 'Code': { - let code = { + let object = { type: node.type, subType: node.subType, name: node.name, code: node.code } if (includeIds) { - code.id = node.id + object.id = node.id } - return code + if (includePayload) { + object.savedPayload = getSavedPayload(node) + } + return object } case 'Condition': { - let condition = { + let object = { type: node.type, subType: node.subType, name: node.name, - code: getProtocolNode(node.code, removePersonalData, parseCode, includeIds) + code: getProtocolNode(node.code, removePersonalData, parseCode, includeIds, includePayload) } if (includeIds) { - condition.id = node.id + object.id = node.id } - return condition + if (includePayload) { + object.savedPayload = getSavedPayload(node) + } + return object } case 'Situation': { - let situation = { + let object = { type: node.type, subType: node.subType, name: node.name, @@ -42,32 +48,38 @@ function newProtocolNode () { } for (let m = 0; m < node.conditions.length; m++) { - let condition = getProtocolNode(node.conditions[m], removePersonalData, parseCode, includeIds) + let condition = getProtocolNode(node.conditions[m], removePersonalData, parseCode, includeIds, includePayload) if (condition !== undefined) { - situation.conditions.push(condition) + object.conditions.push(condition) } } if (includeIds) { - situation.id = node.id + object.id = node.id } - return situation + if (includePayload) { + object.savedPayload = getSavedPayload(node) + } + return object } case 'Formula': { - let formula = { + let object = { type: node.type, subType: node.subType, name: node.name, code: node.code } if (includeIds) { - formula.id = node.id + object.id = node.id } - return formula + if (includePayload) { + object.savedPayload = getSavedPayload(node) + } + return object } case 'Next Phase Event': { - let event = { + let object = { type: node.type, subType: node.subType, name: node.name, @@ -75,37 +87,43 @@ function newProtocolNode () { announcements: [] } for (let m = 0; m < node.situations.length; m++) { - let situation = getProtocolNode(node.situations[m], removePersonalData, parseCode, includeIds) + let situation = getProtocolNode(node.situations[m], removePersonalData, parseCode, includeIds, includePayload) if (situation !== undefined) { - event.situations.push(situation) + object.situations.push(situation) } } for (let m = 0; m < node.announcements.length; m++) { - let announcement = getProtocolNode(node.announcements[m], removePersonalData, parseCode, includeIds) + let announcement = getProtocolNode(node.announcements[m], removePersonalData, parseCode, includeIds, includePayload) if (announcement !== undefined) { - event.announcements.push(announcement) + object.announcements.push(announcement) } } if (includeIds) { - event.id = node.id + object.id = node.id } - return event + if (includePayload) { + object.savedPayload = getSavedPayload(node) + } + return object } case 'Phase': { - let phase = { + let object = { type: node.type, subType: node.subType, name: node.name, - formula: getProtocolNode(node.formula, removePersonalData, parseCode, includeIds), - nextPhaseEvent: getProtocolNode(node.nextPhaseEvent, removePersonalData, parseCode, includeIds) + formula: getProtocolNode(node.formula, removePersonalData, parseCode, includeIds, includePayload), + nextPhaseEvent: getProtocolNode(node.nextPhaseEvent, removePersonalData, parseCode, includeIds, includePayload) } if (includeIds) { - phase.id = node.id + object.id = node.id } - return phase + if (includePayload) { + object.savedPayload = getSavedPayload(node) + } + return object } case 'Stop': { - let stop = { + let object = { type: node.type, subType: node.subType, name: node.name, @@ -113,18 +131,21 @@ function newProtocolNode () { } for (let m = 0; m < node.phases.length; m++) { - let phase = getProtocolNode(node.phases[m], removePersonalData, parseCode, includeIds) + let phase = getProtocolNode(node.phases[m], removePersonalData, parseCode, includeIds, includePayload) if (phase !== undefined) { - stop.phases.push(phase) + object.phases.push(phase) } } if (includeIds) { - stop.id = node.id + object.id = node.id } - return stop + if (includePayload) { + object.savedPayload = getSavedPayload(node) + } + return object } case 'Take Profit': { - let takeProfit = { + let object = { type: node.type, subType: node.subType, name: node.name, @@ -132,18 +153,21 @@ function newProtocolNode () { } for (let m = 0; m < node.phases.length; m++) { - let phase = getProtocolNode(node.phases[m], removePersonalData, parseCode, includeIds) + let phase = getProtocolNode(node.phases[m], removePersonalData, parseCode, includeIds, includePayload) if (phase !== undefined) { - takeProfit.phases.push(phase) + object.phases.push(phase) } } if (includeIds) { - takeProfit.id = node.id + object.id = node.id } - return takeProfit + if (includePayload) { + object.savedPayload = getSavedPayload(node) + } + return object } case 'Take Position Event': { - let event = { + let object = { type: node.type, subType: node.subType, name: node.name, @@ -152,24 +176,27 @@ function newProtocolNode () { } for (let m = 0; m < node.situations.length; m++) { - let situation = getProtocolNode(node.situations[m], removePersonalData, parseCode, includeIds) + let situation = getProtocolNode(node.situations[m], removePersonalData, parseCode, includeIds, includePayload) if (situation !== undefined) { - event.situations.push(situation) + object.situations.push(situation) } } for (let m = 0; m < node.announcements.length; m++) { - let announcement = getProtocolNode(node.announcements[m], removePersonalData, parseCode, includeIds) + let announcement = getProtocolNode(node.announcements[m], removePersonalData, parseCode, includeIds, includePayload) if (announcement !== undefined) { - event.announcements.push(announcement) + object.announcements.push(announcement) } } if (includeIds) { - event.id = node.id + object.id = node.id } - return event + if (includePayload) { + object.savedPayload = getSavedPayload(node) + } + return object } case 'Trigger On Event': { - let event = { + let object = { type: node.type, subType: node.subType, name: node.name, @@ -178,22 +205,25 @@ function newProtocolNode () { } for (let m = 0; m < node.situations.length; m++) { - let situation = getProtocolNode(node.situations[m], removePersonalData, parseCode, includeIds) - event.situations.push(situation) + let situation = getProtocolNode(node.situations[m], removePersonalData, parseCode, includeIds, includePayload) + object.situations.push(situation) } for (let m = 0; m < node.announcements.length; m++) { - let announcement = getProtocolNode(node.announcements[m], removePersonalData, parseCode, includeIds) + let announcement = getProtocolNode(node.announcements[m], removePersonalData, parseCode, includeIds, includePayload) if (announcement !== undefined) { - event.announcements.push(announcement) + object.announcements.push(announcement) } } if (includeIds) { - event.id = node.id + object.id = node.id } - return event + if (includePayload) { + object.savedPayload = getSavedPayload(node) + } + return object } case 'Trigger Off Event': { - let event = { + let object = { type: node.type, subType: node.subType, name: node.name, @@ -202,35 +232,41 @@ function newProtocolNode () { } for (let m = 0; m < node.situations.length; m++) { - let situation = getProtocolNode(node.situations[m], removePersonalData, parseCode, includeIds) + let situation = getProtocolNode(node.situations[m], removePersonalData, parseCode, includeIds, includePayload) if (situation !== undefined) { - event.situations.push(situation) + object.situations.push(situation) } } for (let m = 0; m < node.announcements.length; m++) { - let announcement = getProtocolNode(node.announcements[m], removePersonalData, parseCode, includeIds) + let announcement = getProtocolNode(node.announcements[m], removePersonalData, parseCode, includeIds, includePayload) if (announcement !== undefined) { - event.announcements.push(announcement) + object.announcements.push(announcement) } } if (includeIds) { - event.id = node.id + object.id = node.id } - return event + if (includePayload) { + object.savedPayload = getSavedPayload(node) + } + return object } case 'Initial Definition': { let object = { type: node.type, subType: node.subType, name: node.name, - stopLoss: getProtocolNode(node.stopLoss, removePersonalData, parseCode, includeIds), - takeProfit: getProtocolNode(node.takeProfit, removePersonalData, parseCode, includeIds), - positionSize: getProtocolNode(node.positionSize, removePersonalData, parseCode, includeIds), - positionRate: getProtocolNode(node.positionRate, removePersonalData, parseCode, includeIds) + stopLoss: getProtocolNode(node.stopLoss, removePersonalData, parseCode, includeIds, includePayload), + takeProfit: getProtocolNode(node.takeProfit, removePersonalData, parseCode, includeIds, includePayload), + positionSize: getProtocolNode(node.positionSize, removePersonalData, parseCode, includeIds, includePayload), + positionRate: getProtocolNode(node.positionRate, removePersonalData, parseCode, includeIds, includePayload) } if (includeIds) { object.id = node.id } + if (includePayload) { + object.savedPayload = getSavedPayload(node) + } return object } case 'Open Execution': { @@ -242,6 +278,9 @@ function newProtocolNode () { if (includeIds) { object.id = node.id } + if (includePayload) { + object.savedPayload = getSavedPayload(node) + } return object } case 'Close Execution': { @@ -253,6 +292,9 @@ function newProtocolNode () { if (includeIds) { object.id = node.id } + if (includePayload) { + object.savedPayload = getSavedPayload(node) + } return object } case 'Position Size': { @@ -260,11 +302,14 @@ function newProtocolNode () { type: node.type, subType: node.subType, name: node.name, - formula: getProtocolNode(node.formula, removePersonalData, parseCode, includeIds) + formula: getProtocolNode(node.formula, removePersonalData, parseCode, includeIds, includePayload) } if (includeIds) { object.id = node.id } + if (includePayload) { + object.savedPayload = getSavedPayload(node) + } return object } case 'Position Rate': { @@ -272,79 +317,97 @@ function newProtocolNode () { type: node.type, subType: node.subType, name: node.name, - formula: getProtocolNode(node.formula, removePersonalData, parseCode, includeIds) + formula: getProtocolNode(node.formula, removePersonalData, parseCode, includeIds, includePayload) } if (includeIds) { object.id = node.id } + if (includePayload) { + object.savedPayload = getSavedPayload(node) + } return object } case 'Trigger Stage': { - let stage = { + let object = { type: node.type, subType: node.subType, name: node.name, - triggerOn: getProtocolNode(node.triggerOn, removePersonalData, parseCode, includeIds), - triggerOff: getProtocolNode(node.triggerOff, removePersonalData, parseCode, includeIds), - takePosition: getProtocolNode(node.takePosition, removePersonalData, parseCode, includeIds) + triggerOn: getProtocolNode(node.triggerOn, removePersonalData, parseCode, includeIds, includePayload), + triggerOff: getProtocolNode(node.triggerOff, removePersonalData, parseCode, includeIds, includePayload), + takePosition: getProtocolNode(node.takePosition, removePersonalData, parseCode, includeIds, includePayload) } if (includeIds) { - stage.id = node.id + object.id = node.id } - return stage + if (includePayload) { + object.savedPayload = getSavedPayload(node) + } + return object } case 'Open Stage': { - let stage = { + let object = { type: node.type, subType: node.subType, name: node.name, - initialDefinition: getProtocolNode(node.initialDefinition, removePersonalData, parseCode, includeIds), - openExecution: getProtocolNode(node.openExecution, removePersonalData, parseCode, includeIds) + initialDefinition: getProtocolNode(node.initialDefinition, removePersonalData, parseCode, includeIds, includePayload), + openExecution: getProtocolNode(node.openExecution, removePersonalData, parseCode, includeIds, includePayload) } if (includeIds) { - stage.id = node.id + object.id = node.id } - return stage + if (includePayload) { + object.savedPayload = getSavedPayload(node) + } + return object } case 'Manage Stage': { - let stage = { + let object = { type: node.type, subType: node.subType, name: node.name, - stopLoss: getProtocolNode(node.stopLoss, removePersonalData, parseCode, includeIds), - takeProfit: getProtocolNode(node.takeProfit, removePersonalData, parseCode, includeIds) + stopLoss: getProtocolNode(node.stopLoss, removePersonalData, parseCode, includeIds, includePayload), + takeProfit: getProtocolNode(node.takeProfit, removePersonalData, parseCode, includeIds, includePayload) } if (includeIds) { - stage.id = node.id + object.id = node.id } - return stage + if (includePayload) { + object.savedPayload = getSavedPayload(node) + } + return object } case 'Close Stage': { - let stage = { + let object = { type: node.type, subType: node.subType, name: node.name, - closeExecution: getProtocolNode(node.closeExecution, removePersonalData, parseCode, includeIds) + closeExecution: getProtocolNode(node.closeExecution, removePersonalData, parseCode, includeIds, includePayload) } if (includeIds) { - stage.id = node.id + object.id = node.id } - return stage + if (includePayload) { + object.savedPayload = getSavedPayload(node) + } + return object } case 'Strategy': { - let strategy = { + let object = { type: node.type, subType: node.subType, name: node.name, - triggerStage: getProtocolNode(node.triggerStage, removePersonalData, parseCode, includeIds), - openStage: getProtocolNode(node.openStage, removePersonalData, parseCode, includeIds), - manageStage: getProtocolNode(node.manageStage, removePersonalData, parseCode, includeIds), - closeStage: getProtocolNode(node.closeStage, removePersonalData, parseCode, includeIds) + triggerStage: getProtocolNode(node.triggerStage, removePersonalData, parseCode, includeIds, includePayload), + openStage: getProtocolNode(node.openStage, removePersonalData, parseCode, includeIds, includePayload), + manageStage: getProtocolNode(node.manageStage, removePersonalData, parseCode, includeIds, includePayload), + closeStage: getProtocolNode(node.closeStage, removePersonalData, parseCode, includeIds, includePayload) } if (includeIds) { - strategy.id = node.id + object.id = node.id } - return strategy + if (includePayload) { + object.savedPayload = getSavedPayload(node) + } + return object } case 'Base Asset': { let object = { @@ -356,6 +419,9 @@ function newProtocolNode () { if (includeIds) { object.id = node.id } + if (includePayload) { + object.savedPayload = getSavedPayload(node) + } return object } case 'Time Range': { @@ -368,6 +434,9 @@ function newProtocolNode () { if (includeIds) { object.id = node.id } + if (includePayload) { + object.savedPayload = getSavedPayload(node) + } return object } case 'Time Period': { @@ -380,6 +449,9 @@ function newProtocolNode () { if (includeIds) { object.id = node.id } + if (includePayload) { + object.savedPayload = getSavedPayload(node) + } return object } case 'Slippage': { @@ -392,6 +464,9 @@ function newProtocolNode () { if (includeIds) { object.id = node.id } + if (includePayload) { + object.savedPayload = getSavedPayload(node) + } return object } case 'Fee Structure': { @@ -404,6 +479,9 @@ function newProtocolNode () { if (includeIds) { object.id = node.id } + if (includePayload) { + object.savedPayload = getSavedPayload(node) + } return object } case 'Parameters': { @@ -411,41 +489,47 @@ function newProtocolNode () { type: node.type, subType: node.subType, name: node.name, - baseAsset: getProtocolNode(node.baseAsset, removePersonalData, parseCode, includeIds), - timeRange: getProtocolNode(node.timeRange, removePersonalData, parseCode, includeIds), - timePeriod: getProtocolNode(node.timePeriod, removePersonalData, parseCode, includeIds), - slippage: getProtocolNode(node.slippage, removePersonalData, parseCode, includeIds), - feeStructure: getProtocolNode(node.feeStructure, removePersonalData, parseCode, includeIds), - key: getProtocolNode(node.key, removePersonalData, parseCode, includeIds) + baseAsset: getProtocolNode(node.baseAsset, removePersonalData, parseCode, includeIds, includePayload), + timeRange: getProtocolNode(node.timeRange, removePersonalData, parseCode, includeIds, includePayload), + timePeriod: getProtocolNode(node.timePeriod, removePersonalData, parseCode, includeIds, includePayload), + slippage: getProtocolNode(node.slippage, removePersonalData, parseCode, includeIds, includePayload), + feeStructure: getProtocolNode(node.feeStructure, removePersonalData, parseCode, includeIds, includePayload), + key: getProtocolNode(node.key, removePersonalData, parseCode, includeIds, includePayload) } if (includeIds) { object.id = node.id } + if (includePayload) { + object.savedPayload = getSavedPayload(node) + } return object } case 'Trading System': { - let tradingSystem = { + let object = { type: node.type, subType: node.subType, name: node.name, strategies: [], - parameters: getProtocolNode(node.parameters, removePersonalData, parseCode, includeIds) + parameters: getProtocolNode(node.parameters, removePersonalData, parseCode, includeIds, includePayload) } for (let m = 0; m < node.strategies.length; m++) { - let strategy = getProtocolNode(node.strategies[m], removePersonalData, parseCode, includeIds) + let strategy = getProtocolNode(node.strategies[m], removePersonalData, parseCode, includeIds, includePayload) if (strategy !== undefined) { - tradingSystem.strategies.push(strategy) + object.strategies.push(strategy) } } if (includeIds) { - tradingSystem.id = node.id + object.id = node.id } - return tradingSystem + if (includePayload) { + object.savedPayload = getSavedPayload(node) + } + return object } case 'Personal Data': { if (removePersonalData === true) { return } - let personalData = { + let object = { type: node.type, subType: node.subType, name: node.name, @@ -453,19 +537,22 @@ function newProtocolNode () { } for (let m = 0; m < node.exchangeAccounts.length; m++) { - let exchangeAccount = getProtocolNode(node.exchangeAccounts[m], removePersonalData, parseCode, includeIds) + let exchangeAccount = getProtocolNode(node.exchangeAccounts[m], removePersonalData, parseCode, includeIds, includePayload) if (exchangeAccount !== undefined) { - personalData.exchangeAccounts.push(exchangeAccount) + object.exchangeAccounts.push(exchangeAccount) } } if (includeIds) { - personalData.id = node.id + object.id = node.id } - return personalData + if (includePayload) { + object.savedPayload = getSavedPayload(node) + } + return object } case 'Exchange Account': { if (removePersonalData === true) { return } - let exchangeAccount = { + let object = { type: node.type, subType: node.subType, name: node.name, @@ -474,49 +561,58 @@ function newProtocolNode () { } for (let m = 0; m < node.assets.length; m++) { - let asset = getProtocolNode(node.assets[m], removePersonalData, parseCode, includeIds) + let asset = getProtocolNode(node.assets[m], removePersonalData, parseCode, includeIds, includePayload) if (asset !== undefined) { - exchangeAccount.assets.push(asset) + object.assets.push(asset) } } for (let m = 0; m < node.keys.length; m++) { - let key = getProtocolNode(node.keys[m], removePersonalData, parseCode, includeIds) + let key = getProtocolNode(node.keys[m], removePersonalData, parseCode, includeIds, includePayload) if (key !== undefined) { - exchangeAccount.keys.push(key) + object.keys.push(key) } } if (includeIds) { - exchangeAccount.id = node.id + object.id = node.id } - return exchangeAccount + if (includePayload) { + object.savedPayload = getSavedPayload(node) + } + return object } case 'Exchange Account Asset': { if (removePersonalData === true) { return } - let asset = { + let object = { type: node.type, subType: node.subType, name: node.name } if (includeIds) { - asset.id = node.id + object.id = node.id } - return asset + if (includePayload) { + object.savedPayload = getSavedPayload(node) + } + return object } case 'Exchange Account Key': { if (removePersonalData === true) { return } - let key = { + let object = { type: node.type, subType: node.subType, name: node.name, code: node.code } if (includeIds) { - key.id = node.id + object.id = node.id } - return key + if (includePayload) { + object.savedPayload = getSavedPayload(node) + } + return object } case 'Social Bots': { - let socialBots = { + let object = { type: node.type, subType: node.subType, name: node.name, @@ -524,19 +620,22 @@ function newProtocolNode () { } for (let m = 0; m < node.bots.length; m++) { - let bot = getProtocolNode(node.bots[m], removePersonalData, parseCode, includeIds) + let bot = getProtocolNode(node.bots[m], removePersonalData, parseCode, includeIds, includePayload) if (bot !== undefined) { - socialBots.bots.push(bot) + object.bots.push(bot) } } if (includeIds) { - socialBots.id = node.id + object.id = node.id } - return socialBots + if (includePayload) { + object.savedPayload = getSavedPayload(node) + } + return object } case 'Telegram Bot': { if (removePersonalData === true) { return } - let bot = { + let object = { type: node.type, subType: node.subType, name: node.name, @@ -545,15 +644,18 @@ function newProtocolNode () { } for (let m = 0; m < node.announcements.length; m++) { - let announcement = getProtocolNode(node.announcements[m], removePersonalData, parseCode, includeIds) + let announcement = getProtocolNode(node.announcements[m], removePersonalData, parseCode, includeIds, includePayload) if (announcement !== undefined) { - bot.announcements.push(announcement) + object.announcements.push(announcement) } } if (includeIds) { - bot.id = node.id + object.id = node.id } - return bot + if (includePayload) { + object.savedPayload = getSavedPayload(node) + } + return object } case 'Announcement': { let object = { @@ -565,10 +667,13 @@ function newProtocolNode () { if (includeIds) { object.id = node.id } + if (includePayload) { + object.savedPayload = getSavedPayload(node) + } return object } case 'Layer Manager': { - let layerManager = { + let object = { type: node.type, subType: node.subType, name: node.name, @@ -576,15 +681,18 @@ function newProtocolNode () { } for (let m = 0; m < node.layers.length; m++) { - let layer = getProtocolNode(node.layers[m], removePersonalData, parseCode, includeIds) + let layer = getProtocolNode(node.layers[m], removePersonalData, parseCode, includeIds, includePayload) if (layer !== undefined) { - layerManager.layers.push(layer) + object.layers.push(layer) } } if (includeIds) { - layerManager.id = node.id + object.id = node.id } - return layerManager + if (includePayload) { + object.savedPayload = getSavedPayload(node) + } + return object } case 'Layer': { let object = { @@ -596,10 +704,13 @@ function newProtocolNode () { if (includeIds) { object.id = node.id } + if (includePayload) { + object.savedPayload = getSavedPayload(node) + } return object } case 'Task Manager': { - let taskManager = { + let object = { type: node.type, subType: node.subType, name: node.name, @@ -607,30 +718,36 @@ function newProtocolNode () { } for (let m = 0; m < node.tasks.length; m++) { - let task = getProtocolNode(node.tasks[m], removePersonalData, parseCode, includeIds) + let task = getProtocolNode(node.tasks[m], removePersonalData, parseCode, includeIds, includePayload) if (task !== undefined) { - taskManager.tasks.push(task) + object.tasks.push(task) } } if (includeIds) { - taskManager.id = node.id + object.id = node.id } - return taskManager + if (includePayload) { + object.savedPayload = getSavedPayload(node) + } + return object } case 'Task': { let object = { type: node.type, subType: node.subType, name: node.name, - bot: getProtocolNode(node.bot, removePersonalData, parseCode, includeIds) + bot: getProtocolNode(node.bot, removePersonalData, parseCode, includeIds, includePayload) } if (includeIds) { object.id = node.id } + if (includePayload) { + object.savedPayload = getSavedPayload(node) + } return object } case 'Sensor': { - let bot = { + let object = { type: node.type, subType: node.subType, name: node.name, @@ -639,21 +756,24 @@ function newProtocolNode () { } for (let m = 0; m < node.processes.length; m++) { - let process = getProtocolNode(node.processes[m], removePersonalData, parseCode, includeIds) + let process = getProtocolNode(node.processes[m], removePersonalData, parseCode, includeIds, includePayload) if (process !== undefined) { - bot.processes.push(process) + object.processes.push(process) } } if (parseCode) { - bot.code = JSON.parse(bot.code) + object.code = JSON.parse(node.code) } if (includeIds) { - bot.id = node.id + object.id = node.id } - return bot + if (includePayload) { + object.savedPayload = getSavedPayload(node) + } + return object } case 'Indicator': { - let bot = { + let object = { type: node.type, subType: node.subType, name: node.name, @@ -662,21 +782,24 @@ function newProtocolNode () { } for (let m = 0; m < node.processes.length; m++) { - let process = getProtocolNode(node.processes[m], removePersonalData, parseCode, includeIds) + let process = getProtocolNode(node.processes[m], removePersonalData, parseCode, includeIds, includePayload) if (process !== undefined) { - bot.processes.push(process) + object.processes.push(process) } } if (parseCode) { - bot.code = JSON.parse(bot.code) + object.code = JSON.parse(node.code) } if (includeIds) { - bot.id = node.id + object.id = node.id } - return bot + if (includePayload) { + object.savedPayload = getSavedPayload(node) + } + return object } case 'Trading Engine': { - let bot = { + let object = { type: node.type, subType: node.subType, name: node.name, @@ -685,18 +808,21 @@ function newProtocolNode () { } for (let m = 0; m < node.processes.length; m++) { - let process = getProtocolNode(node.processes[m], removePersonalData, parseCode, includeIds) + let process = getProtocolNode(node.processes[m], removePersonalData, parseCode, includeIds, includePayload) if (process !== undefined) { - bot.processes.push(process) + object.processes.push(process) } } if (parseCode) { - bot.code = JSON.parse(bot.code) + object.code = JSON.parse(node.code) } if (includeIds) { - bot.id = node.id + object.id = node.id } - return bot + if (includePayload) { + object.savedPayload = getSavedPayload(node) + } + return object } case 'Process': { let object = { @@ -704,26 +830,28 @@ function newProtocolNode () { subType: node.subType, name: node.name, code: node.code, - session: getProtocolNode(node.session, removePersonalData, parseCode, includeIds) + session: getProtocolNode(node.session, removePersonalData, parseCode, includeIds, includePayload) } if (parseCode) { - object.code = JSON.parse(object.code) + object.code = JSON.parse(node.code) } if (includeIds) { object.id = node.id } + if (includePayload) { + object.savedPayload = getSavedPayload(node) + } return object } - case 'Backtesting Session': { let object = { type: node.type, subType: node.subType, name: node.name, code: node.code, - parameters: getProtocolNode(node.parameters, removePersonalData, parseCode, includeIds), - layerManager: getProtocolNode(node.layerManager, removePersonalData, parseCode, includeIds), - socialBots: getProtocolNode(node.socialBots, removePersonalData, parseCode, includeIds) + parameters: getProtocolNode(node.parameters, removePersonalData, parseCode, includeIds, includePayload), + layerManager: getProtocolNode(node.layerManager, removePersonalData, parseCode, includeIds, includePayload), + socialBots: getProtocolNode(node.socialBots, removePersonalData, parseCode, includeIds, includePayload) } if (parseCode) { object.code = JSON.parse(object.code) @@ -731,37 +859,41 @@ function newProtocolNode () { if (includeIds) { object.id = node.id } + if (includePayload) { + object.savedPayload = getSavedPayload(node) + } return object } - case 'Live Trading Session': { let object = { type: node.type, subType: node.subType, name: node.name, code: node.code, - parameters: getProtocolNode(node.parameters, removePersonalData, parseCode, includeIds), - layerManager: getProtocolNode(node.layerManager, removePersonalData, parseCode, includeIds), - socialBots: getProtocolNode(node.socialBots, removePersonalData, parseCode, includeIds) + parameters: getProtocolNode(node.parameters, removePersonalData, parseCode, includeIds, includePayload), + layerManager: getProtocolNode(node.layerManager, removePersonalData, parseCode, includeIds, includePayload), + socialBots: getProtocolNode(node.socialBots, removePersonalData, parseCode, includeIds, includePayload) } if (parseCode) { - object.code = JSON.parse(object.code) + object.code = JSON.parse(node.code) } if (includeIds) { object.id = node.id } + if (includePayload) { + object.savedPayload = getSavedPayload(node) + } return object } - case 'Fordward Testing Session': { let object = { type: node.type, subType: node.subType, name: node.name, code: node.code, - parameters: getProtocolNode(node.parameters, removePersonalData, parseCode, includeIds), - layerManager: getProtocolNode(node.layerManager, removePersonalData, parseCode, includeIds), - socialBots: getProtocolNode(node.socialBots, removePersonalData, parseCode, includeIds) + parameters: getProtocolNode(node.parameters, removePersonalData, parseCode, includeIds, includePayload), + layerManager: getProtocolNode(node.layerManager, removePersonalData, parseCode, includeIds, includePayload), + socialBots: getProtocolNode(node.socialBots, removePersonalData, parseCode, includeIds, includePayload) } if (parseCode) { object.code = JSON.parse(object.code) @@ -769,28 +901,32 @@ function newProtocolNode () { if (includeIds) { object.id = node.id } + if (includePayload) { + object.savedPayload = getSavedPayload(node) + } return object } - case 'Paper Trading Session': { let object = { type: node.type, subType: node.subType, name: node.name, code: node.code, - parameters: getProtocolNode(node.parameters, removePersonalData, parseCode, includeIds), - layerManager: getProtocolNode(node.layerManager, removePersonalData, parseCode, includeIds), - socialBots: getProtocolNode(node.socialBots, removePersonalData, parseCode, includeIds) + parameters: getProtocolNode(node.parameters, removePersonalData, parseCode, includeIds, includePayload), + layerManager: getProtocolNode(node.layerManager, removePersonalData, parseCode, includeIds, includePayload), + socialBots: getProtocolNode(node.socialBots, removePersonalData, parseCode, includeIds, includePayload) } if (parseCode) { - object.code = JSON.parse(object.code) + object.code = JSON.parse(node.code) } if (includeIds) { object.id = node.id } + if (includePayload) { + object.savedPayload = getSavedPayload(node) + } return object } - case 'Network Node': { let object = { type: node.type, @@ -800,7 +936,7 @@ function newProtocolNode () { } if (node.taskManagers !== undefined) { for (let m = 0; m < node.taskManagers.length; m++) { - let taskManager = getProtocolNode(node.taskManagers[m], removePersonalData, parseCode, includeIds) + let taskManager = getProtocolNode(node.taskManagers[m], removePersonalData, parseCode, includeIds, includePayload) if (taskManager !== undefined) { object.taskManagers.push(taskManager) } @@ -809,6 +945,9 @@ function newProtocolNode () { if (includeIds) { object.id = node.id } + if (includePayload) { + object.savedPayload = getSavedPayload(node) + } return object } case 'Network': { @@ -820,7 +959,7 @@ function newProtocolNode () { } if (node.networkNodes !== undefined) { for (let m = 0; m < node.networkNodes.length; m++) { - let networkNode = getProtocolNode(node.networkNodes[m], removePersonalData, parseCode, includeIds) + let networkNode = getProtocolNode(node.networkNodes[m], removePersonalData, parseCode, includeIds, includePayload) if (networkNode !== undefined) { object.networkNodes.push(networkNode) } @@ -829,6 +968,9 @@ function newProtocolNode () { if (includeIds) { object.id = node.id } + if (includePayload) { + object.savedPayload = getSavedPayload(node) + } return object } case 'Definition': { @@ -836,15 +978,45 @@ function newProtocolNode () { type: node.type, subType: node.subType, name: node.name, - tradingSystem: getProtocolNode(node.tradingSystem, removePersonalData, parseCode, includeIds), - personalData: getProtocolNode(node.personalData, removePersonalData, parseCode, includeIds), - network: getProtocolNode(node.network, removePersonalData, parseCode, includeIds) + tradingSystem: getProtocolNode(node.tradingSystem, removePersonalData, parseCode, includeIds, includePayload), + personalData: getProtocolNode(node.personalData, removePersonalData, parseCode, includeIds, includePayload), + network: getProtocolNode(node.network, removePersonalData, parseCode, includeIds, includePayload) } if (includeIds) { object.id = node.id } + if (includePayload) { + object.savedPayload = getSavedPayload(node) + } return object } } } + + function getSavedPayload (node) { + if (node.payload === undefined) { + console.log(node) + } + let savedPayload = { + position: { + x: node.payload.position.x, + y: node.payload.position.y + }, + targetPosition: { + x: node.payload.targetPosition.x, + y: node.payload.targetPosition.y + }, + floatingObject: { + isPinned: node.payload.floatingObject.isPinned, + isFrozen: (node.payload.floatingObject.isFrozen && node.payload.floatingObject.frozenManually), + isCollapsed: (node.payload.floatingObject.isCollapsed && node.payload.floatingObject.collapsedManually), + isTensed: (node.payload.floatingObject.isTensed && node.payload.floatingObject.tensedManually) + }, + uiObject: { + isRunning: node.payload.uiObject.isRunning, + shortcutKey: node.payload.uiObject.shortcutKey + } + } + return savedPayload + } } diff --git a/StrategySpace/Workspace/FunctionLibraries/StringifyNode.js b/StrategySpace/Workspace/FunctionLibraries/StringifyNode.js deleted file mode 100644 index 1ec385fd4..000000000 --- a/StrategySpace/Workspace/FunctionLibraries/StringifyNode.js +++ /dev/null @@ -1,773 +0,0 @@ -function newStringifyNode () { - thisObject = { - prepareForStringify: prepareForStringify - } - return thisObject - - function prepareForStringify (node, removePersonalData) { - if (node === undefined) { return } - switch (node.type) { - case 'Code': - { - let code = { - id: node.id, - type: node.type, - subType: node.subType, - name: node.name, - code: node.code, - savedPayload: getSavedPayload(node) - } - return code - } - case 'Condition': - { - let condition = { - id: node.id, - type: node.type, - subType: node.subType, - name: node.name, - code: prepareForStringify(node.code, removePersonalData), - savedPayload: getSavedPayload(node) - } - return condition - } - case 'Situation': { - let situation = { - id: node.id, - type: node.type, - subType: node.subType, - name: node.name, - conditions: [], - savedPayload: getSavedPayload(node) - } - - for (let m = 0; m < node.conditions.length; m++) { - let condition = prepareForStringify(node.conditions[m], removePersonalData) - situation.conditions.push(condition) - } - return situation - } - case 'Formula': - { - let formula = { - id: node.id, - type: node.type, - subType: node.subType, - name: node.name, - code: node.code, - savedPayload: getSavedPayload(node) - } - return formula - } - case 'Next Phase Event': - { - let event = { - id: node.id, - type: node.type, - subType: node.subType, - name: node.name, - situations: [], - announcements: [], - savedPayload: getSavedPayload(node) - } - for (let m = 0; m < node.situations.length; m++) { - let situation = prepareForStringify(node.situations[m], removePersonalData) - event.situations.push(situation) - } - if (node.announcements !== undefined) { - for (let m = 0; m < node.announcements.length; m++) { - let announcement = prepareForStringify(node.announcements[m], removePersonalData) - event.announcements.push(announcement) - } - } - return event - } - case 'Phase': { - let phase = { - id: node.id, - type: node.type, - subType: node.subType, - name: node.name, - formula: prepareForStringify(node.formula, removePersonalData), - nextPhaseEvent: prepareForStringify(node.nextPhaseEvent, removePersonalData), - savedPayload: getSavedPayload(node) - } - return phase - } - case 'Stop': { - let stop = { - id: node.id, - type: node.type, - subType: node.subType, - name: node.name, - phases: [], - maxPhases: node.maxPhases, - savedPayload: getSavedPayload(node) - } - - for (let m = 0; m < node.phases.length; m++) { - let phase = prepareForStringify(node.phases[m], removePersonalData) - stop.phases.push(phase) - } - return stop - } - case 'Take Profit': { - let takeProfit = { - id: node.id, - type: node.type, - subType: node.subType, - name: node.name, - phases: [], - maxPhases: node.maxPhases, - savedPayload: getSavedPayload(node) - } - - for (let m = 0; m < node.phases.length; m++) { - let phase = prepareForStringify(node.phases[m], removePersonalData) - takeProfit.phases.push(phase) - } - return takeProfit - } - case 'Take Position Event': { - let event = { - id: node.id, - type: node.type, - subType: node.subType, - name: node.name, - situations: [], - announcements: [], - savedPayload: getSavedPayload(node) - } - - for (let m = 0; m < node.situations.length; m++) { - let situation = prepareForStringify(node.situations[m], removePersonalData) - event.situations.push(situation) - } - if (node.announcements !== undefined) { - for (let m = 0; m < node.announcements.length; m++) { - let announcement = prepareForStringify(node.announcements[m], removePersonalData) - event.announcements.push(announcement) - } - } - return event - } - case 'Trigger On Event': { - let event = { - id: node.id, - type: node.type, - subType: node.subType, - name: node.name, - situations: [], - announcements: [], - savedPayload: getSavedPayload(node) - } - - for (let m = 0; m < node.situations.length; m++) { - let situation = prepareForStringify(node.situations[m], removePersonalData) - event.situations.push(situation) - } - if (node.announcements !== undefined) { - for (let m = 0; m < node.announcements.length; m++) { - let announcement = prepareForStringify(node.announcements[m], removePersonalData) - event.announcements.push(announcement) - } - } - return event - } - case 'Trigger Off Event': { - let event = { - id: node.id, - type: node.type, - subType: node.subType, - name: node.name, - situations: [], - announcements: [], - savedPayload: getSavedPayload(node) - } - - for (let m = 0; m < node.situations.length; m++) { - let situation = prepareForStringify(node.situations[m], removePersonalData) - event.situations.push(situation) - } - if (node.announcements !== undefined) { - for (let m = 0; m < node.announcements.length; m++) { - let announcement = prepareForStringify(node.announcements[m], removePersonalData) - event.announcements.push(announcement) - } - } - return event - } - case 'Initial Definition': { - let object = { - id: node.id, - type: node.type, - subType: node.subType, - name: node.name, - stopLoss: prepareForStringify(node.stopLoss, removePersonalData), - takeProfit: prepareForStringify(node.takeProfit, removePersonalData), - positionSize: prepareForStringify(node.positionSize, removePersonalData), - positionRate: prepareForStringify(node.positionRate, removePersonalData), - savedPayload: getSavedPayload(node) - } - return object - } - case 'Open Execution': { - let object = { - id: node.id, - type: node.type, - subType: node.subType, - name: node.name, - savedPayload: getSavedPayload(node) - } - return object - } - case 'Close Execution': { - let object = { - id: node.id, - type: node.type, - subType: node.subType, - name: node.name, - savedPayload: getSavedPayload(node) - } - return object - } - case 'Position Size': { - let object = { - id: node.id, - type: node.type, - subType: node.subType, - name: node.name, - formula: prepareForStringify(node.formula, removePersonalData), - savedPayload: getSavedPayload(node) - } - return object - } - case 'Position Rate': { - let object = { - id: node.id, - type: node.type, - subType: node.subType, - name: node.name, - formula: prepareForStringify(node.formula, removePersonalData), - savedPayload: getSavedPayload(node) - } - return object - } - case 'Trigger Stage': { - let stage = { - id: node.id, - type: node.type, - subType: node.subType, - name: node.name, - triggerOn: prepareForStringify(node.triggerOn, removePersonalData), - triggerOff: prepareForStringify(node.triggerOff, removePersonalData), - takePosition: prepareForStringify(node.takePosition, removePersonalData), - savedPayload: getSavedPayload(node) - } - return stage - } - case 'Open Stage': { - let stage = { - id: node.id, - type: node.type, - subType: node.subType, - name: node.name, - initialDefinition: prepareForStringify(node.initialDefinition, removePersonalData), - openExecution: prepareForStringify(node.openExecution, removePersonalData), - savedPayload: getSavedPayload(node) - } - return stage - } - case 'Manage Stage': { - let stage = { - id: node.id, - type: node.type, - subType: node.subType, - name: node.name, - stopLoss: prepareForStringify(node.stopLoss, removePersonalData), - takeProfit: prepareForStringify(node.takeProfit, removePersonalData), - savedPayload: getSavedPayload(node) - } - return stage - } - case 'Close Stage': { - let stage = { - id: node.id, - type: node.type, - subType: node.subType, - name: node.name, - closeExecution: prepareForStringify(node.closeExecution, removePersonalData), - savedPayload: getSavedPayload(node) - } - return stage - } - case 'Strategy': { - let strategy = { - id: node.id, - type: node.type, - subType: node.subType, - name: node.name, - triggerStage: prepareForStringify(node.triggerStage, removePersonalData), - openStage: prepareForStringify(node.openStage, removePersonalData), - manageStage: prepareForStringify(node.manageStage, removePersonalData), - closeStage: prepareForStringify(node.closeStage, removePersonalData), - savedPayload: getSavedPayload(node) - } - return strategy - } - case 'Base Asset': { - let object = { - id: node.id, - type: node.type, - subType: node.subType, - name: node.name, - code: node.code, - savedPayload: getSavedPayload(node) - } - return object - } - case 'Time Range': { - let object = { - id: node.id, - type: node.type, - subType: node.subType, - name: node.name, - code: node.code, - savedPayload: getSavedPayload(node) - } - return object - } - case 'Time Period': { - let object = { - id: node.id, - type: node.type, - subType: node.subType, - name: node.name, - code: node.code, - savedPayload: getSavedPayload(node) - } - return object - } - case 'Slippage': { - let object = { - id: node.id, - type: node.type, - subType: node.subType, - name: node.name, - code: node.code, - savedPayload: getSavedPayload(node) - } - return object - } - case 'Fee Structure': { - let object = { - id: node.id, - type: node.type, - subType: node.subType, - name: node.name, - code: node.code, - savedPayload: getSavedPayload(node) - } - return object - } - case 'Parameters': { - let object = { - id: node.id, - type: node.type, - subType: node.subType, - name: node.name, - baseAsset: prepareForStringify(node.baseAsset, removePersonalData), - timeRange: prepareForStringify(node.timeRange, removePersonalData), - timePeriod: prepareForStringify(node.timePeriod, removePersonalData), - slippage: prepareForStringify(node.slippage, removePersonalData), - feeStructure: prepareForStringify(node.feeStructure, removePersonalData), - key: prepareForStringify(node.key, removePersonalData), - savedPayload: getSavedPayload(node) - } - return object - } - case 'Trading System': { - let tradingSystem = { - id: node.id, - type: node.type, - subType: node.subType, - name: node.name, - strategies: [], - parameters: prepareForStringify(node.parameters, removePersonalData), - savedPayload: getSavedPayload(node) - } - - for (let m = 0; m < node.strategies.length; m++) { - let strategy = prepareForStringify(node.strategies[m], removePersonalData) - tradingSystem.strategies.push(strategy) - } - return tradingSystem - } - case 'Personal Data': { - if (removePersonalData === true) { return } - let personalData = { - id: node.id, - type: node.type, - subType: node.subType, - name: node.name, - exchangeAccounts: [], - savedPayload: getSavedPayload(node) - } - - for (let m = 0; m < node.exchangeAccounts.length; m++) { - let exchangeAccount = prepareForStringify(node.exchangeAccounts[m]) - personalData.exchangeAccounts.push(exchangeAccount) - } - return personalData - } - case 'Exchange Account': { - if (removePersonalData === true) { return } - let exchangeAccount = { - id: node.id, - type: node.type, - subType: node.subType, - name: node.name, - assets: [], - keys: [], - savedPayload: getSavedPayload(node) - } - - for (let m = 0; m < node.assets.length; m++) { - let asset = prepareForStringify(node.assets[m], removePersonalData) - exchangeAccount.assets.push(asset) - } - - for (let m = 0; m < node.keys.length; m++) { - let key = prepareForStringify(node.keys[m], removePersonalData) - exchangeAccount.keys.push(key) - } - return exchangeAccount - } - case 'Exchange Account Asset': { - if (removePersonalData === true) { return } - let asset = { - id: node.id, - type: node.type, - subType: node.subType, - name: node.name, - savedPayload: getSavedPayload(node) - } - return asset - } - case 'Exchange Account Key': { - if (removePersonalData === true) { return } - let key = { - id: node.id, - type: node.type, - subType: node.subType, - name: node.name, - code: node.code, - savedPayload: getSavedPayload(node) - } - return key - } - case 'Social Bots': { - let object = { - id: node.id, - type: node.type, - subType: node.subType, - name: node.name, - bots: [], - savedPayload: getSavedPayload(node) - } - - if (node.bots !== undefined) { - for (let m = 0; m < node.bots.length; m++) { - let bot = prepareForStringify(node.bots[m], removePersonalData) - object.bots.push(bot) - } - } - return object - } - case 'Telegram Bot': { - let object = { - id: node.id, - type: node.type, - subType: node.subType, - name: node.name, - code: node.code, - announcements: [], - savedPayload: getSavedPayload(node) - } - - if (node.announcements !== undefined) { - for (let m = 0; m < node.announcements.length; m++) { - let announcement = prepareForStringify(node.announcements[m], removePersonalData) - object.announcements.push(announcement) - } - } - return object - } - case 'Announcement': { - let object = { - id: node.id, - type: node.type, - subType: node.subType, - name: node.name, - code: node.code, - savedPayload: getSavedPayload(node) - } - return object - } - case 'Layer Manager': { - let layerManager = { - id: node.id, - type: node.type, - subType: node.subType, - name: node.name, - layers: [], - savedPayload: getSavedPayload(node) - } - - if (node.layers !== undefined) { - for (let m = 0; m < node.layers.length; m++) { - let layer = prepareForStringify(node.layers[m], removePersonalData) - layerManager.layers.push(layer) - } - } - return layerManager - } - case 'Layer': { - let object = { - id: node.id, - type: node.type, - subType: node.subType, - name: node.name, - code: node.code, - savedPayload: getSavedPayload(node) - } - return object - } - case 'Task Manager': { - let taskManager = { - id: node.id, - type: node.type, - subType: node.subType, - name: node.name, - tasks: [], - savedPayload: getSavedPayload(node) - } - - if (node.tasks !== undefined) { - for (let m = 0; m < node.tasks.length; m++) { - let task = prepareForStringify(node.tasks[m], removePersonalData) - taskManager.tasks.push(task) - } - } - return taskManager - } - case 'Task': { - let object = { - id: node.id, - type: node.type, - subType: node.subType, - name: node.name, - bot: prepareForStringify(node.bot, removePersonalData), - savedPayload: getSavedPayload(node) - } - return object - } - case 'Sensor': { - let bot = { - id: node.id, - type: node.type, - subType: node.subType, - name: node.name, - code: node.code, - processes: [], - savedPayload: getSavedPayload(node) - } - - for (let m = 0; m < node.processes.length; m++) { - let process = prepareForStringify(node.processes[m], removePersonalData) - bot.processes.push(process) - } - - return bot - } - case 'Indicator': { - let bot = { - id: node.id, - type: node.type, - subType: node.subType, - name: node.name, - code: node.code, - processes: [], - savedPayload: getSavedPayload(node) - } - - for (let m = 0; m < node.processes.length; m++) { - let process = prepareForStringify(node.processes[m], removePersonalData) - bot.processes.push(process) - } - - return bot - } - case 'Trading Engine': { - let bot = { - id: node.id, - type: node.type, - subType: node.subType, - name: node.name, - code: node.code, - processes: [], - savedPayload: getSavedPayload(node) - } - - for (let m = 0; m < node.processes.length; m++) { - let process = prepareForStringify(node.processes[m], removePersonalData) - bot.processes.push(process) - } - - return bot - } - case 'Process': { - let object = { - id: node.id, - type: node.type, - subType: node.subType, - name: node.name, - code: node.code, - session: prepareForStringify(node.session, removePersonalData), - savedPayload: getSavedPayload(node) - } - return object - } - case 'Backtesting Session': { - let object = { - id: node.id, - type: node.type, - subType: node.subType, - name: node.name, - code: node.code, - parameters: prepareForStringify(node.parameters, removePersonalData), - layerManager: prepareForStringify(node.layerManager, removePersonalData), - socialBots: prepareForStringify(node.socialBots, removePersonalData), - savedPayload: getSavedPayload(node) - } - return object - } - case 'Live Trading Session': { - let object = { - id: node.id, - type: node.type, - subType: node.subType, - name: node.name, - code: node.code, - parameters: prepareForStringify(node.parameters, removePersonalData), - layerManager: prepareForStringify(node.layerManager, removePersonalData), - socialBots: prepareForStringify(node.socialBots, removePersonalData), - savedPayload: getSavedPayload(node) - } - return object - } - case 'Fordward Testing Session': { - let object = { - id: node.id, - type: node.type, - subType: node.subType, - name: node.name, - code: node.code, - parameters: prepareForStringify(node.parameters, removePersonalData), - layerManager: prepareForStringify(node.layerManager, removePersonalData), - socialBots: prepareForStringify(node.socialBots, removePersonalData), - savedPayload: getSavedPayload(node) - } - return object - } - case 'Paper Trading Session': { - let object = { - id: node.id, - type: node.type, - subType: node.subType, - name: node.name, - code: node.code, - parameters: prepareForStringify(node.parameters, removePersonalData), - layerManager: prepareForStringify(node.layerManager, removePersonalData), - socialBots: prepareForStringify(node.socialBots, removePersonalData), - savedPayload: getSavedPayload(node) - } - return object - } - case 'Network Node': { - let object = { - id: node.id, - type: node.type, - subType: node.subType, - name: node.name, - taskManagers: [], - savedPayload: getSavedPayload(node) - } - if (node.taskManagers !== undefined) { - for (let m = 0; m < node.taskManagers.length; m++) { - let taskManager = prepareForStringify(node.taskManagers[m], removePersonalData) - object.taskManagers.push(taskManager) - } - } - return object - } - case 'Network': { - let object = { - id: node.id, - type: node.type, - subType: node.subType, - name: node.name, - networkNodes: [], - savedPayload: getSavedPayload(node) - } - if (node.networkNodes !== undefined) { - for (let m = 0; m < node.networkNodes.length; m++) { - let networkNode = prepareForStringify(node.networkNodes[m], removePersonalData) - object.networkNodes.push(networkNode) - } - } - return object - } - case 'Definition': { - let object = { - id: node.id, - type: node.type, - subType: node.subType, - name: node.name, - tradingSystem: prepareForStringify(node.tradingSystem, removePersonalData), - personalData: prepareForStringify(node.personalData, removePersonalData), - network: prepareForStringify(node.network, removePersonalData), - savedPayload: getSavedPayload(node) - } - return object - } - } - } - - function getSavedPayload (node) { - if (node.payload === undefined) { - console.log(node) - } - let savedPayload = { - position: { - x: node.payload.position.x, - y: node.payload.position.y - }, - targetPosition: { - x: node.payload.targetPosition.x, - y: node.payload.targetPosition.y - }, - floatingObject: { - isPinned: node.payload.floatingObject.isPinned, - isFrozen: (node.payload.floatingObject.isFrozen && node.payload.floatingObject.frozenManually), - isCollapsed: (node.payload.floatingObject.isCollapsed && node.payload.floatingObject.collapsedManually), - isTensed: (node.payload.floatingObject.isTensed && node.payload.floatingObject.tensedManually) - }, - uiObject: { - isRunning: node.payload.uiObject.isRunning, - shortcutKey: node.payload.uiObject.shortcutKey - } - } - return savedPayload - } -} diff --git a/StrategySpace/Workspace/Workspace.js b/StrategySpace/Workspace/Workspace.js index 43b13aa87..b39b051c3 100644 --- a/StrategySpace/Workspace/Workspace.js +++ b/StrategySpace/Workspace/Workspace.js @@ -48,7 +48,6 @@ function newWorkspace () { let functionLibraryNodeDeleter = newNodeDeleter() let functionLibraryPartsFromNodes = newPartsFromNodes() let functionLibraryProtocolNode = newProtocolNode() - let functionLibraryStringifyNodes = newStringifyNode() let functionLibraryTaskFunctions = newTaskFunctions() let functionLibrarySessionFunctions = newSessionFunctions() let functionLibraryShortcutKeys = newShortcutKeys() @@ -132,7 +131,7 @@ function newWorkspace () { let stringifyReadyNodes = [] for (let i = 0; i < thisObject.workspaceNode.rootNodes.length; i++) { let rootNode = thisObject.workspaceNode.rootNodes[i] - let node = functionLibraryStringifyNodes.prepareForStringify(rootNode, removePersonalData) + let node = functionLibraryProtocolNode.getProtocolNode(rootNode, removePersonalData, false, true, true) if (node) { stringifyReadyNodes.push(node) } From f24b05a7be99b6cd2ae90d641b280c2ba7ef3623 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Sat, 19 Oct 2019 12:27:21 +0200 Subject: [PATCH 42/48] Show shortcut key with crtl --- Canvas.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/Canvas.js b/Canvas.js index fc63decf1..3475ecff0 100644 --- a/Canvas.js +++ b/Canvas.js @@ -286,8 +286,14 @@ function newCanvas () { nodeOnFocus.payload.uiObject.shortcutKey = event.key nodeOnFocus.payload.uiObject.setValue('Shortcut Key: Ctrl + ' + event.key) } + return + } + } + + if (event.ctrlKey === true && nodeOnFocus !== undefined) { + if (nodeOnFocus.payload.uiObject.shortcutKey !== undefined && nodeOnFocus.payload.uiObject.shortcutKey !== '') { + nodeOnFocus.payload.uiObject.setValue('Shortcut Key: Ctrl + ' + nodeOnFocus.payload.uiObject.shortcutKey) } - return } } From f160f399e11ab52d36cbc261885fb4e85a0a68b0 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Sat, 19 Oct 2019 13:35:08 +0200 Subject: [PATCH 43/48] Fix problem to debug task server --- .../FunctionLibraries/ProtocolNode.js | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/StrategySpace/Workspace/FunctionLibraries/ProtocolNode.js b/StrategySpace/Workspace/FunctionLibraries/ProtocolNode.js index 13a2f564f..e22043249 100644 --- a/StrategySpace/Workspace/FunctionLibraries/ProtocolNode.js +++ b/StrategySpace/Workspace/FunctionLibraries/ProtocolNode.js @@ -416,6 +416,9 @@ function newProtocolNode () { name: node.name, code: node.code } + if (parseCode) { + object.code = JSON.parse(node.code) + } if (includeIds) { object.id = node.id } @@ -431,6 +434,9 @@ function newProtocolNode () { name: node.name, code: node.code } + if (parseCode) { + object.code = JSON.parse(node.code) + } if (includeIds) { object.id = node.id } @@ -461,6 +467,9 @@ function newProtocolNode () { name: node.name, code: node.code } + if (parseCode) { + object.code = JSON.parse(node.code) + } if (includeIds) { object.id = node.id } @@ -476,6 +485,9 @@ function newProtocolNode () { name: node.name, code: node.code } + if (parseCode) { + object.code = JSON.parse(node.code) + } if (includeIds) { object.id = node.id } @@ -649,6 +661,9 @@ function newProtocolNode () { object.announcements.push(announcement) } } + if (parseCode) { + object.code = JSON.parse(node.code) + } if (includeIds) { object.id = node.id } @@ -701,6 +716,9 @@ function newProtocolNode () { name: node.name, code: node.code } + if (parseCode) { + object.code = JSON.parse(node.code) + } if (includeIds) { object.id = node.id } From bc3d3983cc684c28193a1d517a338d66ff8d3a18 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Mon, 21 Oct 2019 09:24:21 +0200 Subject: [PATCH 44/48] Adding Formula Node to Announcement --- FloatingSpace/StrategyPart.js | 2 +- FloatingSpace/StrategyPartConstructor.js | 20 ++++++++++++++++--- .../FunctionLibraries/NodeChildren.js | 6 ++++++ .../FunctionLibraries/NodeDeleter.js | 3 +++ .../Workspace/FunctionLibraries/OnFocus.js | 4 ++++ .../FunctionLibraries/PartsFromNodes.js | 3 +++ .../FunctionLibraries/ProtocolNode.js | 3 ++- .../FunctionLibraries/ShortcutKeys.js | 5 +++++ 8 files changed, 41 insertions(+), 5 deletions(-) diff --git a/FloatingSpace/StrategyPart.js b/FloatingSpace/StrategyPart.js index 092aa0e1b..2f4bdb194 100644 --- a/FloatingSpace/StrategyPart.js +++ b/FloatingSpace/StrategyPart.js @@ -389,7 +389,7 @@ function newStrategyPart () { compatibleSubType = undefined break case 'Formula': - compatibleType = '->' + 'Position Size' + '->' + 'Position Rate' + '->' + 'Phase' + '->' + compatibleType = '->' + 'Position Size' + '->' + 'Position Rate' + '->' + 'Phase' + '->' + 'Announcement' + '->' compatibleSubType = undefined break case 'Next Phase Event': diff --git a/FloatingSpace/StrategyPartConstructor.js b/FloatingSpace/StrategyPartConstructor.js index 217bc9ab0..a47d7728f 100644 --- a/FloatingSpace/StrategyPartConstructor.js +++ b/FloatingSpace/StrategyPartConstructor.js @@ -508,6 +508,20 @@ function newStrategyPartConstructor () { strategyPart.codeEditor.initialize() strategyPart.codeEditor.container.connectToParent(strategyPart.container, false, false, true, true, false, false, false, false) addLeftIcons(menuItemsInitialValues, floatingObject) + menuItemsInitialValues.push( + { + action: 'Add Formula', + actionFunction: payload.onMenuItemClick, + label: 'Add Formula', + visible: true, + relatedStrategyPart: 'Formula', + rawRadius: 8, + targetRadius: 0, + currentRadius: 0, + angle: -60 + } + ) + addLeftIcons(menuItemsInitialValues, floatingObject) menuItemsInitialValues.push( { action: 'Edit Announcement', @@ -519,7 +533,7 @@ function newStrategyPartConstructor () { rawRadius: 8, targetRadius: 0, currentRadius: 0, - angle: -40, + angle: -20, dontShowAtFullscreen: true } ) @@ -536,7 +550,7 @@ function newStrategyPartConstructor () { rawRadius: 8, targetRadius: 0, currentRadius: 0, - angle: 0 + angle: 20 } ) menuItemsInitialValues.push( @@ -550,7 +564,7 @@ function newStrategyPartConstructor () { rawRadius: 8, targetRadius: 0, currentRadius: 0, - angle: 40 + angle: 60 } ) break diff --git a/StrategySpace/Workspace/FunctionLibraries/NodeChildren.js b/StrategySpace/Workspace/FunctionLibraries/NodeChildren.js index 3bce0a287..882edb1eb 100644 --- a/StrategySpace/Workspace/FunctionLibraries/NodeChildren.js +++ b/StrategySpace/Workspace/FunctionLibraries/NodeChildren.js @@ -261,6 +261,12 @@ function newNodeChildren () { childrenCount: 0, childIndex: undefined } + if (parentNode.formula !== undefined) { + response.childrenCount++ + if (parentNode.formula.id === childNode.id) { + response.childIndex = response.childrenCount + } + } return response } diff --git a/StrategySpace/Workspace/FunctionLibraries/NodeDeleter.js b/StrategySpace/Workspace/FunctionLibraries/NodeDeleter.js index d72cc8d7c..544556f49 100644 --- a/StrategySpace/Workspace/FunctionLibraries/NodeDeleter.js +++ b/StrategySpace/Workspace/FunctionLibraries/NodeDeleter.js @@ -386,6 +386,9 @@ function newNodeDeleter () { } } } + if (node.formula !== undefined) { + deleteFormula(node.formula, rootNodes) + } completeDeletion(node, rootNodes) destroyPart(node) cleanNode(node) diff --git a/StrategySpace/Workspace/FunctionLibraries/OnFocus.js b/StrategySpace/Workspace/FunctionLibraries/OnFocus.js index add0f0f78..a0e8b4a94 100644 --- a/StrategySpace/Workspace/FunctionLibraries/OnFocus.js +++ b/StrategySpace/Workspace/FunctionLibraries/OnFocus.js @@ -483,6 +483,10 @@ function newOnFocus () { } } case 'Announcement': { + child = getNodeThatIsOnFocus(node.formula) + if (child !== undefined) { + return child + } if (node.payload.uiObject.isOnFocus === true) { return node } else { diff --git a/StrategySpace/Workspace/FunctionLibraries/PartsFromNodes.js b/StrategySpace/Workspace/FunctionLibraries/PartsFromNodes.js index 5ca13c5c6..d36de9dae 100644 --- a/StrategySpace/Workspace/FunctionLibraries/PartsFromNodes.js +++ b/StrategySpace/Workspace/FunctionLibraries/PartsFromNodes.js @@ -426,6 +426,9 @@ function newPartsFromNodes () { } case 'Announcement': { createPart('Announcement', node.name, node, parentNode, chainParent, 'Announcement') + if (node.formula !== undefined) { + createPartFromNode(node.formula, node, node) + } return } case 'Layer Manager': { diff --git a/StrategySpace/Workspace/FunctionLibraries/ProtocolNode.js b/StrategySpace/Workspace/FunctionLibraries/ProtocolNode.js index e22043249..3b934e5aa 100644 --- a/StrategySpace/Workspace/FunctionLibraries/ProtocolNode.js +++ b/StrategySpace/Workspace/FunctionLibraries/ProtocolNode.js @@ -677,7 +677,8 @@ function newProtocolNode () { type: node.type, subType: node.subType, name: node.name, - code: node.code + code: node.code, + formula: getProtocolNode(node.formula, removePersonalData, parseCode, includeIds, includePayload) } if (includeIds) { object.id = node.id diff --git a/StrategySpace/Workspace/FunctionLibraries/ShortcutKeys.js b/StrategySpace/Workspace/FunctionLibraries/ShortcutKeys.js index 826ad1b8a..70b5620ce 100644 --- a/StrategySpace/Workspace/FunctionLibraries/ShortcutKeys.js +++ b/StrategySpace/Workspace/FunctionLibraries/ShortcutKeys.js @@ -483,6 +483,11 @@ function newShortcutKeys () { } } case 'Announcement': { + let child + child = getNodeByShortcutKey(node.formula, searchingKey) + if (child !== undefined) { + return child + } if (node.payload.uiObject.shortcutKey === searchingKey) { return node } else { From 900c1a9f88271b6a2f10bc46f2af1b2a734fd049 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Mon, 21 Oct 2019 12:37:20 +0200 Subject: [PATCH 45/48] Announcements in Phases --- FloatingSpace/StrategyPart.js | 2 +- StrategySpace/Workspace/FunctionLibraries/NodeChildren.js | 7 +++++++ StrategySpace/Workspace/FunctionLibraries/NodeDeleter.js | 6 ++++++ StrategySpace/Workspace/FunctionLibraries/OnFocus.js | 6 ++++++ .../Workspace/FunctionLibraries/PartsFromNodes.js | 8 ++++++++ StrategySpace/Workspace/FunctionLibraries/ProtocolNode.js | 7 +++++++ StrategySpace/Workspace/FunctionLibraries/ShortcutKeys.js | 6 ++++++ 7 files changed, 41 insertions(+), 1 deletion(-) diff --git a/FloatingSpace/StrategyPart.js b/FloatingSpace/StrategyPart.js index 2f4bdb194..295a5e5eb 100644 --- a/FloatingSpace/StrategyPart.js +++ b/FloatingSpace/StrategyPart.js @@ -284,7 +284,7 @@ function newStrategyPart () { compatibleSubType = undefined break case 'Announcement': - compatibleType = '->' + 'Telegram Bot' + '->' + 'Trigger On Event' + '->' + 'Trigger Off Event' + '->' + 'Take Position Event' + '->' + 'Next Phase Event' + '->' + compatibleType = '->' + 'Telegram Bot' + '->' + 'Trigger On Event' + '->' + 'Trigger Off Event' + '->' + 'Take Position Event' + '->' + 'Next Phase Event' + '->' + '->' + 'Phase' + '->' compatibleSubType = undefined break case 'Task Manager': diff --git a/StrategySpace/Workspace/FunctionLibraries/NodeChildren.js b/StrategySpace/Workspace/FunctionLibraries/NodeChildren.js index 882edb1eb..2a2ff97c3 100644 --- a/StrategySpace/Workspace/FunctionLibraries/NodeChildren.js +++ b/StrategySpace/Workspace/FunctionLibraries/NodeChildren.js @@ -920,6 +920,13 @@ function newNodeChildren () { response.childIndex = response.childrenCount } } + for (let i = 0; i < parentNode.announcements.length; i++) { + let child = parentNode.announcements[i] + response.childrenCount++ + if (child.id === childNode.id) { + response.childIndex = response.childrenCount + } + } return response } diff --git a/StrategySpace/Workspace/FunctionLibraries/NodeDeleter.js b/StrategySpace/Workspace/FunctionLibraries/NodeDeleter.js index 544556f49..66597b412 100644 --- a/StrategySpace/Workspace/FunctionLibraries/NodeDeleter.js +++ b/StrategySpace/Workspace/FunctionLibraries/NodeDeleter.js @@ -1057,6 +1057,12 @@ function newNodeDeleter () { if (node.nextPhaseEvent !== undefined) { deleteEvent(node.nextPhaseEvent, rootNodes) } + + if (node.announcements !== undefined) { + while (node.announcements.length > 0) { + deleteAnnouncement(node.announcements[0], rootNodes) + } + } destroyPart(node) cleanNode(node) } diff --git a/StrategySpace/Workspace/FunctionLibraries/OnFocus.js b/StrategySpace/Workspace/FunctionLibraries/OnFocus.js index a0e8b4a94..77fa1621a 100644 --- a/StrategySpace/Workspace/FunctionLibraries/OnFocus.js +++ b/StrategySpace/Workspace/FunctionLibraries/OnFocus.js @@ -81,6 +81,12 @@ function newOnFocus () { if (child !== undefined) { return child } + for (let m = 0; m < node.announcements.length; m++) { + child = getNodeThatIsOnFocus(node.announcements[m]) + if (child !== undefined) { + return child + } + } if (node.payload.uiObject.isOnFocus === true) { return node } else { diff --git a/StrategySpace/Workspace/FunctionLibraries/PartsFromNodes.js b/StrategySpace/Workspace/FunctionLibraries/PartsFromNodes.js index d36de9dae..3498dddc0 100644 --- a/StrategySpace/Workspace/FunctionLibraries/PartsFromNodes.js +++ b/StrategySpace/Workspace/FunctionLibraries/PartsFromNodes.js @@ -98,6 +98,13 @@ function newPartsFromNodes () { if (node.nextPhaseEvent !== undefined) { createPartFromNode(node.nextPhaseEvent, phase, phase) } + if (node.announcements === undefined) { + node.announcements = [] + } + for (let m = 0; m < node.announcements.length; m++) { + let announcement = node.announcements[m] + createPartFromNode(announcement, node, node) + } return } case 'Stop': { @@ -1190,6 +1197,7 @@ function newPartsFromNodes () { let phase = { name: 'New Phase', + announcements: [], formula: { code: DEFAULT_FORMULA_TEXT }, diff --git a/StrategySpace/Workspace/FunctionLibraries/ProtocolNode.js b/StrategySpace/Workspace/FunctionLibraries/ProtocolNode.js index 3b934e5aa..4d28635ed 100644 --- a/StrategySpace/Workspace/FunctionLibraries/ProtocolNode.js +++ b/StrategySpace/Workspace/FunctionLibraries/ProtocolNode.js @@ -111,9 +111,16 @@ function newProtocolNode () { type: node.type, subType: node.subType, name: node.name, + announcements: [], formula: getProtocolNode(node.formula, removePersonalData, parseCode, includeIds, includePayload), nextPhaseEvent: getProtocolNode(node.nextPhaseEvent, removePersonalData, parseCode, includeIds, includePayload) } + for (let m = 0; m < node.announcements.length; m++) { + let announcement = getProtocolNode(node.announcements[m], removePersonalData, parseCode, includeIds, includePayload) + if (announcement !== undefined) { + object.announcements.push(announcement) + } + } if (includeIds) { object.id = node.id } diff --git a/StrategySpace/Workspace/FunctionLibraries/ShortcutKeys.js b/StrategySpace/Workspace/FunctionLibraries/ShortcutKeys.js index 70b5620ce..ce6e6b4f5 100644 --- a/StrategySpace/Workspace/FunctionLibraries/ShortcutKeys.js +++ b/StrategySpace/Workspace/FunctionLibraries/ShortcutKeys.js @@ -81,6 +81,12 @@ function newShortcutKeys () { if (child !== undefined) { return child } + for (let m = 0; m < node.announcements.length; m++) { + child = getNodeByShortcutKey(node.announcements[m], searchingKey) + if (child !== undefined) { + return child + } + } if (node.payload.uiObject.shortcutKey === searchingKey) { return node } else { From 1b9a80ac859563a2df27304d359c2d6d09841eb3 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Mon, 21 Oct 2019 13:42:48 +0200 Subject: [PATCH 46/48] Parsing code of session client side --- StrategySpace/Workspace/FunctionLibraries/SessionFunctions.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/StrategySpace/Workspace/FunctionLibraries/SessionFunctions.js b/StrategySpace/Workspace/FunctionLibraries/SessionFunctions.js index 790fe292b..b1df94730 100644 --- a/StrategySpace/Workspace/FunctionLibraries/SessionFunctions.js +++ b/StrategySpace/Workspace/FunctionLibraries/SessionFunctions.js @@ -27,7 +27,7 @@ function newSessionFunctions () { /* Raise event to run the session */ let event = { - session: JSON.stringify(functionLibraryProtocolNode.getProtocolNode(node, false, false, true)), + session: JSON.stringify(functionLibraryProtocolNode.getProtocolNode(node, false, true, true)), definition: JSON.stringify(functionLibraryProtocolNode.getProtocolNode(thisNodeDefinition, false, true, true)), uiCurrentValues: getUICurrentValues() } From 3db5e6935eba311d435dbe51b5c0bc6a607be95b Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Mon, 21 Oct 2019 15:44:56 +0200 Subject: [PATCH 47/48] Centering on available Y axis at designer --- Spaces/FloatingSpace.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Spaces/FloatingSpace.js b/Spaces/FloatingSpace.js index f4f0f9574..348c8307a 100644 --- a/Spaces/FloatingSpace.js +++ b/Spaces/FloatingSpace.js @@ -141,7 +141,7 @@ function newFloatingSpace () { let displaceVector = { x: browserCanvas.width / 2 - position.x, - y: browserCanvas.height / 2 - position.y + y: (COCKPIT_SPACE_POSITION + COCKPIT_SPACE_HEIGHT) + (browserCanvas.height - (COCKPIT_SPACE_POSITION + COCKPIT_SPACE_HEIGHT)) / 2 - position.y } thisObject.container.displace(displaceVector) From a9a82ba854ada17dc066f28dd561068ca60c05ce Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Mon, 21 Oct 2019 17:07:24 +0200 Subject: [PATCH 48/48] Bug fixed with shortcut keys --- Canvas.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Canvas.js b/Canvas.js index 3475ecff0..9da5ed793 100644 --- a/Canvas.js +++ b/Canvas.js @@ -259,6 +259,9 @@ function newCanvas () { if ((event.ctrlKey === true || event.metaKey === true)) { if (event.keyCode >= 65 && event.keyCode <= 90) { + /* From here we prevent the default behaviour */ + event.preventDefault() + let nodeUsingThisKey = canvas.strategySpace.workspace.getNodeByShortcutKey(event.key) if (nodeOnFocus === undefined && nodeUsingThisKey !== undefined) { @@ -267,9 +270,6 @@ function newCanvas () { return } - /* From here we prevent the default behaviour */ - event.preventDefault() - /* If there is a node in focus, we try to assign the key to it. */ if (nodeUsingThisKey !== undefined && nodeOnFocus !== undefined) { if (nodeUsingThisKey.id === nodeOnFocus.id) {