From 4d78d5d921057cd53fc2de41ce7f207981090ccc Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Tue, 4 Jun 2019 11:36:02 +0200 Subject: [PATCH 01/25] Integration with new Version of Strategizer complete --- StrategySpace/ConstDeleteStrategy.js | 0 StrategySpace/ConstUpdateStrategy.js | 7 - StrategySpace/ConstUpdateTradingSystem.js | 1 + StrategySpace/StrategizerGateway.js | 534 ++++++++-------------- StrategySpace/Workspace/Workspace.js | 42 +- 5 files changed, 211 insertions(+), 373 deletions(-) delete mode 100644 StrategySpace/ConstDeleteStrategy.js delete mode 100644 StrategySpace/ConstUpdateStrategy.js create mode 100644 StrategySpace/ConstUpdateTradingSystem.js diff --git a/StrategySpace/ConstDeleteStrategy.js b/StrategySpace/ConstDeleteStrategy.js deleted file mode 100644 index e69de29bb..000000000 diff --git a/StrategySpace/ConstUpdateStrategy.js b/StrategySpace/ConstUpdateStrategy.js deleted file mode 100644 index d84ce30cf..000000000 --- a/StrategySpace/ConstUpdateStrategy.js +++ /dev/null @@ -1,7 +0,0 @@ -const GRAPHQL_MUTATION_UPDATE_STRATEGIES = Apollo.gql` - mutation strategizer_EditStrategy($id: ID!, $strategy: strategizer_StrategyInput!) { - strategizer_EditStrategy(id: $id, strategy: $strategy) { - id - } - } -` diff --git a/StrategySpace/ConstUpdateTradingSystem.js b/StrategySpace/ConstUpdateTradingSystem.js new file mode 100644 index 000000000..0519ecba6 --- /dev/null +++ b/StrategySpace/ConstUpdateTradingSystem.js @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/StrategySpace/StrategizerGateway.js b/StrategySpace/StrategizerGateway.js index 222449458..9a314ba3e 100644 --- a/StrategySpace/StrategizerGateway.js +++ b/StrategySpace/StrategizerGateway.js @@ -1,353 +1,187 @@ - -function newStrategizerGateway () { - const MODULE_NAME = 'Strategizer Gateway' - const ERROR_LOG = true - const logger = newWebDebugLog() - logger.fileName = MODULE_NAME - - let thisObject = { - strategizerData: undefined, - container: undefined, - loadFromStrategyzer: loadFromStrategyzer, - saveToStrategyzer: saveToStrategyzer, - draw: draw, - getContainer: getContainer, - initialize: initialize - } - - let colletionItems = [] - - thisObject.container = newContainer() - thisObject.container.name = MODULE_NAME - thisObject.container.initialize() - - thisObject.container.frame.width = 0 - thisObject.container.frame.height = 0 - - thisObject.container.frame.position.x = 0 - thisObject.container.frame.position.y = 0 - - thisObject.container.isDraggeable = false - thisObject.container.isClickeable = false - - return thisObject - - function initialize () { - - } - - async function saveToStrategyzer () { - try { - const accessToken = window.localStorage.getItem(LOGGED_IN_ACCESS_TOKEN_LOCAL_STORAGE_KEY) - - let user = window.localStorage.getItem(LOGGED_IN_USER_LOCAL_STORAGE_KEY) - if (user === null) { - if (ERROR_LOG === true) { logger.write('[ERROR] saveToStrategyzer -> Can not save because user is not logged in. ') } - return - } - - user = JSON.parse(user) - - const authId = user.authId - - const apolloClient = new Apollo.lib.ApolloClient({ - networkInterface: Apollo.lib.createNetworkInterface({ - uri: window.canvasApp.graphQL.masterAppApiUrl, - transportBatching: true - }), - connectToDevTools: true - }) - - /* Updating all Strategies */ - - const networkInterface = Apollo.lib.createNetworkInterface({ - uri: window.canvasApp.graphQL.masterAppApiUrl - }) - - networkInterface.use([{ - applyMiddleware (req, next) { - req.options.headers = { - authorization: `Bearer ${accessToken}` - } - next() + +function newStrategizerGateway () { + const MODULE_NAME = 'Strategizer Gateway' + const ERROR_LOG = true + const logger = newWebDebugLog() + logger.fileName = MODULE_NAME + + let thisObject = { + strategizerData: undefined, + container: undefined, + loadFromStrategyzer: loadFromStrategyzer, + saveToStrategyzer: saveToStrategyzer, + draw: draw, + getContainer: getContainer, + initialize: initialize + } + + let colletionItems = [] + + thisObject.container = newContainer() + thisObject.container.name = MODULE_NAME + thisObject.container.initialize() + + thisObject.container.frame.width = 0 + thisObject.container.frame.height = 0 + + thisObject.container.frame.position.x = 0 + thisObject.container.frame.position.y = 0 + + thisObject.container.isDraggeable = false + thisObject.container.isClickeable = false + + return thisObject + + function initialize () { + + } + + async function saveToStrategyzer () { + try { + const accessToken = window.localStorage.getItem(LOGGED_IN_ACCESS_TOKEN_LOCAL_STORAGE_KEY) + + let user = window.localStorage.getItem(LOGGED_IN_USER_LOCAL_STORAGE_KEY) + if (user === null) { + if (ERROR_LOG === true) { logger.write('[ERROR] saveToStrategyzer -> Can not save because user is not logged in. ') } + return + } + + user = JSON.parse(user) + let fbSlug = 'simulator' + '-' + user.alias + + /* See if we need to update or create a new record at the strategizer */ + + let tradingSystem = canvas.strategySpace.workspace.getProtocolTradingSystem() + let idAtStrategizer = canvas.strategySpace.workspace.idAtStrategizer + + if (idAtStrategizer === undefined) { + let response = await axios({ + url: window.canvasApp.graphQL.masterAppApiUrl, + method: 'post', + data: { + query: ` + mutation strategizer_CreateTradingSystem + ( + $fbSlug: String!, $data: strategizer_JSON! + ) + { + strategizer_CreateTradingSystem(fbSlug: $fbSlug, tradingSystem: { data: $data }) + { + id + } + } + `, + variables: { + fbSlug: fbSlug, + data: tradingSystem + } + }, + headers: { + authorization: 'Bearer ' + accessToken + } + }) + + if (response.data.errors) { + console.log('Error getting events: ' + JSON.stringify(response.data.errors)) + throw 'Error getting events: ' + JSON.stringify(response.data.errors) + } else { + canvas.strategySpace.workspace.idAtStrategizer = response.data.data.strategizer_CreateTradingSystem.id } - }]) - - let tradingSystem = canvas.strategySpace.workspace.tradingSystem - let idAtStrategizer = canvas.strategySpace.workspace.idAtStrategizer - let dataToSave = buildGraphQLDataToSave(tradingSystem) - - const updateStrategies = () => { - return new Promise((resolve, reject) => { - apolloClient.mutate({ - mutation: GRAPHQL_MUTATION_UPDATE_STRATEGIES, - variables: { - id: idAtStrategizer, - strategy: dataToSave.strategy - } - }) - .then(response => { - resolve(true) - }) - .catch(err => { - if (ERROR_LOG === true) { logger.write('[ERROR] saveToStrategyzer -> ApolloClient error updating user strategies -> err = ' + err.stack) } - reject(err) - }) + } else { + const graphQLServer = await axios({ + url: window.canvasApp.graphQL.masterAppApiUrl, + method: 'post', + data: { + query: ` + mutation strategizer_EditTradingSystem + ( + $id: ID!, $data: strategizer_JSON! + ) + { + strategizer_EditTradingSystem(id: $id, tradingSystem: { data: $data }) + { + id + } + } + `, + variables: { + id: idAtStrategizer, + data: tradingSystem + } + }, + headers: { + authorization: 'Bearer ' + accessToken + } }) + } + + return true + } catch (err) { + if (ERROR_LOG === true) { logger.write('[ERROR] saveToStrategyzer -> err = ' + err.stack) } + } + } + + async function loadFromStrategyzer () { + try { + const accessToken = window.localStorage.getItem(LOGGED_IN_ACCESS_TOKEN_LOCAL_STORAGE_KEY) + + let user = window.localStorage.getItem(LOGGED_IN_USER_LOCAL_STORAGE_KEY) + if (user === null) { + // if there is no user that means that we are logged off, which means this object can not be used. + return + } + + user = JSON.parse(user) + let fbSlug = 'simulator' + '-' + user.alias + + let response = await axios({ + url: window.canvasApp.graphQL.masterAppApiUrl, + method: 'post', + data: { + query: + ` + query($fbSlug: String!){ + strategizer_TradingSystemByFb(fbSlug: $fbSlug){ + id + fbSlug + data + } + } + `, + variables: { + fbSlug: fbSlug + } + }, + headers: { + authorization: 'Bearer ' + accessToken + } + }) + + if (response.data.errors) { + if (response.data.errors[0] === 'Ressource not found : None of the tradingSystem are linked to that fbSlug') { + return false + } else { + logger.write('[ERROR] Error while getting Trading System from Strategizer: ' + JSON.stringify(response.data.errors)) + return false + } + } else { + window.localStorage.setItem('userStrategies', JSON.stringify(response.data.data.strategizer_TradingSystemByFb.data)) + thisObject.strategizerData = JSON.parse(JSON.stringify(response.data.data.strategizer_TradingSystemByFb.data)) + canvas.strategySpace.workspace.idAtStrategizer = response.data.data.strategizer_TradingSystemByFb.id + return true } - - let result = await updateStrategies() - - return result - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] saveToStrategyzer -> err = ' + err.stack) } - } - } - - function buildGraphQLDataToSave (tradingSystem) { - let graphQL_Mutation = '' - - let dataToSave = { - strategy: { - subStrategies: [] - } - } - - for (m = 0; m < tradingSystem.strategies.length; m++) { - let strategizerGatewayStrategy = tradingSystem.strategies[m] - let strategy = { - name: strategizerGatewayStrategy.name, - active: strategizerGatewayStrategy.active, - triggerOn: { - situations: [] - }, - triggerOff: { - situations: [] - }, - takePosition: { - situations: [] - }, - stopLoss: { - phases: [] - }, - takeProfit: { - phases: [] - } - } - - for (let k = 0; k < strategizerGatewayStrategy.triggerOn.situations.length; k++) { - let strategizerGatewaySituation = strategizerGatewayStrategy.triggerOn.situations[k] - let situation = { - name: strategizerGatewaySituation.name, - conditions: [] - } - - for (let m = 0; m < strategizerGatewaySituation.conditions.length; m++) { - let strategizerGatewayCondition = strategizerGatewaySituation.conditions[m] - let condition = { - name: strategizerGatewayCondition.name, - code: strategizerGatewayCondition.code - } - situation.conditions.push(condition) - } - strategy.triggerOn.situations.push(situation) - } - - for (let k = 0; k < strategizerGatewayStrategy.triggerOff.situations.length; k++) { - let strategizerGatewaySituation = strategizerGatewayStrategy.triggerOff.situations[k] - let situation = { - name: strategizerGatewaySituation.name, - conditions: [] - } - - for (let m = 0; m < strategizerGatewaySituation.conditions.length; m++) { - let strategizerGatewayCondition = strategizerGatewaySituation.conditions[m] - let condition = { - name: strategizerGatewayCondition.name, - code: strategizerGatewayCondition.code - } - situation.conditions.push(condition) - } - strategy.triggerOff.situations.push(situation) - } - - for (let k = 0; k < strategizerGatewayStrategy.takePosition.situations.length; k++) { - let strategizerGatewaySituation = strategizerGatewayStrategy.takePosition.situations[k] - let situation = { - name: strategizerGatewaySituation.name, - conditions: [] - } - - for (let m = 0; m < strategizerGatewaySituation.conditions.length; m++) { - let strategizerGatewayCondition = strategizerGatewaySituation.conditions[m] - let condition = { - name: strategizerGatewayCondition.name, - code: strategizerGatewayCondition.code - } - situation.conditions.push(condition) - } - strategy.takePosition.situations.push(situation) - } - - for (let p = 0; p < strategizerGatewayStrategy.stopLoss.phases.length; p++) { - let strategizerGatewayPhase = strategizerGatewayStrategy.stopLoss.phases[p] - let phase = { - name: strategizerGatewayPhase.name, - code: strategizerGatewayPhase.code, - situations: [] - } - - for (let k = 0; k < strategizerGatewayPhase.situations.length; k++) { - let strategizerGatewaySituation = strategizerGatewayPhase.situations[k] - let situation = { - name: strategizerGatewaySituation.name, - conditions: [] - } - - for (let m = 0; m < strategizerGatewaySituation.conditions.length; m++) { - let strategizerGatewayCondition = strategizerGatewaySituation.conditions[m] - let condition = { - name: strategizerGatewayCondition.name, - code: strategizerGatewayCondition.code - } - situation.conditions.push(condition) - } - phase.situations.push(situation) - } - strategy.stopLoss.phases.push(phase) - } - - for (let p = 0; p < strategizerGatewayStrategy.takeProfit.phases.length; p++) { - let strategizerGatewayPhase = strategizerGatewayStrategy.takeProfit.phases[p] - let phase = { - name: strategizerGatewayPhase.name, - code: strategizerGatewayPhase.code, - situations: [] - } - - for (let k = 0; k < strategizerGatewayPhase.situations.length; k++) { - let strategizerGatewaySituation = strategizerGatewayPhase.situations[k] - let situation = { - name: strategizerGatewaySituation.name, - conditions: [] - } - - for (let m = 0; m < strategizerGatewaySituation.conditions.length; m++) { - let strategizerGatewayCondition = strategizerGatewaySituation.conditions[m] - let condition = { - name: strategizerGatewayCondition.name, - code: strategizerGatewayCondition.code - } - situation.conditions.push(condition) - } - phase.situations.push(situation) - } - strategy.takeProfit.phases.push(phase) - } - dataToSave.strategy.subStrategies.push(strategy) - } - - return dataToSave - } - - async function loadFromStrategyzer () { - try { - const accessToken = window.localStorage.getItem(LOGGED_IN_ACCESS_TOKEN_LOCAL_STORAGE_KEY) - - let user = window.localStorage.getItem(LOGGED_IN_USER_LOCAL_STORAGE_KEY) - if (user === null) { - // if there is no user that means that we are logged off, which means this object can not be used. - return - } - - user = JSON.parse(user) - - const authId = user.authId - - const apolloClient = new Apollo.lib.ApolloClient({ - networkInterface: Apollo.lib.createNetworkInterface({ - uri: window.canvasApp.graphQL.masterAppApiUrl, - transportBatching: true - }), - connectToDevTools: true - }) - - /* Getting the FB that own the Strategies */ - - let teamtradingSystemSimulationFB = '' - let ecosystem = JSON.parse(window.localStorage.getItem('ecosystem')) - let teams = ecosystem.devTeams - for (let i = 0; i < teams.length; i++) { - let team = teams[i] - for (let j = 0; j < team.bots.length; j++) { - let bot = team.bots[j] - if (bot.codeName.indexOf('simulator') >= 0) { - teamtradingSystemSimulationFB = bot.codeName - } - } - } - - if (teamtradingSystemSimulationFB === '') { - if (ERROR_LOG === true) { logger.write('[ERROR] loadFromStrategyzer -> no simulation FB found at user teams. ') } - return - } - /* Getting all Strategies */ - - const networkInterface = Apollo.lib.createNetworkInterface({ - uri: window.canvasApp.graphQL.masterAppApiUrl - }) - - networkInterface.use([{ - applyMiddleware (req, next) { - req.options.headers = { - authorization: `Bearer ${accessToken}` - } - next() - } - }]) - - const getStrategies = () => { - return new Promise((resolve, reject) => { - apolloClient.query({ - query: GRAPHQL_QUERY_GET_STRATEGIES, - variables: { fbSlug: teamtradingSystemSimulationFB} - }) - .then(response => { - window.localStorage.setItem('userStrategies', JSON.stringify(response.data.strategizer_StrategyByFb)) - thisObject.strategizerData = JSON.parse(JSON.stringify(response.data.strategizer_StrategyByFb)) - - resolve({ strategies: response.data.strategizer_StrategyByFb.subStrategies}) - }) - .catch(err => { - if (ERROR_LOG === true) { logger.write('[ERROR] loadFromStrategyzer -> ApolloClient error getting user strategies -> err = ' + err.stack) } - reject(err) - }) - }) - } - - // To avoid race conditions, add asynchronous fetches to array - let fetchDataPromises = [] - - fetchDataPromises.push(getStrategies()) - - // When all asynchronous fetches resolve, authenticate user or throw error. - await Promise.all(fetchDataPromises).then(result => { - - }, err => { - if (ERROR_LOG === true) { logger.write('[ERROR] loadFromStrategyzer -> GraphQL Fetch Error -> err = ' + err.stack) } - }) - } catch (err) { - if (ERROR_LOG === true) { logger.write('[ERROR] loadFromStrategyzer -> err = ' + err.stack) } - } - } - - function getContainer (point) { - let container - - return undefined - } - - function draw () { - - } -} + } catch (err) { + if (ERROR_LOG === true) { logger.write('[ERROR] loadFromStrategyzer -> err = ' + err.stack) } + } + } + + function getContainer (point) { + let container + + return undefined + } + + function draw () { + + } +} diff --git a/StrategySpace/Workspace/Workspace.js b/StrategySpace/Workspace/Workspace.js index 54b9bf21a..be8aaab73 100644 --- a/StrategySpace/Workspace/Workspace.js +++ b/StrategySpace/Workspace/Workspace.js @@ -7,6 +7,7 @@ function newWorkspace () { container: undefined, idAtStrategizer: undefined, onMenuItemClick: onMenuItemClick, + getProtocolTradingSystem: getProtocolTradingSystem, physics: physics, spawn: spawn, detachNode: detachNode, @@ -41,6 +42,7 @@ function newWorkspace () { functionLibraryProtocolNode = newProtocolNode() functionLibraryWorkspaceNodes = newWorkspaceNode() + let isInitialized = false return thisObject function finalize () { @@ -63,36 +65,43 @@ function newWorkspace () { workspace = JSON.parse(savedWorkspace) rootNodes = workspace.rootNodes thisObject.idAtStrategizer = workspace.idAtStrategizer - if (thisObject.idAtStrategizer === undefined) { - initializeLoadingFromStrategizer() - } else { - for (let i = 0; i < rootNodes.length; i++) { - let rootNode = rootNodes[i] - functionLibraryPartsFromNodes.createPartFromNode(rootNode, undefined, undefined) - } + + for (let i = 0; i < rootNodes.length; i++) { + let rootNode = rootNodes[i] + functionLibraryPartsFromNodes.createPartFromNode(rootNode, undefined, undefined) } + isInitialized = true } } async function initializeLoadingFromStrategizer () { - await canvas.strategySpace.strategizerGateway.loadFromStrategyzer() - let tradingSystem = canvas.strategySpace.strategizerGateway.strategizerData - if (tradingSystem !== undefined) { - let adaptedTradingSystem = { - strategies: tradingSystem.subStrategies + let result = await canvas.strategySpace.strategizerGateway.loadFromStrategyzer() + if (result === true) { + thisObject.tradingSystem = canvas.strategySpace.strategizerGateway.strategizerData + rootNodes.push(thisObject.tradingSystem) + functionLibraryPartsFromNodes.createPartFromNode(thisObject.tradingSystem, undefined, undefined) + thisObject.tradingSystem.payload.uiObject.setRunningStatus() + } else { + // First use of the Designer, lets help by creating the first Trading System + thisObject.tradingSystem = { + type: 'Trading System', + strategies: [] } - thisObject.idAtStrategizer = tradingSystem.id - rootNodes.push(adaptedTradingSystem) - functionLibraryPartsFromNodes.createPartFromNode(adaptedTradingSystem, undefined, undefined) - thisObject.tradingSystem = adaptedTradingSystem + rootNodes.push(thisObject.tradingSystem) + functionLibraryPartsFromNodes.createPartFromNode(thisObject.tradingSystem, undefined, undefined) thisObject.tradingSystem.payload.uiObject.setRunningStatus() } + isInitialized = true } function getContainer (point) { } + function getProtocolTradingSystem () { + return functionLibraryProtocolNode.getProtocolNode(thisObject.tradingSystem) + } + function detachNode (node) { functionLibraryAttachDetach.detachNode(node, rootNodes) } @@ -102,6 +111,7 @@ function newWorkspace () { } function physics () { + if (isInitialized !== true) { return } /* Here we will save all the workspace related objects into the local storage */ let stringifyReadyNodes = [] for (let i = 0; i < rootNodes.length; i++) { From 8824bf6e0c0a1efaf73ad40912299583fa04db5e Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Tue, 4 Jun 2019 11:38:04 +0200 Subject: [PATCH 02/25] Cleaning used files --- StrategySpace/ConstGetStrategies.js | 87 ----------------------- StrategySpace/ConstNewStrategy.js | 0 StrategySpace/ConstUpdateTradingSystem.js | 1 - 3 files changed, 88 deletions(-) delete mode 100644 StrategySpace/ConstGetStrategies.js delete mode 100644 StrategySpace/ConstNewStrategy.js delete mode 100644 StrategySpace/ConstUpdateTradingSystem.js diff --git a/StrategySpace/ConstGetStrategies.js b/StrategySpace/ConstGetStrategies.js deleted file mode 100644 index b3b9c2c09..000000000 --- a/StrategySpace/ConstGetStrategies.js +++ /dev/null @@ -1,87 +0,0 @@ -const GRAPHQL_QUERY_GET_STRATEGIES = Apollo.gql` - query($fbSlug: String!){ - - strategizer_StrategyByFb(fbSlug: $fbSlug){ - id - subStrategies(activeOnly: true){ - name - active - triggerOn{ - situations{ - name - conditions{ - name - code - } - } - } - triggerOff{ - situations{ - name - conditions{ - name - code - } - } - } - takePosition{ - situations{ - name - conditions{ - name - code - } - } - } - buyPoint{ - situations{ - name - conditions{ - name - code - } - } - } - stopLoss{ - phases{ - name - code - situations{ - name - conditions{ - name - code - } - } - } - } - takeProfit{ - phases{ - name - code - situations{ - name - conditions{ - name - code - } - } - } - } - sellOrder{ - phases{ - name - code - situations{ - name - conditions{ - name - code - } - } - } - } - } - } - } - ` diff --git a/StrategySpace/ConstNewStrategy.js b/StrategySpace/ConstNewStrategy.js deleted file mode 100644 index e69de29bb..000000000 diff --git a/StrategySpace/ConstUpdateTradingSystem.js b/StrategySpace/ConstUpdateTradingSystem.js deleted file mode 100644 index 0519ecba6..000000000 --- a/StrategySpace/ConstUpdateTradingSystem.js +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file From 12df1e601c50e9a26b25cf7b9cce692e2acc9ddc Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Thu, 6 Jun 2019 11:00:51 +0200 Subject: [PATCH 03/25] Adjustments to cover bug on hghlighted parts --- FloatingSpace/StrategyPart.js | 2 +- FloatingSpace/StrategyPartConstructor.js | 2 +- Panels/ProductsPanel.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/FloatingSpace/StrategyPart.js b/FloatingSpace/StrategyPart.js index 095597d4c..3aeb8267d 100644 --- a/FloatingSpace/StrategyPart.js +++ b/FloatingSpace/StrategyPart.js @@ -702,7 +702,7 @@ function newStrategyPart () { } if (isHighlighted === true) { - VISIBLE_RADIUS = thisObject.container.frame.radius + VISIBLE_RADIUS = thisObject.container.frame.radius * 1 let OPACITY = highlightCounter / 30 browserCanvasContext.beginPath() diff --git a/FloatingSpace/StrategyPartConstructor.js b/FloatingSpace/StrategyPartConstructor.js index a2eacd2be..d43b6517d 100644 --- a/FloatingSpace/StrategyPartConstructor.js +++ b/FloatingSpace/StrategyPartConstructor.js @@ -1429,7 +1429,7 @@ function newStrategyPartConstructor () { break } case 'Condition': { - level_6() + level_5() break } case 'Code': { diff --git a/Panels/ProductsPanel.js b/Panels/ProductsPanel.js index 8ba4c18da..51bf2e5e7 100644 --- a/Panels/ProductsPanel.js +++ b/Panels/ProductsPanel.js @@ -60,7 +60,7 @@ function newProductsPanel () { /* First thing is to build the thisObject.productCards array */ - let ecosystem = JSON.parse(window.localStorage.getItem('ecosystem')) + let ecosystem = JSON.parse(window.localStorage.getItem('TEST_ecosystem')) for (let i = 0; i < ecosystem.devTeams.length; i++) { let devTeam = ecosystem.devTeams[i] From 7e3e011de8efe0d33aa539d49012da97ba4cb71f Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Thu, 6 Jun 2019 11:42:24 +0200 Subject: [PATCH 04/25] new menu items added --- FloatingSpace/StrategyPartConstructor.js | 210 ++++++++++++++++++++++- Spaces/StrategySpace.js | 3 + 2 files changed, 211 insertions(+), 2 deletions(-) diff --git a/FloatingSpace/StrategyPartConstructor.js b/FloatingSpace/StrategyPartConstructor.js index d43b6517d..daa1ef5c7 100644 --- a/FloatingSpace/StrategyPartConstructor.js +++ b/FloatingSpace/StrategyPartConstructor.js @@ -173,6 +173,143 @@ function newStrategyPartConstructor () { }] break } + case 'Parameters': { + menuItemsInitialValues = [ + { + action: 'Pin / Unpin', + actionFunction: floatingObject.pinToggle, + actionStatus: floatingObject.getPinStatus, + currentStatus: true, + label: undefined, + visible: false, + iconPathOn: 'target', + iconPathOff: 'security', + rawRadius: 8, + targetRadius: 0, + currentRadius: 0, + angle: -135 + }, + { + action: 'Freeze / Unfreeze', + actionFunction: floatingObject.freezeToggle, + actionStatus: floatingObject.getFreezeStatus, + currentStatus: true, + label: undefined, + visible: false, + iconPathOn: 'broken-link', + iconPathOff: 'security', + rawRadius: 8, + targetRadius: 0, + currentRadius: 0, + angle: 135 + }, + { + action: 'Delete Parameters', + actionFunction: payload.onMenuItemClick, + label: 'Delete Trading System', + visible: false, + iconPathOn: 'trash', + iconPathOff: 'trash', + rawRadius: 8, + targetRadius: 0, + currentRadius: 0, + angle: -40 + }, + { + action: 'Add Missing Parameters', + actionFunction: payload.onMenuItemClick, + label: 'Add Missing Parameters', + visible: false, + iconPathOn: 'settings', + iconPathOff: 'settings', + rawRadius: 8, + targetRadius: 0, + currentRadius: 0, + angle: 0 + }, + { + action: 'Download', + actionFunction: payload.onMenuItemClick, + label: 'Download', + visible: false, + iconPathOn: 'upload', + iconPathOff: 'upload', + rawRadius: 8, + targetRadius: 0, + currentRadius: 0, + angle: 40 + }] + break + } + case 'Base Asset': { + menuItemsInitialValues = [ + { + action: 'Pin / Unpin', + actionFunction: floatingObject.pinToggle, + actionStatus: floatingObject.getPinStatus, + currentStatus: true, + label: undefined, + visible: false, + iconPathOn: 'target', + iconPathOff: 'security', + rawRadius: 8, + targetRadius: 0, + currentRadius: 0, + angle: -135 + }, + { + action: 'Freeze / Unfreeze', + actionFunction: floatingObject.freezeToggle, + actionStatus: floatingObject.getFreezeStatus, + currentStatus: true, + label: undefined, + visible: false, + iconPathOn: 'broken-link', + iconPathOff: 'security', + rawRadius: 8, + targetRadius: 0, + currentRadius: 0, + angle: 135 + }, + { + action: 'Delete Base Asset', + actionFunction: payload.onMenuItemClick, + label: 'Delete Base Asset', + visible: false, + iconPathOn: 'trash', + iconPathOff: 'trash', + rawRadius: 8, + targetRadius: 0, + currentRadius: 0, + angle: -40 + }, + { + action: 'Add Formula', + actionFunction: payload.onMenuItemClick, + label: 'Add Formula', + visible: false, + iconPathOn: 'pipette', + iconPathOff: 'pipette', + relatedStrategyPart: 'Formula', + rawRadius: 8, + targetRadius: 0, + currentRadius: 0, + angle: 0 + }, + { + action: 'Download', + actionFunction: payload.onMenuItemClick, + label: 'Download', + visible: false, + iconPathOn: 'upload', + iconPathOff: 'upload', + rawRadius: 8, + targetRadius: 0, + currentRadius: 0, + angle: 40 + }] + break + } case 'Strategy': { menuItemsInitialValues = [ { @@ -501,6 +638,75 @@ function newStrategyPartConstructor () { }] break } + case 'Position Size': { + menuItemsInitialValues = [ + { + action: 'Pin / Unpin', + actionFunction: floatingObject.pinToggle, + actionStatus: floatingObject.getPinStatus, + currentStatus: true, + label: undefined, + visible: false, + iconPathOn: 'target', + iconPathOff: 'security', + rawRadius: 8, + targetRadius: 0, + currentRadius: 0, + angle: -135 + }, + { + action: 'Freeze / Unfreeze', + actionFunction: floatingObject.freezeToggle, + actionStatus: floatingObject.getFreezeStatus, + currentStatus: true, + label: undefined, + visible: false, + iconPathOn: 'broken-link', + iconPathOff: 'security', + rawRadius: 8, + targetRadius: 0, + currentRadius: 0, + angle: 135 + }, + { + action: 'Delete Position Size', + actionFunction: payload.onMenuItemClick, + label: 'Delete Trading System', + visible: false, + iconPathOn: 'trash', + iconPathOff: 'trash', + rawRadius: 8, + targetRadius: 0, + currentRadius: 0, + angle: -40 + }, + { + action: 'Add Formula', + actionFunction: payload.onMenuItemClick, + label: 'Add Formula', + visible: false, + iconPathOn: 'pipette', + iconPathOff: 'pipette', + relatedStrategyPart: 'Formula', + rawRadius: 8, + targetRadius: 0, + currentRadius: 0, + angle: 0 + }, + { + action: 'Download', + actionFunction: payload.onMenuItemClick, + label: 'Download', + visible: false, + iconPathOn: 'upload', + iconPathOff: 'upload', + rawRadius: 8, + targetRadius: 0, + currentRadius: 0, + angle: 40 + }] + break + } case 'Trigger On Event': { menuItemsInitialValues = [ { @@ -949,8 +1155,8 @@ function newStrategyPartConstructor () { actionFunction: payload.onMenuItemClick, label: 'Add Formula', visible: false, - iconPathOn: 'schedule', - iconPathOff: 'schedule', + iconPathOn: 'pipette', + iconPathOff: 'pipette', relatedStrategyPart: 'Formula', rawRadius: 8, targetRadius: 0, diff --git a/Spaces/StrategySpace.js b/Spaces/StrategySpace.js index d99d48d32..01e7bc5df 100644 --- a/Spaces/StrategySpace.js +++ b/Spaces/StrategySpace.js @@ -41,11 +41,14 @@ function newStrategySpace () { function buildIconByPartTypeMap () { const relationshipArray = [ ['Trading System', 'analysis'], + ['Parameters', 'settings'], + ['Base Asset', 'sitemap'], ['Strategy', 'quality'], ['Trigger Stage', 'chronometer'], ['Open Stage', 'photo-camera'], ['Manage Stage', 'video-player'], ['Close Stage', 'timeline'], + ['Position Size', 'responsive'], ['Trigger On Event', 'startup'], ['Trigger Off Event', 'support'], ['Take Position Event', 'compass'], From 4330ef1e0477ea8f964f9dcbd69ab2c4382a7ff8 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Thu, 6 Jun 2019 12:37:49 +0200 Subject: [PATCH 05/25] All new menu item actions implemented --- FloatingSpace/StrategyPartConstructor.js | 32 +++++++- .../FunctionLibraries/NodeDeleter.js | 76 +++++++++++++++---- .../FunctionLibraries/PartsFromNodes.js | 39 ++++++++++ StrategySpace/Workspace/Workspace.js | 27 +++++++ 4 files changed, 156 insertions(+), 18 deletions(-) diff --git a/FloatingSpace/StrategyPartConstructor.js b/FloatingSpace/StrategyPartConstructor.js index daa1ef5c7..6bbae4fc4 100644 --- a/FloatingSpace/StrategyPartConstructor.js +++ b/FloatingSpace/StrategyPartConstructor.js @@ -132,7 +132,7 @@ function newStrategyPartConstructor () { rawRadius: 8, targetRadius: 0, currentRadius: 0, - angle: -40 + angle: -50 }, { action: 'Delete Trading System', @@ -144,7 +144,7 @@ function newStrategyPartConstructor () { rawRadius: 8, targetRadius: 0, currentRadius: 0, - angle: 0 + angle: -20 }, { action: 'New Strategy', @@ -157,7 +157,20 @@ function newStrategyPartConstructor () { rawRadius: 8, targetRadius: 0, currentRadius: 0, - angle: 40 + angle: +20 + }, + { + action: 'Add Parameters', + actionFunction: payload.onMenuItemClick, + label: 'Add Parameters', + visible: false, + iconPathOn: 'quality', + iconPathOff: 'quality', + relatedStrategyPart: 'Parameters', + rawRadius: 8, + targetRadius: 0, + currentRadius: 0, + angle: 50 }, { action: 'Download', @@ -420,6 +433,19 @@ function newStrategyPartConstructor () { currentRadius: 0, angle: -40 }, + { + action: 'Add Position Size', + actionFunction: payload.onMenuItemClick, + label: 'Add Position Size', + visible: false, + iconPathOn: 'responsive', + iconPathOff: 'responsive', + relatedStrategyPart: 'Position Size', + rawRadius: 8, + targetRadius: 0, + currentRadius: 0, + angle: -40 + }, { action: 'Delete Trigger Stage', actionFunction: payload.onMenuItemClick, diff --git a/StrategySpace/Workspace/FunctionLibraries/NodeDeleter.js b/StrategySpace/Workspace/FunctionLibraries/NodeDeleter.js index 9ed435656..6e015633a 100644 --- a/StrategySpace/Workspace/FunctionLibraries/NodeDeleter.js +++ b/StrategySpace/Workspace/FunctionLibraries/NodeDeleter.js @@ -1,11 +1,14 @@ function newNodeDeleter () { thisObject = { deleteTradingSystem: deleteTradingSystem, + deleteParameters: deleteParameters, + deleteBaseAsset: deleteBaseAsset, deleteStrategy: deleteStrategy, deleteTriggerStage: deleteTriggerStage, deleteOpenStage: deleteOpenStage, deleteManageStage: deleteManageStage, deleteCloseStage: deleteCloseStage, + deletePositionSize: deletePositionSize, deleteInitialDefinition: deleteInitialDefinition, deleteEvent: deleteEvent, deleteManagedItem: deleteManagedItem, @@ -38,7 +41,7 @@ function newNodeDeleter () { } while (node.strategies.length > 0) { - deleteStrategy(node.strategies[0]) + deleteStrategy(node.strategies[0], rootNodes) } completeDeletion(node, rootNodes) @@ -46,6 +49,49 @@ function newNodeDeleter () { cleanNode(node) } +function deleteParameters() (node, rootNodes) { + let payload = node.payload + if (payload.parentNode !== undefined) { + payload.parentNode.parameters = undefined + } else { + completeDeletion(node, rootNodes) + } + if (node.baseAsset !== undefined) { + deleteBaseAsset(node.baseAsset, rootNodes) + } + destroyPart(node) + cleanNode(node) +} + +function deleteBaseAsset() (node, rootNodes) { + let payload = node.payload + if (payload.parentNode !== undefined) { + payload.parentNode.baseAsset = undefined + } else { + completeDeletion(node, rootNodes) + } + if (node.formula !== undefined) { + deleteFormula(node.formula, rootNodes) + } + destroyPart(node) + cleanNode(node) +} + +function deletePositionSize() (node, rootNodes) { + let payload = node.payload + if (payload.parentNode !== undefined) { + payload.parentNode.positionSize = undefined + } else { + completeDeletion(node, rootNodes) + } + if (node.formula !== undefined) { + deleteFormula(node.formula, rootNodes) + } + destroyPart(node) + cleanNode(node) +} + + function deleteStrategy (node, rootNodes) { let payload = node.payload if (payload.parentNode !== undefined) { @@ -59,16 +105,16 @@ function newNodeDeleter () { completeDeletion(node, rootNodes) } if (node.triggerStage !== undefined) { - deleteTriggerStage(node.triggerStage) + deleteTriggerStage(node.triggerStage, rootNodes) } if (node.openStage !== undefined) { - deleteOpenStage(node.openStage) + deleteOpenStage(node.openStage, rootNodes) } if (node.manageStage !== undefined) { - deleteManageStage(node.manageStage) + deleteManageStage(node.manageStage, rootNodes) } if (node.closeStage !== undefined) { - deleteCloseStage(node.closeStage) + deleteCloseStage(node.closeStage, rootNodes) } destroyPart(node) cleanNode(node) @@ -82,13 +128,13 @@ function newNodeDeleter () { completeDeletion(node, rootNodes) } if (node.triggerOn !== undefined) { - deleteEvent(node.triggerOn) + deleteEvent(node.triggerOn, rootNodes) } if (node.triggerOff !== undefined) { - deleteEvent(node.triggerOff) + deleteEvent(node.triggerOff, rootNodes) } if (node.takePosition !== undefined) { - deleteEvent(node.takePosition) + deleteEvent(node.takePosition, rootNodes) } destroyPart(node) cleanNode(node) @@ -102,7 +148,7 @@ function newNodeDeleter () { completeDeletion(node, rootNodes) } if (node.initialDefinition !== undefined) { - deleteInitialDefinition(node.initialDefinition) + deleteInitialDefinition(node.initialDefinition, rootNodes) } destroyPart(node) cleanNode(node) @@ -116,10 +162,10 @@ function newNodeDeleter () { completeDeletion(node, rootNodes) } if (node.stopLoss !== undefined) { - deleteManagedItem(node.stopLoss) + deleteManagedItem(node.stopLoss, rootNodes) } if (node.takeProfit !== undefined) { - deleteManagedItem(node.takeProfit) + deleteManagedItem(node.takeProfit, rootNodes) } destroyPart(node) cleanNode(node) @@ -144,10 +190,10 @@ function newNodeDeleter () { completeDeletion(node, rootNodes) } if (node.stopLoss !== undefined) { - deleteManagedItem(node.stopLoss) + deleteManagedItem(node.stopLoss, rootNodes) } if (node.takeProfit !== undefined) { - deleteManagedItem(node.takeProfit) + deleteManagedItem(node.takeProfit, rootNodes) } destroyPart(node) cleanNode(node) @@ -179,7 +225,7 @@ function newNodeDeleter () { } while (node.situations.length > 0) { - deleteSituation(node.situations[0]) + deleteSituation(node.situations[0], rootNodes) } destroyPart(node) cleanNode(node) @@ -258,7 +304,7 @@ function newNodeDeleter () { if (situation.id === node.id) { while (situation.conditions.length > 0) { let condition = situation.conditions[0] - deleteCondition(condition) + deleteCondition(condition, rootNodes) } situation.conditions = [] payload.parentNode.situations.splice(j, 1) diff --git a/StrategySpace/Workspace/FunctionLibraries/PartsFromNodes.js b/StrategySpace/Workspace/FunctionLibraries/PartsFromNodes.js index b623c2b17..6c67f1d53 100644 --- a/StrategySpace/Workspace/FunctionLibraries/PartsFromNodes.js +++ b/StrategySpace/Workspace/FunctionLibraries/PartsFromNodes.js @@ -2,9 +2,12 @@ function newPartsFromNodes () { thisObject = { createPartFromNode: createPartFromNode, newStrategy: newStrategy, + addParameters: addParameters, + addMissingParameters: addMissingParameters, addMissingStages: addMissingStages, addMissingEvents: addMissingEvents, addMissingItems: addMissingItems, + addPositionSize: addPositionSize, addInitialDefinition: addInitialDefinition, addPhase: addPhase, addFormula: addFormula, @@ -264,6 +267,29 @@ function newPartsFromNodes () { createPart('Take Profit', 'Initial Take Profit', strategy.openStage.initialDefinition.takeProfit, strategy.openStage.initialDefinition, strategy.openStage.initialDefinition) } + function addParameters (node) { + if (node.parameters === undefined) { + node.parameters = { + name: 'Parameters' + } + createPart('Parameters', '', node.parameters, node, node) + addMissingParameters(node.parameters) + } + } + + function addMissingParameters (node) { + if (node.baseAsset === undefined) { + node.baseAsset = { + name: 'Base Asset', + formula: { + code: DEFAULT_FORMULA_TEXT + } + } + createPart('Base Asset', '', node.baseAsset, node, node) + createPart('Formula', '', node.baseAsset.formula, node.baseAsset, node.baseAsset) + } + } + function addMissingStages (node) { if (node.triggerStage === undefined) { node.triggerStage = { @@ -339,6 +365,19 @@ function newPartsFromNodes () { } } + function addPositionSize (node) { + if (node.positionSize === undefined) { + node.positionSize = { + name: 'Position Size', + formula: { + code: DEFAULT_FORMULA_TEXT + } + } + createPart('Position Size', '', node.positionSize, node, node) + createPart('Formula', '', node.positionSize.formula, node.positionSize, node.positionSize) + } + } + function addMissingItems (node) { if (node.type === 'Initial Definition') { if (node.stopLoss === undefined) { diff --git a/StrategySpace/Workspace/Workspace.js b/StrategySpace/Workspace/Workspace.js index be8aaab73..3107151f9 100644 --- a/StrategySpace/Workspace/Workspace.js +++ b/StrategySpace/Workspace/Workspace.js @@ -169,6 +169,16 @@ function newWorkspace () { functionLibraryPartsFromNodes.newStrategy(payload.node) } break + case 'Add Parameters': + { + functionLibraryPartsFromNodes.addParameters(payload.node) + } + break + case 'Add Missing Parameters': + { + functionLibraryPartsFromNodes.addMissingParameters(payload.node) + } + break case 'Add Missing Stages': { functionLibraryPartsFromNodes.addMissingStages(payload.node) @@ -179,6 +189,11 @@ function newWorkspace () { functionLibraryPartsFromNodes.addMissingEvents(payload.node) } break + case 'Add Position Size': + { + functionLibraryPartsFromNodes.addPositionSize(payload.node) + } + break case 'Add Missing Items': { functionLibraryPartsFromNodes.addMissingItems(payload.node) @@ -223,6 +238,14 @@ function newWorkspace () { functionLibraryNodeDeleter.deleteTradingSystem(payload.node, rootNodes) break } + case 'Delete Parameters': { + functionLibraryNodeDeleter.deleteParameters(payload.node, rootNodes) + break + } + case 'Delete Base Asset': { + functionLibraryNodeDeleter.deleteBaseAsset(payload.node, rootNodes) + break + } case 'Delete Strategy': { functionLibraryNodeDeleter.deleteStrategy(payload.node, rootNodes) break @@ -243,6 +266,10 @@ function newWorkspace () { functionLibraryNodeDeleter.deleteCloseStage(payload.node, rootNodes) break } + case 'Delete Position Size': { + functionLibraryNodeDeleter.deletePositionSize(payload.node, rootNodes) + break + } case 'Delete Initial Definition': { functionLibraryNodeDeleter.deleteInitialDefinition(payload.node, rootNodes) break From 984221977bca7570b108b4761210c2fae5dde221 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Thu, 6 Jun 2019 12:51:47 +0200 Subject: [PATCH 06/25] Attach Detach new parts --- FloatingSpace/StrategyPart.js | 17 ++++++++- FloatingSpace/StrategyPartTitle.js | 9 +++++ .../FunctionLibraries/AttachDetach.js | 36 +++++++++++++++++++ 3 files changed, 61 insertions(+), 1 deletion(-) diff --git a/FloatingSpace/StrategyPart.js b/FloatingSpace/StrategyPart.js index 3aeb8267d..3b798a864 100644 --- a/FloatingSpace/StrategyPart.js +++ b/FloatingSpace/StrategyPart.js @@ -182,6 +182,14 @@ function newStrategyPart () { let compatibleType let compatibleSubType switch (thisObject.payload.node.type) { + case 'Parameters': + compatibleType = 'Trading System' + compatibleSubType = undefined + break + case 'Base Assets': + compatibleType = 'Parameters' + compatibleSubType = undefined + break case 'Strategy': compatibleType = 'Trading System' compatibleSubType = undefined @@ -202,6 +210,10 @@ function newStrategyPart () { compatibleType = 'Strategy' compatibleSubType = undefined break + case 'Position Size': + compatibleType = 'Trigger Stage' + compatibleSubType = undefined + break case 'Take Position Event': compatibleType = 'Trigger Stage' compatibleSubType = undefined @@ -231,7 +243,7 @@ function newStrategyPart () { compatibleSubType = undefined break case 'Formula': - compatibleType = 'Phase' + compatibleType = 'Base Asset' + '.' + 'Position Size' + '.' + 'Phase' compatibleSubType = undefined break case 'Next Phase Event': @@ -264,10 +276,13 @@ function newStrategyPart () { let nearbyNode = floatingObject.payload.node if (compatibleType.indexOf(nearbyNode.type) >= 0) { /* Discard objects with busy coonection ports */ + if (thisObject.payload.node.type === 'Parameters' && nearbyNode.parameters !== undefined) { continue } + if (thisObject.payload.node.type === 'Base Asset' && nearbyNode.baseAsset !== undefined) { continue } if (thisObject.payload.node.type === 'Trigger Stage' && nearbyNode.triggerStage !== undefined) { continue } if (thisObject.payload.node.type === 'Open Stage' && nearbyNode.openStage !== undefined) { continue } if (thisObject.payload.node.type === 'Manage Stage' && nearbyNode.manageStage !== undefined) { continue } if (thisObject.payload.node.type === 'Close Stage' && nearbyNode.closeStage !== undefined) { continue } + if (thisObject.payload.node.type === 'Position Size' && nearbyNode.positionSize !== undefined) { continue } if (thisObject.payload.node.type === 'Take Position Event' && nearbyNode.takePosition !== undefined) { continue } if (thisObject.payload.node.type === 'Trigger Off Event' && nearbyNode.triggerOff !== undefined) { continue } if (thisObject.payload.node.type === 'Trigger On Event' && nearbyNode.triggerOn !== undefined) { continue } diff --git a/FloatingSpace/StrategyPartTitle.js b/FloatingSpace/StrategyPartTitle.js index 496eb5aef..e1fbe90be 100644 --- a/FloatingSpace/StrategyPartTitle.js +++ b/FloatingSpace/StrategyPartTitle.js @@ -52,6 +52,12 @@ function newStrategyPartTitle () { thisObject.allwaysVisible = true break } + case 'Parameters': { + break + } + case 'Base Asset': { + break + } case 'Strategy': { thisObject.allwaysVisible = true break @@ -68,6 +74,9 @@ function newStrategyPartTitle () { case 'Close Stage': { break } + case 'Position Size': { + break + } case 'Trigger On Event': { break } diff --git a/StrategySpace/Workspace/FunctionLibraries/AttachDetach.js b/StrategySpace/Workspace/FunctionLibraries/AttachDetach.js index 750290153..4272a110e 100644 --- a/StrategySpace/Workspace/FunctionLibraries/AttachDetach.js +++ b/StrategySpace/Workspace/FunctionLibraries/AttachDetach.js @@ -11,6 +11,16 @@ function newAttachDetach () { case 'Trading System': { return } + case 'Parameters': { + node.payload.parentNode.parameters = undefined + completeDetachment(node, rootNodes) + return + } + case 'Base Asset': { + node.payload.parentNode.baseAsset = undefined + completeDetachment(node, rootNodes) + return + } case 'Strategy': { let payload = node.payload for (let i = 0; i < payload.parentNode.strategies.length; i++) { @@ -42,6 +52,11 @@ function newAttachDetach () { completeDetachment(node, rootNodes) return } + case 'Position Size': { + node.payload.parentNode.positionSize = undefined + completeDetachment(node, rootNodes) + return + } case 'Trigger On Event': { node.payload.parentNode.triggerOn = undefined completeDetachment(node, rootNodes) @@ -134,6 +149,20 @@ function newAttachDetach () { function attachNode (node, attachToNode, rootNodes) { switch (node.type) { + case 'Parameters': { + node.payload.parentNode = attachToNode + node.payload.chainParent = attachToNode + node.payload.parentNode.parameters = node + completeAttachment(node, rootNodes) + } + break + case 'Base Asset': { + node.payload.parentNode = attachToNode + node.payload.chainParent = attachToNode + node.payload.parentNode.baseAsset = node + completeAttachment(node, rootNodes) + } + break case 'Strategy': { node.payload.parentNode = attachToNode node.payload.chainParent = attachToNode @@ -169,6 +198,13 @@ function newAttachDetach () { completeAttachment(node, rootNodes) } break + case 'Position Size': { + node.payload.parentNode = attachToNode + node.payload.chainParent = attachToNode + node.payload.parentNode.positionSize = node + completeAttachment(node, rootNodes) + } + break case 'Initial Definition': { node.payload.parentNode = attachToNode node.payload.chainParent = attachToNode From eeb1351f5f2f99d559e68ff9e424677361480d41 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Thu, 6 Jun 2019 13:00:43 +0200 Subject: [PATCH 07/25] Adding new node types to Libraries --- .../FunctionLibraries/PartsFromNodes.js | 21 +++++++++++++++ .../FunctionLibraries/ProtocolNode.js | 27 +++++++++++++++++++ 2 files changed, 48 insertions(+) diff --git a/StrategySpace/Workspace/FunctionLibraries/PartsFromNodes.js b/StrategySpace/Workspace/FunctionLibraries/PartsFromNodes.js index 6c67f1d53..3fee5d8d2 100644 --- a/StrategySpace/Workspace/FunctionLibraries/PartsFromNodes.js +++ b/StrategySpace/Workspace/FunctionLibraries/PartsFromNodes.js @@ -141,6 +141,13 @@ function newPartsFromNodes () { } return } + case 'Position Size': { + createPart('Position Size', node.name, node, parentNode, chainParent, 'Position Size') + if (node.formula !== undefined) { + createPartFromNode(node.formula, node, node) + } + return + } case 'Trigger Stage': { let stage = node createPart('Trigger Stage', stage.name, stage, parentNode, chainParent, 'Trigger Stage') @@ -199,6 +206,20 @@ function newPartsFromNodes () { } return } + case 'Base Asset': { + createPart('Base Asset', node.name, node, parentNode, chainParent, 'Base Asset') + if (node.formula !== undefined) { + createPartFromNode(node.formula, node, nodes) + } + return + } + case 'Parameters': { + createPart('Parameters', node.name, node, parentNode, chainParent, 'Parameters') + if (node.baseAsset !== undefined) { + createPartFromNode(node.baseAsset, node, node) + } + return + } case 'Trading System': { let tradingSystem = node createPart('Trading System', tradingSystem.name, tradingSystem, parentNode, chainParent, 'Trading System') diff --git a/StrategySpace/Workspace/FunctionLibraries/ProtocolNode.js b/StrategySpace/Workspace/FunctionLibraries/ProtocolNode.js index 5ff9f18cd..59dcba761 100644 --- a/StrategySpace/Workspace/FunctionLibraries/ProtocolNode.js +++ b/StrategySpace/Workspace/FunctionLibraries/ProtocolNode.js @@ -155,6 +155,15 @@ function newProtocolNode () { } return object } + case 'Position Size': { + let object = { + type: node.type, + subType: node.subType, + name: node.name, + formula: getProtocolNode(node.formula) + } + return object + } case 'Trigger Stage': { let stage = { type: node.type, @@ -205,6 +214,24 @@ function newProtocolNode () { } return strategy } + case 'Base Asset': { + let object = { + type: node.type, + subType: node.subType, + name: node.name, + formula: getProtocolNode(node.formula) + } + return object + } + case 'Parameters': { + let object = { + type: node.type, + subType: node.subType, + name: node.name, + baseAsset: getProtocolNode(node.baseAsset) + } + return object + } case 'Trading System': { let tradingSystem = { type: node.type, From 133fd3948cecf0606f2a0d0f3ce5e7dc8cc3c34f Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Thu, 6 Jun 2019 13:07:45 +0200 Subject: [PATCH 08/25] new node types implementation complete --- .../FunctionLibraries/WorkspaceNode.js | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/StrategySpace/Workspace/FunctionLibraries/WorkspaceNode.js b/StrategySpace/Workspace/FunctionLibraries/WorkspaceNode.js index b11aba2e4..744f34849 100644 --- a/StrategySpace/Workspace/FunctionLibraries/WorkspaceNode.js +++ b/StrategySpace/Workspace/FunctionLibraries/WorkspaceNode.js @@ -181,6 +181,17 @@ function newWorkspaceNode () { } return object } + case 'Position Size': { + let object = { + id: node.id, + type: node.type, + subType: node.subType, + name: node.name, + formula: getWorkspaceNode(node.formula), + savedPayload: getSavedPayload(node) + } + return object + } case 'Trigger Stage': { let stage = { id: node.id, @@ -241,6 +252,28 @@ function newWorkspaceNode () { } return strategy } + case 'Base Asset': { + let object = { + id: node.id, + type: node.type, + subType: node.subType, + name: node.name, + formula: getWorkspaceNode(node.formula) + savedPayload: getSavedPayload(node) + } + return object + } + case 'Parameters': { + let object = { + id: node.id, + type: node.type, + subType: node.subType, + name: node.name, + baseAsset: getWorkspaceNode(node.baseAsset) + savedPayload: getSavedPayload(node) + } + return object + } case 'Trading System': { let tradingSystem = { id: node.id, From 5c2a93466d91e999d34bb692cd7d15135132d9bc Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Thu, 6 Jun 2019 13:11:39 +0200 Subject: [PATCH 09/25] typos corrected --- .../FunctionLibraries/NodeDeleter.js | 31 +++++++++---------- .../FunctionLibraries/WorkspaceNode.js | 4 +-- 2 files changed, 17 insertions(+), 18 deletions(-) diff --git a/StrategySpace/Workspace/FunctionLibraries/NodeDeleter.js b/StrategySpace/Workspace/FunctionLibraries/NodeDeleter.js index 6e015633a..6c40393f2 100644 --- a/StrategySpace/Workspace/FunctionLibraries/NodeDeleter.js +++ b/StrategySpace/Workspace/FunctionLibraries/NodeDeleter.js @@ -63,7 +63,7 @@ function deleteParameters() (node, rootNodes) { cleanNode(node) } -function deleteBaseAsset() (node, rootNodes) { +function deleteBaseAsset (node, rootNodes) { let payload = node.payload if (payload.parentNode !== undefined) { payload.parentNode.baseAsset = undefined @@ -77,21 +77,6 @@ function deleteBaseAsset() (node, rootNodes) { cleanNode(node) } -function deletePositionSize() (node, rootNodes) { - let payload = node.payload - if (payload.parentNode !== undefined) { - payload.parentNode.positionSize = undefined - } else { - completeDeletion(node, rootNodes) - } - if (node.formula !== undefined) { - deleteFormula(node.formula, rootNodes) - } - destroyPart(node) - cleanNode(node) -} - - function deleteStrategy (node, rootNodes) { let payload = node.payload if (payload.parentNode !== undefined) { @@ -182,6 +167,20 @@ function deletePositionSize() (node, rootNodes) { cleanNode(node) } + function deletePositionSize (node, rootNodes) { + let payload = node.payload + if (payload.parentNode !== undefined) { + payload.parentNode.positionSize = undefined + } else { + completeDeletion(node, rootNodes) + } + if (node.formula !== undefined) { + deleteFormula(node.formula, rootNodes) + } + destroyPart(node) + cleanNode(node) + } + function deleteInitialDefinition (node, rootNodes) { let payload = node.payload if (payload.parentNode !== undefined) { diff --git a/StrategySpace/Workspace/FunctionLibraries/WorkspaceNode.js b/StrategySpace/Workspace/FunctionLibraries/WorkspaceNode.js index 744f34849..4b8605c83 100644 --- a/StrategySpace/Workspace/FunctionLibraries/WorkspaceNode.js +++ b/StrategySpace/Workspace/FunctionLibraries/WorkspaceNode.js @@ -258,7 +258,7 @@ function newWorkspaceNode () { type: node.type, subType: node.subType, name: node.name, - formula: getWorkspaceNode(node.formula) + formula: getWorkspaceNode(node.formula), savedPayload: getSavedPayload(node) } return object @@ -269,7 +269,7 @@ function newWorkspaceNode () { type: node.type, subType: node.subType, name: node.name, - baseAsset: getWorkspaceNode(node.baseAsset) + baseAsset: getWorkspaceNode(node.baseAsset), savedPayload: getSavedPayload(node) } return object From 96b9f058d4a08097c5c2f00e055e66e7dd9150a4 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Thu, 6 Jun 2019 13:13:17 +0200 Subject: [PATCH 10/25] another typo --- .../FunctionLibraries/NodeDeleter.js | 50 +++++++++---------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/StrategySpace/Workspace/FunctionLibraries/NodeDeleter.js b/StrategySpace/Workspace/FunctionLibraries/NodeDeleter.js index 6c40393f2..ab64cbbe5 100644 --- a/StrategySpace/Workspace/FunctionLibraries/NodeDeleter.js +++ b/StrategySpace/Workspace/FunctionLibraries/NodeDeleter.js @@ -49,33 +49,33 @@ function newNodeDeleter () { cleanNode(node) } -function deleteParameters() (node, rootNodes) { - let payload = node.payload - if (payload.parentNode !== undefined) { - payload.parentNode.parameters = undefined - } else { - completeDeletion(node, rootNodes) + function deleteParameters (node, rootNodes) { + let payload = node.payload + if (payload.parentNode !== undefined) { + payload.parentNode.parameters = undefined + } else { + completeDeletion(node, rootNodes) + } + if (node.baseAsset !== undefined) { + deleteBaseAsset(node.baseAsset, rootNodes) + } + destroyPart(node) + cleanNode(node) } - if (node.baseAsset !== undefined) { - deleteBaseAsset(node.baseAsset, rootNodes) - } - destroyPart(node) - cleanNode(node) -} -function deleteBaseAsset (node, rootNodes) { - let payload = node.payload - if (payload.parentNode !== undefined) { - payload.parentNode.baseAsset = undefined - } else { - completeDeletion(node, rootNodes) + function deleteBaseAsset (node, rootNodes) { + let payload = node.payload + if (payload.parentNode !== undefined) { + payload.parentNode.baseAsset = undefined + } else { + completeDeletion(node, rootNodes) + } + if (node.formula !== undefined) { + deleteFormula(node.formula, rootNodes) + } + destroyPart(node) + cleanNode(node) } - if (node.formula !== undefined) { - deleteFormula(node.formula, rootNodes) - } - destroyPart(node) - cleanNode(node) -} function deleteStrategy (node, rootNodes) { let payload = node.payload @@ -180,7 +180,7 @@ function deleteBaseAsset (node, rootNodes) { destroyPart(node) cleanNode(node) } - + function deleteInitialDefinition (node, rootNodes) { let payload = node.payload if (payload.parentNode !== undefined) { From 5f4ef7902ced82cc1d03c3e21af2a96c449c3976 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Thu, 6 Jun 2019 13:24:44 +0200 Subject: [PATCH 11/25] Menu Positioning --- FloatingSpace/StrategyPartConstructor.js | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/FloatingSpace/StrategyPartConstructor.js b/FloatingSpace/StrategyPartConstructor.js index 6bbae4fc4..0f85eb265 100644 --- a/FloatingSpace/StrategyPartConstructor.js +++ b/FloatingSpace/StrategyPartConstructor.js @@ -117,7 +117,7 @@ function newStrategyPartConstructor () { rawRadius: 8, targetRadius: 0, currentRadius: 0, - angle: -80 + angle: -70 }, { action: 'Save Trading System', @@ -132,7 +132,7 @@ function newStrategyPartConstructor () { rawRadius: 8, targetRadius: 0, currentRadius: 0, - angle: -50 + angle: -40 }, { action: 'Delete Trading System', @@ -144,7 +144,7 @@ function newStrategyPartConstructor () { rawRadius: 8, targetRadius: 0, currentRadius: 0, - angle: -20 + angle: -10 }, { action: 'New Strategy', @@ -157,7 +157,7 @@ function newStrategyPartConstructor () { rawRadius: 8, targetRadius: 0, currentRadius: 0, - angle: +20 + angle: +10 }, { action: 'Add Parameters', @@ -170,7 +170,7 @@ function newStrategyPartConstructor () { rawRadius: 8, targetRadius: 0, currentRadius: 0, - angle: 50 + angle: 40 }, { action: 'Download', @@ -182,7 +182,7 @@ function newStrategyPartConstructor () { rawRadius: 8, targetRadius: 0, currentRadius: 0, - angle: 80 + angle: 70 }] break } @@ -431,7 +431,7 @@ function newStrategyPartConstructor () { rawRadius: 8, targetRadius: 0, currentRadius: 0, - angle: -40 + angle: -60 }, { action: 'Add Position Size', @@ -444,7 +444,7 @@ function newStrategyPartConstructor () { rawRadius: 8, targetRadius: 0, currentRadius: 0, - angle: -40 + angle: -20 }, { action: 'Delete Trigger Stage', @@ -456,7 +456,7 @@ function newStrategyPartConstructor () { rawRadius: 8, targetRadius: 0, currentRadius: 0, - angle: 0 + angle: 20 }, { action: 'Download', @@ -468,7 +468,7 @@ function newStrategyPartConstructor () { rawRadius: 8, targetRadius: 0, currentRadius: 0, - angle: 40 + angle: 60 }] break } From 3fc791c8f06aa371a54f50b72897ba3d6a4a2d9e Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Thu, 6 Jun 2019 13:28:31 +0200 Subject: [PATCH 12/25] Missing Cases --- FloatingSpace/StrategyPartConstructor.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/FloatingSpace/StrategyPartConstructor.js b/FloatingSpace/StrategyPartConstructor.js index 0f85eb265..27b45a9fd 100644 --- a/FloatingSpace/StrategyPartConstructor.js +++ b/FloatingSpace/StrategyPartConstructor.js @@ -1600,6 +1600,14 @@ function newStrategyPartConstructor () { level_0() break } + case 'Parameters': { + level_3() + break + } + case 'Base Asset': { + level_3() + break + } case 'Strategy': { level_1() break @@ -1620,6 +1628,10 @@ function newStrategyPartConstructor () { level_2() break } + case 'Position Size': { + level_3() + break + } case 'Trigger On Event': { level_3() break From dc57ec93da52fccfe50be2b40fd08ccc5f837653 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Thu, 6 Jun 2019 13:50:14 +0200 Subject: [PATCH 13/25] Protection agains null coordinates --- FloatingSpace/StrategyPartConstructor.js | 8 ++++++++ .../Workspace/FunctionLibraries/PartsFromNodes.js | 8 ++++++++ StrategySpace/Workspace/Workspace.js | 2 +- 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/FloatingSpace/StrategyPartConstructor.js b/FloatingSpace/StrategyPartConstructor.js index 27b45a9fd..09a982ee5 100644 --- a/FloatingSpace/StrategyPartConstructor.js +++ b/FloatingSpace/StrategyPartConstructor.js @@ -13,6 +13,10 @@ function newStrategyPartConstructor () { } let floatingLayer + let spawnPosition = { + x: canvas.floatingSpace.container.frame.width / 2, + y: canvas.floatingSpace.container.frame.height / 2 + } return thisObject @@ -39,6 +43,10 @@ function newStrategyPartConstructor () { x: payload.node.savedPayload.position.x, y: payload.node.savedPayload.position.y } + + if (position.x === null) { position.x = spawnPosition.x } + if (position.y === null) { position.y = spawnPosition.y } + floatingObject.setPosition(position) payload.node.savedPayload.position = undefined if (payload.node.savedPayload.floatingObject.isPinned === true) { diff --git a/StrategySpace/Workspace/FunctionLibraries/PartsFromNodes.js b/StrategySpace/Workspace/FunctionLibraries/PartsFromNodes.js index 3fee5d8d2..9550324e9 100644 --- a/StrategySpace/Workspace/FunctionLibraries/PartsFromNodes.js +++ b/StrategySpace/Workspace/FunctionLibraries/PartsFromNodes.js @@ -17,6 +17,11 @@ function newPartsFromNodes () { addCode: addCode } + let spawnPosition = { + x: canvas.floatingSpace.container.frame.width / 2, + y: canvas.floatingSpace.container.frame.height / 2 + } + return thisObject function createPartFromNode (node, parentNode, chainParent) { @@ -539,6 +544,9 @@ function newPartsFromNodes () { y: node.savedPayload.targetPosition.y } node.savedPayload.targetPosition = undefined + + if (payload.targetPosition.x === null) { payload.targetPosition.x = spawnPosition.x } + if (payload.targetPosition.y === null) { payload.targetPosition.y = spawnPosition.y } } else { if (chainParent === undefined) { payload.targetPosition = { diff --git a/StrategySpace/Workspace/Workspace.js b/StrategySpace/Workspace/Workspace.js index 3107151f9..f41dbdf4d 100644 --- a/StrategySpace/Workspace/Workspace.js +++ b/StrategySpace/Workspace/Workspace.js @@ -29,7 +29,7 @@ function newWorkspace () { thisObject.container.frame.width = 0 thisObject.container.frame.height = 0 - spawnPosition = { + let spawnPosition = { x: canvas.floatingSpace.container.frame.width / 2, y: canvas.floatingSpace.container.frame.height / 2 } From afb7ec1f2ed2c17ed26c9875030763b09f035e6e Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Thu, 6 Jun 2019 13:53:00 +0200 Subject: [PATCH 14/25] Bug corected, s --- FloatingSpace/StrategyPart.js | 2 +- FloatingSpace/StrategyPartConstructor.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/FloatingSpace/StrategyPart.js b/FloatingSpace/StrategyPart.js index 3b798a864..50beda6a2 100644 --- a/FloatingSpace/StrategyPart.js +++ b/FloatingSpace/StrategyPart.js @@ -186,7 +186,7 @@ function newStrategyPart () { compatibleType = 'Trading System' compatibleSubType = undefined break - case 'Base Assets': + case 'Base Asset': compatibleType = 'Parameters' compatibleSubType = undefined break diff --git a/FloatingSpace/StrategyPartConstructor.js b/FloatingSpace/StrategyPartConstructor.js index 09a982ee5..37480e567 100644 --- a/FloatingSpace/StrategyPartConstructor.js +++ b/FloatingSpace/StrategyPartConstructor.js @@ -239,7 +239,7 @@ function newStrategyPartConstructor () { { action: 'Add Missing Parameters', actionFunction: payload.onMenuItemClick, - label: 'Add Missing Parameters', + label: 'Add Missing Params', visible: false, iconPathOn: 'settings', iconPathOff: 'settings', From c69068faa67e6cf1f85bd7e97ca528e3a801b995 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Thu, 6 Jun 2019 14:30:42 +0200 Subject: [PATCH 15/25] Update PartsFromNodes.js --- .../Workspace/FunctionLibraries/PartsFromNodes.js | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/StrategySpace/Workspace/FunctionLibraries/PartsFromNodes.js b/StrategySpace/Workspace/FunctionLibraries/PartsFromNodes.js index 9550324e9..33e9ee2b4 100644 --- a/StrategySpace/Workspace/FunctionLibraries/PartsFromNodes.js +++ b/StrategySpace/Workspace/FunctionLibraries/PartsFromNodes.js @@ -251,6 +251,11 @@ function newPartsFromNodes () { }, takePosition: { situations: [] + }, + positionSize: { + formula: { + code: DEFAULT_FORMULA_TEXT + } } }, openStage: { @@ -291,6 +296,8 @@ function newPartsFromNodes () { createPart('Take Profit', '', strategy.manageStage.takeProfit, strategy.manageStage, strategy.manageStage) createPart('Stop', 'Initial Stop', strategy.openStage.initialDefinition.stopLoss, strategy.openStage.initialDefinition, strategy.openStage.initialDefinition) createPart('Take Profit', 'Initial Take Profit', strategy.openStage.initialDefinition.takeProfit, strategy.openStage.initialDefinition, strategy.openStage.initialDefinition) + createPart('Position Size', '', strategy.triggerStage.positionSize, strategy.triggerStage, strategy.triggerStage) + createPart('Formula', '', strategy.triggerStage.positionSize.formula, strategy.triggerStage.positionSize, strategy.triggerStage.positionSize) } function addParameters (node) { @@ -327,12 +334,19 @@ function newPartsFromNodes () { }, takePosition: { situations: [] + }, + positionSize: { + formula: { + code: DEFAULT_FORMULA_TEXT + } } } createPart('Trigger Stage', '', node.triggerStage, node, node, 'Trigger Stage') createPart('Trigger On Event', '', node.triggerStage.triggerOn, node.triggerStage, node.triggerStage) createPart('Trigger Off Event', '', node.triggerStage.triggerOff, node.triggerStage, node.triggerStage) createPart('Take Position Event', '', node.triggerStage.takePosition, node.triggerStage, node.triggerStage) + createPart('Position Size', '', node.triggerStage.positionSize, node.triggerStage, node.triggerStage) + createPart('Formula', '', node.triggerStage.positionSize.formula, node.triggerStage.positionSize, node.triggerStage.positionSize) } if (node.openStage === undefined) { node.openStage = { From a858e01e5db5c65144b19fdc3732dac8128b1c9e Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Thu, 6 Jun 2019 14:51:43 +0200 Subject: [PATCH 16/25] All working --- .../Workspace/FunctionLibraries/PartsFromNodes.js | 8 +++++++- .../Workspace/FunctionLibraries/WorkspaceNode.js | 2 ++ StrategySpace/Workspace/Workspace.js | 1 + 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/StrategySpace/Workspace/FunctionLibraries/PartsFromNodes.js b/StrategySpace/Workspace/FunctionLibraries/PartsFromNodes.js index 33e9ee2b4..505f2e87c 100644 --- a/StrategySpace/Workspace/FunctionLibraries/PartsFromNodes.js +++ b/StrategySpace/Workspace/FunctionLibraries/PartsFromNodes.js @@ -166,6 +166,9 @@ function newPartsFromNodes () { if (node.takePosition !== undefined) { createPartFromNode(node.takePosition, stage, stage) } + if (node.positionSize !== undefined) { + createPartFromNode(node.positionSize, stage, stage) + } return } case 'Open Stage': { @@ -214,7 +217,7 @@ function newPartsFromNodes () { case 'Base Asset': { createPart('Base Asset', node.name, node, parentNode, chainParent, 'Base Asset') if (node.formula !== undefined) { - createPartFromNode(node.formula, node, nodes) + createPartFromNode(node.formula, node, node) } return } @@ -232,6 +235,9 @@ function newPartsFromNodes () { let strategy = node.strategies[m] createPartFromNode(strategy, tradingSystem, tradingSystem) } + if (node.parameters !== undefined) { + createPartFromNode(node.parameters, node, node) + } return } } diff --git a/StrategySpace/Workspace/FunctionLibraries/WorkspaceNode.js b/StrategySpace/Workspace/FunctionLibraries/WorkspaceNode.js index 4b8605c83..04e69a3fd 100644 --- a/StrategySpace/Workspace/FunctionLibraries/WorkspaceNode.js +++ b/StrategySpace/Workspace/FunctionLibraries/WorkspaceNode.js @@ -201,6 +201,7 @@ function newWorkspaceNode () { triggerOn: getWorkspaceNode(node.triggerOn), triggerOff: getWorkspaceNode(node.triggerOff), takePosition: getWorkspaceNode(node.takePosition), + positionSize: getWorkspaceNode(node.positionSize), savedPayload: getSavedPayload(node) } return stage @@ -281,6 +282,7 @@ function newWorkspaceNode () { subType: node.subType, name: node.name, strategies: [], + parameters: getWorkspaceNode(node.parameters), savedPayload: getSavedPayload(node) } diff --git a/StrategySpace/Workspace/Workspace.js b/StrategySpace/Workspace/Workspace.js index f41dbdf4d..8602c2398 100644 --- a/StrategySpace/Workspace/Workspace.js +++ b/StrategySpace/Workspace/Workspace.js @@ -70,6 +70,7 @@ function newWorkspace () { let rootNode = rootNodes[i] functionLibraryPartsFromNodes.createPartFromNode(rootNode, undefined, undefined) } + console.log('paso por aca') isInitialized = true } } From 9995762e239febb5fdad7c15c9c9c2e6e4c2e7d0 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Thu, 6 Jun 2019 17:22:20 +0200 Subject: [PATCH 17/25] Bug Fixed, not saving --- StrategySpace/Workspace/FunctionLibraries/ProtocolNode.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/StrategySpace/Workspace/FunctionLibraries/ProtocolNode.js b/StrategySpace/Workspace/FunctionLibraries/ProtocolNode.js index 59dcba761..481e51241 100644 --- a/StrategySpace/Workspace/FunctionLibraries/ProtocolNode.js +++ b/StrategySpace/Workspace/FunctionLibraries/ProtocolNode.js @@ -171,7 +171,8 @@ function newProtocolNode () { name: node.name, triggerOn: getProtocolNode(node.triggerOn), triggerOff: getProtocolNode(node.triggerOff), - takePosition: getProtocolNode(node.takePosition) + takePosition: getProtocolNode(node.takePosition), + positionSize: getProtocolNode(node.positionSize) } return stage } @@ -237,7 +238,8 @@ function newProtocolNode () { type: node.type, subType: node.subType, name: node.name, - strategies: [] + strategies: [], + parameters: getProtocolNode(node.parameters) } for (let m = 0; m < node.strategies.length; m++) { From f196f8b871b631461ee06d849434ecd904368bb1 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Fri, 7 Jun 2019 09:51:45 +0200 Subject: [PATCH 18/25] Update Workspace.js --- StrategySpace/Workspace/Workspace.js | 1 - 1 file changed, 1 deletion(-) diff --git a/StrategySpace/Workspace/Workspace.js b/StrategySpace/Workspace/Workspace.js index 8602c2398..f41dbdf4d 100644 --- a/StrategySpace/Workspace/Workspace.js +++ b/StrategySpace/Workspace/Workspace.js @@ -70,7 +70,6 @@ function newWorkspace () { let rootNode = rootNodes[i] functionLibraryPartsFromNodes.createPartFromNode(rootNode, undefined, undefined) } - console.log('paso por aca') isInitialized = true } } From 85d77b8177ea7a1559c9530a468dbe9b5d71aeb6 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Sat, 8 Jun 2019 12:14:57 +0200 Subject: [PATCH 19/25] Error Messages --- FloatingSpace/StrategyPart.js | 82 ++++++++++++++++++++++++++++++++--- 1 file changed, 77 insertions(+), 5 deletions(-) diff --git a/FloatingSpace/StrategyPart.js b/FloatingSpace/StrategyPart.js index 50beda6a2..2fb1b8dff 100644 --- a/FloatingSpace/StrategyPart.js +++ b/FloatingSpace/StrategyPart.js @@ -24,7 +24,7 @@ function newStrategyPart () { getReadyToAttach: getReadyToAttach, showAvailabilityToAttach: showAvailabilityToAttach, highlight: highlight, - unHighlight: unHighlight, + setErrorMessage: setErrorMessage, physics: physics, drawBackground: drawBackground, drawMiddleground: drawMiddleground, @@ -54,6 +54,10 @@ function newStrategyPart () { let isHighlighted let highlightCounter = 0 + + let hasError + let errorMessageCounter = 0 + let runningCounter = 0 let previousDistance @@ -70,6 +74,8 @@ function newStrategyPart () { let isDragging = false let attachToNode + let errorMessage = '' + return thisObject function finalize () { @@ -167,6 +173,7 @@ function newStrategyPart () { iconPhysics() runningPhisycs() highlightPhisycs() + errorMessagePhisycs() detachingPhysics() attachingPhysics() } @@ -391,14 +398,25 @@ function newStrategyPart () { } } + function errorMessagePhisycs () { + errorMessageCounter-- + if (errorMessageCounter < 0) { + errorMessageCounter = 0 + hasError = false + } + } + function highlight () { isHighlighted = true highlightCounter = 30 } - function unHighlight () { - // isHighlighted = false - // highlightCounter = 0 + function setErrorMessage (message) { + if (message !== undefined) { + errorMessage = message + hasError = true + errorMessageCounter = 30 + } } function runningPhisycs () { @@ -500,6 +518,7 @@ function newStrategyPart () { thisObject.codeEditor.drawForeground() } + drawErrorMessage() drawText() thisObject.partTitle.draw() @@ -608,6 +627,45 @@ function newStrategyPart () { } } + function drawErrorMessage () { + if (hasError === false) { return } + +/* Text Follows */ + let position = { + x: 0, + y: 0 + } + + position = thisObject.container.frame.frameThisPoint(position) + + let radius = thisObject.container.frame.radius + /* Label Text */ + let labelPoint + let fontSize = thisObject.payload.floatingObject.currentFontSize * 1 / 2 + let label + + if (radius > 6) { + const MAX_LABEL_LENGTH = 50 + + label = errorMessage + + if (label !== undefined) { + if (label.length > MAX_LABEL_LENGTH) { + label = label.substring(0, MAX_LABEL_LENGTH) + '...' + } + + labelPoint = { + x: position.x - label.length / 2 * fontSize * FONT_ASPECT_RATIO - 5, + y: position.y + radius * 3 / 5 + fontSize * FONT_ASPECT_RATIO + 15 + } + + browserCanvasContext.font = fontSize + 'px ' + UI_FONT.PRIMARY + browserCanvasContext.fillStyle = thisObject.payload.floatingObject.labelStrokeStyle + browserCanvasContext.fillText(label, labelPoint.x, labelPoint.y) + } + } + } + function addIndexNumber (label) { switch (thisObject.payload.node.type) { case 'Phase': { @@ -716,6 +774,21 @@ function newStrategyPart () { browserCanvasContext.stroke() } + if (hasError === true) { + VISIBLE_RADIUS = thisObject.container.frame.radius * 1 + let OPACITY = errorMessageCounter / 30 + + browserCanvasContext.beginPath() + browserCanvasContext.arc(visiblePosition.x, visiblePosition.y, VISIBLE_RADIUS, 0, Math.PI * 2, true) + browserCanvasContext.closePath() + + browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.RED + ', ' + OPACITY + ')' + + browserCanvasContext.lineWidth = 20 + browserCanvasContext.setLineDash([4, 20]) + browserCanvasContext.stroke() + } + if (isHighlighted === true) { VISIBLE_RADIUS = thisObject.container.frame.radius * 1 let OPACITY = highlightCounter / 30 @@ -790,4 +863,3 @@ function newStrategyPart () { } } } - From 2be149ee4f24fcfbe8de10b018618fd30d774b18 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Sat, 8 Jun 2019 15:20:51 +0200 Subject: [PATCH 20/25] Bug Fixes --- FloatingSpace/StrategyPart.js | 32 ++++++++++++++++-------- FloatingSpace/StrategyPartConstructor.js | 2 +- FloatingSpace/StrategyPartTitle.js | 2 +- 3 files changed, 24 insertions(+), 12 deletions(-) diff --git a/FloatingSpace/StrategyPart.js b/FloatingSpace/StrategyPart.js index 2fb1b8dff..17e9b56ca 100644 --- a/FloatingSpace/StrategyPart.js +++ b/FloatingSpace/StrategyPart.js @@ -518,10 +518,6 @@ function newStrategyPart () { thisObject.codeEditor.drawForeground() } - drawErrorMessage() - drawText() - thisObject.partTitle.draw() - if (thisObject.codeEditor !== undefined) { if (thisObject.codeEditor.visible === false) { drawBodyAndPicture() @@ -537,6 +533,10 @@ function newStrategyPart () { thisObject.menu.drawForeground() } } + + drawErrorMessage() + drawText() + thisObject.partTitle.draw() } } @@ -641,11 +641,11 @@ function newStrategyPart () { let radius = thisObject.container.frame.radius /* Label Text */ let labelPoint - let fontSize = thisObject.payload.floatingObject.currentFontSize * 1 / 2 + let fontSize = thisObject.payload.floatingObject.currentFontSize * 3 / 4 let label if (radius > 6) { - const MAX_LABEL_LENGTH = 50 + const MAX_LABEL_LENGTH = 40 label = errorMessage @@ -656,11 +656,11 @@ function newStrategyPart () { labelPoint = { x: position.x - label.length / 2 * fontSize * FONT_ASPECT_RATIO - 5, - y: position.y + radius * 3 / 5 + fontSize * FONT_ASPECT_RATIO + 15 + y: position.y + radius * 2 / 5 + fontSize * FONT_ASPECT_RATIO + 15 } browserCanvasContext.font = fontSize + 'px ' + UI_FONT.PRIMARY - browserCanvasContext.fillStyle = thisObject.payload.floatingObject.labelStrokeStyle + browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.TITANIUM_YELLOW + ', 1)' browserCanvasContext.fillText(label, labelPoint.x, labelPoint.y) } } @@ -759,6 +759,17 @@ function newStrategyPart () { browserCanvasContext.fill() + if (thisObject.isOnFocus === true) { + VISIBLE_RADIUS = thisObject.container.frame.radius + browserCanvasContext.beginPath() + browserCanvasContext.arc(visiblePosition.x, visiblePosition.y, VISIBLE_RADIUS - 2, 0, Math.PI * 2, true) + browserCanvasContext.closePath() + + browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.BLACK + ', 0.5)' + + browserCanvasContext.fill() + } + if (thisObject.isRunning === true) { VISIBLE_RADIUS = thisObject.container.frame.radius * 2 let OPACITY = runningCounter / 30 @@ -767,7 +778,7 @@ function newStrategyPart () { browserCanvasContext.arc(visiblePosition.x, visiblePosition.y, VISIBLE_RADIUS, 0, Math.PI * 2, true) browserCanvasContext.closePath() - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.RUSTED_RED + ', ' + OPACITY + ')' + browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.TURQUOISE + ', ' + OPACITY + ')' browserCanvasContext.lineWidth = 10 browserCanvasContext.setLineDash([4, 20]) @@ -784,7 +795,7 @@ function newStrategyPart () { browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.RED + ', ' + OPACITY + ')' - browserCanvasContext.lineWidth = 20 + browserCanvasContext.lineWidth = 10 browserCanvasContext.setLineDash([4, 20]) browserCanvasContext.stroke() } @@ -863,3 +874,4 @@ function newStrategyPart () { } } } + diff --git a/FloatingSpace/StrategyPartConstructor.js b/FloatingSpace/StrategyPartConstructor.js index 37480e567..749cebf08 100644 --- a/FloatingSpace/StrategyPartConstructor.js +++ b/FloatingSpace/StrategyPartConstructor.js @@ -1685,7 +1685,7 @@ function newStrategyPartConstructor () { break } case 'Code': { - level_6() + level_5() break } default: { diff --git a/FloatingSpace/StrategyPartTitle.js b/FloatingSpace/StrategyPartTitle.js index e1fbe90be..d00a9eccd 100644 --- a/FloatingSpace/StrategyPartTitle.js +++ b/FloatingSpace/StrategyPartTitle.js @@ -288,7 +288,7 @@ function newStrategyPartTitle () { function trimTitle (title) { if (title === undefined) { return } - const MAX_LABEL_LENGTH = 35 + const MAX_LABEL_LENGTH = 30 if (title.length > MAX_LABEL_LENGTH) { title = title.substring(0, MAX_LABEL_LENGTH) + '...' } From 9dd9dc6f8199c9f7d161b6d08c731a4f01d6d040 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Sat, 8 Jun 2019 17:58:40 +0200 Subject: [PATCH 21/25] Increase on executing icon size --- FloatingSpace/StrategyPart.js | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/FloatingSpace/StrategyPart.js b/FloatingSpace/StrategyPart.js index 17e9b56ca..d1c0cd2e7 100644 --- a/FloatingSpace/StrategyPart.js +++ b/FloatingSpace/StrategyPart.js @@ -796,7 +796,7 @@ function newStrategyPart () { browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.RED + ', ' + OPACITY + ')' browserCanvasContext.lineWidth = 10 - browserCanvasContext.setLineDash([4, 20]) + browserCanvasContext.setLineDash([19, 20]) browserCanvasContext.stroke() } @@ -850,11 +850,15 @@ function newStrategyPart () { if (icon !== undefined) { if (icon.canDrawIcon === true) { + let additionalImageSize = 0 + if (thisObject.isExecuting === true) { additionalImageSize = 20 } + let totalImageSize = additionalImageSize + thisObject.payload.floatingObject.currentImageSize + browserCanvasContext.drawImage( - icon, position.x - thisObject.payload.floatingObject.currentImageSize / 2, - position.y - thisObject.payload.floatingObject.currentImageSize / 2, - thisObject.payload.floatingObject.currentImageSize, - thisObject.payload.floatingObject.currentImageSize) + icon, position.x - totalImageSize / 2, + position.y - totalImageSize / 2, + totalImageSize, + totalImageSize) } } From 98f5aa243dfc349d324df53c52a53482f7b1652b Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Sun, 9 Jun 2019 09:21:03 +0200 Subject: [PATCH 22/25] Formula Values Working --- FloatingSpace/StrategyPart.js | 65 +++++++++++++++++++++++++++++++++-- 1 file changed, 63 insertions(+), 2 deletions(-) diff --git a/FloatingSpace/StrategyPart.js b/FloatingSpace/StrategyPart.js index d1c0cd2e7..ccc0b5f4f 100644 --- a/FloatingSpace/StrategyPart.js +++ b/FloatingSpace/StrategyPart.js @@ -25,6 +25,7 @@ function newStrategyPart () { showAvailabilityToAttach: showAvailabilityToAttach, highlight: highlight, setErrorMessage: setErrorMessage, + setValue: setValue, physics: physics, drawBackground: drawBackground, drawMiddleground: drawMiddleground, @@ -58,6 +59,8 @@ function newStrategyPart () { let hasError let errorMessageCounter = 0 + let hasValue + let valueCounter = 0 let runningCounter = 0 let previousDistance @@ -75,6 +78,7 @@ function newStrategyPart () { let attachToNode let errorMessage = '' + let formulaValue = 0 return thisObject @@ -174,6 +178,7 @@ function newStrategyPart () { runningPhisycs() highlightPhisycs() errorMessagePhisycs() + valuePhisycs() detachingPhysics() attachingPhysics() } @@ -406,6 +411,14 @@ function newStrategyPart () { } } + function valuePhisycs () { + valueCounter-- + if (valueCounter < 0) { + valueCounter = 0 + hasValue = false + } + } + function highlight () { isHighlighted = true highlightCounter = 30 @@ -419,6 +432,14 @@ function newStrategyPart () { } } + function setValue (value) { + if (value !== undefined) { + formulaValue = value + hasValue = true + valueCounter = 30 + } + } + function runningPhisycs () { if (canvas.strategySpace.workspace.tradingSystem !== undefined) { if (canvas.strategySpace.workspace.tradingSystem.id !== thisObject.payload.node.id) { @@ -495,6 +516,7 @@ function newStrategyPart () { function drawMiddleground () { if (thisObject.isOnFocus === false) { + drawValue() drawText() thisObject.partTitle.draw() } @@ -535,6 +557,7 @@ function newStrategyPart () { } drawErrorMessage() + drawValue() drawText() thisObject.partTitle.draw() } @@ -666,6 +689,45 @@ function newStrategyPart () { } } + function drawValue () { + if (hasValue === false) { return } + +/* Text Follows */ + let position = { + x: 0, + y: 0 + } + + position = thisObject.container.frame.frameThisPoint(position) + + let radius = thisObject.container.frame.radius + /* Label Text */ + let labelPoint + let fontSize = thisObject.payload.floatingObject.currentFontSize * 6 / 4 + let label + + if (radius > 6) { + const MAX_LABEL_LENGTH = 30 + + label = formulaValue.toFixed(2) + + if (label !== undefined) { + if (label.length > MAX_LABEL_LENGTH) { + label = label.substring(0, MAX_LABEL_LENGTH) + '...' + } + + labelPoint = { + x: position.x - label.length / 2 * fontSize * FONT_ASPECT_RATIO - 5, + y: position.y + radius * 7 / 5 + fontSize * FONT_ASPECT_RATIO + 15 + } + + browserCanvasContext.font = fontSize + 'px ' + UI_FONT.PRIMARY + browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.TURQUOISE + ', 1)' + browserCanvasContext.fillText(label, labelPoint.x, labelPoint.y) + } + } + } + function addIndexNumber (label) { switch (thisObject.payload.node.type) { case 'Phase': { @@ -765,7 +827,7 @@ function newStrategyPart () { browserCanvasContext.arc(visiblePosition.x, visiblePosition.y, VISIBLE_RADIUS - 2, 0, Math.PI * 2, true) browserCanvasContext.closePath() - browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.BLACK + ', 0.5)' + browserCanvasContext.fillStyle = 'rgba(' + UI_COLOR.BLACK + ', 0.25)' browserCanvasContext.fill() } @@ -878,4 +940,3 @@ function newStrategyPart () { } } } - From 56d5e132a5526961d3d279a8de9af0c7cf86ca50 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Sun, 9 Jun 2019 15:19:14 +0200 Subject: [PATCH 23/25] Fine tuning mass --- FloatingSpace/StrategyPart.js | 3 ++- FloatingSpace/StrategyPartConstructor.js | 8 ++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/FloatingSpace/StrategyPart.js b/FloatingSpace/StrategyPart.js index ccc0b5f4f..cc3603f2a 100644 --- a/FloatingSpace/StrategyPart.js +++ b/FloatingSpace/StrategyPart.js @@ -436,7 +436,7 @@ function newStrategyPart () { if (value !== undefined) { formulaValue = value hasValue = true - valueCounter = 30 + valueCounter = 5 } } @@ -940,3 +940,4 @@ function newStrategyPart () { } } } + diff --git a/FloatingSpace/StrategyPartConstructor.js b/FloatingSpace/StrategyPartConstructor.js index 749cebf08..6e0656a0c 100644 --- a/FloatingSpace/StrategyPartConstructor.js +++ b/FloatingSpace/StrategyPartConstructor.js @@ -1734,7 +1734,7 @@ function newStrategyPartConstructor () { floatingObject.targetFriction = FRICTION floatingObject.friction = INITIAL_FRICTION - floatingObject.initializeMass(10) + floatingObject.initializeMass(20) floatingObject.initializeRadius(35) floatingObject.initializeImageSize(60) floatingObject.initializeFontSize(10) @@ -1746,7 +1746,7 @@ function newStrategyPartConstructor () { floatingObject.targetFriction = FRICTION floatingObject.friction = INITIAL_FRICTION - floatingObject.initializeMass(10) + floatingObject.initializeMass(20) floatingObject.initializeRadius(30) floatingObject.initializeImageSize(50) floatingObject.initializeFontSize(10) @@ -1758,7 +1758,7 @@ function newStrategyPartConstructor () { floatingObject.targetFriction = FRICTION floatingObject.friction = INITIAL_FRICTION - floatingObject.initializeMass(10) + floatingObject.initializeMass(20) floatingObject.initializeRadius(25) floatingObject.initializeImageSize(40) floatingObject.initializeFontSize(10) @@ -1769,7 +1769,7 @@ function newStrategyPartConstructor () { floatingObject.targetFriction = FRICTION floatingObject.friction = INITIAL_FRICTION - floatingObject.initializeMass(10) + floatingObject.initializeMass(20) floatingObject.initializeRadius(20) floatingObject.initializeImageSize(30) floatingObject.initializeFontSize(10) From 6ad91e3fdbe8a5387e866944eb284cb7ad3a344d Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Sun, 9 Jun 2019 16:30:09 +0200 Subject: [PATCH 24/25] Freezing Icons Corrected --- FloatingSpace/StrategyPartConstructor.js | 82 ++++++++++++------------ 1 file changed, 41 insertions(+), 41 deletions(-) diff --git a/FloatingSpace/StrategyPartConstructor.js b/FloatingSpace/StrategyPartConstructor.js index 6e0656a0c..51901c433 100644 --- a/FloatingSpace/StrategyPartConstructor.js +++ b/FloatingSpace/StrategyPartConstructor.js @@ -109,7 +109,7 @@ function newStrategyPartConstructor () { label: undefined, visible: false, iconPathOn: 'broken-link', - iconPathOff: 'security', + iconPathOff: 'targeting', rawRadius: 8, targetRadius: 0, currentRadius: 0, @@ -217,8 +217,8 @@ function newStrategyPartConstructor () { currentStatus: true, label: undefined, visible: false, - iconPathOn: 'broken-link', - iconPathOff: 'security', + iconPathOn: 'targeting', + iconPathOff: 'broken-link', rawRadius: 8, targetRadius: 0, currentRadius: 0, @@ -285,8 +285,8 @@ function newStrategyPartConstructor () { currentStatus: true, label: undefined, visible: false, - iconPathOn: 'broken-link', - iconPathOff: 'security', + iconPathOn: 'targeting', + iconPathOff: 'broken-link', rawRadius: 8, targetRadius: 0, currentRadius: 0, @@ -354,8 +354,8 @@ function newStrategyPartConstructor () { currentStatus: true, label: undefined, visible: false, - iconPathOn: 'broken-link', - iconPathOff: 'security', + iconPathOn: 'targeting', + iconPathOff: 'broken-link', rawRadius: 8, targetRadius: 0, currentRadius: 0, @@ -422,8 +422,8 @@ function newStrategyPartConstructor () { currentStatus: true, label: undefined, visible: false, - iconPathOn: 'broken-link', - iconPathOff: 'security', + iconPathOn: 'targeting', + iconPathOff: 'broken-link', rawRadius: 8, targetRadius: 0, currentRadius: 0, @@ -503,8 +503,8 @@ function newStrategyPartConstructor () { currentStatus: true, label: undefined, visible: false, - iconPathOn: 'broken-link', - iconPathOff: 'security', + iconPathOn: 'targeting', + iconPathOff: 'broken-link', rawRadius: 8, targetRadius: 0, currentRadius: 0, @@ -571,8 +571,8 @@ function newStrategyPartConstructor () { currentStatus: true, label: undefined, visible: false, - iconPathOn: 'broken-link', - iconPathOff: 'security', + iconPathOn: 'targeting', + iconPathOff: 'broken-link', rawRadius: 8, targetRadius: 0, currentRadius: 0, @@ -639,8 +639,8 @@ function newStrategyPartConstructor () { currentStatus: true, label: undefined, visible: false, - iconPathOn: 'broken-link', - iconPathOff: 'security', + iconPathOn: 'targeting', + iconPathOff: 'broken-link', rawRadius: 8, targetRadius: 0, currentRadius: 0, @@ -695,8 +695,8 @@ function newStrategyPartConstructor () { currentStatus: true, label: undefined, visible: false, - iconPathOn: 'broken-link', - iconPathOff: 'security', + iconPathOn: 'targeting', + iconPathOff: 'broken-link', rawRadius: 8, targetRadius: 0, currentRadius: 0, @@ -764,8 +764,8 @@ function newStrategyPartConstructor () { currentStatus: true, label: undefined, visible: false, - iconPathOn: 'broken-link', - iconPathOff: 'security', + iconPathOn: 'targeting', + iconPathOff: 'broken-link', rawRadius: 8, targetRadius: 0, currentRadius: 0, @@ -833,8 +833,8 @@ function newStrategyPartConstructor () { currentStatus: true, label: undefined, visible: false, - iconPathOn: 'broken-link', - iconPathOff: 'security', + iconPathOn: 'targeting', + iconPathOff: 'broken-link', rawRadius: 8, targetRadius: 0, currentRadius: 0, @@ -902,8 +902,8 @@ function newStrategyPartConstructor () { currentStatus: true, label: undefined, visible: false, - iconPathOn: 'broken-link', - iconPathOff: 'security', + iconPathOn: 'targeting', + iconPathOff: 'broken-link', rawRadius: 8, targetRadius: 0, currentRadius: 0, @@ -971,8 +971,8 @@ function newStrategyPartConstructor () { currentStatus: true, label: undefined, visible: false, - iconPathOn: 'broken-link', - iconPathOff: 'security', + iconPathOn: 'targeting', + iconPathOff: 'broken-link', rawRadius: 8, targetRadius: 0, currentRadius: 0, @@ -1039,8 +1039,8 @@ function newStrategyPartConstructor () { currentStatus: true, label: undefined, visible: false, - iconPathOn: 'broken-link', - iconPathOff: 'security', + iconPathOn: 'targeting', + iconPathOff: 'broken-link', rawRadius: 8, targetRadius: 0, currentRadius: 0, @@ -1108,8 +1108,8 @@ function newStrategyPartConstructor () { currentStatus: true, label: undefined, visible: false, - iconPathOn: 'broken-link', - iconPathOff: 'security', + iconPathOn: 'targeting', + iconPathOff: 'broken-link', rawRadius: 8, targetRadius: 0, currentRadius: 0, @@ -1177,8 +1177,8 @@ function newStrategyPartConstructor () { currentStatus: true, label: undefined, visible: false, - iconPathOn: 'broken-link', - iconPathOff: 'security', + iconPathOn: 'targeting', + iconPathOff: 'broken-link', rawRadius: 8, targetRadius: 0, currentRadius: 0, @@ -1264,8 +1264,8 @@ function newStrategyPartConstructor () { currentStatus: true, label: undefined, visible: false, - iconPathOn: 'broken-link', - iconPathOff: 'security', + iconPathOn: 'targeting', + iconPathOff: 'broken-link', rawRadius: 8, targetRadius: 0, currentRadius: 0, @@ -1333,8 +1333,8 @@ function newStrategyPartConstructor () { currentStatus: true, label: undefined, visible: false, - iconPathOn: 'broken-link', - iconPathOff: 'security', + iconPathOn: 'targeting', + iconPathOff: 'broken-link', rawRadius: 8, targetRadius: 0, currentRadius: 0, @@ -1402,8 +1402,8 @@ function newStrategyPartConstructor () { currentStatus: true, label: undefined, visible: false, - iconPathOn: 'broken-link', - iconPathOff: 'security', + iconPathOn: 'targeting', + iconPathOff: 'broken-link', rawRadius: 8, targetRadius: 0, currentRadius: 0, @@ -1471,8 +1471,8 @@ function newStrategyPartConstructor () { currentStatus: true, label: undefined, visible: false, - iconPathOn: 'broken-link', - iconPathOff: 'security', + iconPathOn: 'targeting', + iconPathOff: 'broken-link', rawRadius: 8, targetRadius: 0, currentRadius: 0, @@ -1545,8 +1545,8 @@ function newStrategyPartConstructor () { currentStatus: true, label: undefined, visible: false, - iconPathOn: 'broken-link', - iconPathOff: 'security', + iconPathOn: 'targeting', + iconPathOff: 'broken-link', rawRadius: 8, targetRadius: 0, currentRadius: 0, From 885bd2a9e6c89c31b8e97feb29248108208605e2 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Sun, 9 Jun 2019 16:48:28 +0200 Subject: [PATCH 25/25] Spawn Bug fixed --- FloatingSpace/StrategyPartConstructor.js | 4 ---- Globals.js | 2 ++ StrategySpace/Workspace/FunctionLibraries/PartsFromNodes.js | 5 ----- StrategySpace/Workspace/Workspace.js | 2 +- 4 files changed, 3 insertions(+), 10 deletions(-) diff --git a/FloatingSpace/StrategyPartConstructor.js b/FloatingSpace/StrategyPartConstructor.js index 51901c433..12c5fd8ee 100644 --- a/FloatingSpace/StrategyPartConstructor.js +++ b/FloatingSpace/StrategyPartConstructor.js @@ -13,10 +13,6 @@ function newStrategyPartConstructor () { } let floatingLayer - let spawnPosition = { - x: canvas.floatingSpace.container.frame.width / 2, - y: canvas.floatingSpace.container.frame.height / 2 - } return thisObject diff --git a/Globals.js b/Globals.js index ada8e2e55..6c1c265f8 100644 --- a/Globals.js +++ b/Globals.js @@ -189,6 +189,8 @@ const PRODUCT_CARD_STATUS = { OFF: 'off' }; +let spawnPosition // this is used in several places. + /* Here we list the valid Time Periods: */ const PERIOD_24_HS = "24-hs"; diff --git a/StrategySpace/Workspace/FunctionLibraries/PartsFromNodes.js b/StrategySpace/Workspace/FunctionLibraries/PartsFromNodes.js index 505f2e87c..742db41ad 100644 --- a/StrategySpace/Workspace/FunctionLibraries/PartsFromNodes.js +++ b/StrategySpace/Workspace/FunctionLibraries/PartsFromNodes.js @@ -17,11 +17,6 @@ function newPartsFromNodes () { addCode: addCode } - let spawnPosition = { - x: canvas.floatingSpace.container.frame.width / 2, - y: canvas.floatingSpace.container.frame.height / 2 - } - return thisObject function createPartFromNode (node, parentNode, chainParent) { diff --git a/StrategySpace/Workspace/Workspace.js b/StrategySpace/Workspace/Workspace.js index f41dbdf4d..3107151f9 100644 --- a/StrategySpace/Workspace/Workspace.js +++ b/StrategySpace/Workspace/Workspace.js @@ -29,7 +29,7 @@ function newWorkspace () { thisObject.container.frame.width = 0 thisObject.container.frame.height = 0 - let spawnPosition = { + spawnPosition = { x: canvas.floatingSpace.container.frame.width / 2, y: canvas.floatingSpace.container.frame.height / 2 }