Merge branch 'develop' of https://github.com/AAMasters/BackendServers into develop

This commit is contained in:
Julian Molina committed 2020-09-23 15:36:28 +02:00
commit 89516ded79
7 files changed
+161 -86

No files matched your search

+4 -1
View File
@@ -28,6 +28,7 @@ function newAppLoader() {
'Globals.js',
'AppSchema.js',
'DocSchema.js',
'Workspace.js',
'ChartingSpace/EdgeEditor.js',
@@ -57,7 +58,8 @@ function newAppLoader() {
'DesignSpace/Workspace/FunctionLibraries/DataMineFunctions.js',
'DesignSpace/Workspace/FunctionLibraries/DataStorageFunctions.js',
'DesignSpace/Workspace/FunctionLibraries/ChartingSpaceFunctions.js',
'DesignSpace/Workspace/FunctionLibraries/TutorialFunctions.js',
'DesignSpace/Workspace/FunctionLibraries/TutorialFunctions.js',
'DesignSpace/Workspace/FunctionLibraries/IncludesFunctions.js',
'Utilities/CoordinateTransformations.js',
'Utilities/DateRateTransformations.js',
@@ -73,6 +75,7 @@ function newAppLoader() {
'Utilities/Meshes.js',
'Utilities/NodeChildren.js',
'Utilities/Menu.js',
'Utilities/Dates.js',
'Panels/LayersPanel.js',
'Panels/UpDownButton.js',
Binary file not shown.
Binary file not shown.
Binary file not shown.
+4
View File
@@ -0,0 +1,4 @@
/*!
* Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome
* License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
*/@font-face{font-family:'FontAwesome';src:url('../Fonts/fontawesome-webfont.eot?v=4.7.0');src:url('../Fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'),url('../Fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'),url('../Fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'),url('../Fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'),url('../Fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f03Line truncated
+20 -14
View File
@@ -5,16 +5,15 @@
<title>Superalgos</title>
<meta name="description" content="Free and Open Source Crypto Trading Tools">
<link rel="stylesheet" href="main.css" type="text/css" charset="utf-8" />
<link rel="stylesheet" href="font-awasome.css" type="text/css" />
<link rel="shortcut icon" type="image/png/ico" href="Images/favicon.ico" />
<script type="text/javascript" src="WebServer/require.js"></script>
<script type="text/javascript" src="WebServer/AppPreLoader.js"></script>
<script src="externalScripts/CCapture.all.min.js"></script>
<!-- Documentation Style Sheets -->
<!--
<link rel="stylesheet" type="text/css"
href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css">
-->
<!-- -->
<script type="text/javascript">
function loadCanvas() {
try {
@@ -43,29 +42,36 @@
<div id="canvasApp"></div>
<div id="docApp" style="position:fixed; top:100000px; left:100000px">
<iframe id="docIFrame" style="border:none; " height="2000"
width="900" ></iframe>
</div> <!-- src="https://julian-molina.github.io/Documentation/" -->
width="900"></iframe>
</div> <!-- -->
<div id="textAreaDiv"></div>
<div id="inputDiv" style="font-family:saira condensed;">&nbsp;</div>
<!-- Tutorial Step Template -->
<!-- Tutorial Template Divs -->
<div id="tutorialDiv" class="tutorial-step" style="position:fixed; top:100000px; left:100000px;"></div>
<div id="tutorialFormDiv" class="tutorial-form" style="position:fixed; top:100000px; left:100000px;">
<form>
<table class="tutorial-buttonsTable">
<tr>
<td>
<label class="tutorial-font-small tutorial-stop-button" onclick="canvas.tutorialSpace.stop()" value="">Stop Tutorial</label>
<td align = "center">
<label class="tutorial-font-small tutorial-stop-button" onclick="canvas.tutorialSpace.stop()"
value="">&nbsp;&nbsp;Stop&nbsp;&nbsp;&nbsp;</label>
</td>
<td>
<label class="tutorial-font-small tutorial-skip-button" onclick="canvas.tutorialSpace.skip()" value="">Skip / Later</label>
<td align = "center">
<label class="tutorial-font-small tutorial-skip-button" onclick="canvas.tutorialSpace.skip()"
value="">&nbsp;&nbsp;Skip&nbsp;&nbsp;&nbsp;</label>
</td>
<td>
<label class="tutorial-font-small tutorial-done-button" onclick="canvas.tutorialSpace.done()" value="">Done / Next</label>
<td align = "center">
<label class="tutorial-font-small tutorial-previous-button" onclick="canvas.tutorialSpace.previous()"
value="">Previous</label>
</td>
<td align = "center">
<label class="tutorial-font-small tutorial-next-button" onclick="canvas.tutorialSpace.next()"
value="">&nbsp;&nbsp;Next&nbsp;&nbsp;&nbsp;</label>
</td>
</tr>
</table>
</form>
</form>
</div>
</body>
+133 -71
View File
@@ -454,61 +454,52 @@ exports.newWebServer = function newWebServer(EVENTS_SERVER) {
}
break
case 'IncludedNames':
case 'IncludedFileNames':
{
const fs = require('fs')
let folder
let includedNames = {
includedDataMines: [],
includedTradingMines: [],
includedTradingSystems: [],
includedSuperScripts: [],
includedTradingEngines: []
switch (requestParameters[2]) {
case 'Data-Mines': {
folder = process.env.DATA_MINES_PATH + '/'
break
}
case 'Trading-Mines': {
folder = process.env.TRADING_MINES_PATH + '/'
break
}
case 'Trading-Systems': {
folder = process.env.TRADING_SYSTEMS_PATH + '/'
break
}
case 'Trading-Engines': {
folder = process.env.TRADING_ENGINES_PATH + '/'
break
}
case 'Super-Scripts': {
folder = process.env.SUPER_SCRIPTS_PATH + '/'
break
}
case 'Tutorials': {
folder = process.env.TUTORIALS_PATH + '/'
break
}
}
folder = process.env.DATA_MINES_PATH + '/'
fs.readdir(folder, (err, files) => {
includedNames.includedDataMines = files
folder = process.env.TRADING_SYSTEMS_PATH + '/'
fs.readdir(folder, (err, files) => {
includedNames.includedTradingSystems = files
folder = process.env.SUPER_SCRIPTS_PATH + '/'
fs.readdir(folder, (err, files) => {
includedNames.includedSuperScripts = files
folder = process.env.TRADING_ENGINES_PATH + '/'
fs.readdir(folder, (err, files) => {
includedNames.includedTradingEngines = files
folder = process.env.TRADING_MINES_PATH + '/'
fs.readdir(folder, (err, files) => {
includedNames.includedTradingMines = files
respondWithContent(JSON.stringify(includedNames), response)
})
})
})
})
respondWithContent(JSON.stringify(files), response)
})
}
break
case 'AppSchema.js':
{
let fs = require('fs')
sendSchema(process.env.APP_SCHEMA_PATH, 'AppSchema', 'getAppSchema')
}
break
try {
let filePath = process.env.APP_SCHEMA_PATH + 'AppSchema.json'
fs.readFile(filePath, onFileRead)
} catch (e) {
console.log('[ERROR] Error reading the App Schema.', e)
}
function onFileRead(err, appSchema) {
if (err) {
respondWithContent(undefined, response)
} else {
let responseContent = 'function getAppSchema(){ return ' + appSchema + '}'
respondWithContent(responseContent, response)
}
}
case 'DocSchema.js':
{
sendSchema(process.env.DOC_SCHEMA_PATH, 'DocSchema', 'getDocSchema')
}
break
@@ -517,7 +508,7 @@ exports.newWebServer = function newWebServer(EVENTS_SERVER) {
let fs = require('fs')
try {
let filePath = process.env.WORKSPACE_PATH + 'Workspace.json'
let filePath = process.env.DEFAULT_WORKSPACE_PATH + '/Default.json'
fs.readFile(filePath, onFileRead)
} catch (e) {
console.log('[ERROR] Error reading the Workspace.', e)
@@ -536,30 +527,60 @@ exports.newWebServer = function newWebServer(EVENTS_SERVER) {
case 'ListWorkspaces':
{
let dirPath = process.env.MY_WORKSPACES_PATH
let allWorkspaces = []
readIncludedWorkspaces()
function readIncludedWorkspaces() {
let dirPath = process.env.WORKSPACES_PATH
try {
let fs = require('fs')
fs.readdir(dirPath, onDirRead)
try {
let fs = require('fs')
fs.readdir(dirPath, onDirRead)
function onDirRead(err, fileList) {
if (err) {
if (CONSOLE_LOG === true) { console.log('[ERROR] Error reading a directory content. filePath = ' + dirPath) }
respondWithContent(JSON.stringify(global.DEFAULT_FAIL_RESPONSE), response)
return
} else {
respondWithContent(JSON.stringify(fileList), response)
return
function onDirRead(err, fileList) {
if (err) {
if (CONSOLE_LOG === true) { console.log('[ERROR] Error reading a directory content. filePath = ' + dirPath) }
respondWithContent(JSON.stringify(global.DEFAULT_FAIL_RESPONSE), response)
return
} else {
let updatedFileList = []
for (let i = 0; i < fileList.length; i++) {
let name = 'Included -> ' + fileList[i]
updatedFileList.push(name)
}
allWorkspaces = allWorkspaces.concat(updatedFileList)
readMyWorkspaces()
return
}
}
} catch (err) {
if (CONSOLE_LOG === true) { console.log('[ERROR] Error reading a directory content. filePath = ' + dirPath) }
respondWithContent(JSON.stringify(global.DEFAULT_FAIL_RESPONSE), response)
return
}
} catch (err) {
if (CONSOLE_LOG === true) { console.log('[ERROR] Error reading a directory content. filePath = ' + dirPath) }
respondWithContent(JSON.stringify(global.DEFAULT_FAIL_RESPONSE), response)
return
}
function readMyWorkspaces() {
let dirPath = process.env.MY_WORKSPACES_PATH
try {
let fs = require('fs')
fs.readdir(dirPath, onDirRead)
function onDirRead(err, fileList) {
if (err) {
if (CONSOLE_LOG === true) { console.log('[ERROR] Error reading a directory content. filePath = ' + dirPath) }
respondWithContent(JSON.stringify(global.DEFAULT_FAIL_RESPONSE), response)
return
} else {
allWorkspaces = allWorkspaces.concat(fileList)
respondWithContent(JSON.stringify(allWorkspaces), response)
return
}
}
} catch (err) {
if (CONSOLE_LOG === true) { console.log('[ERROR] Error reading a directory content. filePath = ' + dirPath) }
respondWithContent(JSON.stringify(global.DEFAULT_FAIL_RESPONSE), response)
return
}
}
}
break
@@ -571,6 +592,14 @@ exports.newWebServer = function newWebServer(EVENTS_SERVER) {
}
break
case 'LoadIncludedWorkspace':
{
let fileName = unescape(requestParameters[2])
let filePath = process.env.WORKSPACES_PATH + '/' + fileName + '.json'
respondWithFile(filePath, response)
}
break
case 'SaveWorkspace':
{
getBody(processRequest)
@@ -609,36 +638,42 @@ exports.newWebServer = function newWebServer(EVENTS_SERVER) {
}
break
case 'DataMines':
case 'Data-Mines':
{
respondWithFile(process.env.DATA_MINES_PATH + '/' + requestParameters[2], response)
}
break
case 'TradingMines':
case 'Trading-Mines':
{
respondWithFile(process.env.TRADING_MINES_PATH + '/' + requestParameters[2], response)
}
break
case 'TradingSystems':
case 'Trading-Systems':
{
respondWithFile(process.env.TRADING_SYSTEMS_PATH + '/' + requestParameters[2], response)
}
break
case 'SuperScripts':
case 'Super-Scripts':
{
respondWithFile(process.env.SUPER_SCRIPTS_PATH + '/' + requestParameters[2], response)
}
break
case 'TradingEngines':
case 'Trading-Engines':
{
respondWithFile(process.env.TRADING_ENGINES_PATH + '/' + requestParameters[2], response)
}
break
case 'Tutorials':
{
respondWithFile(process.env.TUTORIALS_PATH + '/' + requestParameters[2], response)
}
break
case 'Storage':
{
respondWithFile(process.env.STORAGE_PATH + '/' + request.url.substring(9), response)
@@ -647,7 +682,13 @@ exports.newWebServer = function newWebServer(EVENTS_SERVER) {
case 'main.css':
{
mainCSS()
sendStyleSheet('main.css')
}
break
case 'font-awasome.css':
{
sendStyleSheet('font-awasome.css')
}
break
@@ -657,11 +698,31 @@ exports.newWebServer = function newWebServer(EVENTS_SERVER) {
}
}
function mainCSS() {
function sendSchema(filePath, fileName, functionName) {
let fs = require('fs')
try {
filePath = filePath + fileName + '.json'
fs.readFile(filePath, onFileRead)
} catch (e) {
console.log('[ERROR] Error reading the ' + fileName, e)
}
function onFileRead(err, schema) {
if (err) {
respondWithContent(undefined, response)
} else {
let responseContent = 'function ' + functionName + '(){ return ' + schema + '}'
respondWithContent(responseContent, response)
}
}
}
function sendStyleSheet(fileName) {
let fs = require('fs')
try {
let fileName = process.env.PATH_TO_WEB_SERVER + 'WebServer/main.css'
fs.readFile(fileName, onFileRead)
let filePath = process.env.PATH_TO_WEB_SERVER + 'WebServer/' + fileName
fs.readFile(filePath, onFileRead)
function onFileRead(err, file) {
try {
@@ -722,6 +783,7 @@ exports.newWebServer = function newWebServer(EVENTS_SERVER) {
if (!err) {
respondWithContent(file.toString(), response)
} else {
console.log('File requested not found: ' + fileName)
respondWithContent(undefined, response)
}
}