diff --git a/Projects/Superalgos/Schemas/Docs-Concepts/client.json b/Projects/Superalgos/Schemas/Docs-Concepts/client.json new file mode 100644 index 000000000..93b2ed1af --- /dev/null +++ b/Projects/Superalgos/Schemas/Docs-Concepts/client.json @@ -0,0 +1,14 @@ +{ + "type": "Client", + "definition": { + "text": "The Client, together with the TS and the UI is one of the three core components of the Superalgos Software.", + "updated": 1610911936882 + }, + "paragraphs": [ + { + "style": "Success", + "text": "The Client is what users run.", + "updated": 1610912048355 + } + ] +} \ No newline at end of file diff --git a/Projects/Superalgos/Schemas/Docs-Concepts/ts.json b/Projects/Superalgos/Schemas/Docs-Concepts/ts.json new file mode 100644 index 000000000..e9f8ddafc --- /dev/null +++ b/Projects/Superalgos/Schemas/Docs-Concepts/ts.json @@ -0,0 +1,14 @@ +{ + "type": "TS", + "definition": { + "text": "TS is the abbreviation of Task Server, one of the core components of the Superalgos Software.", + "updated": 1610912495126 + }, + "paragraphs": [ + { + "style": "Success", + "text": "TS is also the root object of a data structure available at runtime within the Task Server.", + "updated": 1610911849966 + } + ] +} \ No newline at end of file diff --git a/Projects/Superalgos/Schemas/Docs-Concepts/ui.json b/Projects/Superalgos/Schemas/Docs-Concepts/ui.json new file mode 100644 index 000000000..e336a44a4 --- /dev/null +++ b/Projects/Superalgos/Schemas/Docs-Concepts/ui.json @@ -0,0 +1,13 @@ +{ + "type": "UI", + "definition": { + "text": "UI is an abbreviation for User Interface (user interface), which refers to the operation screen and operation method of the software. In Superalgos the UI is a Web App that runs at an Internet Browser.", + "updated": 1610911735769 + }, + "paragraphs": [ + { + "style": "Text", + "text": "Left click and Edit to enter edit mode and change this text. ENTER to write new paragraphs. ESC to exit edit mode." + } + ] +} \ No newline at end of file diff --git a/Projects/Superalgos/Schemas/Docs-Topics/ts-process-errors-001-ts-process-error-unexpected-error.json b/Projects/Superalgos/Schemas/Docs-Topics/ts-process-errors-001-ts-process-error-unexpected-error.json new file mode 100644 index 000000000..029fa082d --- /dev/null +++ b/Projects/Superalgos/Schemas/Docs-Topics/ts-process-errors-001-ts-process-error-unexpected-error.json @@ -0,0 +1,18 @@ +{ + "topic": "TS Process Errors", + "pageNumber": "1", + "type": "TS Process Error - Unexpected Error", + "definition": { + "text": "Write here a summary for this topic page." + }, + "paragraphs": [ + { + "style": "Text", + "text": "Left click and Edit to enter edit mode and change this text. ENTER to write new paragraphs. ESC to exit edit mode." + }, + { + "style": "Error", + "text": "Unexpected Error" + } + ] +} \ No newline at end of file diff --git a/Projects/Superalgos/TS/Bot-Modules/Indicator-Bot/SingleMarketIndicatorBot.js b/Projects/Superalgos/TS/Bot-Modules/Indicator-Bot/SingleMarketIndicatorBot.js index 8a8ca5e1b..0b27dc2af 100644 --- a/Projects/Superalgos/TS/Bot-Modules/Indicator-Bot/SingleMarketIndicatorBot.js +++ b/Projects/Superalgos/TS/Bot-Modules/Indicator-Bot/SingleMarketIndicatorBot.js @@ -58,15 +58,10 @@ function run(callBackFunction) { try { - loop(); + loop() function loop() { try { - function pad(str, max) { - str = str.toString(); - return str.length < max ? pad(" " + str, max) : str; - } - /* For each loop we want to create a new log file. */ if (TS.projects.superalgos.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT !== undefined) { TS.projects.superalgos.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.finalize() @@ -96,6 +91,9 @@ let dataDependencies; let nextWaitTime; + processStopped() + TS.projects.superalgos.globals.taskVariables.FATAL_ERROR_MESSAGE = "The world is collapsing..." + return initializeProcessExecutionEvents(); @@ -798,8 +796,17 @@ function processStopped() { if (TS.projects.superalgos.globals.taskVariables.FATAL_ERROR_MESSAGE !== undefined) { - TS.projects.superalgos.functionLibraries.processFunctions.processError( - TS.projects.superalgos.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).PROCESS_KEY, undefined, "An unexpected error caused the Process to stop.") + TS.projects.superalgos.functionLibraries.processFunctions.processError + ( + TS.projects.superalgos.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).PROCESS_KEY, + undefined, + "An unexpected error caused the Process to stop.", + { + project: 'Superalgos', + category: 'Topic', + type: 'TS Process Error - Unexpected Error' + } + ) } else { TS.projects.superalgos.globals.taskConstants.EVENT_SERVER_CLIENT_MODULE_OBJECT.raiseEvent( TS.projects.superalgos.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).PROCESS_KEY, 'Stopped') diff --git a/Projects/Superalgos/TS/Function-Libraries/ProcessFunctions.js b/Projects/Superalgos/TS/Function-Libraries/ProcessFunctions.js index 9f612f73b..3c0547589 100644 --- a/Projects/Superalgos/TS/Function-Libraries/ProcessFunctions.js +++ b/Projects/Superalgos/TS/Function-Libraries/ProcessFunctions.js @@ -19,52 +19,58 @@ exports.newSuperalgosFunctionLibrariesProcessFunctions = function () { TS.projects.superalgos.globals.taskConstants.EVENT_SERVER_CLIENT_MODULE_OBJECT.raiseEvent(TS.projects.superalgos.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).PROCESS_KEY, 'Heartbeat', event) } - function processError (processKey, node, errorMessage) { + function processError (processKey, node, errorMessage, docs) { let event if (node !== undefined) { event = { nodeName: node.name, nodeType: node.type, nodeId: node.id, - errorMessage: errorMessage + errorMessage: errorMessage, + docs: docs } } else { event = { - errorMessage: errorMessage + errorMessage: errorMessage, + docs: docs } } TS.projects.superalgos.globals.taskConstants.EVENT_SERVER_CLIENT_MODULE_OBJECT.raiseEvent(processKey, 'Error', event) } - function processWarning (processKey, node, warningMessage) { + function processWarning (processKey, node, warningMessage, docs) { let event if (node !== undefined) { event = { nodeName: node.name, nodeType: node.type, nodeId: node.id, - warningMessage: warningMessage + warningMessage: warningMessage, + docs: docs } } else { event = { - warningMessage: warningMessage + warningMessage: warningMessage, + docs: docs } } TS.projects.superalgos.globals.taskConstants.EVENT_SERVER_CLIENT_MODULE_OBJECT.raiseEvent(processKey, 'Warning', event) } - function processInfo (processKey, node, infoMessage) { + function processInfo (processKey, node, infoMessage, docs) { let event if (node !== undefined) { event = { nodeName: node.name, nodeType: node.type, nodeId: node.id, - infoMessage: infoMessage + infoMessage: infoMessage, + docs: docs } } else { event = { - infoMessage: infoMessage + infoMessage: infoMessage, + docs: docs } } TS.projects.superalgos.globals.taskConstants.EVENT_SERVER_CLIENT_MODULE_OBJECT.raiseEvent(processKey, 'Info', event) diff --git a/Projects/Superalgos/UI/Spaces/Docs-Space/CommandInterface.js b/Projects/Superalgos/UI/Spaces/Docs-Space/CommandInterface.js index 0f9c82b1e..87120b1c8 100644 --- a/Projects/Superalgos/UI/Spaces/Docs-Space/CommandInterface.js +++ b/Projects/Superalgos/UI/Spaces/Docs-Space/CommandInterface.js @@ -731,7 +731,7 @@ function newSuperalgosDocsCommmandInterface() { let orderedArray = UI.projects.superalgos.utilities.docs.buildOrderedPageIndex( project, 'Topic', - review + topic ) pageNumber = orderedArray.length + 1 @@ -771,7 +771,7 @@ function newSuperalgosDocsCommmandInterface() { let orderedArray = UI.projects.superalgos.utilities.docs.buildOrderedPageIndex( project, 'Tutorial', - review + tutorial ) pageNumber = orderedArray.length + 1 diff --git a/Projects/Superalgos/UI/Spaces/Docs-Space/DocumentPage.js b/Projects/Superalgos/UI/Spaces/Docs-Space/DocumentPage.js index 10b06f8c9..67803234c 100644 --- a/Projects/Superalgos/UI/Spaces/Docs-Space/DocumentPage.js +++ b/Projects/Superalgos/UI/Spaces/Docs-Space/DocumentPage.js @@ -66,6 +66,7 @@ function newSuperalgosDocsDocumentPage() { if (thisObject.docsSchemaDocument === undefined) { // Use the New Node Template let template = { + updated: true, type: UI.projects.superalgos.spaces.docsSpace.currentDocumentBeingRendered.type, definition: { text: "Write here the definition of this " + UI.projects.superalgos.spaces.docsSpace.currentDocumentBeingRendered.category + "." }, paragraphs: [ diff --git a/Projects/Superalgos/UI/Spaces/Floating-Space/UiObject.js b/Projects/Superalgos/UI/Spaces/Floating-Space/UiObject.js index bf8021fa0..f05493feb 100644 --- a/Projects/Superalgos/UI/Spaces/Floating-Space/UiObject.js +++ b/Projects/Superalgos/UI/Spaces/Floating-Space/UiObject.js @@ -1119,7 +1119,7 @@ function newUiObject() { async function onError(message) { let uiObject = await getTargetUiObject(message) - uiObject.setErrorMessage(message.event.errorMessage, 10) + uiObject.setErrorMessage(message.event.errorMessage, 10, message.event.docs) let event = { type: 'Secondary Action Already Executed' @@ -1138,7 +1138,7 @@ function newUiObject() { async function onWarning(message) { let uiObject = await getTargetUiObject(message) - uiObject.setWarningMessage(message.event.warningMessage, 10) + uiObject.setWarningMessage(message.event.warningMessage, 10, message.event.docs) } } @@ -1152,7 +1152,7 @@ function newUiObject() { async function onInfo(message) { let uiObject = await getTargetUiObject(message) - uiObject.setInfoMessage(message.event.infoMessage, 10) + uiObject.setInfoMessage(message.event.infoMessage, 10, message.event.docs) } } } diff --git a/Projects/Superalgos/UI/Utilities/Docs.js b/Projects/Superalgos/UI/Utilities/Docs.js index 6fada327c..81182f38d 100644 --- a/Projects/Superalgos/UI/Utilities/Docs.js +++ b/Projects/Superalgos/UI/Utilities/Docs.js @@ -654,21 +654,21 @@ function newSuperalgosUtilitiesDocs() { for (let p = 0; p < PROJECTS_ARRAY.length; p++) { let project = PROJECTS_ARRAY[p] - searchInSchema(SCHEMAS_BY_PROJECT.get(project).map.docsNodeSchema) - searchInSchema(SCHEMAS_BY_PROJECT.get(project).map.docsConceptSchema) - searchInSchema(SCHEMAS_BY_PROJECT.get(project).map.docsTopicSchema) - searchInSchema(SCHEMAS_BY_PROJECT.get(project).map.docsTutorialSchema) - searchInSchema(SCHEMAS_BY_PROJECT.get(project).map.docsReviewSchema) - searchInSchema(SCHEMAS_BY_PROJECT.get(project).map.docsBookSchema) + searchInSchema(SCHEMAS_BY_PROJECT.get(project).map.docsNodeSchema, 'Node') + searchInSchema(SCHEMAS_BY_PROJECT.get(project).map.docsConceptSchema, 'Concept') + searchInSchema(SCHEMAS_BY_PROJECT.get(project).map.docsTopicSchema, 'Topic') + searchInSchema(SCHEMAS_BY_PROJECT.get(project).map.docsTutorialSchema, 'Tutorial') + searchInSchema(SCHEMAS_BY_PROJECT.get(project).map.docsReviewSchema, 'Review') + searchInSchema(SCHEMAS_BY_PROJECT.get(project).map.docsBookSchema, 'Book') - function searchInSchema(docSchema) { + function searchInSchema(docSchema, category) { if (found === true) { return } if (docSchema.get(cleanPhrases[j]) !== undefined) { if (cleanPhrases[j] !== excludedType) { taggedText = taggedText + phrases[j].replace( cleanPhrases[j], - TAGGING_STRING_SEPARATOR + 'Node' + '|' + cleanPhrases[j] + '|' + project + TAGGING_STRING_SEPARATOR) + ' ' + TAGGING_STRING_SEPARATOR + category + '|' + cleanPhrases[j] + '|' + project + TAGGING_STRING_SEPARATOR) + ' ' } else { taggedText = taggedText + phrases[j] + ' ' }