From 32c6ba86c90e7b7ff177001cdf9e59ab0f3ed24d Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Fri, 5 Jun 2020 11:21:12 +0200 Subject: [PATCH 1/8] Update server.js --- server.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/server.js b/server.js index 4a9cf0c44..7878b134f 100644 --- a/server.js +++ b/server.js @@ -65,6 +65,8 @@ try { WEB_SERVER.initialize() WEB_SERVER.run() + console.log("You are running Superalgos Backend Beta 6.") + } catch (err) { console.log('[ERROR] BackendServers -> Task Manager -> server -> Error = ' + err.stack) } From b6894135b3ca175f11c665e589cb3d7ff19fde04 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Tue, 16 Jun 2020 12:17:03 +0200 Subject: [PATCH 2/8] Plotting Modules --- WebServer/AppLoader.js | 15 +++++++++------ webServer.js | 6 ++++++ 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/WebServer/AppLoader.js b/WebServer/AppLoader.js index f8f02c142..b365ec9af 100644 --- a/WebServer/AppLoader.js +++ b/WebServer/AppLoader.js @@ -115,22 +115,25 @@ function newAppLoader() { 'EventsServerClient.js', - 'VideoRecorder.js', - 'Plotter.js', + 'Plotting/Plotter.js', + 'Plotting/NodesHighlights.js', + 'Plotting/NodesErrors.js', + 'Plotting/NodesValues.js', + 'Plotting/NodesStatus.js', + 'Plotting/NodesProgress.js', + 'Plotting/NodesRunning.js', + 'LegacyPlotter.js', 'PlotterPanel.js', + 'VideoRecorder.js', 'ProductStorage.js', - 'SplashScreen.js', 'Canvas.js', 'EventHandler.js', 'Frame.js', - 'Animation.js', - 'Container.js', - 'Utilities.js', 'PostLoader.js' ]) diff --git a/webServer.js b/webServer.js index a1463db4b..dabd67ed9 100644 --- a/webServer.js +++ b/webServer.js @@ -325,6 +325,12 @@ exports.newWebServer = function newWebServer(EVENTS_SERVER) { } break + case 'Plotting': // This means the Plotting folder. + { + respondWithFile(process.env.PATH_TO_CANVAS_APP + '/Plotting/' + requestParameters[2], response) + } + break + case 'TopSpace': // This means the TopSpace folder. { respondWithFile(process.env.PATH_TO_CANVAS_APP + '/TopSpace/' + requestParameters[2], response) From 98fb931003cb5e908f4a9c7da699cd8fbdb71c59 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Tue, 16 Jun 2020 19:21:11 +0200 Subject: [PATCH 3/8] Update AppLoader.js --- WebServer/AppLoader.js | 1 + 1 file changed, 1 insertion(+) diff --git a/WebServer/AppLoader.js b/WebServer/AppLoader.js index b365ec9af..fd3fba8e0 100644 --- a/WebServer/AppLoader.js +++ b/WebServer/AppLoader.js @@ -60,6 +60,7 @@ function newAppLoader() { 'Utilities/DrawPrint.js', 'Utilities/LoadSaveFrame.js', 'Utilities/NodeConfig.js', + 'Utilities/HiriarchyMap.js', 'Panels/LayersPanel.js', 'Panels/UpDownButton.js', From c12e8067b69a45750c26f8bc41d53c6443ba0872 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Wed, 17 Jun 2020 14:13:29 +0200 Subject: [PATCH 4/8] Update AppLoader.js --- WebServer/AppLoader.js | 1 + 1 file changed, 1 insertion(+) diff --git a/WebServer/AppLoader.js b/WebServer/AppLoader.js index fd3fba8e0..61ec09e2b 100644 --- a/WebServer/AppLoader.js +++ b/WebServer/AppLoader.js @@ -123,6 +123,7 @@ function newAppLoader() { 'Plotting/NodesStatus.js', 'Plotting/NodesProgress.js', 'Plotting/NodesRunning.js', + 'Plotting/RecordValues.js', 'LegacyPlotter.js', 'PlotterPanel.js', From e8460bb84c681c9b5f4a90e6d3d3456a0495085d Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Sat, 27 Jun 2020 14:53:03 +0200 Subject: [PATCH 5/8] Announcements Plotted at Trading System --- WebServer/AppLoader.js | 1 + 1 file changed, 1 insertion(+) diff --git a/WebServer/AppLoader.js b/WebServer/AppLoader.js index 61ec09e2b..ad9f15f1f 100644 --- a/WebServer/AppLoader.js +++ b/WebServer/AppLoader.js @@ -123,6 +123,7 @@ function newAppLoader() { 'Plotting/NodesStatus.js', 'Plotting/NodesProgress.js', 'Plotting/NodesRunning.js', + 'Plotting/NodesAnnouncements.js', 'Plotting/RecordValues.js', 'LegacyPlotter.js', From 0c3396a9a77255936c51688613ab4ad38e707882 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Thu, 23 Jul 2020 13:17:51 +0200 Subject: [PATCH 6/8] Update AppLoader.js --- WebServer/AppLoader.js | 33 ++++++++++++--------------------- 1 file changed, 12 insertions(+), 21 deletions(-) diff --git a/WebServer/AppLoader.js b/WebServer/AppLoader.js index ad9f15f1f..8ef1b92ae 100644 --- a/WebServer/AppLoader.js +++ b/WebServer/AppLoader.js @@ -19,14 +19,14 @@ function newAppLoader() { let plotters let modulesArray = [] - + plotters = defaultPlotters() - + modulesArray = modulesArray.concat([ 'ChartingSpace/Viewport.js', - + 'Globals.js', - + 'AppSchema.js', 'Workspace.js', @@ -44,16 +44,16 @@ function newAppLoader() { 'DesignSpace/Workspace/FunctionLibraries/NodeDeleter.js', 'DesignSpace/Workspace/FunctionLibraries/ProtocolNode.js', 'DesignSpace/Workspace/FunctionLibraries/NodeCloning.js', - 'DesignSpace/Workspace/FunctionLibraries/NodeChildren.js', + 'DesignSpace/Workspace/FunctionLibraries/NodeChildren.js', 'DesignSpace/Workspace/FunctionLibraries/TaskFunctions.js', 'DesignSpace/Workspace/FunctionLibraries/SessionFunctions.js', 'DesignSpace/Workspace/FunctionLibraries/ShortcutKeys.js', 'DesignSpace/Workspace/FunctionLibraries/OnFocus.js', 'DesignSpace/Workspace/FunctionLibraries/SuperScripts.js', 'DesignSpace/Workspace/FunctionLibraries/CCXTFunctions.js', - 'DesignSpace/Workspace/FunctionLibraries/WebhookFunctions.js', + 'DesignSpace/Workspace/FunctionLibraries/WebhookFunctions.js', 'DesignSpace/Workspace/FunctionLibraries/DependenciesFilter.js', - + 'Utilities/CoordinateTransformations.js', 'Utilities/DateRateTransformations.js', 'Utilities/Download.js', @@ -68,7 +68,7 @@ function newAppLoader() { 'Panels/Layer.js', 'Panels/PlotterPanel.js', 'Panels/PanelsVisibleButton.js', - + 'SideSpace/SidePanelTab.js', 'SideSpace/ListView.js', 'SideSpace/ListItem.js', @@ -98,7 +98,7 @@ function newAppLoader() { 'FloatingSpace/CircularMenuItem.js', 'FloatingSpace/CircularProgressBar.js', 'FloatingSpace/BusyProgressBar.js', - 'FloatingSpace/CodeEditor.js', + 'FloatingSpace/CodeEditor.js', 'FloatingSpace/ConfigEditor.js', 'FloatingSpace/ConditionEditor.js', 'FloatingSpace/FormulaEditor.js', @@ -109,7 +109,7 @@ function newAppLoader() { 'Scales/TimeFrameScale.js', 'Scales/Commons.js', 'Scales/AutoScaleButton.js', - + 'CockpitSpace/AssetBalances.js', 'CockpitSpace/Speedometer.js', 'CockpitSpace/FullScreen.js', @@ -187,23 +187,14 @@ function newAppLoader() { } function defaultPlotters() { - return [ + return [ 'Plotters/Masters/Plotters-Candles-Volumes/Candles.js', 'Plotters/Masters/Plotters-Candles-Volumes/CandlePanel.js', 'Plotters/Masters/Plotters-Candles-Volumes/Volumes.js', 'Plotters/Masters/Plotters-Candles-Volumes/VolumePanel.js', 'Plotters/Masters/Plotters-Bollinger-Bands/BollingerBands.js', 'Plotters/Masters/Plotters-Bollinger-Bands/BollingerBandsPanel.js', - 'Plotters/Masters/Plotters-Bollinger-Bands/PercentageBandwidth.js', - 'Plotters/TradingEngines/Plotters-Trading-Simulation/TradingSimulation.js', - 'Plotters/TradingEngines/Plotters-Trading-Simulation/TradingSimulationAssetBalancesPanel.js', - 'Plotters/TradingEngines/Plotters-Trading-Simulation/TradingSimulationCurrentPositionPanel.js', - 'Plotters/TradingEngines/Plotters-Trading-Simulation/TradingSimulationEpisodePanel.js', - 'Plotters/TradingEngines/Plotters-Trading-Simulation/Conditions.js', - 'Plotters/TradingEngines/Plotters-Trading-Simulation/Strategies.js', - 'Plotters/TradingEngines/Plotters-Trading-Simulation/Trades.js', - 'Plotters/TradingEngines/Plotters-Trading-Simulation/SimulationExecution.js', - 'Plotters/TradingEngines/Plotters-Trading-Simulation/SimulationExecutionPanel.js' + 'Plotters/Masters/Plotters-Bollinger-Bands/PercentageBandwidth.js' ] } From 29792e0920cf8be9c57b612921f981e6e1e9f77d Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Sat, 25 Jul 2020 09:16:16 +0200 Subject: [PATCH 7/8] Internet Independent --- WebServer/Fonts/Kit/generator_config.txt | 5 + .../sairacondensed-regular-demo - Copy.html | 1316 +++++++++++++++++ .../Kit/sairacondensed-regular-demo.html | 27 + .../Kit/sairacondensed-regular-webfont.woff | Bin 0 -> 26248 bytes .../Kit/sairacondensed-regular-webfont.woff2 | Bin 0 -> 20104 bytes .../Kit/specimen_files/grid_12-825-55-15.css | 129 ++ .../specimen_files/specimen_stylesheet.css | 396 +++++ WebServer/Fonts/Kit/stylesheet.css | 12 + WebServer/Fonts/Saira-Condensed.woff2 | Bin 0 -> 17000 bytes WebServer/Fonts/Saira.woff2 | Bin 0 -> 17096 bytes WebServer/index.html | 44 +- WebServer/main.css | 16 + webServer.js | 202 ++- 13 files changed, 2041 insertions(+), 106 deletions(-) create mode 100644 WebServer/Fonts/Kit/generator_config.txt create mode 100644 WebServer/Fonts/Kit/sairacondensed-regular-demo - Copy.html create mode 100644 WebServer/Fonts/Kit/sairacondensed-regular-demo.html create mode 100644 WebServer/Fonts/Kit/sairacondensed-regular-webfont.woff create mode 100644 WebServer/Fonts/Kit/sairacondensed-regular-webfont.woff2 create mode 100644 WebServer/Fonts/Kit/specimen_files/grid_12-825-55-15.css create mode 100644 WebServer/Fonts/Kit/specimen_files/specimen_stylesheet.css create mode 100644 WebServer/Fonts/Kit/stylesheet.css create mode 100644 WebServer/Fonts/Saira-Condensed.woff2 create mode 100644 WebServer/Fonts/Saira.woff2 create mode 100644 WebServer/main.css diff --git a/WebServer/Fonts/Kit/generator_config.txt b/WebServer/Fonts/Kit/generator_config.txt new file mode 100644 index 000000000..81e64f6b8 --- /dev/null +++ b/WebServer/Fonts/Kit/generator_config.txt @@ -0,0 +1,5 @@ +# Font Squirrel Font-face Generator Configuration File +# Upload this file to the generator to recreate the settings +# you used to create these fonts. + +{"mode":"optimal","formats":["woff","woff2"],"tt_instructor":"default","fix_gasp":"xy","fix_vertical_metrics":"Y","metrics_ascent":"","metrics_descent":"","metrics_linegap":"","add_spaces":"Y","add_hyphens":"Y","fallback":"none","fallback_custom":"100","options_subset":"basic","subset_custom":"","subset_custom_range":"","subset_ot_features_list":"","css_stylesheet":"stylesheet.css","filename_suffix":"-webfont","emsquare":"2048","spacing_adjustment":"0"} \ No newline at end of file diff --git a/WebServer/Fonts/Kit/sairacondensed-regular-demo - Copy.html b/WebServer/Fonts/Kit/sairacondensed-regular-demo - Copy.html new file mode 100644 index 000000000..1caecbc5c --- /dev/null +++ b/WebServer/Fonts/Kit/sairacondensed-regular-demo - Copy.html @@ -0,0 +1,1316 @@ + + + + + + + + + + + + + + Saira Condensed Regular Specimen + + + + + + +
+ + + +
+ + +
+ +
+
+
AaBb
+
+
+ +
+
+ A​B​C​D​E​F​G​H​I​J​K​L​M​N​O​P​Q​R​S​T​U​V​W​X​Y​Z​a​b​c​d​e​f​g​h​i​j​k​l​m​n​o​p​q​r​s​t​u​v​w​x​y​z​1​2​3​4​5​6​7​8​9​0​&​.​,​?​!​@​(​)​#​$​%​*​+​-​=​:​; +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
10 + abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ +
11 + abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ +
12 + abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ +
13 + abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ +
14 + abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ +
16 + abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ +
18 + abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ +
20 + abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ +
24 + abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ +
30 + abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ +
36 + abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ +
48 + abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ +
60 + abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ +
72 + abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ +
90 + abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ +
+ +
+ +
+ + + +
+ + +
+
+ ◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼◼body +
+
body
+
body
+
body
+
+
+ bodySaira Condensed Regular +
+
+ bodyArial +
+
+ bodyVerdana +
+
+ bodyGeorgia +
+ + + +
+ + +
+ +
+

10.Aenean lacinia bibendum nulla sed consectetur. Fusce dapibus, + tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet + risus. Nullam id dolor id nibh ultricies vehicula ut id elit. Cum sociis natoque penatibus + et magnis dis parturient montes, nascetur ridiculus mus. Nulla vitae elit libero, a pharetra + augue.

+ +
+
+

11.Aenean lacinia bibendum nulla sed consectetur. Fusce dapibus, + tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet + risus. Nullam id dolor id nibh ultricies vehicula ut id elit. Cum sociis natoque penatibus + et magnis dis parturient montes, nascetur ridiculus mus. Nulla vitae elit libero, a pharetra + augue.

+ +
+
+

12.Aenean lacinia bibendum nulla sed consectetur. Fusce dapibus, + tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet + risus. Nullam id dolor id nibh ultricies vehicula ut id elit. Cum sociis natoque penatibus + et magnis dis parturient montes, nascetur ridiculus mus. Nulla vitae elit libero, a pharetra + augue.

+ +
+
+

13.Aenean lacinia bibendum nulla sed consectetur. Fusce dapibus, + tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet + risus. Nullam id dolor id nibh ultricies vehicula ut id elit. Cum sociis natoque penatibus + et magnis dis parturient montes, nascetur ridiculus mus. Nulla vitae elit libero, a pharetra + augue.

+ +
+
+ +
+
+
+

14.Aenean lacinia bibendum nulla sed consectetur. Fusce dapibus, + tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet + risus. Nullam id dolor id nibh ultricies vehicula ut id elit. Cum sociis natoque penatibus + et magnis dis parturient montes, nascetur ridiculus mus. Nulla vitae elit libero, a pharetra + augue.

+ +
+
+

16.Aenean lacinia bibendum nulla sed consectetur. Fusce dapibus, + tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet + risus. Nullam id dolor id nibh ultricies vehicula ut id elit. Cum sociis natoque penatibus + et magnis dis parturient montes, nascetur ridiculus mus. Nulla vitae elit libero, a pharetra + augue.

+ +
+
+

18.Aenean lacinia bibendum nulla sed consectetur. Fusce dapibus, + tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet + risus. Nullam id dolor id nibh ultricies vehicula ut id elit. Cum sociis natoque penatibus + et magnis dis parturient montes, nascetur ridiculus mus. Nulla vitae elit libero, a pharetra + augue.

+ +
+ +
+ +
+ +
+
+

20.Aenean lacinia bibendum nulla sed consectetur. Fusce dapibus, + tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet + risus. Nullam id dolor id nibh ultricies vehicula ut id elit. Cum sociis natoque penatibus + et magnis dis parturient montes, nascetur ridiculus mus. Nulla vitae elit libero, a pharetra + augue.

+
+
+

24.Aenean lacinia bibendum nulla sed consectetur. Fusce dapibus, + tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet + risus. Nullam id dolor id nibh ultricies vehicula ut id elit. Cum sociis natoque penatibus + et magnis dis parturient montes, nascetur ridiculus mus. Nulla vitae elit libero, a pharetra + augue.

+
+ +
+ +
+ +
+
+

30.Aenean lacinia bibendum nulla sed consectetur. Fusce dapibus, + tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet + risus. Nullam id dolor id nibh ultricies vehicula ut id elit. Cum sociis natoque penatibus + et magnis dis parturient montes, nascetur ridiculus mus. Nulla vitae elit libero, a pharetra + augue.

+
+
+ +
+ + + +
+
+

10.Aenean lacinia bibendum nulla sed consectetur. Fusce dapibus, + tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet + risus. Nullam id dolor id nibh ultricies vehicula ut id elit. Cum sociis natoque penatibus + et magnis dis parturient montes, nascetur ridiculus mus. Nulla vitae elit libero, a pharetra + augue.

+ +
+
+

11.Aenean lacinia bibendum nulla sed consectetur. Fusce dapibus, + tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet + risus. Nullam id dolor id nibh ultricies vehicula ut id elit. Cum sociis natoque penatibus + et magnis dis parturient montes, nascetur ridiculus mus. Nulla vitae elit libero, a pharetra + augue.

+ +
+
+

12.Aenean lacinia bibendum nulla sed consectetur. Fusce dapibus, + tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet + risus. Nullam id dolor id nibh ultricies vehicula ut id elit. Cum sociis natoque penatibus + et magnis dis parturient montes, nascetur ridiculus mus. Nulla vitae elit libero, a pharetra + augue.

+ +
+
+

13.Aenean lacinia bibendum nulla sed consectetur. Fusce dapibus, + tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet + risus. Nullam id dolor id nibh ultricies vehicula ut id elit. Cum sociis natoque penatibus + et magnis dis parturient montes, nascetur ridiculus mus. Nulla vitae elit libero, a pharetra + augue.

+ +
+
+ +
+ +
+
+

14.Aenean lacinia bibendum nulla sed consectetur. Fusce dapibus, + tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet + risus. Nullam id dolor id nibh ultricies vehicula ut id elit. Cum sociis natoque penatibus + et magnis dis parturient montes, nascetur ridiculus mus. Nulla vitae elit libero, a pharetra + augue.

+ +
+
+

16.Aenean lacinia bibendum nulla sed consectetur. Fusce dapibus, + tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet + risus. Nullam id dolor id nibh ultricies vehicula ut id elit. Cum sociis natoque penatibus + et magnis dis parturient montes, nascetur ridiculus mus. Nulla vitae elit libero, a pharetra + augue.

+ +
+
+

18.Aenean lacinia bibendum nulla sed consectetur. Fusce dapibus, + tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet + risus. Nullam id dolor id nibh ultricies vehicula ut id elit. Cum sociis natoque penatibus + et magnis dis parturient montes, nascetur ridiculus mus. Nulla vitae elit libero, a pharetra + augue.

+ +
+
+ +
+ +
+
+

20.Aenean lacinia bibendum nulla sed consectetur. Fusce dapibus, + tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet + risus. Nullam id dolor id nibh ultricies vehicula ut id elit. Cum sociis natoque penatibus + et magnis dis parturient montes, nascetur ridiculus mus. Nulla vitae elit libero, a pharetra + augue.

+
+
+

24.Aenean lacinia bibendum nulla sed consectetur. Fusce dapibus, + tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet + risus. Nullam id dolor id nibh ultricies vehicula ut id elit. Cum sociis natoque penatibus + et magnis dis parturient montes, nascetur ridiculus mus. Nulla vitae elit libero, a pharetra + augue.

+
+ +
+ +
+ +
+
+

30.Aenean lacinia bibendum nulla sed consectetur. Fusce dapibus, + tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet + risus. Nullam id dolor id nibh ultricies vehicula ut id elit. Cum sociis natoque penatibus + et magnis dis parturient montes, nascetur ridiculus mus. Nulla vitae elit libero, a pharetra + augue.

+
+
+ +
+ + + + +
+ +
+ +
+ +
+

Lorem Ipsum Dolor

+

Etiam porta sem malesuada magna mollis euismod

+ + +
+
+
+
+

Donec sed odio dui. Morbi leo risus, porta ac consectetur ac, vestibulum at + eros. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum + massa justo sit amet risus.

+ + +

Pellentesque ornare sem

+ +

Maecenas sed diam eget risus varius blandit sit amet non magna. Maecenas faucibus mollis + interdum. Donec ullamcorper nulla non metus auctor fringilla. Nullam id dolor id nibh + ultricies vehicula ut id elit. Nullam id dolor id nibh ultricies vehicula ut id elit.

+ +

Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum. Lorem ipsum + dolor sit amet, consectetur adipiscing elit. Cum sociis natoque penatibus et magnis dis + parturient montes, nascetur ridiculus mus.

+ +

Nulla vitae elit libero, a pharetra augue. Praesent commodo cursus magna, vel scelerisque + nisl consectetur et. Aenean lacinia bibendum nulla sed consectetur.

+ +

Nullam quis risus eget urna mollis ornare vel eu leo. Nullam quis risus eget urna mollis + ornare vel eu leo. Maecenas sed diam eget risus varius blandit sit amet non magna. Donec + ullamcorper nulla non metus auctor fringilla.

+ +

Cras mattis consectetur

+ +

Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum. Aenean lacinia + bibendum nulla sed consectetur. Integer posuere erat a ante venenatis dapibus posuere velit + aliquet. Cras mattis consectetur purus sit amet fermentum.

+ +

Nullam id dolor id nibh ultricies vehicula ut id elit. Nullam quis risus eget urna mollis + ornare vel eu leo. Cras mattis consectetur purus sit amet fermentum.

+
+ + +
+ +
+ + + + + + +
+
+
+ +

Language Support

+

The subset of Saira Condensed Regular in this kit supports the following languages:
+ + Albanian, Basque, Breton, Chamorro, Danish, Dutch, English, Faroese, Finnish, French, + Frisian, Galician, German, Icelandic, Italian, Malagasy, Norwegian, Portuguese, Spanish, + Alsatian, Aragonese, Arapaho, Arrernte, Asturian, Aymara, Bislama, Cebuano, Corsican, + Fijian, French_creole, Genoese, Gilbertese, Greenlandic, Haitian_creole, Hiligaynon, Hmong, + Hopi, Ibanag, Iloko_ilokano, Indonesian, Interglossa_glosa, Interlingua, Irish_gaelic, + Jerriais, Lojban, Lombard, Luxembourgeois, Manx, Mohawk, Norfolk_pitcairnese, Occitan, + Oromo, Pangasinan, Papiamento, Piedmontese, Potawatomi, Rhaeto-romance, Romansh, Rotokas, + Sami_lule, Samoan, Sardinian, Scots_gaelic, Seychelles_creole, Shona, Sicilian, Somali, + Southern_ndebele, Swahili, Swati_swazi, Tagalog_filipino_pilipino, Tetum, Tok_pisin, + Uyghur_latinized, Volapuk, Walloon, Warlpiri, Xhosa, Yapese, Zulu, Latinbasic, Ubasic, Demo +

+

Glyph Chart

+

The subset of Saira Condensed Regular in this kit includes all the glyphs listed below. + Unicode entities are included above each glyph to help you insert individual characters into + your layout.

+
+ +
+



+
+
+

 

+
+
+

!

! +
+
+

"

" +
+
+

#

# +
+
+

$

$ +
+
+

%

% +
+
+

&

& +
+
+

'

' +
+
+

(

( +
+
+

)

) +
+
+

*

* +
+
+

+

+ +
+
+

,

, +
+
+

-

- +
+
+

.

. +
+
+

/

/ +
+
+

0

0 +
+
+

1

1 +
+
+

2

2 +
+
+

3

3 +
+
+

4

4 +
+
+

5

5 +
+
+

6

6 +
+
+

7

7 +
+
+

8

8 +
+
+

9

9 +
+
+

:

: +
+
+

&#59;

; +
+
+

<

< +
+
+

&#61;

= +
+
+

&#62;

> +
+
+

&#63;

? +
+
+

&#64;

@ +
+
+

&#65;

A +
+
+

&#66;

B +
+
+

&#67;

C +
+
+

&#68;

D +
+
+

&#69;

E +
+
+

&#70;

F +
+
+

&#71;

G +
+
+

&#72;

H +
+
+

&#73;

I +
+
+

&#74;

J +
+
+

&#75;

K +
+
+

&#76;

L +
+
+

&#77;

M +
+
+

&#78;

N +
+
+

&#79;

O +
+
+

&#80;

P +
+
+

&#81;

Q +
+
+

&#82;

R +
+
+

&#83;

S +
+
+

&#84;

T +
+
+

&#85;

U +
+
+

&#86;

V +
+
+

&#87;

W +
+
+

&#88;

X +
+
+

&#89;

Y +
+
+

&#90;

Z +
+
+

&#91;

[ +
+
+

&#92;

\ +
+
+

&#93;

] +
+
+

&#94;

^ +
+
+

&#95;

_ +
+
+

&#96;

` +
+
+

&#97;

a +
+
+

&#98;

b +
+
+

&#99;

c +
+
+

&#100;

d +
+
+

&#101;

e +
+
+

&#102;

f +
+
+

&#103;

g +
+
+

&#104;

h +
+
+

&#105;

i +
+
+

&#106;

j +
+
+

&#107;

k +
+
+

&#108;

l +
+
+

&#109;

m +
+
+

&#110;

n +
+
+

&#111;

o +
+
+

&#112;

p +
+
+

&#113;

q +
+
+

&#114;

r +
+
+

&#115;

s +
+
+

&#116;

t +
+
+

&#117;

u +
+
+

&#118;

v +
+
+

&#119;

w +
+
+

&#120;

x +
+
+

&#121;

y +
+
+

&#122;

z +
+
+

&#123;

{ +
+
+

&#124;

| +
+
+

&#125;

} +
+
+

&#126;

~ +
+
+

&#160;

  +
+
+

&#161;

¡ +
+
+

&#162;

¢ +
+
+

&#163;

£ +
+
+

&#164;

¤ +
+
+

&#165;

¥ +
+
+

&#166;

¦ +
+
+

&#167;

§ +
+
+

&#168;

¨ +
+
+

&#169;

© +
+
+

&#170;

ª +
+
+

&#171;

« +
+
+

&#172;

¬ +
+
+

&#173;

­ +
+
+

&#174;

® +
+
+

&#175;

¯ +
+
+

&#176;

° +
+
+

&#177;

± +
+
+

&#178;

² +
+
+

&#179;

³ +
+
+

&#180;

´ +
+
+

&#181;

µ +
+
+

&#182;

¶ +
+
+

&#183;

· +
+
+

&#184;

¸ +
+
+

&#185;

¹ +
+
+

&#186;

º +
+
+

&#187;

» +
+
+

&#188;

¼ +
+
+

&#189;

½ +
+
+

&#190;

¾ +
+
+

&#191;

¿ +
+
+

&#192;

À +
+
+

&#193;

Á +
+
+

&#194;

 +
+
+

&#195;

à +
+
+

&#196;

Ä +
+
+

&#197;

Å +
+
+

&#198;

Æ +
+
+

&#199;

Ç +
+
+

&#200;

È +
+
+

&#201;

É +
+
+

&#202;

Ê +
+
+

&#203;

Ë +
+
+

&#204;

Ì +
+
+

&#205;

Í +
+
+

&#206;

Î +
+
+

&#207;

Ï +
+
+

&#208;

Ð +
+
+

&#209;

Ñ +
+
+

&#210;

Ò +
+
+

&#211;

Ó +
+
+

&#212;

Ô +
+
+

&#213;

Õ +
+
+

&#214;

Ö +
+
+

&#215;

× +
+
+

&#216;

Ø +
+
+

&#217;

Ù +
+
+

&#218;

Ú +
+
+

&#219;

Û +
+
+

&#220;

Ü +
+
+

&#221;

Ý +
+
+

&#222;

Þ +
+
+

&#223;

ß +
+
+

&#224;

à +
+
+

&#225;

á +
+
+

&#226;

â +
+
+

&#227;

ã +
+
+

&#228;

ä +
+
+

&#229;

å +
+
+

&#230;

æ +
+
+

&#231;

ç +
+
+

&#232;

è +
+
+

&#233;

é +
+
+

&#234;

ê +
+
+

&#235;

ë +
+
+

&#236;

ì +
+
+

&#237;

í +
+
+

&#238;

î +
+
+

&#239;

ï +
+
+

&#240;

ð +
+
+

&#241;

ñ +
+
+

&#242;

ò +
+
+

&#243;

ó +
+
+

&#244;

ô +
+
+

&#245;

õ +
+
+

&#246;

ö +
+
+

&#247;

÷ +
+
+

&#248;

ø +
+
+

&#249;

ù +
+
+

&#250;

ú +
+
+

&#251;

û +
+
+

&#252;

ü +
+
+

&#253;

ý +
+
+

&#254;

þ +
+
+

&#255;

ÿ +
+
+

&#338;

Œ +
+
+

&#339;

œ +
+
+

&#376;

Ÿ +
+
+

&#710;

ˆ +
+
+

&#732;

˜ +
+
+

&#8192;

  +
+
+

&#8193;

  +
+
+

&#8194;

  +
+
+

&#8195;

  +
+
+

&#8196;

  +
+
+

&#8197;

  +
+
+

&#8198;

  +
+
+

&#8199;

  +
+
+

&#8200;

  +
+
+

&#8201;

  +
+
+

&#8202;

  +
+
+

&#8208;

‐ +
+
+

&#8209;

‑ +
+
+

&#8210;

‒ +
+
+

&#8211;

– +
+
+

&#8212;

— +
+
+

&#8216;

‘ +
+
+

&#8217;

’ +
+
+

&#8218;

‚ +
+
+

&#8220;

“ +
+
+

&#8221;

” +
+
+

&#8222;

„ +
+
+

&#8226;

• +
+
+

&#8230;

… +
+
+

&#8239;

  +
+
+

&#8249;

‹ +
+
+

&#8250;

› +
+
+

&#8287;

  +
+
+

&#8364;

€ +
+
+

&#8482;

™ +
+
+

&#9724;

◼ +
+
+

&#64257;

fi +
+
+

&#64258;

fl +
+
+
+ + +
+
+ + +
+ +
+ +
+
+
+

Installing Webfonts

+ +

Webfonts are supported by all major browser platforms but not all in the same way. There are + currently four different font formats that must be included in order to target all browsers. + This includes TTF, WOFF, EOT and SVG.

+ +

1. Upload your webfonts

+

You must upload your webfont kit to your website. They should be in or near the same + directory as your CSS files.

+ +

2. Include the webfont stylesheet

+

A special CSS @font-face declaration helps the various browsers select the appropriate font + it needs without causing you a bunch of headaches. Learn more about this syntax by reading + the Fontspring + blog post about it. The code for it is as follows:

+ + + +@font-face{ + font-family: 'MyWebFont'; + src: url('WebFont.eot'); + src: url('WebFont.eot?#iefix') format('embedded-opentype'), + url('WebFont.woff') format('woff'), + url('WebFont.ttf') format('truetype'), + url('WebFont.svg#webfont') format('svg'); +} + + +

We've already gone ahead and generated the code for you. All you have to do is link to the + stylesheet in your HTML, like this:

+ <link rel="stylesheet" href="stylesheet.css" type="text/css" charset="utf-8" /> + +

3. Modify your own stylesheet

+

To take advantage of your new fonts, you must tell your stylesheet to use them. Look at the + original @font-face declaration above and find the property called "font-family." The name + linked there will be what you use to reference the font. Prepend that webfont name to the + font stack in the "font-family" property, inside the selector you want to change. For + example:

+ p { font-family: 'WebFont', Arial, sans-serif; } + +

4. Test

+

Getting webfonts to work cross-browser can be tricky. Use the information in the + sidebar to help you if you find that fonts aren't loading in a particular browser.

+
+ + +
+ +
+ +
+ +
+ + + \ No newline at end of file diff --git a/WebServer/Fonts/Kit/sairacondensed-regular-demo.html b/WebServer/Fonts/Kit/sairacondensed-regular-demo.html new file mode 100644 index 000000000..140baf086 --- /dev/null +++ b/WebServer/Fonts/Kit/sairacondensed-regular-demo.html @@ -0,0 +1,27 @@ + + + + + + + + +
+ + + +
+ + + \ No newline at end of file diff --git a/WebServer/Fonts/Kit/sairacondensed-regular-webfont.woff b/WebServer/Fonts/Kit/sairacondensed-regular-webfont.woff new file mode 100644 index 0000000000000000000000000000000000000000..15e6a364dce97855ee77e4669018d13cf8e9f3d1 GIT binary patch literal 26248 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 TMy2K$8CyLiB;pG_J5Y@P{aCy{ literal 0 HcmV?d00001 diff --git a/WebServer/Fonts/Kit/sairacondensed-regular-webfont.woff2 b/WebServer/Fonts/Kit/sairacondensed-regular-webfont.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..3a60a7af22fd4616d477e162e0070ea68378dfe1 GIT binary patch literal 20104 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 - + Superalgos - - - - - - @@ -22,24 +14,14 @@ - + style="overflow:hidden; background: url(Images/superalgos-platform.jpg); background-size: cover;" + onresize="onResize()">
 
- + \ No newline at end of file diff --git a/WebServer/main.css b/WebServer/main.css new file mode 100644 index 000000000..ade4c347a --- /dev/null +++ b/WebServer/main.css @@ -0,0 +1,16 @@ +/* latin */ +@font-face { + font-family: 'Saira'; + font-style: normal; + font-weight: 300; + src: local('Saira Light'), local('Saira-Light'), url(http://localhost:WEB_SERVER_PORT/Fonts/Saira.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +/* latin */ +@font-face { + font-family: 'Saira Condensed'; + font-style: normal; + font-weight: 300; + src: local('Saira Condensed Light'), local('SairaCondensed-Light'), url(http://localhost:WEB_SERVER_PORT/Fonts/Saira-Condensed.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} \ No newline at end of file diff --git a/webServer.js b/webServer.js index dabd67ed9..2506ccb84 100644 --- a/webServer.js +++ b/webServer.js @@ -83,22 +83,6 @@ exports.newWebServer = function newWebServer(EVENTS_SERVER) { let requestParameters = request.url.split('/') - if (requestParameters[1].indexOf('index.html') >= 0) { - /* - We use this to solve the problem when someone is arriving to the site with a sessionToken in the queryString. We extract here that - token, that will be sent later embedded into the HTML code, so that it can enter into the stardard circuit where any site can put - the sessionToken into their HTML code and from there the Browser app will log the user in. - */ - - let queryString = requestParameters[1].split('?') - - requestParameters[1] = '' - requestParameters[2] = queryString[1] - homePage() - - return - } - requestParameters = request.url.split('?') // Remove version information requestParameters = requestParameters[0].split('/') @@ -185,58 +169,19 @@ exports.newWebServer = function newWebServer(EVENTS_SERVER) { case 'Webhook': { - switch (requestParameters[2]) { // switch by command - case 'Fetch-Messages': { - let exchange = requestParameters[3] - let market = requestParameters[4] - - /* Some validations */ - if (exchange === undefined) { - console.log('[WARN] webServer -> Webhook -> Fetch-Messages -> Message with no Exchange received -> messageReceived = ' + messageReceived) - respondWithContent(JSON.stringify(global.DEFAULT_FAIL_RESPONSE), response) - return - } - if (market === undefined) { - console.log('[WARN] webServer -> Webhook -> Fetch-Messages -> Message with no market received -> messageReceived = ' + messageReceived) - respondWithContent(JSON.stringify(global.DEFAULT_FAIL_RESPONSE), response) - return - } - - let key = exchange + '-' + market - - let webhookMessages = webhook.get(key) - if (webhookMessages === undefined) { - webhookMessages = [] - } - - respondWithContent(JSON.stringify(webhookMessages), response) - webhookMessages = [] - - webhook.set(key, webhookMessages) - break - } - case 'New-Message': { - getBody(processRequest) - - function processRequest(messageReceived) { - let timestamp = (new Date()).valueOf() - let source = requestParameters[3] - let exchange = requestParameters[4] - let market = requestParameters[5] + switch (requestParameters[2]) { // switch by command + case 'Fetch-Messages': { + let exchange = requestParameters[3] + let market = requestParameters[4] /* Some validations */ - if (source === undefined) { - console.log('[WARN] webServer -> Webhook -> New-Message -> Message with no Source received -> messageReceived = ' + messageReceived) - respondWithContent(JSON.stringify(global.DEFAULT_FAIL_RESPONSE), response) - return - } if (exchange === undefined) { - console.log('[WARN] webServer -> Webhook -> New-Message -> Message with no Exchange received -> messageReceived = ' + messageReceived) + console.log('[WARN] webServer -> Webhook -> Fetch-Messages -> Message with no Exchange received -> messageReceived = ' + messageReceived) respondWithContent(JSON.stringify(global.DEFAULT_FAIL_RESPONSE), response) return } if (market === undefined) { - console.log('[WARN] webServer -> Webhook -> New-Message -> Message with no market received -> messageReceived = ' + messageReceived) + console.log('[WARN] webServer -> Webhook -> Fetch-Messages -> Message with no market received -> messageReceived = ' + messageReceived) respondWithContent(JSON.stringify(global.DEFAULT_FAIL_RESPONSE), response) return } @@ -248,17 +193,56 @@ exports.newWebServer = function newWebServer(EVENTS_SERVER) { webhookMessages = [] } - webhookMessages.push([timestamp, source, messageReceived]) - webhook.set(key, webhookMessages) + respondWithContent(JSON.stringify(webhookMessages), response) + webhookMessages = [] - respondWithContent(JSON.stringify(global.DEFAULT_OK_RESPONSE), response) + webhook.set(key, webhookMessages) + break + } + case 'New-Message': { + getBody(processRequest) + + function processRequest(messageReceived) { + let timestamp = (new Date()).valueOf() + let source = requestParameters[3] + let exchange = requestParameters[4] + let market = requestParameters[5] + + /* Some validations */ + if (source === undefined) { + console.log('[WARN] webServer -> Webhook -> New-Message -> Message with no Source received -> messageReceived = ' + messageReceived) + respondWithContent(JSON.stringify(global.DEFAULT_FAIL_RESPONSE), response) + return + } + if (exchange === undefined) { + console.log('[WARN] webServer -> Webhook -> New-Message -> Message with no Exchange received -> messageReceived = ' + messageReceived) + respondWithContent(JSON.stringify(global.DEFAULT_FAIL_RESPONSE), response) + return + } + if (market === undefined) { + console.log('[WARN] webServer -> Webhook -> New-Message -> Message with no market received -> messageReceived = ' + messageReceived) + respondWithContent(JSON.stringify(global.DEFAULT_FAIL_RESPONSE), response) + return + } + + let key = exchange + '-' + market + + let webhookMessages = webhook.get(key) + if (webhookMessages === undefined) { + webhookMessages = [] + } + + webhookMessages.push([timestamp, source, messageReceived]) + webhook.set(key, webhookMessages) + + respondWithContent(JSON.stringify(global.DEFAULT_OK_RESPONSE), response) + } + break } - break } + break } break - } - break case 'ResetLogsAndData': { @@ -429,6 +413,12 @@ exports.newWebServer = function newWebServer(EVENTS_SERVER) { } break + case 'Fonts': + { + respondWithFont(process.env.PATH_TO_FONTS + '/' + requestParameters[2], response) + } + break + case 'FloatingSpace': { respondWithFile(process.env.PATH_TO_CANVAS_APP + '/' + requestParameters[1] + '/' + requestParameters[2], response) @@ -493,7 +483,7 @@ exports.newWebServer = function newWebServer(EVENTS_SERVER) { case 'ListWorkspaces': { - let dirPath = process.env.MY_WORKSPACES_PATH + let dirPath = process.env.MY_WORKSPACES_PATH try { let fs = require('fs') @@ -516,7 +506,7 @@ exports.newWebServer = function newWebServer(EVENTS_SERVER) { respondWithContent(JSON.stringify(global.DEFAULT_FAIL_RESPONSE), response) return } - + } break @@ -590,12 +580,41 @@ exports.newWebServer = function newWebServer(EVENTS_SERVER) { } break + case 'main.css': + { + mainCSS() + } + break + default: { homePage() } } + function mainCSS() { + let fs = require('fs') + try { + let fileName = process.env.PATH_TO_WEB_SERVER + 'WebServer/main.css' + fs.readFile(fileName, onFileRead) + + function onFileRead(err, file) { + try { + let fileContent = file.toString() + + fileContent = fileContent.replace('WEB_SERVER_PORT', process.env.WEB_SERVER_PORT) + fileContent = fileContent.replace('WEB_SERVER_PORT', process.env.WEB_SERVER_PORT) + fileContent = fileContent.replace('WEB_SERVER_PORT', process.env.WEB_SERVER_PORT) + respondWithContent(fileContent, response) + } catch (err) { + console.log('[ERROR] webServer -> mainCSS -> File Not Found: ' + fileName + ' or Error = ' + err.stack) + } + } + } catch (err) { + console.log(err) + } + } + function homePage() { if (requestParameters[1] === '') { let fs = require('fs') @@ -604,15 +623,13 @@ exports.newWebServer = function newWebServer(EVENTS_SERVER) { fs.readFile(fileName, onFileRead) function onFileRead(err, file) { - if (CONSOLE_LOG === true) { console.log('[INFO] webServer -> onBrowserRequest -> onFileRead -> Entering function.') } - try { let fileContent = file.toString() fileContent = fileContent.replace('WEB_SERVER_PORT', process.env.WEB_SERVER_PORT) respondWithContent(fileContent, response) } catch (err) { - console.log('[ERROR] webServer -> onBrowserRequest -> File Not Found: ' + fileName + ' or Error = ' + err.stack) + console.log('[ERROR] webServer -> homePage -> File Not Found: ' + fileName + ' or Error = ' + err.stack) } } } catch (err) { @@ -679,8 +696,10 @@ exports.newWebServer = function newWebServer(EVENTS_SERVER) { fs.readFile(fileName, onFileRead) function onFileRead(err, file) { - if (CONSOLE_LOG === true) { console.log('[INFO] webServer -> respondWithImage -> onFileRead -> Entering function.') } - + if (err) { + console.log('[ERROR] webServer -> respondWithImage -> onFileRead -> File Not Found: ' + fileName + ' or Error = ' + err.stack) + return + } try { response.setHeader('Cache-Control', 'no-cache, no-store, must-revalidate') // HTTP 1.1. response.setHeader('Pragma', 'no-cache') // HTTP 1.0. @@ -698,6 +717,41 @@ exports.newWebServer = function newWebServer(EVENTS_SERVER) { } } + function respondWithFont(fileName, response) { + if (CONSOLE_LOG === true) { console.log('[INFO] webServer -> respondWithBinary -> Entering function.') } + + let fs = require('fs') + try { + fs.readFile(fileName, onFileRead) + + function onFileRead(err, file) { + if (CONSOLE_LOG === true) { console.log('[INFO] webServer -> respondWithBinary -> onFileRead -> Entering function.') } + + try { + if (err) { + console.log('[ERROR] webServer -> respondWithBinary -> onFileRead -> File Not Found: ' + fileName + ' or Error = ' + err.stack) + return + } + response.setHeader('Cache-Control', 'no-cache, no-store, must-revalidate') // HTTP 1.1. + response.setHeader('Pragma', 'no-cache') // HTTP 1.0. + response.setHeader('Expires', '0') // Proxies. + response.setHeader('Access-Control-Allow-Origin', '*') // Allows to access data from other domains. + + if (fileName.indexOf('2') < 0) { + response.writeHead(200, { 'Content-Type': 'font/woff' }) + } else { + response.writeHead(200, { 'Content-Type': 'font/woff2' }) + } + response.end(file, 'binary') + } catch (err) { + console.log('[ERROR] webServer -> respondWithBinary -> onFileRead -> File Not Found: ' + fileName + ' or Error = ' + err.stack) + } + } + } catch (err) { + console.log('[ERROR] webServer -> respondWithBinary -> err = ' + err.stack) + } + } + function returnEmptyArray(response) { try { if (CONSOLE_LOG === true) { console.log('[INFO] webServer -> respondWithFile -> returnEmptyArray -> Entering function.') } From 84e91245904a840d1d6a1d5602f304f994bd0e36 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Sat, 25 Jul 2020 09:16:52 +0200 Subject: [PATCH 8/8] Internet Independent --- WebServer/index.html | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/WebServer/index.html b/WebServer/index.html index 628e99103..4ef127a80 100644 --- a/WebServer/index.html +++ b/WebServer/index.html @@ -3,11 +3,9 @@ Superalgos - rel="stylesheet"> - + + -