diff --git a/BottomSpace/KeyVaultModule.js b/BottomSpace/KeyVaultModule.js
new file mode 100644
index 000000000..5ed3c6256
--- /dev/null
+++ b/BottomSpace/KeyVaultModule.js
@@ -0,0 +1,137 @@
+
+function newKeyVaultModule() {
+
+ const MODULE_NAME = "Key Vault Module Button";
+ const INFO_LOG = false;
+ const ERROR_LOG = true;
+ const logger = newWebDebugLog();
+ logger.fileName = MODULE_NAME;
+
+ var thisObject = {
+ container: undefined,
+ draw: draw,
+ getContainer: getContainer, // returns the inner most container that holds the point received by parameter.
+ initialize: initialize
+ };
+
+ var container = newContainer();
+ container.initialize();
+ thisObject.container = container;
+
+ thisObject.container.frame.width = 50;
+ thisObject.container.frame.height = BOTTOM_SPACE_HEIGHT;
+
+ container.frame.position.x = viewPort.visibleArea.topLeft.x + thisObject.container.frame.width * 2;
+ container.frame.position.y = viewPort.visibleArea.bottomLeft.y;
+
+ container.isDraggeable = false;
+ container.isClickeable = true;
+
+ let icon;
+ let canDrawIcon = false;
+
+ return thisObject;
+
+ function initialize(callBackFunction) {
+
+ try {
+
+ if (INFO_LOG === true) { logger.write("[INFO] initialize -> Entering function."); }
+
+ icon = new Image();
+
+ icon.onload = onImageLoad;
+
+ function onImageLoad() {
+ canDrawIcon = true;
+ }
+
+ icon.src = "Images/Icons/key-vault-module.png";
+
+ thisObject.container.eventHandler.listenToEvent("onMouseClick", onClick);
+
+ if (callBackFunction !== undefined) { callBackFunction(GLOBAL.DEFAULT_OK_RESPONSE); }
+
+ } catch (err) {
+
+ if (ERROR_LOG === true) { logger.write("[ERROR] initialize -> err.message = " + err.message); }
+ if (callBackFunction !== undefined) { callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE); }
+ }
+ }
+
+ function onClick() {
+
+ try {
+
+ if (INFO_LOG === true) { logger.write("[INFO] onClick -> Entering function."); }
+
+ window.open('https://keyVault.advancedalgos.net', '_blank');
+
+
+ } catch (err) {
+
+ if (ERROR_LOG === true) { logger.write("[ERROR] onClick -> err.message = " + err.message); }
+
+ }
+ }
+
+ function getContainer(point) {
+
+ try {
+
+ if (INFO_LOG === true) { logger.write("[INFO] getContainer -> Entering function."); }
+
+ let container;
+
+ /* First we check if this point is inside this object UI. */
+
+ if (thisObject.container.frame.isThisPointHere(point, true) === true) {
+
+ return this.container;
+
+ } else {
+
+ /* This point does not belong to this space. */
+
+ return undefined;
+ }
+
+ } catch (err) {
+
+ if (ERROR_LOG === true) { logger.write("[ERROR] getContainer -> err.message = " + err.message); }
+
+ }
+ }
+
+ function draw() {
+
+ try {
+
+ if (INFO_LOG === true) { logger.write("[INFO] draw -> Entering function."); }
+
+ thisObject.container.frame.draw(false, false);
+
+ if (canDrawIcon === false) { return; }
+
+ let breakpointsHeight = 15;
+
+ let imageHeight = 15;
+ let imageWidth = 15;
+
+ let imagePoint = {
+ x: 10,
+ y: thisObject.container.frame.height / 2 - imageHeight / 2 + breakpointsHeight
+ };
+
+ imagePoint = thisObject.container.frame.frameThisPoint(imagePoint);
+
+ browserCanvasContext.drawImage(icon, imagePoint.x, imagePoint.y, imageWidth, imageHeight);
+
+
+ } catch (err) {
+
+ if (ERROR_LOG === true) { logger.write("[ERROR] draw -> err.message = " + err.message); }
+
+ }
+ }
+}
\ No newline at end of file
diff --git a/BottomSpace/TeamsModule.js b/BottomSpace/TeamsModule.js
new file mode 100644
index 000000000..0f235afc0
--- /dev/null
+++ b/BottomSpace/TeamsModule.js
@@ -0,0 +1,137 @@
+
+function newTeamsModule() {
+
+ const MODULE_NAME = "Teams Module Button";
+ const INFO_LOG = false;
+ const ERROR_LOG = true;
+ const logger = newWebDebugLog();
+ logger.fileName = MODULE_NAME;
+
+ var thisObject = {
+ container: undefined,
+ draw: draw,
+ getContainer: getContainer, // returns the inner most container that holds the point received by parameter.
+ initialize: initialize
+ };
+
+ var container = newContainer();
+ container.initialize();
+ thisObject.container = container;
+
+ thisObject.container.frame.width = 50;
+ thisObject.container.frame.height = BOTTOM_SPACE_HEIGHT;
+
+ container.frame.position.x = viewPort.visibleArea.topLeft.x + thisObject.container.frame.width * 1;
+ container.frame.position.y = viewPort.visibleArea.bottomLeft.y;
+
+ container.isDraggeable = false;
+ container.isClickeable = true;
+
+ let icon;
+ let canDrawIcon = false;
+
+ return thisObject;
+
+ function initialize(callBackFunction) {
+
+ try {
+
+ if (INFO_LOG === true) { logger.write("[INFO] initialize -> Entering function."); }
+
+ icon = new Image();
+
+ icon.onload = onImageLoad;
+
+ function onImageLoad() {
+ canDrawIcon = true;
+ }
+
+ icon.src = "Images/Icons/teams-module.png";
+
+ thisObject.container.eventHandler.listenToEvent("onMouseClick", onClick);
+
+ if (callBackFunction !== undefined) { callBackFunction(GLOBAL.DEFAULT_OK_RESPONSE); }
+
+ } catch (err) {
+
+ if (ERROR_LOG === true) { logger.write("[ERROR] initialize -> err.message = " + err.message); }
+ if (callBackFunction !== undefined) { callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE); }
+ }
+ }
+
+ function onClick() {
+
+ try {
+
+ if (INFO_LOG === true) { logger.write("[INFO] onClick -> Entering function."); }
+
+ window.open('https://teams.advancedalgos.net', '_blank');
+
+
+ } catch (err) {
+
+ if (ERROR_LOG === true) { logger.write("[ERROR] onClick -> err.message = " + err.message); }
+
+ }
+ }
+
+ function getContainer(point) {
+
+ try {
+
+ if (INFO_LOG === true) { logger.write("[INFO] getContainer -> Entering function."); }
+
+ let container;
+
+ /* First we check if this point is inside this object UI. */
+
+ if (thisObject.container.frame.isThisPointHere(point, true) === true) {
+
+ return this.container;
+
+ } else {
+
+ /* This point does not belong to this space. */
+
+ return undefined;
+ }
+
+ } catch (err) {
+
+ if (ERROR_LOG === true) { logger.write("[ERROR] getContainer -> err.message = " + err.message); }
+
+ }
+ }
+
+ function draw() {
+
+ try {
+
+ if (INFO_LOG === true) { logger.write("[INFO] draw -> Entering function."); }
+
+ thisObject.container.frame.draw(false, false);
+
+ if (canDrawIcon === false) { return; }
+
+ let breakpointsHeight = 15;
+
+ let imageHeight = 15;
+ let imageWidth = 15;
+
+ let imagePoint = {
+ x: 10,
+ y: thisObject.container.frame.height / 2 - imageHeight / 2 + breakpointsHeight
+ };
+
+ imagePoint = thisObject.container.frame.frameThisPoint(imagePoint);
+
+ browserCanvasContext.drawImage(icon, imagePoint.x, imagePoint.y, imageWidth, imageHeight);
+
+
+ } catch (err) {
+
+ if (ERROR_LOG === true) { logger.write("[ERROR] draw -> err.message = " + err.message); }
+
+ }
+ }
+}
\ No newline at end of file
diff --git a/BottomSpace/UsersModule.js b/BottomSpace/UsersModule.js
new file mode 100644
index 000000000..758ddaefa
--- /dev/null
+++ b/BottomSpace/UsersModule.js
@@ -0,0 +1,137 @@
+
+function newUsersModule() {
+
+ const MODULE_NAME = "Users Module Button";
+ const INFO_LOG = false;
+ const ERROR_LOG = true;
+ const logger = newWebDebugLog();
+ logger.fileName = MODULE_NAME;
+
+ var thisObject = {
+ container: undefined,
+ draw: draw,
+ getContainer: getContainer, // returns the inner most container that holds the point received by parameter.
+ initialize: initialize
+ };
+
+ var container = newContainer();
+ container.initialize();
+ thisObject.container = container;
+
+ thisObject.container.frame.width = 50;
+ thisObject.container.frame.height = BOTTOM_SPACE_HEIGHT;
+
+ container.frame.position.x = viewPort.visibleArea.topLeft.x + thisObject.container.frame.width * 0;
+ container.frame.position.y = viewPort.visibleArea.bottomLeft.y;
+
+ container.isDraggeable = false;
+ container.isClickeable = true;
+
+ let icon;
+ let canDrawIcon = false;
+
+ return thisObject;
+
+ function initialize(callBackFunction) {
+
+ try {
+
+ if (INFO_LOG === true) { logger.write("[INFO] initialize -> Entering function."); }
+
+ icon = new Image();
+
+ icon.onload = onImageLoad;
+
+ function onImageLoad() {
+ canDrawIcon = true;
+ }
+
+ icon.src = "Images/Icons/users-module.png";
+
+ thisObject.container.eventHandler.listenToEvent("onMouseClick", onClick);
+
+ if (callBackFunction !== undefined) { callBackFunction(GLOBAL.DEFAULT_OK_RESPONSE); }
+
+ } catch (err) {
+
+ if (ERROR_LOG === true) { logger.write("[ERROR] initialize -> err.message = " + err.message); }
+ if (callBackFunction !== undefined) { callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE); }
+ }
+ }
+
+ function onClick() {
+
+ try {
+
+ if (INFO_LOG === true) { logger.write("[INFO] onClick -> Entering function."); }
+
+ window.open('https://users.advancedalgos.net', '_blank');
+
+
+ } catch (err) {
+
+ if (ERROR_LOG === true) { logger.write("[ERROR] onClick -> err.message = " + err.message); }
+
+ }
+ }
+
+ function getContainer(point) {
+
+ try {
+
+ if (INFO_LOG === true) { logger.write("[INFO] getContainer -> Entering function."); }
+
+ let container;
+
+ /* First we check if this point is inside this object UI. */
+
+ if (thisObject.container.frame.isThisPointHere(point, true) === true) {
+
+ return this.container;
+
+ } else {
+
+ /* This point does not belong to this space. */
+
+ return undefined;
+ }
+
+ } catch (err) {
+
+ if (ERROR_LOG === true) { logger.write("[ERROR] getContainer -> err.message = " + err.message); }
+
+ }
+ }
+
+ function draw() {
+
+ try {
+
+ if (INFO_LOG === true) { logger.write("[INFO] draw -> Entering function."); }
+
+ thisObject.container.frame.draw(false, false);
+
+ if (canDrawIcon === false) { return; }
+
+ let breakpointsHeight = 15;
+
+ let imageHeight = 15;
+ let imageWidth = 15;
+
+ let imagePoint = {
+ x: 10,
+ y: thisObject.container.frame.height / 2 - imageHeight / 2 + breakpointsHeight
+ };
+
+ imagePoint = thisObject.container.frame.frameThisPoint(imagePoint);
+
+ browserCanvasContext.drawImage(icon, imagePoint.x, imagePoint.y, imageWidth, imageHeight);
+
+
+ } catch (err) {
+
+ if (ERROR_LOG === true) { logger.write("[ERROR] draw -> err.message = " + err.message); }
+
+ }
+ }
+}
\ No newline at end of file
diff --git a/Images/Icons/key-vault-module.png b/Images/Icons/key-vault-module.png
new file mode 100644
index 000000000..cafe26119
Binary files /dev/null and b/Images/Icons/key-vault-module.png differ
diff --git a/Images/Icons/teams-module.png b/Images/Icons/teams-module.png
new file mode 100644
index 000000000..57c3b4718
Binary files /dev/null and b/Images/Icons/teams-module.png differ
diff --git a/Images/Icons/users-module.png b/Images/Icons/users-module.png
new file mode 100644
index 000000000..af0f23b27
Binary files /dev/null and b/Images/Icons/users-module.png differ
diff --git a/Json.json b/Json.json
deleted file mode 100644
index 5f282702b..000000000
--- a/Json.json
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/Project.njsproj b/Project.njsproj
index b77efe7fe..3117f769c 100644
--- a/Project.njsproj
+++ b/Project.njsproj
@@ -57,6 +57,9 @@
+
+ Code
+
@@ -67,6 +70,9 @@
+
+ Code
+
Code
@@ -143,6 +149,9 @@
Code
+
+ Code
+
Code
diff --git a/Scripts/AppLoader.js b/Scripts/AppLoader.js
index d5ed3f931..9542f03e6 100644
--- a/Scripts/AppLoader.js
+++ b/Scripts/AppLoader.js
@@ -31,6 +31,9 @@
"BottomSpace/DeleteTradingHistory.js",
"BottomSpace/ChartAspectRatio.js",
+ "BottomSpace/UsersModule.js",
+ "BottomSpace/TeamsModule.js",
+ "BottomSpace/KeyVaultModule.js",
"TopSpace/PlayStopButton.js",
"TopSpace/CompanyLogo.js",
diff --git a/Spaces/BottomSpace.js b/Spaces/BottomSpace.js
index fef962e70..38f3eb950 100644
--- a/Spaces/BottomSpace.js
+++ b/Spaces/BottomSpace.js
@@ -4,6 +4,9 @@ function newBottomSpace() {
var thisObject = {
deleteTradingHistory: undefined,
chartAspectRatio: undefined,
+ UsersModule: undefined,
+ TeamsModule: undefined,
+ KeyVaultModule: undefined,
container: undefined,
draw: draw,
getContainer: getContainer, // returns the inner most container that holds the point received by parameter.
@@ -32,6 +35,15 @@ function newBottomSpace() {
thisObject.chartAspectRatio = newChartAspectRatio();
thisObject.chartAspectRatio.initialize();
+ thisObject.UsersModule = newUsersModule();
+ thisObject.UsersModule.initialize();
+
+ thisObject.TeamsModule = newTeamsModule();
+ thisObject.TeamsModule.initialize();
+
+ thisObject.KeyVaultModule = newKeyVaultModule();
+ thisObject.KeyVaultModule.initialize();
+
}
function getContainer(point) {
@@ -44,6 +56,15 @@ function newBottomSpace() {
container = thisObject.chartAspectRatio.getContainer(point);
if (container !== undefined) { return container; }
+ container = thisObject.UsersModule.getContainer(point);
+ if (container !== undefined) { return container; }
+
+ container = thisObject.TeamsModule.getContainer(point);
+ if (container !== undefined) { return container; }
+
+ container = thisObject.KeyVaultModule.getContainer(point);
+ if (container !== undefined) { return container; }
+
/* The point does not belong to any inner container, so we return the current container. */
return thisObject.container;
@@ -57,6 +78,9 @@ function newBottomSpace() {
drawBackground();
thisObject.deleteTradingHistory.draw();
thisObject.chartAspectRatio.draw();
+ thisObject.UsersModule.draw();
+ thisObject.TeamsModule.draw();
+ thisObject.KeyVaultModule.draw();
}