From d7605c4a7764106e9d19225c2a770bdc5dc823d4 Mon Sep 17 00:00:00 2001 From: liteir Date: Thu, 4 Nov 2021 22:25:12 +0000 Subject: [PATCH 01/33] This is my contribution to Superalgos --- ...uperalgos-review-how-to-run-a-trading-bot.json | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 Projects/Foundations/Schemas/Docs-Reviews/S/Superalgos/Superalgos-Project-Review/superalgos-project-review-034-superalgos-review-how-to-run-a-trading-bot.json diff --git a/Projects/Foundations/Schemas/Docs-Reviews/S/Superalgos/Superalgos-Project-Review/superalgos-project-review-034-superalgos-review-how-to-run-a-trading-bot.json b/Projects/Foundations/Schemas/Docs-Reviews/S/Superalgos/Superalgos-Project-Review/superalgos-project-review-034-superalgos-review-how-to-run-a-trading-bot.json new file mode 100644 index 000000000..f1dfc332b --- /dev/null +++ b/Projects/Foundations/Schemas/Docs-Reviews/S/Superalgos/Superalgos-Project-Review/superalgos-project-review-034-superalgos-review-how-to-run-a-trading-bot.json @@ -0,0 +1,15 @@ +{ + "review": "Superalgos Project Review", + "pageNumber": 34, + "type": "Superalgos Review - How to Run a Trading Bot", + "definition": { + "text": "Thus far I have learned alot about how the different crypto trading platforms work and how to get information from them. The tutorials are good for someone with at least some background in working with computer code. Overall I am excited to keep working through the tutorials. I hope to see even more exchanges on superalgos. Great work so far everyone and I hope I can contribute something to the project.", + "updated": 1636063209051 + }, + "paragraphs": [ + { + "style": "Text", + "text": "Right click and Edit to enter edit mode and change this text. ENTER to write new paragraphs. ESC to exit edit mode. Then you can use docs.save to save your changes and app.contribute to send it to the main repository." + } + ] +} \ No newline at end of file From cee54e46f4b839ab60143926be648c935f91c51f Mon Sep 17 00:00:00 2001 From: ozichris Date: Sun, 7 Nov 2021 10:04:47 +0000 Subject: [PATCH 02/33] My Superalgos Review! --- ...uperalgos-review-my-superalgos-review.json | 15 + .../Plugins/User-Profiles/ozichris.json | 307 ++++++++++++++++++ 2 files changed, 322 insertions(+) create mode 100644 Projects/Foundations/Schemas/Docs-Reviews/S/Superalgos/Superalgos-Project-Review/superalgos-project-review-034-superalgos-review-my-superalgos-review.json create mode 100644 Projects/Governance/Plugins/User-Profiles/ozichris.json diff --git a/Projects/Foundations/Schemas/Docs-Reviews/S/Superalgos/Superalgos-Project-Review/superalgos-project-review-034-superalgos-review-my-superalgos-review.json b/Projects/Foundations/Schemas/Docs-Reviews/S/Superalgos/Superalgos-Project-Review/superalgos-project-review-034-superalgos-review-my-superalgos-review.json new file mode 100644 index 000000000..2a4e2085c --- /dev/null +++ b/Projects/Foundations/Schemas/Docs-Reviews/S/Superalgos/Superalgos-Project-Review/superalgos-project-review-034-superalgos-review-my-superalgos-review.json @@ -0,0 +1,15 @@ +{ + "review": "Superalgos Project Review", + "pageNumber": 34, + "type": "Superalgos Review - My Superalgos Review!", + "definition": { + "text": "Awesome Project! What a great opportunity to get involved. \nozichris", + "updated": 1636279050976 + }, + "paragraphs": [ + { + "style": "Text", + "text": "Right click and Edit to enter edit mode and change this text. ENTER to write new paragraphs. ESC to exit edit mode. Then you can use docs.save to save your changes and app.contribute to send it to the main repository." + } + ] +} \ No newline at end of file diff --git a/Projects/Governance/Plugins/User-Profiles/ozichris.json b/Projects/Governance/Plugins/User-Profiles/ozichris.json new file mode 100644 index 000000000..87c839b7d --- /dev/null +++ b/Projects/Governance/Plugins/User-Profiles/ozichris.json @@ -0,0 +1,307 @@ +{ + "type": "User Profile", + "name": "ozichris", + "config": "{\n \"signature\": {\n \"message\": \"ozichris\",\n \"messageHash\": \"0x7838947e4042d7f2205426117ff0d8f9dedce58a21fa1bc6bf63d168af01111a\",\n \"v\": \"0x1c\",\n \"r\": \"0x4e361f80b832c869331ffefad059a5fb17f31bdc5972099c70584d7172ad5e9a\",\n \"s\": \"0x3cfeb08058c922f73b8f982e8359cde99e82ed700a05b47ef2f04aa8ff7d6204\",\n \"signature\": \"0x4e361f80b832c869331ffefad059a5fb17f31bdc5972099c70584d7172ad5e9a3cfeb08058c922f73b8f982e8359cde99e82ed700a05b47ef2f04aa8ff7d62041c\"\n }\n}", + "project": "Governance", + "tokenPowerSwitch": { + "type": "Token Power Switch", + "name": "New Token Power Switch", + "config": "{}", + "project": "Governance", + "tokenPowerSwitch": [], + "onboardingPrograms": { + "type": "Onboarding Programs", + "name": "New Onboarding Programs", + "config": "{}", + "project": "Governance", + "airdropProgram": { + "type": "Airdrop Program", + "name": "New Airdrop Program", + "config": "{}", + "project": "Governance", + "tokensAwarded": { + "type": "Tokens Awarded", + "name": "New Tokens Awarded", + "project": "Governance", + "id": "d404ccfd-57e5-49cf-b99b-249f034ae397", + "savedPayload": { + "position": { + "x": 16481.687500000004, + "y": 1749.0173812077553 + }, + "targetPosition": { + "x": 15342.625000000002, + "y": 3721.9315042041794 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 4, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "abf56dc1-1415-450e-bca2-58f48b8de94a", + "savedPayload": { + "position": { + "x": 15342.625000000002, + "y": 3721.9315042041794 + }, + "targetPosition": { + "x": 14583.250000000002, + "y": 5037.2075862017955 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 4, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "599fb84b-6a21-4d7a-a349-9f5c80e7f7d5", + "savedPayload": { + "position": { + "x": 14583.250000000002, + "y": 5037.2075862017955 + }, + "targetPosition": { + "x": 14077.000000000002, + "y": 5914.05830753354 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 4, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "communityBuildingPrograms": { + "type": "Community Building Programs", + "name": "New Community Building Programs", + "config": "{}", + "project": "Governance", + "referralProgram": { + "type": "Referral Program", + "name": "New Referral Program", + "config": "{}", + "project": "Governance", + "userReferrers": [ + { + "type": "User Referrer", + "name": "", + "config": "{ozichris}", + "project": "Governance", + "id": "ebbb1490-c164-43e6-91fb-358a8253507b", + "savedPayload": { + "position": { + "x": 17315.539122996426, + "y": 6967.122610862899 + }, + "targetPosition": { + "x": 15342.625000000002, + "y": 8106.1851108629 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 4, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + } + ], + "tokensAwarded": { + "type": "Tokens Awarded", + "name": "New Tokens Awarded", + "project": "Governance", + "id": "2cf8dd3c-b2b9-4ad2-9de2-1199275bfdac", + "savedPayload": { + "position": { + "x": 16481.687500000004, + "y": 10079.099233859324 + }, + "targetPosition": { + "x": 15342.625000000002, + "y": 8106.1851108629 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 4, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "tokensBonus": { + "type": "Tokens Bonus", + "name": "New Tokens Bonus", + "project": "Governance", + "id": "95909f97-4f6f-4ba9-ad1b-23956c16f05f", + "savedPayload": { + "position": { + "x": 13369.710877003577, + "y": 9245.2476108629 + }, + "targetPosition": { + "x": 15342.625000000002, + "y": 8106.1851108629 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 4, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "c8028100-177d-4ba2-87bc-a6b112a5065e", + "savedPayload": { + "position": { + "x": 15342.625000000002, + "y": 8106.1851108629 + }, + "targetPosition": { + "x": 14583.250000000002, + "y": 6790.909028865284 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 4, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "1b23a881-c1db-4f30-a9a7-23bf4ea76fb5", + "savedPayload": { + "position": { + "x": 14583.250000000002, + "y": 6790.909028865284 + }, + "targetPosition": { + "x": 14077.000000000002, + "y": 5914.05830753354 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 4, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "38695838-cef1-4a8b-a24e-90b03fbd8d2b", + "savedPayload": { + "position": { + "x": 14077.000000000002, + "y": 5914.05830753354 + }, + "targetPosition": { + "x": 13402.000000000002, + "y": 5914.05830753354 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 4, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "tokensMined": { + "type": "Tokens Mined", + "name": "New Tokens Mined", + "project": "Governance", + "id": "e77237a9-93ad-4591-9df0-69f4606ba87b", + "savedPayload": { + "position": { + "x": 12727.000000000002, + "y": 5914.05830753354 + }, + "targetPosition": { + "x": 13402.000000000002, + "y": 5914.05830753354 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 4, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "aef0429e-f08d-4779-a44c-11725d952c04", + "savedPayload": { + "position": { + "x": 13402.000000000002, + "y": 5914.05830753354 + }, + "targetPosition": { + "x": 13402.000000000002, + "y": 5914.05830753354 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 1, + "distanceToParent": 4, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } +} \ No newline at end of file From 0a2de7254081289e9db4279c93e996b93867067a Mon Sep 17 00:00:00 2001 From: Chris Date: Sun, 7 Nov 2021 16:37:43 +0000 Subject: [PATCH 03/33] Delete superalgos-project-review-034-superalgos-review-my-superalgos-review.json --- ...34-superalgos-review-my-superalgos-review.json | 15 --------------- 1 file changed, 15 deletions(-) delete mode 100644 Projects/Foundations/Schemas/Docs-Reviews/S/Superalgos/Superalgos-Project-Review/superalgos-project-review-034-superalgos-review-my-superalgos-review.json diff --git a/Projects/Foundations/Schemas/Docs-Reviews/S/Superalgos/Superalgos-Project-Review/superalgos-project-review-034-superalgos-review-my-superalgos-review.json b/Projects/Foundations/Schemas/Docs-Reviews/S/Superalgos/Superalgos-Project-Review/superalgos-project-review-034-superalgos-review-my-superalgos-review.json deleted file mode 100644 index 2a4e2085c..000000000 --- a/Projects/Foundations/Schemas/Docs-Reviews/S/Superalgos/Superalgos-Project-Review/superalgos-project-review-034-superalgos-review-my-superalgos-review.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "review": "Superalgos Project Review", - "pageNumber": 34, - "type": "Superalgos Review - My Superalgos Review!", - "definition": { - "text": "Awesome Project! What a great opportunity to get involved. \nozichris", - "updated": 1636279050976 - }, - "paragraphs": [ - { - "style": "Text", - "text": "Right click and Edit to enter edit mode and change this text. ENTER to write new paragraphs. ESC to exit edit mode. Then you can use docs.save to save your changes and app.contribute to send it to the main repository." - } - ] -} \ No newline at end of file From ac0c91e8e232cda6b7a94f66cd011972364cfe19 Mon Sep 17 00:00:00 2001 From: Chris Date: Sun, 7 Nov 2021 17:02:51 +0000 Subject: [PATCH 04/33] Delete ozichris.json --- .../Plugins/User-Profiles/ozichris.json | 307 ------------------ 1 file changed, 307 deletions(-) delete mode 100644 Projects/Governance/Plugins/User-Profiles/ozichris.json diff --git a/Projects/Governance/Plugins/User-Profiles/ozichris.json b/Projects/Governance/Plugins/User-Profiles/ozichris.json deleted file mode 100644 index 87c839b7d..000000000 --- a/Projects/Governance/Plugins/User-Profiles/ozichris.json +++ /dev/null @@ -1,307 +0,0 @@ -{ - "type": "User Profile", - "name": "ozichris", - "config": "{\n \"signature\": {\n \"message\": \"ozichris\",\n \"messageHash\": \"0x7838947e4042d7f2205426117ff0d8f9dedce58a21fa1bc6bf63d168af01111a\",\n \"v\": \"0x1c\",\n \"r\": \"0x4e361f80b832c869331ffefad059a5fb17f31bdc5972099c70584d7172ad5e9a\",\n \"s\": \"0x3cfeb08058c922f73b8f982e8359cde99e82ed700a05b47ef2f04aa8ff7d6204\",\n \"signature\": \"0x4e361f80b832c869331ffefad059a5fb17f31bdc5972099c70584d7172ad5e9a3cfeb08058c922f73b8f982e8359cde99e82ed700a05b47ef2f04aa8ff7d62041c\"\n }\n}", - "project": "Governance", - "tokenPowerSwitch": { - "type": "Token Power Switch", - "name": "New Token Power Switch", - "config": "{}", - "project": "Governance", - "tokenPowerSwitch": [], - "onboardingPrograms": { - "type": "Onboarding Programs", - "name": "New Onboarding Programs", - "config": "{}", - "project": "Governance", - "airdropProgram": { - "type": "Airdrop Program", - "name": "New Airdrop Program", - "config": "{}", - "project": "Governance", - "tokensAwarded": { - "type": "Tokens Awarded", - "name": "New Tokens Awarded", - "project": "Governance", - "id": "d404ccfd-57e5-49cf-b99b-249f034ae397", - "savedPayload": { - "position": { - "x": 16481.687500000004, - "y": 1749.0173812077553 - }, - "targetPosition": { - "x": 15342.625000000002, - "y": 3721.9315042041794 - }, - "floatingObject": { - "isPinned": false, - "isFrozen": false, - "isCollapsed": false, - "angleToParent": 1, - "distanceToParent": 4, - "arrangementStyle": 0 - }, - "uiObject": { - "isRunning": false - } - } - }, - "id": "abf56dc1-1415-450e-bca2-58f48b8de94a", - "savedPayload": { - "position": { - "x": 15342.625000000002, - "y": 3721.9315042041794 - }, - "targetPosition": { - "x": 14583.250000000002, - "y": 5037.2075862017955 - }, - "floatingObject": { - "isPinned": false, - "isFrozen": false, - "isCollapsed": false, - "angleToParent": 1, - "distanceToParent": 4, - "arrangementStyle": 0 - }, - "uiObject": { - "isRunning": false - } - } - }, - "id": "599fb84b-6a21-4d7a-a349-9f5c80e7f7d5", - "savedPayload": { - "position": { - "x": 14583.250000000002, - "y": 5037.2075862017955 - }, - "targetPosition": { - "x": 14077.000000000002, - "y": 5914.05830753354 - }, - "floatingObject": { - "isPinned": false, - "isFrozen": false, - "isCollapsed": false, - "angleToParent": 1, - "distanceToParent": 4, - "arrangementStyle": 0 - }, - "uiObject": { - "isRunning": false - } - } - }, - "communityBuildingPrograms": { - "type": "Community Building Programs", - "name": "New Community Building Programs", - "config": "{}", - "project": "Governance", - "referralProgram": { - "type": "Referral Program", - "name": "New Referral Program", - "config": "{}", - "project": "Governance", - "userReferrers": [ - { - "type": "User Referrer", - "name": "", - "config": "{ozichris}", - "project": "Governance", - "id": "ebbb1490-c164-43e6-91fb-358a8253507b", - "savedPayload": { - "position": { - "x": 17315.539122996426, - "y": 6967.122610862899 - }, - "targetPosition": { - "x": 15342.625000000002, - "y": 8106.1851108629 - }, - "floatingObject": { - "isPinned": false, - "isFrozen": false, - "isCollapsed": false, - "angleToParent": 1, - "distanceToParent": 4, - "arrangementStyle": 0 - }, - "uiObject": { - "isRunning": false - } - } - } - ], - "tokensAwarded": { - "type": "Tokens Awarded", - "name": "New Tokens Awarded", - "project": "Governance", - "id": "2cf8dd3c-b2b9-4ad2-9de2-1199275bfdac", - "savedPayload": { - "position": { - "x": 16481.687500000004, - "y": 10079.099233859324 - }, - "targetPosition": { - "x": 15342.625000000002, - "y": 8106.1851108629 - }, - "floatingObject": { - "isPinned": false, - "isFrozen": false, - "isCollapsed": false, - "angleToParent": 1, - "distanceToParent": 4, - "arrangementStyle": 0 - }, - "uiObject": { - "isRunning": false - } - } - }, - "tokensBonus": { - "type": "Tokens Bonus", - "name": "New Tokens Bonus", - "project": "Governance", - "id": "95909f97-4f6f-4ba9-ad1b-23956c16f05f", - "savedPayload": { - "position": { - "x": 13369.710877003577, - "y": 9245.2476108629 - }, - "targetPosition": { - "x": 15342.625000000002, - "y": 8106.1851108629 - }, - "floatingObject": { - "isPinned": false, - "isFrozen": false, - "isCollapsed": false, - "angleToParent": 1, - "distanceToParent": 4, - "arrangementStyle": 0 - }, - "uiObject": { - "isRunning": false - } - } - }, - "id": "c8028100-177d-4ba2-87bc-a6b112a5065e", - "savedPayload": { - "position": { - "x": 15342.625000000002, - "y": 8106.1851108629 - }, - "targetPosition": { - "x": 14583.250000000002, - "y": 6790.909028865284 - }, - "floatingObject": { - "isPinned": false, - "isFrozen": false, - "isCollapsed": false, - "angleToParent": 1, - "distanceToParent": 4, - "arrangementStyle": 0 - }, - "uiObject": { - "isRunning": false - } - } - }, - "id": "1b23a881-c1db-4f30-a9a7-23bf4ea76fb5", - "savedPayload": { - "position": { - "x": 14583.250000000002, - "y": 6790.909028865284 - }, - "targetPosition": { - "x": 14077.000000000002, - "y": 5914.05830753354 - }, - "floatingObject": { - "isPinned": false, - "isFrozen": false, - "isCollapsed": false, - "angleToParent": 1, - "distanceToParent": 4, - "arrangementStyle": 0 - }, - "uiObject": { - "isRunning": false - } - } - }, - "id": "38695838-cef1-4a8b-a24e-90b03fbd8d2b", - "savedPayload": { - "position": { - "x": 14077.000000000002, - "y": 5914.05830753354 - }, - "targetPosition": { - "x": 13402.000000000002, - "y": 5914.05830753354 - }, - "floatingObject": { - "isPinned": false, - "isFrozen": false, - "isCollapsed": false, - "angleToParent": 1, - "distanceToParent": 4, - "arrangementStyle": 0 - }, - "uiObject": { - "isRunning": false - } - } - }, - "tokensMined": { - "type": "Tokens Mined", - "name": "New Tokens Mined", - "project": "Governance", - "id": "e77237a9-93ad-4591-9df0-69f4606ba87b", - "savedPayload": { - "position": { - "x": 12727.000000000002, - "y": 5914.05830753354 - }, - "targetPosition": { - "x": 13402.000000000002, - "y": 5914.05830753354 - }, - "floatingObject": { - "isPinned": false, - "isFrozen": false, - "isCollapsed": false, - "angleToParent": 1, - "distanceToParent": 4, - "arrangementStyle": 0 - }, - "uiObject": { - "isRunning": false - } - } - }, - "id": "aef0429e-f08d-4779-a44c-11725d952c04", - "savedPayload": { - "position": { - "x": 13402.000000000002, - "y": 5914.05830753354 - }, - "targetPosition": { - "x": 13402.000000000002, - "y": 5914.05830753354 - }, - "floatingObject": { - "isPinned": false, - "isFrozen": false, - "isCollapsed": false, - "angleToParent": 1, - "distanceToParent": 4, - "arrangementStyle": 0 - }, - "uiObject": { - "isRunning": false - } - } -} \ No newline at end of file From 3cb7f56ade28dfeb4a594e68135914d2c20d5df5 Mon Sep 17 00:00:00 2001 From: ozichris Date: Sun, 7 Nov 2021 21:53:35 +0000 Subject: [PATCH 05/33] My Superalgos Review! --- ...34-superalgos-review-my-superalgos-review.json | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 Projects/Foundations/Schemas/Docs-Reviews/S/Superalgos/Superalgos-Project-Review/superalgos-project-review-034-superalgos-review-my-superalgos-review.json diff --git a/Projects/Foundations/Schemas/Docs-Reviews/S/Superalgos/Superalgos-Project-Review/superalgos-project-review-034-superalgos-review-my-superalgos-review.json b/Projects/Foundations/Schemas/Docs-Reviews/S/Superalgos/Superalgos-Project-Review/superalgos-project-review-034-superalgos-review-my-superalgos-review.json new file mode 100644 index 000000000..ed54fbb17 --- /dev/null +++ b/Projects/Foundations/Schemas/Docs-Reviews/S/Superalgos/Superalgos-Project-Review/superalgos-project-review-034-superalgos-review-my-superalgos-review.json @@ -0,0 +1,15 @@ +{ + "review": "Superalgos Project Review", + "pageNumber": 34, + "type": "Superalgos Review - My Superalgos Review!", + "definition": { + "text": "Awesome project! What a great opportunity to get involved.\nozichris", + "updated": 1636321623989 + }, + "paragraphs": [ + { + "style": "Text", + "text": "Right click and Edit to enter edit mode and change this text. ENTER to write new paragraphs. ESC to exit edit mode. Then you can use docs.save to save your changes and app.contribute to send it to the main repository." + } + ] +} \ No newline at end of file From 839f7957953330e31a278514dabad67523c2d4f6 Mon Sep 17 00:00:00 2001 From: gitforkgit Date: Thu, 11 Nov 2021 20:55:51 +0100 Subject: [PATCH 06/33] (translation into german: "plotter module") --- .../Plotter-Module/plotter-module.json | 90 ++++++++++++++++--- 1 file changed, 80 insertions(+), 10 deletions(-) diff --git a/Projects/Foundations/Schemas/Docs-Nodes/P/Plotter/Plotter-Module/plotter-module.json b/Projects/Foundations/Schemas/Docs-Nodes/P/Plotter/Plotter-Module/plotter-module.json index b426ebe24..8a5b52c8a 100644 --- a/Projects/Foundations/Schemas/Docs-Nodes/P/Plotter/Plotter-Module/plotter-module.json +++ b/Projects/Foundations/Schemas/Docs-Nodes/P/Plotter/Plotter-Module/plotter-module.json @@ -1,7 +1,14 @@ { "type": "Plotter Module", "definition": { - "text": "A plotter module is a device within a plotter that contains the definitions to create the visualization for a product definition." + "text": "A plotter module is a device within a plotter that contains the definitions to create the visualization for a product definition.", + "translations": [ + { + "language": "DE", + "text": "Ein \"plotter module\" ist ein Modul innerhalb eines Plotters, das die Definitionen zur Erstellung der Visualisierung für eine \"product definition\" enthält.", + "updated": 1636659770379 + } + ] }, "paragraphs": [ { @@ -10,12 +17,26 @@ }, { "style": "Text", - "text": "A single plotter may have several modules. Different modules may be used to plot each product of the bot, or as best suits the expected use-pattern." + "text": "A single plotter may have several modules. Different modules may be used to plot each product of the bot, or as best suits the expected use-pattern.", + "translations": [ + { + "language": "DE", + "text": "Ein einzelner Plotter kann mehrere Module haben. Für jedes Produkt des Bots können verschiedene Module verwendet werden, je nachdem, wie es dem erwarteten Nutzungsmuster am besten entspricht.", + "updated": 1636659901038 + } + ] }, { "style": "Important", "text": "For a bot to use a plotter, the corresponding Product Definition must establish a reference with the plotter module built to interpret the dataset.", - "updated": 1609790272500 + "updated": 1609790272500, + "translations": [ + { + "language": "DE", + "text": "Damit ein Bot einen Plotter verwenden kann, muss die entsprechende Produktdefinition eine reference zu dem Plottermodul herstellen, das zur Interpretation des Datensatzes gebaut wurde.", + "updated": 1636659964219 + } + ] }, { "style": "Block", @@ -24,7 +45,14 @@ }, { "style": "Title", - "text": "Plotter Module Configuration" + "text": "Plotter Module Configuration", + "translations": [ + { + "language": "DE", + "text": "Konfiguration des Plottermoduls:", + "updated": 1636659978962 + } + ] }, { "style": "Subtitle", @@ -33,11 +61,25 @@ }, { "style": "List", - "text": "codeName is the name used in the code to refer to the module." + "text": "codeName is the name used in the code to refer to the module.", + "translations": [ + { + "language": "DE", + "text": "codeName ist der Name, der im Code verwendet wird, um auf das Modul zu verweisen.", + "updated": 1636660003241 + } + ] }, { "style": "List", - "text": "isLegacy is true for plotters modules developed entirely in JavaScript, and is false or doesn't show in the configuration for plotters built with the tools featured in the data mine hierarchy." + "text": "isLegacy is true for plotters modules developed entirely in JavaScript, and is false or doesn't show in the configuration for plotters built with the tools featured in the data mine hierarchy.", + "translations": [ + { + "language": "DE", + "text": "isLegacy ist wahr für Plotter-Module, die vollständig in JavaScript entwickelt wurden, und ist falsch oder wird in der Konfiguration nicht angezeigt für Plotter, die mit den in der Data-Mine-Hierarchie enthaltenen Tools erstellt wurden.", + "updated": 1636660060029 + } + ] }, { "style": "List", @@ -51,22 +93,50 @@ }, { "style": "Text", - "text": "Custom images may be added too. To do that:" + "text": "Custom images may be added too. To do that:", + "translations": [ + { + "language": "DE", + "text": "Es können auch eigene Bilder hinzugefügt werden. Um das zu tun:", + "updated": 1636660314385 + } + ] }, { "style": "Text", "text": "1. Name the image in the following format: image-name.png;", - "updated": 1609852305205 + "updated": 1609852305205, + "translations": [ + { + "language": "DE", + "text": "1. Benennen Sie das Bild in folgendem Format: bild-name.png;", + "updated": 1636660337014 + } + ] }, { "style": "Text", "text": "2. Place images in the WebServer\\Images\\Icons folder;", - "updated": 1609852315978 + "updated": 1609852315978, + "translations": [ + { + "language": "DE", + "text": "2. Legen Sie die Bilder in den Ordner WebServer\\Images\\Icons;", + "updated": 1636660361650 + } + ] }, { "style": "Text", "text": "3. In the configuration of the module, use the name as is (e.g.: \"icon\": \"image-name\")", - "updated": 1609852322876 + "updated": 1609852322876, + "translations": [ + { + "language": "DE", + "text": "3. In der Konfiguration des Moduls ist der Name unverändert zu verwenden (z. B.: \"icon\": \"image-name\")", + "updated": 1636660481504 + } + ] } ] } \ No newline at end of file From 26af94c11c35fb774cfccc1a1e4364ddeb92db22 Mon Sep 17 00:00:00 2001 From: gustavohcorradi Date: Thu, 11 Nov 2021 22:48:34 +0100 Subject: [PATCH 07/33] This is my contribution to Superalgos --- .../User-Profiles/gustavohcorradi.json | 107 +++++++++++++++--- 1 file changed, 91 insertions(+), 16 deletions(-) diff --git a/Projects/Governance/Plugins/User-Profiles/gustavohcorradi.json b/Projects/Governance/Plugins/User-Profiles/gustavohcorradi.json index c5c4ea8b2..6bfa4ad31 100644 --- a/Projects/Governance/Plugins/User-Profiles/gustavohcorradi.json +++ b/Projects/Governance/Plugins/User-Profiles/gustavohcorradi.json @@ -905,23 +905,33 @@ "referenceParentCombinedNodePath": [ [ "Superalgos", - "Pools" + "Pools", + "Governance", + "6f0aed87-db13-4818-bfe6-68abc463ebec" ], [ "Governance Programs", - "Pool Class" + "Pool Class", + "Governance", + "4fbb05ee-d7a0-43a7-9983-9fae7a7e4848" ], [ "Community Building Programs", - "Pool Class" + "Pool Class", + "Governance", + "ef1d7fc5-c776-4af7-8ae6-86a3445dca4b" ], [ "Mentorship Program", - "Pool Class" + "Pool Class", + "Governance", + "8b3714a0-3bf2-491e-8ffc-9c4286446382" ], [ "Mentorship Rewards", - "Pool" + "Pool", + "Governance", + "53ddcc36-f693-4193-8284-999a88f1c944" ] ] } @@ -960,23 +970,33 @@ "referenceParentCombinedNodePath": [ [ "Superalgos", - "Pools" + "Pools", + "Governance", + "6f0aed87-db13-4818-bfe6-68abc463ebec" ], [ "Governance Programs", - "Pool Class" + "Pool Class", + "Governance", + "4fbb05ee-d7a0-43a7-9983-9fae7a7e4848" ], [ "Community Building Programs", - "Pool Class" + "Pool Class", + "Governance", + "ef1d7fc5-c776-4af7-8ae6-86a3445dca4b" ], [ "Mentorship Program", - "Pool Class" + "Pool Class", + "Governance", + "8b3714a0-3bf2-491e-8ffc-9c4286446382" ], [ "Mentorship Bonus", - "Pool" + "Pool", + "Governance", + "ff1e4a84-3363-4348-ad15-31a34898fa82" ] ] } @@ -1565,12 +1585,12 @@ "id": "a851317c-1283-40e1-9434-a78c5c88caaa", "savedPayload": { "position": { - "x": 30232.83388833814, - "y": 28325 + "x": 30172.54532004114, + "y": 28550 }, "targetPosition": { - "x": 30362.737698905807, - "y": 28400 + "x": 30322.54532004114, + "y": 28550 }, "floatingObject": { "isPinned": false, @@ -1588,8 +1608,63 @@ "id": "663a7d1a-bb5d-42b4-93c7-a2387f5daae5", "savedPayload": { "position": { - "x": 30362.737698905807, - "y": 28400 + "x": 30322.54532004114, + "y": 28550 + }, + "targetPosition": { + "x": 30622.54532004114, + "y": 28550 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + { + "type": "Liquidity Program", + "name": "SA/BNB", + "config": "{\n \"asset\": \"BNB\"\n}", + "project": "Governance", + "tokensAwarded": { + "type": "Tokens Awarded", + "name": "New Tokens Awarded", + "project": "Governance", + "id": "b426526b-2cf9-442b-b54d-6555bcc5b3bb", + "savedPayload": { + "position": { + "x": 30397.54532004114, + "y": 28160.288568297 + }, + "targetPosition": { + "x": 30472.54532004114, + "y": 28290.192378864667 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 2, + "arrangementStyle": 0 + }, + "uiObject": { + "isRunning": false + } + } + }, + "id": "bb18d045-9155-43d2-aa43-0e103023e07d", + "savedPayload": { + "position": { + "x": 30472.54532004114, + "y": 28290.192378864667 }, "targetPosition": { "x": 30622.54532004114, From 14376771731426c1464a52766c41238dd0b4a40a Mon Sep 17 00:00:00 2001 From: gitforkgit Date: Thu, 11 Nov 2021 22:56:04 +0100 Subject: [PATCH 08/33] (Translation into german: another part) --- .../M/Manage/Manage-Stage/manage-stage.json | 140 ++++++++++++++++-- .../Plotter-Module/plotter-module.json | 9 +- 2 files changed, 133 insertions(+), 16 deletions(-) diff --git a/Projects/Foundations/Schemas/Docs-Nodes/M/Manage/Manage-Stage/manage-stage.json b/Projects/Foundations/Schemas/Docs-Nodes/M/Manage/Manage-Stage/manage-stage.json index c56f543dd..3cda422d8 100644 --- a/Projects/Foundations/Schemas/Docs-Nodes/M/Manage/Manage-Stage/manage-stage.json +++ b/Projects/Foundations/Schemas/Docs-Nodes/M/Manage/Manage-Stage/manage-stage.json @@ -7,6 +7,11 @@ "language": "ES", "text": "El manage stage se ocupa del establecimiento y la gestión de objetivos de stop loss y take profit, tanto para proteger su capital como para aumentar la eficiencia de su sistema de trading.", "updated": 1629580869439 + }, + { + "language": "DE", + "text": "In der \" manage stage\" geht es um das Setzen und Verwalten von Stop Loss und Take Profit Zielen, sowohl zum Schutz Ihres Kapitals als auch zur Steigerung der Effizienz Ihres trading systems.", + "updated": 1636665519510 } ] }, @@ -18,16 +23,37 @@ { "style": "Title", "text": "Optionality", - "updated": 1615101510181 + "updated": 1615101510181, + "translations": [ + { + "language": "DE", + "text": "Optionalität:", + "updated": 1636665447488 + } + ] }, { "style": "Note", - "text": "This Stage is optional. That means that if you do not want to deal with Stop Loss or Take Profits at your strategy, you can just delete this node and everything will continue working just fine. If you do remove this node, what will happen at runtime is that as soon as the position is triggered, the system will detect that that the Manage Stage is undefined, and it will jump it by opening the Close Stage (if it exists, because it is also optional)" + "text": "This Stage is optional. That means that if you do not want to deal with Stop Loss or Take Profits at your strategy, you can just delete this node and everything will continue working just fine. If you do remove this node, what will happen at runtime is that as soon as the position is triggered, the system will detect that that the Manage Stage is undefined, and it will jump it by opening the Close Stage (if it exists, because it is also optional)", + "translations": [ + { + "language": "DE", + "text": "Diese \"Stage\" ist optional. Das bedeutet, dass Sie diese Node einfach löschen können, wenn Sie keine Stop-Loss- oder Take-Profits in Ihrer Strategie verwenden möchten, und alles wird weiterhin gut funktionieren. Wenn Sie diesen Knoten entfernen, wird das System zur runtime(Laufzeit), sobald die Position ausgelöst wird, feststellen, dass die Manage Stage undefiniert ist, und es wird sie überspringen, indem es zur Close Stage springt und sie öffnet (falls sie existiert, da sie ebenfalls optional ist).", + "updated": 1636665947878 + } + ] }, { "style": "Text", "text": "This is how optionality looks like at the code:", - "updated": 1615101627343 + "updated": 1615101627343, + "translations": [ + { + "language": "DE", + "text": "So sieht die Optionalität im Code aus:", + "updated": 1636666049375 + } + ] }, { "style": "Javascript", @@ -37,51 +63,135 @@ { "style": "Success", "text": "If both the Manage Stage and the Close Stage are undefined, what will happen is that whenever the Open Stage gets closed, you will exit the position.", - "updated": 1615103161873 + "updated": 1615103161873, + "translations": [ + { + "language": "DE", + "text": "Wenn sowohl die Manage Stage als auch die Close Stage undefiniert sind, werden Sie die Position verlassen, sobald die Open Stage geschlossen wird.", + "updated": 1636666084552 + } + ] }, { "style": "Title", - "text": "Manage Stage Concept" + "text": "Manage Stage Concept", + "translations": [ + { + "language": "DE", + "text": "Manage Stage Konzept:", + "updated": 1636666115181 + } + ] }, { "style": "Text", - "text": "The first and foremost rule of trading is to preserve capital and its main goal is to increase it." + "text": "The first and foremost rule of trading is to preserve capital and its main goal is to increase it.", + "translations": [ + { + "language": "DE", + "text": "Die erste und wichtigste Regel des Handels ist es, das Kapital zu erhalten, und sein Hauptziel ist es, es zu vermehren.", + "updated": 1636666147357 + } + ] }, { "style": "Text", - "text": "Conceptually, a position is not an instantaneous event, but an event which has an opening, a period of maturation, and a closing. The management of the position happens throughout the process." + "text": "Conceptually, a position is not an instantaneous event, but an event which has an opening, a period of maturation, and a closing. The management of the position happens throughout the process.", + "translations": [ + { + "language": "DE", + "text": "Vom Konzept her ist eine Position kein sofortiges Ereignis, sondern ein Ereignis, das eine Eröffnung, eine Reifeperiode und eine Schließung hat. Die Verwaltung der Position erfolgt während dem Prozess.", + "updated": 1636666274128 + } + ] }, { "style": "Text", - "text": "The concept of managing the position refers to the fact that the formulas that determine the take profit and stop loss targets may change as the position develops. A typical situation in which you may want to change your original take profit and stop loss formulas is when the position seems to be developing well in your favor." + "text": "The concept of managing the position refers to the fact that the formulas that determine the take profit and stop loss targets may change as the position develops. A typical situation in which you may want to change your original take profit and stop loss formulas is when the position seems to be developing well in your favor.", + "translations": [ + { + "language": "DE", + "text": "Das Konzept der Positionen-managements bezieht sich auf die Tatsache, dass sich die Formeln zur Bestimmung der Take-Profit- und Stop-Loss-Ziele im Laufe der Entwicklung der Position ändern können. Eine typische Situation, in der Sie Ihre ursprünglichen Take-Profit- und Stop-Loss-Formeln ändern möchten, ist, wenn sich die Position zu Ihren Gunsten entwickelt.", + "updated": 1636666520021 + } + ] }, { "style": "Text", - "text": "It may be in your best interest to manage the stop loss, moving the target in the direction that would help protect unrealized profits. It may also be in your interest to move the take profit target to extract a larger profit than originally expected. Or you may wish to set up a mechanism that closes the trade as soon as a certain market situation materializes." + "text": "It may be in your best interest to manage the stop loss, moving the target in the direction that would help protect unrealized profits. It may also be in your interest to move the take profit target to extract a larger profit than originally expected. Or you may wish to set up a mechanism that closes the trade as soon as a certain market situation materializes.", + "translations": [ + { + "language": "DE", + "text": "Es kann in Ihrem Interesse sein, den Stop-Loss zu steuern und das Ziel in die Richtung zu verschieben, die zum Schutz nicht realisierter Gewinne beiträgt. Es kann auch in Ihrem Interesse sein, das Take-Profit-Ziel zu verschieben, um einen größeren Gewinn als ursprünglich erwartet zu erzielen. Oder Sie möchten einen Mechanismus einrichten, der den trade schließt, sobald eine bestimmte Marktsituation eintritt.", + "updated": 1636666733738 + } + ] }, { "style": "Text", - "text": "The management of take profit and stop loss is done independently of each other, in phases. Therefore, each concept has its own set of management phases." + "text": "The management of take profit and stop loss is done independently of each other, in phases. Therefore, each concept has its own set of management phases.", + "translations": [ + { + "language": "DE", + "text": "Die Verwaltung von Take-Profit und Stop-Loss erfolgt unabhängig voneinander, in Phasen. Daher hat jedes Konzept seine eigene Reihe von management phases (Verwaltungsphasen).", + "updated": 1636666836988 + } + ] }, { "style": "Text", - "text": "Each phase has its formula to describe the corresponding target. Users may define situations in which the current phase shall be abandoned and a different phase—with its formula—shall be implemented." + "text": "Each phase has its formula to describe the corresponding target. Users may define situations in which the current phase shall be abandoned and a different phase—with its formula—shall be implemented.", + "translations": [ + { + "language": "DE", + "text": "Für jede Phase gibt es eine Formel, die das entsprechende Ziel beschreibt. Die Benutzer können Situationen definieren, in denen die aktuelle Phase aufgegeben und eine andere Phase - mit ihrer Formel - durchgeführt werden soll.", + "updated": 1636666931674 + } + ] }, { "style": "Text", - "text": "Keep in mind that the position is in constant development, so there may be as many phases as you deem appropriate for your particular strategy." + "text": "Keep in mind that the position is in constant development, so there may be as many phases as you deem appropriate for your particular strategy.", + "translations": [ + { + "language": "DE", + "text": "Denken Sie daran, dass sich die Position ständig weiterentwickelt, so dass es so viele Phasen geben kann, wie Sie für Ihre spezielle Strategie für angemessen halten.", + "updated": 1636667005964 + } + ] }, { "style": "Text", - "text": "The idea of managing targets in phases derives from the notion that big market moves tend to provide clues as to what may come up next. For instance, rallies may accelerate as more traders join the move. Recognizable patterns may emerge. Signs of exhaustion may be identified." + "text": "The idea of managing targets in phases derives from the notion that big market moves tend to provide clues as to what may come up next. For instance, rallies may accelerate as more traders join the move. Recognizable patterns may emerge. Signs of exhaustion may be identified.", + "translations": [ + { + "language": "DE", + "text": "Die Idee, Ziele in Phasen zu verwalten, beruht auf der Vorstellung, dass große Marktbewegungen in der Regel Anhaltspunkte dafür liefern, was als Nächstes kommen könnte. So kann sich beispielsweise eine \"Rallye \"beschleunigen, wenn sich mehr trader (Händler) der Bewegung anschließen. Es können sich erkennbare Muster herausbilden. Anzeichen einer Erschöpfung können erkannt werden.", + "updated": 1636667250488 + } + ] }, { "style": "Text", - "text": "All of these considerations may feed the dynamic analysis performed in each phase as the position develops." + "text": "All of these considerations may feed the dynamic analysis performed in each phase as the position develops.", + "translations": [ + { + "language": "DE", + "text": "All diese Überlegungen können in die dynamische Analyse einfließen, die in jeder Phase der Positionsentwicklung durchgeführt wird.", + "updated": 1636667340670 + } + ] }, { "style": "Text", - "text": "Upon execution, the system verifies if the current candle has tagged either of the targets. If—or when—it does, the close stage kicks in and closing execution begins." + "text": "Upon execution, the system verifies if the current candle has tagged either of the targets. If—or when—it does, the close stage kicks in and closing execution begins.", + "translations": [ + { + "language": "DE", + "text": "Bei der Ausführung prüft das System, ob die aktuelle candle eines der Ziele markiert hat. Wenn dies der Fall ist, wird die close stage eingeleitet und die Ausführung der closing execution beginnt.", + "updated": 1636667407532 + } + ] }, { "style": "Callout", diff --git a/Projects/Foundations/Schemas/Docs-Nodes/P/Plotter/Plotter-Module/plotter-module.json b/Projects/Foundations/Schemas/Docs-Nodes/P/Plotter/Plotter-Module/plotter-module.json index 8a5b52c8a..47f8284a0 100644 --- a/Projects/Foundations/Schemas/Docs-Nodes/P/Plotter/Plotter-Module/plotter-module.json +++ b/Projects/Foundations/Schemas/Docs-Nodes/P/Plotter/Plotter-Module/plotter-module.json @@ -84,7 +84,14 @@ { "style": "List", "text": "icon is the name of the image that illustrates the corresponding layer in the Layers Panel. In case the icon is not specified, the default idon is used. Possible values are...", - "updated": 1609852182210 + "updated": 1609852182210, + "translations": [ + { + "language": "DE", + "text": "Icon is the name of the image that illustrates the corresponding layer in the Layers Panel. In case the icon is not specified, the default idon is used. Possible values are...", + "updated": 1636664751673 + } + ] }, { "style": "Javascript", From eef78bc729c7fa13a8bf4f861d830abc7ab225d9 Mon Sep 17 00:00:00 2001 From: gitforkgit Date: Thu, 11 Nov 2021 23:21:41 +0100 Subject: [PATCH 09/33] (translation into german: "project") --- .../P/Project/Project/project.json | 23 +++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/Projects/Foundations/Schemas/Docs-Concepts/P/Project/Project/project.json b/Projects/Foundations/Schemas/Docs-Concepts/P/Project/Project/project.json index 239391a9e..9ee982141 100644 --- a/Projects/Foundations/Schemas/Docs-Concepts/P/Project/Project/project.json +++ b/Projects/Foundations/Schemas/Docs-Concepts/P/Project/Project/project.json @@ -8,6 +8,11 @@ "language": "ES", "text": "La infraestructura de Superalgos integra diferentes proyectos. El objetivo principal de estas integraciones es automatizar las operaciones entre proyectos, extrayendo información valiosa del blockchain o el dominio particular de cada proyecto para ser utilizado en los sistemas de Trading.\n", "updated": 1624283023464 + }, + { + "language": "DE", + "text": "Die Superalgos-Infrastruktur integriert verschiedene Projekte. Das Hauptziel dieser Integrationen ist es, projektübergreifende Operationen zu automatisieren und wertvolle Informationen aus Blockchains oder der jeweiligen Domäne eines jeden Projekts zu extrahieren, um sie in Trading Systems zu verwenden.", + "updated": 1636669199719 } ] }, @@ -15,7 +20,14 @@ { "style": "Text", "text": "The first project is Superalgos itselft, witch provides a lowest level infraestructure that any other integrated project can freely reuse. On the pipeline we have these projects waiting to be integrated soon:", - "updated": 1609144390540 + "updated": 1609144390540, + "translations": [ + { + "language": "DE", + "text": "Das erste Projekt ist Superalgos selbst, das eine Infrastruktur der untersten Ebene bereitstellt, die jedes andere integrierte Projekt frei wiederverwenden kann. In der Pipeline haben wir diese Projekte, die darauf warten, bald integriert zu werden:", + "updated": 1636669240132 + } + ] }, { "style": "Table", @@ -24,7 +36,14 @@ }, { "style": "Text", - "text": "Once integrated, each project will provide even more infraestructure which can later be used by other projects to be integrated after that. For example, once Ethereum is fully integrated, it will enable DeFi projects to be integrated on top of it." + "text": "Once integrated, each project will provide even more infraestructure which can later be used by other projects to be integrated after that. For example, once Ethereum is fully integrated, it will enable DeFi projects to be integrated on top of it.", + "translations": [ + { + "language": "DE", + "text": "Sobald es integriert ist, wird jedes Projekt noch mehr Infrastruktur bereitstellen, die später von anderen Projekten genutzt werden kann, die danach integriert werden. Sobald beispielsweise Ethereum vollständig integriert ist, können darauf aufbauend DeFi-Projekte integriert werden.", + "updated": 1636669265115 + } + ] } ] } \ No newline at end of file From 81bab4475d98d38880d922e49862bd19729c2e8c Mon Sep 17 00:00:00 2001 From: Alexandru Stefan Date: Fri, 12 Nov 2021 13:35:32 +0200 Subject: [PATCH 10/33] fixed deepscan issues for code editor space --- .../UI/Spaces/CodeEditor-Space/EditorPage.js | 414 ++++++++++++++++++ .../UI/Spaces/Floating-Space/CodeEditor.js | 4 +- .../UI/Spaces/Floating-Space/ConfigEditor.js | 4 +- .../UI/Spaces/Floating-Space/FormulaEditor.js | 4 +- 4 files changed, 423 insertions(+), 3 deletions(-) create mode 100644 Projects/Foundations/UI/Spaces/CodeEditor-Space/EditorPage.js diff --git a/Projects/Foundations/UI/Spaces/CodeEditor-Space/EditorPage.js b/Projects/Foundations/UI/Spaces/CodeEditor-Space/EditorPage.js new file mode 100644 index 000000000..942bc2feb --- /dev/null +++ b/Projects/Foundations/UI/Spaces/CodeEditor-Space/EditorPage.js @@ -0,0 +1,414 @@ +function newFoundationsCodeEditorEditorPage() { + let thisObject = { + originatingNode: undefined, + editorType: undefined, + render: render, + initialize: initialize, + finalize: finalize + } + + let monacoInitialized = false + let monacoEditor = undefined + let codeString = '' + let tradingEngineObj = undefined + let recordFormulasObj = {} + let chartObj = {} + + return thisObject + + + function initialize() { + buildEditorHTML() + buildIntelliSenseModels() + } + + + function finalize() { + monacoInitialized = false + monacoEditor = undefined + codeString = '' + tradingEngineObj = undefined + recordFormulasObj = {} + thisObject.originatingNode = undefined + thisObject.editorType = undefined + + } + + + function render(originatingNode, editorType) { + + thisObject.editorType = editorType + thisObject.originatingNode = originatingNode + createEditingNodePath() + + + /** + * The reason we are doing the monaco initialization here is simply because monaco will set his own width at the moment it's rendered + * Rendering it earlier when the code panel is closed will result in a very narrow width + * Therefore we choose to render it after the panel has his width set correctly + * Probably there is a better way but at the time this has been coded, nothing else seemed to work + **/ + + require(["vs/editor/editor.main"], initMonacoEditor) + + } + + function initMonacoEditor() { + if (monacoEditor === undefined) { + document.getElementById('no-content').remove() + document.getElementById('code-path').insertAdjacentHTML('afterend', `
Notes: Changes are saved automatically
`) + monacoEditor = monaco.editor.create(document.querySelector('#editor'), { + model: null, + theme: 'vs-dark', + fixedOverflowWidgets: true + }); + + // Create autocomplete models and providers only once + monaco.editor.createModel(codeString, "javascript") + createAutocompletionFor(tradingEngineObj) + createAutocompletionFor(recordFormulasObj) + createAutocompletionFor(chartObj) + + monaco.languages.typescript.javascriptDefaults.setEagerModelSync(true) + monaco.languages.typescript.javascriptDefaults.setCompilerOptions({ + allowNonTsExtensions: true + }); + + } + + createCurrentEditorModel() + } + + + function createCurrentEditorModel() { + + let payload = thisObject.originatingNode.payload; + // Determine the editor type and change source for code + if (thisObject.editorType === codeEditorType.CODE) { + monacoEditor.setModel(monaco.editor.createModel(payload.node.code, "javascript")) + //Update code values + monacoEditor.getModel().onDidChangeContent(function () { + payload.node.code = monacoEditor.getValue() + }) + } else if (thisObject.editorType === codeEditorType.CONFIG) { + monacoEditor.setModel(monaco.editor.createModel(payload.node.config, "json")) + //Update config values + monacoEditor.getModel().onDidChangeContent(function () { + payload.node.config = monacoEditor.getValue() + }) + } + + } + + function createAutocompletionFor(object) { + // Disable default autocompletion for javascript + monaco.languages.typescript.javascriptDefaults.setCompilerOptions({noLib: true}); + + // Helper function to return the monaco completion item type of a thing + function getType(thing, isMember) { + isMember = (isMember === undefined) ? (typeof isMember == "boolean") ? isMember : false : false; // Give isMember a default value of false + + switch ((typeof thing).toLowerCase()) { + case "object": + return monaco.languages.CompletionItemKind.Class; + + case "function": + return (isMember) ? monaco.languages.CompletionItemKind.Method : monaco.languages.CompletionItemKind.Function; + + default: + return monaco.languages.CompletionItemKind.Variable; + } + } + + // Register object that will return autocomplete items + monaco.languages.registerCompletionItemProvider('javascript', { + // Run this function when the period or open parenthesis is typed (and anything after a space) + triggerCharacters: ['.', '('], + + // Function to generate autocompletion results + provideCompletionItems: function (model, position, token) { + // Split everything the user has typed on the current line up at each space, and only look at the last word + let last_chars = model.getValueInRange({ + startLineNumber: position.lineNumber, + startColumn: 0, + endLineNumber: position.lineNumber, + endColumn: position.column + }); + let words = last_chars.replace("\t", "").split(" "); + let activeTyping = words[words.length - 1]; // What the user is currently typing (everything after the last space) + if (activeTyping.includes('(')) { + let split = activeTyping.split('('); + activeTyping = split[split.length - 1] + } + + // If the last character typed is a period then we need to look at member objects of our object + let isMember = activeTyping.charAt(activeTyping.length - 1) === "."; + + // Array of autocompletion results + let result = []; + + // Used for generic handling between member and non-member objects + let lastToken = object; + let prefix = ''; + + if (isMember) { + // Is a member, get a list of all members, and the prefix + let parents = activeTyping.substring(0, activeTyping.length - 1).split("."); + lastToken = object[parents[0]]; + prefix = parents[0]; + + // Loop through all the parents the current one will have (to generate prefix) + for (let i = 1; i < parents.length; i++) { + if (lastToken !== undefined && lastToken.hasOwnProperty(parents[i])) { + prefix += '.' + parents[i]; + lastToken = lastToken[parents[i]]; + } else { + // Not valid + return result[0] = ''; + } + } + } + + // Get all the child properties of the last token + for (let prop in lastToken) { + if (lastToken.hasOwnProperty(prop) && !prop.startsWith("__")) { + // Get the detail type (try-catch) in case object does not have prototype + let details = ''; + try { + details = lastToken[prop].__proto__.constructor.name; + } catch (e) { + details = typeof lastToken[prop]; + } + + // Create completion object + let suggestion = { + label: prop, + kind: getType(lastToken[prop], isMember), + detail: details, + insertText: prop + }; + + // Change insertText and documentation for functions + if (suggestion.detail.toLowerCase() === 'function') { + suggestion.insertText += "("; + suggestion.documentation = (lastToken[prop].toString()).split("{")[0]; // Show function prototype in the documentation popup + } + + // Add to final results + result.push(suggestion); + // TODO: Manually adding "value" property if parent is tradingEngine + + } + } + + return { + suggestions: result + }; + } + }); + } + + /** + * The autocomplete models will be based on: + * 1. Existing code in the data mines -> we will create models for each code node (it's like opening multiple files in vscode) + * 2. Formulas from data mines by creating an object representation of all formulas see implementation below than passing it to the monaco registerCompletionItemProvider + * 2. Trading engine loaded into the workspace - we create an obj. representation using getProtocolNode and we are using monaco registerCompletionItemProvider + * + */ + function buildIntelliSenseModels() { + + + UI.projects.foundations.spaces.designSpace.workspace.workspaceNode.rootNodes.forEach(node => { + if (node.type === 'Data Mine') { + // Getting all the Javascript code nodes into one single model + UI.projects.visualScripting.utilities.branches.nodeBranchToArray(node, 'Procedure Javascript Code').forEach(node => { + codeString += '\n' + codeString += node.code + }) + + /** + * Generating an object represantation for "chart" object autocomplete + * The logic is inspired by the condition editor + * First we create a string representation with "." notation e.g: chart.at24hs.candlesChannel.begin for all the data mines and their bots in the workspace + * Secondly we are going to convert all the strings to an object which will be used by the editor to predict possible values + * e.g : we will end with something like { + * chart: { + * at24hs: { + * candlesChannel: { + * begin: "", + * direction: "", + * end: "", + * period: "" + * }, + * previous: {...}, + * previous: { + * previous: {...} + * } + * ... + * }, + * at01hs: {...} + * ... + * }, + * } + * + */ + let bots = node.sensorBots.concat(node.apiDataFetcherBots).concat(node.indicatorBots) + + bots.forEach(bot => { + let products = bot.products + products.forEach(product => { + let productName = UI.projects.visualScripting.utilities.nodeConfig.loadConfigProperty(product.payload, 'singularVariableName') + if (product.record !== undefined) { + product.record.properties.forEach(property => { + let propertyName = UI.projects.visualScripting.utilities.nodeConfig.loadConfigProperty(property.payload, 'codeName') + product.datasets.forEach(dataset => { + let validTimeFrames = UI.projects.visualScripting.utilities.nodeConfig.loadConfigProperty(dataset.payload, 'validTimeFrames') + if (validTimeFrames !== undefined) { + validTimeFrames.forEach(tf => { + let prop = 'chart.at' + tf.replace('-', '') + '.' + productName + '.' + propertyName + // This will let us to enhance the autocomplete logic to add as many previous kids as we want to + let propWithPrevious = 'chart.at' + tf.replace('-', '') + '.previous.' + productName + '.' + propertyName + let propWithTwoPrevious = 'chart.at' + tf.replace('-', '') + '.previous.previous.' + productName + '.' + propertyName + let propWithThreePrevious = 'chart.at' + tf.replace('-', '') + '.previous.previous.previous.' + productName + '.' + propertyName + let propWithFourPrevious = 'chart.at' + tf.replace('-', '') + '.previous.previous.previous.previous.' + productName + '.' + propertyName + let propWithFivePrevious = 'chart.at' + tf.replace('-', '') + '.previous.previous.previous.previous.previous.' + productName + '.' + propertyName + objectMerge(chartObj, prop.split('.').reduceRight((o, x) => ({[x]: o}), "")) + objectMerge(chartObj, propWithPrevious.split('.').reduceRight((o, x) => ({[x]: o}), "")) + objectMerge(chartObj, propWithTwoPrevious.split('.').reduceRight((o, x) => ({[x]: o}), "")) + objectMerge(chartObj, propWithThreePrevious.split('.').reduceRight((o, x) => ({[x]: o}), "")) + objectMerge(chartObj, propWithFourPrevious.split('.').reduceRight((o, x) => ({[x]: o}), "")) + objectMerge(chartObj, propWithFivePrevious.split('.').reduceRight((o, x) => ({[x]: o}), "")) + }) + } + }) + }) + } + }) + }) + /** + * Getting all the Formula codes and create an object representation, all non-object children will be initialized with strings + * + * e.g : we will end with something like { + * variable: { + * last24hsDirection: "", + * last24HsMax: "" + * }, + * record: { + * current: { + * direction: "" + * } + * } + * } + * the above object will have as many properties as we can find in the entire workspace by scanning the formulas + * + */ + + UI.projects.visualScripting.utilities.branches.nodeBranchToArray(node, 'Record Formula').forEach(node => { + /** + * Extract each code formula as an object to be merged with the next one until we end up with an object containing all the objects present in the formula with proper children + * The resulting object will be later used as model for autocompletion + */ + objectMerge(recordFormulasObj, node.code.split('.').reduceRight((o, x) => ({[x]: o}), "")) + + }) + } else if (node.type === 'Trading Engine') { + // Create an object representation for the engine + tradingEngineObj = {tradingEngine: UI.projects.visualScripting.functionLibraries.protocolNode.getProtocolNode(node, false, false, false, false, false, undefined)} + } + }) + + + function objectMerge(target, source) { + for (const key of Object.keys(source)) { + const currTarget = target[key]; + const currSource = source[key]; + + if (currTarget) { + const objSource = typeof currSource === 'object'; + const objTarget = typeof currTarget === 'object'; + + if (objSource && objTarget) { + void objectMerge(currTarget, currSource) + continue; + } + } + + target[key] = currSource; + } + + return target; + } + + } + + function buildEditorHTML() { + let HTML = '' + + HTML += `
` + HTML += '
' + HTML += '
' + HTML += '
' + HTML += `

Code Editor

` + HTML += `
` + HTML += `

Nothing to edit...

Try opening a node config or node code

` + HTML += '
' + HTML += `
` + HTML += footer() + document.getElementById('code-editor-content-div').innerHTML = HTML + + } + + + function footer() { + let HTML = '' + + HTML += '