jsgui3-server 0.0.121 → 0.0.122
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.vscode/settings.json +6 -0
- package/README.md +10 -10
- package/controls/Active_HTML_Document.js +116 -116
- package/controls/README.md +7 -7
- package/controls/page/admin.js +74 -74
- package/controls/panel/admin.js +11 -11
- package/examples/_css/basic.css +913 -913
- package/examples/_css/database-control.css +51 -51
- package/examples/_css/jsgui.css +66 -66
- package/examples/_css/multi-layout.css +23 -23
- package/examples/_css/style.css +1669 -1669
- package/examples/_css/top-and-bottom-bars.css +54 -54
- package/examples/box/1) square box/client.js +188 -188
- package/examples/box/1) square box/server.js +112 -112
- package/examples/box/2) twenty square boxes/css flex wrap/client.js +248 -248
- package/examples/box/2) twenty square boxes/css flex wrap/server.js +112 -112
- package/examples/boxes/square_boxes.js +45 -48
- package/examples/boxes/square_boxes_client.js +132 -136
- package/examples/client-side-popup-menu-button.html +93 -93
- package/examples/color_palette.js +51 -51
- package/examples/color_palette_client.js +95 -95
- package/examples/controls/1) window/client.js +186 -186
- package/examples/controls/1) window/server.js +117 -117
- package/examples/controls/10) window, mirrored text inputs/client.js +320 -320
- package/examples/controls/10) window, mirrored text inputs/server.js +117 -117
- package/examples/controls/11) window, mirrored text fields/client.js +493 -251
- package/examples/controls/11) window, mirrored text fields/server.js +117 -117
- package/examples/controls/11b) window, shared Data_Object model mirrored text fields/client.js +613 -331
- package/examples/controls/11b) window, shared Data_Object model mirrored text fields/server.js +117 -117
- package/examples/controls/11c) window, shared Data_Value model mirrored text fields/client.js +617 -617
- package/examples/controls/11c) window, shared Data_Value model mirrored text fields/server.js +117 -117
- package/examples/controls/11d) window, shared model mirrored integer text fields/client.js +611 -280
- package/examples/controls/11d) window, shared model mirrored integer text fields/server.js +134 -22
- package/examples/controls/12) window, Select_Options control/client.js +435 -452
- package/examples/controls/12) window, Select_Options control/server.js +117 -117
- package/examples/controls/2) two windows/client.js +193 -193
- package/examples/controls/2) two windows/server.js +113 -113
- package/examples/controls/3) five windows/client.js +217 -217
- package/examples/controls/3) five windows/server.js +116 -115
- package/examples/controls/4) window, tabbed panel/client.js +54 -225
- package/examples/controls/4) window, tabbed panel/server.js +17 -117
- package/examples/controls/5) window, grid/client.js +204 -484
- package/examples/controls/5) window, grid/server.js +117 -119
- package/examples/controls/6) window, color_palette/client.js +204 -204
- package/examples/controls/6) window, color_palette/server.js +117 -117
- package/examples/controls/7) window, month_view/client.js +40 -231
- package/examples/controls/7) window, month_view/server.js +117 -117
- package/examples/controls/8) window, checkbox/client.js +247 -209
- package/examples/controls/8) window, checkbox/server.js +117 -117
- package/examples/controls/9) window, date picker/client.js +303 -303
- package/examples/controls/9) window, date picker/server.js +117 -117
- package/examples/controls/9b) window, shared data.model mirrored date pickers/client.js +398 -398
- package/examples/controls/9b) window, shared data.model mirrored date pickers/server.js +117 -117
- package/examples/controls/__old/_html-server-color-palette.js +114 -114
- package/examples/controls/__old/html-server-combo-box.js +104 -104
- package/examples/controls/__old/html-server-list.js +98 -98
- package/examples/controls/__old/html-server-popup-menu-button.js +114 -114
- package/examples/controls/__old/html-server-start-stop-toggle-button.js +146 -146
- package/examples/controls/__old/scs-arrow-button.js +36 -36
- package/examples/controls/__old/scs-date-picker.js +157 -157
- package/examples/controls/__old/scs-file-browser.js +82 -82
- package/examples/controls/__old/scs-item.js +159 -159
- package/examples/controls/__old/scs-month-arrow-selector.js +126 -126
- package/examples/controls/__old/scs-month-view.js +94 -94
- package/examples/controls/__old/scs-start-stop-toggle-button.js +40 -40
- package/examples/controls/__old/scs-tree.js +49 -49
- package/examples/controls/__old/scs-year-arrow-selector.js +127 -127
- package/examples/demos/date-picker.js +119 -119
- package/examples/demos/explain-encapsulation.js +9 -9
- package/examples/demos/resizing.js +35 -35
- package/examples/demos/server_time.js +6 -6
- package/examples/grids/grid_1.js +45 -45
- package/examples/grids/grid_1_client.js +329 -329
- package/examples/html-rendering.js +20 -20
- package/examples/html-server.js +105 -105
- package/examples/introducing jsgui3/server.js +110 -110
- package/examples/mx_display/mx_display_1.js +45 -45
- package/examples/mx_display/mx_display_1_client.js +444 -444
- package/fs2.js +1836 -1836
- package/http/responders/HTTP_Responder.js +15 -15
- package/http/responders/static/Static_Route_HTTP_Responder.js +105 -105
- package/module.js +34 -34
- package/old/_single-control-server.js +418 -418
- package/old/single-control-server.js +368 -368
- package/old/single-page-app.js +131 -131
- package/package.json +42 -42
- package/page-context.js +92 -92
- package/publishers/helpers/assigners/Assigner.js +10 -10
- package/publishers/helpers/assigners/static-compressed-response-buffers/Single_Control_Webpage_Server_Static_Compressed_Response_Buffers_Assigner.js +150 -150
- package/publishers/helpers/assigners/static-headers/Single_Control_Webpage_Server_Static_Headers_Assigner.js +109 -109
- package/publishers/helpers/assigners/static-routes/Single_Control_Webpage_Server_Static_Routes_Assigner.js +91 -91
- package/publishers/helpers/assigners/static-uncompressed-response-buffers/Single_Control_Webpage_Server_Static_Uncompressed_Response_Buffers_Assigner.js +104 -104
- package/publishers/helpers/preparers/static/bundle/Ready_To_Serve_Preparer.js +18 -18
- package/publishers/helpers/preparers/static/bundle/Static_Routes_Responses_Webpage_Bundle_Preparer.js +44 -44
- package/publishers/http-function-publisher.js +212 -212
- package/publishers/http-html-page-publisher.js +5 -5
- package/publishers/http-html-publisher.js +24 -24
- package/publishers/http-js-publisher.js +135 -135
- package/publishers/http-observable-publisher.js +124 -124
- package/publishers/http-publisher.js +53 -53
- package/publishers/http-resource-publisher.js +325 -325
- package/publishers/http-webpage-publisher.js +659 -658
- package/publishers/http-webpageorsite-publisher.js +343 -343
- package/publishers/http-website-publisher.js +640 -640
- package/publishers/notes.md +9 -9
- package/resources/README.md +16 -16
- package/resources/_old_website-javascript-resource.js +994 -994
- package/resources/_old_website-resource.js +507 -507
- package/resources/compile/server-resource-compilation.js +43 -43
- package/resources/data-resource.js +118 -118
- package/resources/fs-resource.js +146 -146
- package/resources/jsbuilder/Abstract_Single_Declaration.js +105 -105
- package/resources/jsbuilder/Abstract_Single_Declaration_Sequence.js +42 -42
- package/resources/jsbuilder/JS_AST/JS_AST_Abstract_Node.js +61 -61
- package/resources/jsbuilder/JS_AST/JS_AST_Abstract_Node_Group.js +41 -41
- package/resources/jsbuilder/JS_AST/JS_AST_Group_Shared.js +61 -61
- package/resources/jsbuilder/JS_AST/JS_AST_Node.js +93 -93
- package/resources/jsbuilder/JS_AST/JS_AST_Node_0-Core.js +253 -253
- package/resources/jsbuilder/JS_AST/JS_AST_Node_1-Babel.js +337 -337
- package/resources/jsbuilder/JS_AST/JS_AST_Node_10-Changing.js +39 -39
- package/resources/jsbuilder/JS_AST/JS_AST_Node_2.1.1-Child.js +96 -96
- package/resources/jsbuilder/JS_AST/JS_AST_Node_2.1.2-Parent.js +37 -37
- package/resources/jsbuilder/JS_AST/JS_AST_Node_2.1.3-Ancestor.js +61 -61
- package/resources/jsbuilder/JS_AST/JS_AST_Node_2.2-Inner.js +43 -43
- package/resources/jsbuilder/JS_AST/JS_AST_Node_2.3-All.js +72 -72
- package/resources/jsbuilder/JS_AST/JS_AST_Node_2.4-Sibling.js +92 -92
- package/resources/jsbuilder/JS_AST/JS_AST_Node_2.5-Available_In_Scope.js +29 -29
- package/resources/jsbuilder/JS_AST/JS_AST_Node_2.9-Signature.js +116 -116
- package/resources/jsbuilder/JS_AST/JS_AST_Node_3-Basics.js +159 -159
- package/resources/jsbuilder/JS_AST/JS_AST_Node_3.0.0-Basics_First.js +178 -178
- package/resources/jsbuilder/JS_AST/JS_AST_Node_3.0.1-Basics_Second.js +87 -87
- package/resources/jsbuilder/JS_AST/JS_AST_Node_3.0.99-Basics_Last.js +91 -91
- package/resources/jsbuilder/JS_AST/JS_AST_Node_3.1-Basics_Each.js +136 -136
- package/resources/jsbuilder/JS_AST/JS_AST_Node_3.1.5-Basics_Count.js +73 -73
- package/resources/jsbuilder/JS_AST/JS_AST_Node_3.2-Basics_Filter.js +39 -39
- package/resources/jsbuilder/JS_AST/JS_AST_Node_3.3-Basics_Collect.js +85 -85
- package/resources/jsbuilder/JS_AST/JS_AST_Node_3.4-Basics_Select.js +42 -42
- package/resources/jsbuilder/JS_AST/JS_AST_Node_3.5-Basics_Find.js +40 -40
- package/resources/jsbuilder/JS_AST/JS_AST_Node_3.6-Basics_Callmap.js +54 -54
- package/resources/jsbuilder/JS_AST/JS_AST_Node_4.0-Index_Indexes.js +45 -45
- package/resources/jsbuilder/JS_AST/JS_AST_Node_4.1-Index.js +343 -343
- package/resources/jsbuilder/JS_AST/JS_AST_Node_5.0-Category.js +38 -38
- package/resources/jsbuilder/JS_AST/JS_AST_Node_5.1-Category_Identifier.js +30 -30
- package/resources/jsbuilder/JS_AST/JS_AST_Node_5.2-Category_Literal.js +28 -28
- package/resources/jsbuilder/JS_AST/JS_AST_Node_5.3-Category_Expression.js +26 -26
- package/resources/jsbuilder/JS_AST/JS_AST_Node_5.4-Category_Pattern.js +8 -8
- package/resources/jsbuilder/JS_AST/JS_AST_Node_5.5-Category_Declaration.js +43 -43
- package/resources/jsbuilder/JS_AST/JS_AST_Node_5.6-Category_Statement.js +21 -21
- package/resources/jsbuilder/JS_AST/JS_AST_Node_6.0-Type.js +89 -89
- package/resources/jsbuilder/JS_AST/JS_AST_Node_6.1-Type_Class_Declaration.js +8 -8
- package/resources/jsbuilder/JS_AST/JS_AST_Node_6.2-Type_Variable_Declaration.js +27 -27
- package/resources/jsbuilder/JS_AST/JS_AST_Node_6.3-Type_Variable_Declarator.js +28 -28
- package/resources/jsbuilder/JS_AST/JS_AST_Node_7-Query.js +736 -736
- package/resources/jsbuilder/JS_AST/JS_AST_Node_8-Features.js +64 -64
- package/resources/jsbuilder/JS_AST/JS_AST_Node_9-Planning.js +31 -31
- package/resources/jsbuilder/JS_AST/JS_AST_Node_Arrangement.js +15 -15
- package/resources/jsbuilder/JS_AST/JS_AST_Node_Feature/JS_AST_Node_Declared_Object.js +305 -305
- package/resources/jsbuilder/JS_AST/JS_AST_Node_Feature/JS_AST_Node_Feature.js +77 -77
- package/resources/jsbuilder/JS_AST/JS_AST_Node_Feature/JS_AST_Node_Feature_Declaration.js +248 -248
- package/resources/jsbuilder/JS_AST/JS_AST_Node_Feature/JS_AST_Node_Feature_Declarator.js +138 -138
- package/resources/jsbuilder/JS_AST/JS_AST_Node_Feature/JS_AST_Root_Node_Feature/JS_AST_Root_Node_Feature.js +10 -10
- package/resources/jsbuilder/JS_AST/JS_AST_Node_Feature/JS_AST_Root_Node_Feature/JS_AST_Root_Node_Feature_Exported.js +100 -100
- package/resources/jsbuilder/JS_AST/JS_AST_Node_Feature/JS_AST_Root_Node_Feature/JS_AST_Root_Node_Feature_Exports.js +60 -60
- package/resources/jsbuilder/JS_AST/JS_AST_Node_Feature/JS_AST_Root_Node_Feature/JS_AST_Root_Node_Interpreted.js +179 -179
- package/resources/jsbuilder/JS_AST/JS_AST_Node_Feature/JS_AST_Root_Node_Feature/_JSGUI_Root_Node_Interpreted.js +43 -43
- package/resources/jsbuilder/JS_AST/JS_AST_Node_Feature/JS_AST_Root_Node_Feature/special_case_objectassign_to_object.js +12 -12
- package/resources/jsbuilder/JS_AST/JS_AST_Node_Group.js +35 -35
- package/resources/jsbuilder/JS_AST/JS_AST_Operation.js +11 -11
- package/resources/jsbuilder/JS_AST/JS_AST_Operation_On_Relationship.js +31 -31
- package/resources/jsbuilder/JS_AST/JS_AST_Ordered_Relationship_Node_To_Group.js +37 -37
- package/resources/jsbuilder/JS_AST/JS_AST_Ordinal.js +39 -39
- package/resources/jsbuilder/JS_AST/JS_AST_Ordinal_Relationship.js +25 -25
- package/resources/jsbuilder/JS_AST/JS_AST_Relationship_Node_To_Group.js +200 -200
- package/resources/jsbuilder/JS_AST/JS_AST_Relationship_Node_Within_Group_To_Node.js +43 -43
- package/resources/jsbuilder/JS_AST/_JS_AST_Node_3.8-Query_Features.js +76 -76
- package/resources/jsbuilder/JS_AST/query/enable_array_as_queryable.js +227 -227
- package/resources/jsbuilder/JS_AST/query/find_object_keys.js +404 -404
- package/resources/jsbuilder/JS_AST/query/node_queries.js +8 -8
- package/resources/jsbuilder/JS_AST/query/root_query_identidy.js +11 -11
- package/resources/jsbuilder/JS_AST_Node_Extended/JSGUI_Singular_Declaration.js +85 -85
- package/resources/jsbuilder/JS_AST_Node_Extended/JS_AST_Node_Declaration.js +123 -123
- package/resources/jsbuilder/JS_AST_Node_Extended/JS_AST_Node_Extended.js +87 -87
- package/resources/jsbuilder/JS_AST_Node_Extended/JS_AST_Node_Extended_0-Core.js +10 -10
- package/resources/jsbuilder/JS_Builder.js +10 -10
- package/resources/jsbuilder/JS_File/Feature/JS_File_Declared_Object.js +31 -31
- package/resources/jsbuilder/JS_File/Feature/JS_File_Exported_Object_Info.js +25 -25
- package/resources/jsbuilder/JS_File/Feature/JS_File_Exports.js +78 -78
- package/resources/jsbuilder/JS_File/Feature/JS_File_Feature.js +17 -17
- package/resources/jsbuilder/JS_File/Feature/JS_File_Imported_Object_Info.js +25 -25
- package/resources/jsbuilder/JS_File/Feature/JS_File_Imports.js +8 -8
- package/resources/jsbuilder/JS_File/JS_File.js +12 -12
- package/resources/jsbuilder/JS_File/JS_File_0-Core.js +202 -202
- package/resources/jsbuilder/JS_File/JS_File_1-Early_Parse.js +175 -175
- package/resources/jsbuilder/JS_File/JS_File_2-Babel.js +81 -81
- package/resources/jsbuilder/JS_File/JS_File_3-JS_AST_Node.js +86 -86
- package/resources/jsbuilder/JS_File/JS_File_4-Query.js +413 -413
- package/resources/jsbuilder/JS_File/JS_File_4.1-Query_Features.js +414 -414
- package/resources/jsbuilder/JS_File/JS_File_5-Planning.js +59 -59
- package/resources/jsbuilder/JS_File/JS_File_6-Changing.js +24 -24
- package/resources/jsbuilder/JS_File/JS_File_Export_Reference.js +12 -12
- package/resources/jsbuilder/JS_File/JS_File_Import_Reference.js +23 -23
- package/resources/jsbuilder/JS_File/JS_File_Import_References.js +31 -31
- package/resources/jsbuilder/JS_File/JS_File_Processor.js +16 -16
- package/resources/jsbuilder/JS_File/JS_Files.js +15 -15
- package/resources/jsbuilder/Module.js +14 -14
- package/resources/jsbuilder/Platform.js +13 -13
- package/resources/jsbuilder/Platforms.js +69 -69
- package/resources/jsbuilder/Project.js +109 -109
- package/resources/jsbuilder/Reference.js +1 -1
- package/resources/jsbuilder/Reference_Sequence.js +16 -16
- package/resources/jsbuilder/Scope.js +29 -29
- package/resources/jsbuilder/Variable_Name_Provider.js +42 -42
- package/resources/jsbuilder/_JS_File.js +225 -225
- package/resources/jsbuilder/ast_query.js +20 -20
- package/resources/jsbuilder/babel/babel_consts.js +162 -162
- package/resources/jsbuilder/babel/babel_node_tools.js +541 -541
- package/resources/jsbuilder/babel/deep_iterate/deep_iterate_babel.js +923 -904
- package/resources/jsbuilder/build.js +16 -16
- package/resources/jsbuilder/platform_notes.md +66 -66
- package/resources/jsbuilder/test/test_ast_node.js +381 -381
- package/resources/jsbuilder/test/test_js_file.js +303 -303
- package/resources/jsbuilder/test/test_project.js +157 -157
- package/resources/local-server-info-resource.js +96 -96
- package/resources/notes.txt +10 -10
- package/resources/old/website-image-resource.js +1185 -1185
- package/resources/process-js.js +498 -498
- package/resources/processors/bundlers/bundle.js +29 -29
- package/resources/processors/bundlers/bundler.js +23 -23
- package/resources/processors/bundlers/css-bundler.js +234 -234
- package/resources/processors/bundlers/js/JS_Bundler.js +51 -51
- package/resources/processors/bundlers/js/esbuild/Advanced_JS_Bundler_Using_ESBuild.js +388 -391
- package/resources/processors/bundlers/js/esbuild/Bundler_Using_ESBuild.js +8 -8
- package/resources/processors/bundlers/js/esbuild/Core_JS_Non_Minifying_Bundler_Using_ESBuild.js +188 -188
- package/resources/processors/bundlers/js/esbuild/Core_JS_Single_File_Minifying_Bundler_Using_ESBuild.js +191 -192
- package/resources/processors/bundlers/js/esbuild/_Old_CSS_Extractor.js +239 -239
- package/resources/processors/bundlers/js-bundler.js +263 -263
- package/resources/processors/bundlers/test_ast.js +73 -73
- package/resources/processors/bundlers/webpage-bundler.js +404 -404
- package/resources/processors/bundlers/website-bundler.js +22 -22
- package/resources/processors/extractors/Extractor.js +9 -11
- package/resources/processors/extractors/js/css_and_js/AST_Node/CSS_And_JS_From_JS_String_Using_AST_Node_Extractor.js +239 -254
- package/resources/processors/extractors/js/css_and_js/CSS_And_JS_From_JS_String_Extractor.js +3 -3
- package/resources/processors/extractors/string/Pos_Span_String_Extractor.js +93 -93
- package/resources/server-installed-tools.js +28 -28
- package/resources/server-resource-pool.js +41 -41
- package/resources/website-audio-resource.js +735 -735
- package/resources/website-css-resource.js +411 -411
- package/resources/website-image-resource.js +412 -412
- package/resources/website-javascript-resource-processor.js +908 -908
- package/resources/website-javascript-resource.js +874 -874
- package/resources/website-resource-processor.js +10 -10
- package/resources/website-resource.js +164 -164
- package/resources/website-static-html-resource.js +199 -199
- package/resources/website-template-html-resource.js +231 -231
- package/roadmap.md +75 -75
- package/server.js +609 -573
- package/static-page-context.js +13 -13
- package/website/webpage.js +81 -81
- package/website/website-group.js +15 -15
- package/website/website.js +260 -260
- package/examples/controls/11d) window, shared model mirrored integer text fields/both.js +0 -17
- package/examples/controls/13) window, shared model mirrored lat_long/client.js +0 -933
- package/examples/controls/13) window, shared model mirrored lat_long/server.js +0 -50
- package/examples/controls/14) window, control compositional model/client.js +0 -328
- package/examples/controls/14) window, control compositional model/server.js +0 -118
- package/examples/controls/14a) window, control spec has compositional model/client.js +0 -440
- package/examples/controls/14a) window, control spec has compositional model/server.js +0 -118
- package/examples/controls/15) window, text field/client.js +0 -256
- package/examples/controls/15) window, text field/server.js +0 -39
- package/examples/controls/16) Window([Text_Input])/client.js +0 -266
- package/examples/controls/16) Window([Text_Input])/server.js +0 -109
- package/examples/controls/16a) Window([Text_Input]) Integer data.model.data_type/client.js +0 -494
- package/examples/controls/16a) Window([Text_Input]) Integer data.model.data_type/isomorphic.js +0 -24
- package/examples/controls/16a) Window([Text_Input]) Integer data.model.data_type/server.js +0 -73
- package/examples/controls/2b) two window, context menus/client.js +0 -193
- package/examples/controls/2b) two window, context menus/server.js +0 -114
- package/examples/controls/4a) window, tabbed panel with various controls inside/client.js +0 -233
- package/examples/controls/4a) window, tabbed panel with various controls inside/server.js +0 -118
|
@@ -1,419 +1,419 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Created by james on 04/12/2016.
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Created by James on 02/10/2016.
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
// This one will need to activate on the client.
|
|
10
|
-
// Really want the whole thing to be in one file.
|
|
11
|
-
// Possible to have a standard activation?
|
|
12
|
-
//
|
|
13
|
-
// Or we need to have a client-side control?
|
|
14
|
-
//
|
|
15
|
-
// Some of the wiring could be done automatically.
|
|
16
|
-
//
|
|
17
|
-
|
|
18
|
-
//console.log('pre require jsgui');
|
|
19
|
-
var jsgui = require('jsgui3-html');
|
|
20
|
-
const each = jsgui.each;
|
|
21
|
-
//console.log('post require jsgui');
|
|
22
|
-
//var Start_Stop_Toggle_Button = require('../controls/start-stop-toggle-button');
|
|
23
|
-
const is_array = jsgui.is_array;
|
|
24
|
-
var Server = require('./server');
|
|
25
|
-
var Website_Resource = require('./resources/website-resource');
|
|
26
|
-
var port = 80;
|
|
27
|
-
//console.log('!!Server', !!Server);
|
|
28
|
-
//console.log('Object.keys(Server)', Object.keys(Server));
|
|
29
|
-
var Server_Page_Context = require('./page-context');
|
|
30
|
-
|
|
31
|
-
// js_mode option
|
|
32
|
-
// compress
|
|
33
|
-
// debug
|
|
34
|
-
// (standard)
|
|
35
|
-
|
|
36
|
-
// Want to get the library compressed sizes down. Particulatly client. Can do much more with oext.
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
/*
|
|
41
|
-
var server = new Server({
|
|
42
|
-
'*': {
|
|
43
|
-
'name': 'html-server'
|
|
44
|
-
}
|
|
45
|
-
});
|
|
46
|
-
|
|
47
|
-
*/
|
|
48
|
-
/*
|
|
49
|
-
var resource_pool = root_server.resource_pool;
|
|
50
|
-
// link these getters with the resource pool resource getters?
|
|
51
|
-
let app_server = resource_pool['HTML Server'];
|
|
52
|
-
//console.log('app_server', app_server);
|
|
53
|
-
//
|
|
54
|
-
|
|
55
|
-
//console.log('app_server.resource_names', app_server.resource_names);
|
|
56
|
-
//console.log('!!app_server.resource_pool', !!app_server.resource_pool);
|
|
57
|
-
let js = app_server.resource_pool['Site JavaScript'];
|
|
58
|
-
*/
|
|
59
|
-
|
|
60
|
-
//console.log('Server', Server);
|
|
61
|
-
|
|
62
|
-
// And choose the CSS file / files to send it.
|
|
63
|
-
// Could send basic jsgui css by default
|
|
64
|
-
// Then there would be app css on top of that.
|
|
65
|
-
|
|
66
|
-
// Authenticated_Server?
|
|
67
|
-
// Has got authentication mechanisms as a wrapper for the controls inside.
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
// Want to be able to set up icons as well.
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
class Single_Control_Server extends Server {
|
|
75
|
-
constructor(spec) {
|
|
76
|
-
//spec['*'] = {
|
|
77
|
-
// 'name': 'html-server'
|
|
78
|
-
//};
|
|
79
|
-
|
|
80
|
-
// If the spec is a control contructor...
|
|
81
|
-
if (typeof spec === 'function') {
|
|
82
|
-
super({}, 'single-control-server');
|
|
83
|
-
this.Ctrl = spec;
|
|
84
|
-
this.port = 80;
|
|
85
|
-
} else {
|
|
86
|
-
super(spec);
|
|
87
|
-
let Ctrl = spec.Ctrl || spec.ctrl; // not .ctrl? makes it ambiguous / inconsistent.
|
|
88
|
-
if (is_array(Ctrl)) {
|
|
89
|
-
this.Ctrl = Ctrl[0];
|
|
90
|
-
this.params = Ctrl[1];
|
|
91
|
-
} else {
|
|
92
|
-
if (Ctrl) {
|
|
93
|
-
this.Ctrl = Ctrl;
|
|
94
|
-
} else {
|
|
95
|
-
throw 'Single_Control_Server needs a Ctrl property'
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
if (spec.js_mode) this.js_mode = spec.js_mode;
|
|
99
|
-
if (spec.js_client) this.js_client = spec.js_client;
|
|
100
|
-
// deliver app specific css
|
|
101
|
-
// an obj
|
|
102
|
-
if (spec.css) this.css = spec.css;
|
|
103
|
-
if (spec.icons) this.icons = spec.icons;
|
|
104
|
-
if (spec.include_server_ref_in_page_context) {
|
|
105
|
-
this.include_server_ref_in_page_context = spec.include_server_ref_in_page_context;
|
|
106
|
-
}
|
|
107
|
-
// Ctrl.activate_app
|
|
108
|
-
//spec.activate_app;
|
|
109
|
-
if (spec.activate_app && !this.activate_app) {
|
|
110
|
-
this.activate_app = spec.activate_app;
|
|
111
|
-
}
|
|
112
|
-
//console.log('this.activate_app', this.activate_app);
|
|
113
|
-
//throw 'stop';
|
|
114
|
-
if (spec.client_package) this.client_package = spec.client_package;
|
|
115
|
-
this.port = spec.port || 80;
|
|
116
|
-
}
|
|
117
|
-
//this.__type_name = 'single-control-server';
|
|
118
|
-
var app = new Website_Resource({
|
|
119
|
-
'name': 'html-server'
|
|
120
|
-
});
|
|
121
|
-
|
|
122
|
-
// will need to keep access to the server?
|
|
123
|
-
// server_page_context keeping access to the server?
|
|
124
|
-
|
|
125
|
-
// some place to keep variables on the server.
|
|
126
|
-
// Especially when we are not coding any / much server-side logic.
|
|
127
|
-
|
|
128
|
-
// server.shared
|
|
129
|
-
// want an object that is shared between all server instances.
|
|
130
|
-
|
|
131
|
-
// A server-side Data_Resource could be the way.
|
|
132
|
-
|
|
133
|
-
// Maybe make something like Resource_Pool but simpler?
|
|
134
|
-
// Less prescriptive, but allowing a more complex api...?
|
|
135
|
-
|
|
136
|
-
// page_context.shared
|
|
137
|
-
// shared with the server
|
|
138
|
-
// shared with all page contexts.
|
|
139
|
-
|
|
140
|
-
this.publish = (...args) => app.publish(...args);
|
|
141
|
-
//console.log('app', app);
|
|
142
|
-
//throw 'stop';
|
|
143
|
-
this.resource_pool.add(app);
|
|
144
|
-
this.server_router.set_route('*', app, app.process);
|
|
145
|
-
this.app_server = app;
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
// Could start it up with a client_js reference
|
|
149
|
-
|
|
150
|
-
'start' (callback) {
|
|
151
|
-
//throw 'stop';
|
|
152
|
-
//var resource_pool = this.resource_pool;
|
|
153
|
-
|
|
154
|
-
var resource_pool = this.app_server.resource_pool;
|
|
155
|
-
var server_router = this.resource_pool.get_resource('Server Router');
|
|
156
|
-
// Build the client js and include that.
|
|
157
|
-
// Could have been given a different client js file too.
|
|
158
|
-
// By default want to provide the html client from jsgui.
|
|
159
|
-
// /client/client
|
|
160
|
-
|
|
161
|
-
// build the html client code.
|
|
162
|
-
let js = this.app_server.resource_pool['Site JavaScript'];
|
|
163
|
-
let css = this.app_server.resource_pool['Site CSS'];
|
|
164
|
-
let imgs = this.app_server.resource_pool['Site Images'];
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
// will look into the resource publisher to see what is published.
|
|
169
|
-
|
|
170
|
-
// serve package with replacement options.
|
|
171
|
-
// // the activate app function.
|
|
172
|
-
// Can be put into place in the served JS.
|
|
173
|
-
|
|
174
|
-
// with replacement option within serve_package
|
|
175
|
-
|
|
176
|
-
let o_serve_package = {
|
|
177
|
-
//'babel': 'mini'
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
// babel option.
|
|
181
|
-
// Activation should be defined
|
|
182
|
-
// Or there is some default activation in the client.js
|
|
183
|
-
// It has the maps of controls and Controls
|
|
184
|
-
// Then can activate these controls.
|
|
185
|
-
// There should maybe be some more data services in the client.
|
|
186
|
-
// Could make the client more miniature and modular once it works, and then incorporate react.
|
|
187
|
-
// Data-Resource would be general enough to work on both.
|
|
188
|
-
// The client data resources could then direct their requests to the server ones.
|
|
189
|
-
// Could make a resource-pool for both client and server
|
|
190
|
-
|
|
191
|
-
//console.log('this.activate_app', this.activate_app);
|
|
192
|
-
//throw 'stop';
|
|
193
|
-
|
|
194
|
-
// Should do this before the babel compilation. Think that's the sequence anyway.
|
|
195
|
-
// Not sure why it's not working.
|
|
196
|
-
if (this.activate_app) {
|
|
197
|
-
o_serve_package.replace = {
|
|
198
|
-
'/* -- ACTIVATE-APP -- */': this.activate_app.toString()
|
|
199
|
-
}
|
|
200
|
-
//
|
|
201
|
-
}
|
|
202
|
-
// want it to serve with debug code map
|
|
203
|
-
// for the moment
|
|
204
|
-
// want that to be easier to do with a --debug option.
|
|
205
|
-
// should read command line options.
|
|
206
|
-
o_serve_package.js_mode = 'mini';
|
|
207
|
-
if (this.js_mode) {
|
|
208
|
-
o_serve_package.js_mode = this.js_mode;
|
|
209
|
-
} else {
|
|
210
|
-
//o_serve_package.babel = 'mini';
|
|
211
|
-
}
|
|
212
|
-
// need to minify the js.
|
|
213
|
-
// Also, gzip compression as standard.
|
|
214
|
-
// Need HTTPS for Brotli - but want to get HTTPS working more, tested online and running.
|
|
215
|
-
|
|
216
|
-
// Need to minify js, reduce file size.
|
|
217
|
-
|
|
218
|
-
// Minifying currently breaks it.
|
|
219
|
-
|
|
220
|
-
//o_serve_package.js_mode = 'debug';
|
|
221
|
-
|
|
222
|
-
// Extra functionality for loading / serving icon files?
|
|
223
|
-
// Easily available / usable named icons will be very useful within the app.
|
|
224
|
-
// Could be in sprites / pre-loaded.
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
// Not sure how to do the replace when loading from disk.
|
|
230
|
-
// Give a reference to the package to serve itself.
|
|
231
|
-
// example servers -
|
|
232
|
-
// serve the css as well.
|
|
233
|
-
if (this.css) {
|
|
234
|
-
each(this.css, (path, serve_as) => {
|
|
235
|
-
css.serve(serve_as, path);
|
|
236
|
-
})
|
|
237
|
-
}
|
|
238
|
-
let js_client = this.client_package || this.js_client || 'jsgui3-client';
|
|
239
|
-
js.serve_package('/js/app.js', js_client, o_serve_package, (err, served) => {
|
|
240
|
-
//var resource_pool = this.resource_pool;
|
|
241
|
-
//console.log('server_router', server_router);
|
|
242
|
-
//console.log('js_client', js_client);
|
|
243
|
-
if (!server_router) {
|
|
244
|
-
throw 'no server_router';
|
|
245
|
-
}
|
|
246
|
-
var routing_tree = server_router.routing_tree;
|
|
247
|
-
routing_tree.set('/', (req, res) => {
|
|
248
|
-
//console.log('root path / request');
|
|
249
|
-
|
|
250
|
-
const o_spc = {
|
|
251
|
-
'req': req,
|
|
252
|
-
'res': res,
|
|
253
|
-
'resource_pool': resource_pool
|
|
254
|
-
}
|
|
255
|
-
|
|
256
|
-
if (this.include_server_ref_in_page_context) o_spc.server = this;
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
var server_page_context = new Server_Page_Context(o_spc);
|
|
260
|
-
|
|
261
|
-
// and .server property?
|
|
262
|
-
// a different way to get the server info to the components is needed.
|
|
263
|
-
|
|
264
|
-
// Page_Bounds_Specifier
|
|
265
|
-
var hd = new jsgui.Client_HTML_Document({
|
|
266
|
-
'context': server_page_context
|
|
267
|
-
});
|
|
268
|
-
hd.include_client_css();
|
|
269
|
-
hd.include_css('/css/basic.css')
|
|
270
|
-
|
|
271
|
-
if (this.css) {
|
|
272
|
-
each(this.css, (path, serve_as) => {
|
|
273
|
-
//css.serve(serve_as, path);
|
|
274
|
-
hd.include_css('/css/' + serve_as);
|
|
275
|
-
});
|
|
276
|
-
}
|
|
277
|
-
|
|
278
|
-
// include a js script block, having it set up the
|
|
279
|
-
// not include_client_js
|
|
280
|
-
|
|
281
|
-
// .include_client_config_js()
|
|
282
|
-
// will get the resource config from the resource publisher.
|
|
283
|
-
|
|
284
|
-
// including data on published resources in the initial html download would be very useful.
|
|
285
|
-
// auto event wiring, so that controls that rely on having this data will have it available.
|
|
286
|
-
|
|
287
|
-
// Want to get this to work, then greatly slim down the codebase, or at least delete comments, use some more syntactic sugar.
|
|
288
|
-
|
|
289
|
-
// Calling 'publish' would be a good method.
|
|
290
|
-
//console.log('this.app_server.map_resource_publishers', this.app_server.map_resource_publishers);
|
|
291
|
-
//console.log('this.app_server.def_resource_publishers', this.app_server.def_resource_publishers);
|
|
292
|
-
|
|
293
|
-
// a script block where we assign the resource publishers.
|
|
294
|
-
// tell the client what resources are available on the server.
|
|
295
|
-
|
|
296
|
-
// include a js script block.
|
|
297
|
-
// jsgui.register_server_resources({...})
|
|
298
|
-
// o_def
|
|
299
|
-
// an object that describes how the resources are published.
|
|
300
|
-
|
|
301
|
-
// app_server.def_resource_publishers
|
|
302
|
-
// the urls
|
|
303
|
-
// what data it provides / its schema.
|
|
304
|
-
// a def from each of the publishers
|
|
305
|
-
// with a schema similar to graphql?
|
|
306
|
-
|
|
307
|
-
//throw 'stop';
|
|
308
|
-
|
|
309
|
-
var body = hd.body;
|
|
310
|
-
let o_params = this.params || {};
|
|
311
|
-
Object.assign(o_params, {
|
|
312
|
-
'context': server_page_context
|
|
313
|
-
});
|
|
314
|
-
//console.log('o_params', o_params);
|
|
315
|
-
//console.log('this.Ctrl', this.Ctrl);
|
|
316
|
-
var ctrl = this.ctrl = new this.Ctrl(o_params);
|
|
317
|
-
ctrl.active();
|
|
318
|
-
//var ctrl2 = new jsgui.Control({});
|
|
319
|
-
body.add(ctrl);
|
|
320
|
-
|
|
321
|
-
let resources_script = new jsgui.script({
|
|
322
|
-
context: server_page_context
|
|
323
|
-
});
|
|
324
|
-
// it will be a client-side function.
|
|
325
|
-
|
|
326
|
-
// Should not use 'add' here.
|
|
327
|
-
// it's the script content.
|
|
328
|
-
|
|
329
|
-
// want to get around that escaping.
|
|
330
|
-
// options escaping / escape : false
|
|
331
|
-
|
|
332
|
-
hd.include_js('/js/app.js');
|
|
333
|
-
|
|
334
|
-
// Would this be a place to register icons?
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
const strc = new jsgui.String_Control({
|
|
338
|
-
context: server_page_context,
|
|
339
|
-
|
|
340
|
-
// Won't have access to the context when registering there?
|
|
341
|
-
// Will need to access the client-side context.
|
|
342
|
-
// Setting jsgui.context on the client-side does make sense.
|
|
343
|
-
// There would only be one context per instance of jsgui on the client.
|
|
344
|
-
|
|
345
|
-
// Could raise an event on jsgui, which the page_context listens to?
|
|
346
|
-
// The calls need to be set up within the page_context, I think.
|
|
347
|
-
|
|
348
|
-
// Could just set the def_server_resources property.
|
|
349
|
-
// Then later activation with the page_context could refer to it.
|
|
350
|
-
|
|
351
|
-
// setting up the def_resource_publishers
|
|
352
|
-
// maybe 'resource' will be a generic term for something in some place.
|
|
353
|
-
// can be non-local, but api will localise its use.
|
|
354
|
-
|
|
355
|
-
text: `jsgui.register_server_resources(${JSON.stringify(this.app_server.def_resource_publishers)});`
|
|
356
|
-
});
|
|
357
|
-
|
|
358
|
-
resources_script.add(strc);
|
|
359
|
-
body.add(resources_script);
|
|
360
|
-
|
|
361
|
-
hd.all_html_render(function (err, deferred_html) {
|
|
362
|
-
if (err) {
|
|
363
|
-
throw err;
|
|
364
|
-
} else {
|
|
365
|
-
//console.log('deferred_html', deferred_html);
|
|
366
|
-
var mime_type = 'text/html';
|
|
367
|
-
//console.log('mime_type ' + mime_type);
|
|
368
|
-
res.writeHead(200, {
|
|
369
|
-
'Content-Type': mime_type
|
|
370
|
-
});
|
|
371
|
-
res.end('<!DOCTYPE html>' + deferred_html, 'utf-8');
|
|
372
|
-
}
|
|
373
|
-
});
|
|
374
|
-
});
|
|
375
|
-
//console.log('pre super start');
|
|
376
|
-
|
|
377
|
-
super.start(this.port, (err, res_super_start) => {
|
|
378
|
-
if (err) {
|
|
379
|
-
callback(err);
|
|
380
|
-
} else {
|
|
381
|
-
//console.log('res_super_start', res_super_start);
|
|
382
|
-
this.raise('scs_ready');
|
|
383
|
-
callback(null, res_super_start);
|
|
384
|
-
}
|
|
385
|
-
});
|
|
386
|
-
});
|
|
387
|
-
// console.log('this.port', this.port);
|
|
388
|
-
}
|
|
389
|
-
|
|
390
|
-
load_icon_set(path, map_icons) {
|
|
391
|
-
// will load each icon into the image resource.
|
|
392
|
-
// sequential way of doing this?
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
}
|
|
399
|
-
}
|
|
400
|
-
|
|
401
|
-
module.exports = Single_Control_Server;
|
|
402
|
-
|
|
403
|
-
// Rendering single page controls makes a lot of sense.
|
|
404
|
-
// It means the activation code can be contained better there.
|
|
405
|
-
|
|
406
|
-
//console.log('resource_pool', resource_pool);
|
|
407
|
-
//console.log('resource_pool.resources', resource_pool.resources);
|
|
408
|
-
|
|
409
|
-
// The start stop toggle button would need to be registered on the client side.
|
|
410
|
-
// May be worth it to have the standard controls registered to start with.
|
|
411
|
-
// Or to have the app know which controls are used, so it can register them.
|
|
412
|
-
|
|
413
|
-
// Get the website resource
|
|
414
|
-
|
|
415
|
-
// Caching items / resources by type?
|
|
416
|
-
// Need to give the resources a name.
|
|
417
|
-
//var website = resource_pool.get_resource('Server Router');
|
|
418
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Created by james on 04/12/2016.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Created by James on 02/10/2016.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
// This one will need to activate on the client.
|
|
10
|
+
// Really want the whole thing to be in one file.
|
|
11
|
+
// Possible to have a standard activation?
|
|
12
|
+
//
|
|
13
|
+
// Or we need to have a client-side control?
|
|
14
|
+
//
|
|
15
|
+
// Some of the wiring could be done automatically.
|
|
16
|
+
//
|
|
17
|
+
|
|
18
|
+
//console.log('pre require jsgui');
|
|
19
|
+
var jsgui = require('jsgui3-html');
|
|
20
|
+
const each = jsgui.each;
|
|
21
|
+
//console.log('post require jsgui');
|
|
22
|
+
//var Start_Stop_Toggle_Button = require('../controls/start-stop-toggle-button');
|
|
23
|
+
const is_array = jsgui.is_array;
|
|
24
|
+
var Server = require('./server');
|
|
25
|
+
var Website_Resource = require('./resources/website-resource');
|
|
26
|
+
var port = 80;
|
|
27
|
+
//console.log('!!Server', !!Server);
|
|
28
|
+
//console.log('Object.keys(Server)', Object.keys(Server));
|
|
29
|
+
var Server_Page_Context = require('./page-context');
|
|
30
|
+
|
|
31
|
+
// js_mode option
|
|
32
|
+
// compress
|
|
33
|
+
// debug
|
|
34
|
+
// (standard)
|
|
35
|
+
|
|
36
|
+
// Want to get the library compressed sizes down. Particulatly client. Can do much more with oext.
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
/*
|
|
41
|
+
var server = new Server({
|
|
42
|
+
'*': {
|
|
43
|
+
'name': 'html-server'
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
*/
|
|
48
|
+
/*
|
|
49
|
+
var resource_pool = root_server.resource_pool;
|
|
50
|
+
// link these getters with the resource pool resource getters?
|
|
51
|
+
let app_server = resource_pool['HTML Server'];
|
|
52
|
+
//console.log('app_server', app_server);
|
|
53
|
+
//
|
|
54
|
+
|
|
55
|
+
//console.log('app_server.resource_names', app_server.resource_names);
|
|
56
|
+
//console.log('!!app_server.resource_pool', !!app_server.resource_pool);
|
|
57
|
+
let js = app_server.resource_pool['Site JavaScript'];
|
|
58
|
+
*/
|
|
59
|
+
|
|
60
|
+
//console.log('Server', Server);
|
|
61
|
+
|
|
62
|
+
// And choose the CSS file / files to send it.
|
|
63
|
+
// Could send basic jsgui css by default
|
|
64
|
+
// Then there would be app css on top of that.
|
|
65
|
+
|
|
66
|
+
// Authenticated_Server?
|
|
67
|
+
// Has got authentication mechanisms as a wrapper for the controls inside.
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
// Want to be able to set up icons as well.
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
class Single_Control_Server extends Server {
|
|
75
|
+
constructor(spec) {
|
|
76
|
+
//spec['*'] = {
|
|
77
|
+
// 'name': 'html-server'
|
|
78
|
+
//};
|
|
79
|
+
|
|
80
|
+
// If the spec is a control contructor...
|
|
81
|
+
if (typeof spec === 'function') {
|
|
82
|
+
super({}, 'single-control-server');
|
|
83
|
+
this.Ctrl = spec;
|
|
84
|
+
this.port = 80;
|
|
85
|
+
} else {
|
|
86
|
+
super(spec);
|
|
87
|
+
let Ctrl = spec.Ctrl || spec.ctrl; // not .ctrl? makes it ambiguous / inconsistent.
|
|
88
|
+
if (is_array(Ctrl)) {
|
|
89
|
+
this.Ctrl = Ctrl[0];
|
|
90
|
+
this.params = Ctrl[1];
|
|
91
|
+
} else {
|
|
92
|
+
if (Ctrl) {
|
|
93
|
+
this.Ctrl = Ctrl;
|
|
94
|
+
} else {
|
|
95
|
+
throw 'Single_Control_Server needs a Ctrl property'
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
if (spec.js_mode) this.js_mode = spec.js_mode;
|
|
99
|
+
if (spec.js_client) this.js_client = spec.js_client;
|
|
100
|
+
// deliver app specific css
|
|
101
|
+
// an obj
|
|
102
|
+
if (spec.css) this.css = spec.css;
|
|
103
|
+
if (spec.icons) this.icons = spec.icons;
|
|
104
|
+
if (spec.include_server_ref_in_page_context) {
|
|
105
|
+
this.include_server_ref_in_page_context = spec.include_server_ref_in_page_context;
|
|
106
|
+
}
|
|
107
|
+
// Ctrl.activate_app
|
|
108
|
+
//spec.activate_app;
|
|
109
|
+
if (spec.activate_app && !this.activate_app) {
|
|
110
|
+
this.activate_app = spec.activate_app;
|
|
111
|
+
}
|
|
112
|
+
//console.log('this.activate_app', this.activate_app);
|
|
113
|
+
//throw 'stop';
|
|
114
|
+
if (spec.client_package) this.client_package = spec.client_package;
|
|
115
|
+
this.port = spec.port || 80;
|
|
116
|
+
}
|
|
117
|
+
//this.__type_name = 'single-control-server';
|
|
118
|
+
var app = new Website_Resource({
|
|
119
|
+
'name': 'html-server'
|
|
120
|
+
});
|
|
121
|
+
|
|
122
|
+
// will need to keep access to the server?
|
|
123
|
+
// server_page_context keeping access to the server?
|
|
124
|
+
|
|
125
|
+
// some place to keep variables on the server.
|
|
126
|
+
// Especially when we are not coding any / much server-side logic.
|
|
127
|
+
|
|
128
|
+
// server.shared
|
|
129
|
+
// want an object that is shared between all server instances.
|
|
130
|
+
|
|
131
|
+
// A server-side Data_Resource could be the way.
|
|
132
|
+
|
|
133
|
+
// Maybe make something like Resource_Pool but simpler?
|
|
134
|
+
// Less prescriptive, but allowing a more complex api...?
|
|
135
|
+
|
|
136
|
+
// page_context.shared
|
|
137
|
+
// shared with the server
|
|
138
|
+
// shared with all page contexts.
|
|
139
|
+
|
|
140
|
+
this.publish = (...args) => app.publish(...args);
|
|
141
|
+
//console.log('app', app);
|
|
142
|
+
//throw 'stop';
|
|
143
|
+
this.resource_pool.add(app);
|
|
144
|
+
this.server_router.set_route('*', app, app.process);
|
|
145
|
+
this.app_server = app;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
// Could start it up with a client_js reference
|
|
149
|
+
|
|
150
|
+
'start' (callback) {
|
|
151
|
+
//throw 'stop';
|
|
152
|
+
//var resource_pool = this.resource_pool;
|
|
153
|
+
|
|
154
|
+
var resource_pool = this.app_server.resource_pool;
|
|
155
|
+
var server_router = this.resource_pool.get_resource('Server Router');
|
|
156
|
+
// Build the client js and include that.
|
|
157
|
+
// Could have been given a different client js file too.
|
|
158
|
+
// By default want to provide the html client from jsgui.
|
|
159
|
+
// /client/client
|
|
160
|
+
|
|
161
|
+
// build the html client code.
|
|
162
|
+
let js = this.app_server.resource_pool['Site JavaScript'];
|
|
163
|
+
let css = this.app_server.resource_pool['Site CSS'];
|
|
164
|
+
let imgs = this.app_server.resource_pool['Site Images'];
|
|
165
|
+
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
// will look into the resource publisher to see what is published.
|
|
169
|
+
|
|
170
|
+
// serve package with replacement options.
|
|
171
|
+
// // the activate app function.
|
|
172
|
+
// Can be put into place in the served JS.
|
|
173
|
+
|
|
174
|
+
// with replacement option within serve_package
|
|
175
|
+
|
|
176
|
+
let o_serve_package = {
|
|
177
|
+
//'babel': 'mini'
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
// babel option.
|
|
181
|
+
// Activation should be defined
|
|
182
|
+
// Or there is some default activation in the client.js
|
|
183
|
+
// It has the maps of controls and Controls
|
|
184
|
+
// Then can activate these controls.
|
|
185
|
+
// There should maybe be some more data services in the client.
|
|
186
|
+
// Could make the client more miniature and modular once it works, and then incorporate react.
|
|
187
|
+
// Data-Resource would be general enough to work on both.
|
|
188
|
+
// The client data resources could then direct their requests to the server ones.
|
|
189
|
+
// Could make a resource-pool for both client and server
|
|
190
|
+
|
|
191
|
+
//console.log('this.activate_app', this.activate_app);
|
|
192
|
+
//throw 'stop';
|
|
193
|
+
|
|
194
|
+
// Should do this before the babel compilation. Think that's the sequence anyway.
|
|
195
|
+
// Not sure why it's not working.
|
|
196
|
+
if (this.activate_app) {
|
|
197
|
+
o_serve_package.replace = {
|
|
198
|
+
'/* -- ACTIVATE-APP -- */': this.activate_app.toString()
|
|
199
|
+
}
|
|
200
|
+
//
|
|
201
|
+
}
|
|
202
|
+
// want it to serve with debug code map
|
|
203
|
+
// for the moment
|
|
204
|
+
// want that to be easier to do with a --debug option.
|
|
205
|
+
// should read command line options.
|
|
206
|
+
o_serve_package.js_mode = 'mini';
|
|
207
|
+
if (this.js_mode) {
|
|
208
|
+
o_serve_package.js_mode = this.js_mode;
|
|
209
|
+
} else {
|
|
210
|
+
//o_serve_package.babel = 'mini';
|
|
211
|
+
}
|
|
212
|
+
// need to minify the js.
|
|
213
|
+
// Also, gzip compression as standard.
|
|
214
|
+
// Need HTTPS for Brotli - but want to get HTTPS working more, tested online and running.
|
|
215
|
+
|
|
216
|
+
// Need to minify js, reduce file size.
|
|
217
|
+
|
|
218
|
+
// Minifying currently breaks it.
|
|
219
|
+
|
|
220
|
+
//o_serve_package.js_mode = 'debug';
|
|
221
|
+
|
|
222
|
+
// Extra functionality for loading / serving icon files?
|
|
223
|
+
// Easily available / usable named icons will be very useful within the app.
|
|
224
|
+
// Could be in sprites / pre-loaded.
|
|
225
|
+
|
|
226
|
+
|
|
227
|
+
|
|
228
|
+
|
|
229
|
+
// Not sure how to do the replace when loading from disk.
|
|
230
|
+
// Give a reference to the package to serve itself.
|
|
231
|
+
// example servers -
|
|
232
|
+
// serve the css as well.
|
|
233
|
+
if (this.css) {
|
|
234
|
+
each(this.css, (path, serve_as) => {
|
|
235
|
+
css.serve(serve_as, path);
|
|
236
|
+
})
|
|
237
|
+
}
|
|
238
|
+
let js_client = this.client_package || this.js_client || 'jsgui3-client';
|
|
239
|
+
js.serve_package('/js/app.js', js_client, o_serve_package, (err, served) => {
|
|
240
|
+
//var resource_pool = this.resource_pool;
|
|
241
|
+
//console.log('server_router', server_router);
|
|
242
|
+
//console.log('js_client', js_client);
|
|
243
|
+
if (!server_router) {
|
|
244
|
+
throw 'no server_router';
|
|
245
|
+
}
|
|
246
|
+
var routing_tree = server_router.routing_tree;
|
|
247
|
+
routing_tree.set('/', (req, res) => {
|
|
248
|
+
//console.log('root path / request');
|
|
249
|
+
|
|
250
|
+
const o_spc = {
|
|
251
|
+
'req': req,
|
|
252
|
+
'res': res,
|
|
253
|
+
'resource_pool': resource_pool
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
if (this.include_server_ref_in_page_context) o_spc.server = this;
|
|
257
|
+
|
|
258
|
+
|
|
259
|
+
var server_page_context = new Server_Page_Context(o_spc);
|
|
260
|
+
|
|
261
|
+
// and .server property?
|
|
262
|
+
// a different way to get the server info to the components is needed.
|
|
263
|
+
|
|
264
|
+
// Page_Bounds_Specifier
|
|
265
|
+
var hd = new jsgui.Client_HTML_Document({
|
|
266
|
+
'context': server_page_context
|
|
267
|
+
});
|
|
268
|
+
hd.include_client_css();
|
|
269
|
+
hd.include_css('/css/basic.css')
|
|
270
|
+
|
|
271
|
+
if (this.css) {
|
|
272
|
+
each(this.css, (path, serve_as) => {
|
|
273
|
+
//css.serve(serve_as, path);
|
|
274
|
+
hd.include_css('/css/' + serve_as);
|
|
275
|
+
});
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
// include a js script block, having it set up the
|
|
279
|
+
// not include_client_js
|
|
280
|
+
|
|
281
|
+
// .include_client_config_js()
|
|
282
|
+
// will get the resource config from the resource publisher.
|
|
283
|
+
|
|
284
|
+
// including data on published resources in the initial html download would be very useful.
|
|
285
|
+
// auto event wiring, so that controls that rely on having this data will have it available.
|
|
286
|
+
|
|
287
|
+
// Want to get this to work, then greatly slim down the codebase, or at least delete comments, use some more syntactic sugar.
|
|
288
|
+
|
|
289
|
+
// Calling 'publish' would be a good method.
|
|
290
|
+
//console.log('this.app_server.map_resource_publishers', this.app_server.map_resource_publishers);
|
|
291
|
+
//console.log('this.app_server.def_resource_publishers', this.app_server.def_resource_publishers);
|
|
292
|
+
|
|
293
|
+
// a script block where we assign the resource publishers.
|
|
294
|
+
// tell the client what resources are available on the server.
|
|
295
|
+
|
|
296
|
+
// include a js script block.
|
|
297
|
+
// jsgui.register_server_resources({...})
|
|
298
|
+
// o_def
|
|
299
|
+
// an object that describes how the resources are published.
|
|
300
|
+
|
|
301
|
+
// app_server.def_resource_publishers
|
|
302
|
+
// the urls
|
|
303
|
+
// what data it provides / its schema.
|
|
304
|
+
// a def from each of the publishers
|
|
305
|
+
// with a schema similar to graphql?
|
|
306
|
+
|
|
307
|
+
//throw 'stop';
|
|
308
|
+
|
|
309
|
+
var body = hd.body;
|
|
310
|
+
let o_params = this.params || {};
|
|
311
|
+
Object.assign(o_params, {
|
|
312
|
+
'context': server_page_context
|
|
313
|
+
});
|
|
314
|
+
//console.log('o_params', o_params);
|
|
315
|
+
//console.log('this.Ctrl', this.Ctrl);
|
|
316
|
+
var ctrl = this.ctrl = new this.Ctrl(o_params);
|
|
317
|
+
ctrl.active();
|
|
318
|
+
//var ctrl2 = new jsgui.Control({});
|
|
319
|
+
body.add(ctrl);
|
|
320
|
+
|
|
321
|
+
let resources_script = new jsgui.script({
|
|
322
|
+
context: server_page_context
|
|
323
|
+
});
|
|
324
|
+
// it will be a client-side function.
|
|
325
|
+
|
|
326
|
+
// Should not use 'add' here.
|
|
327
|
+
// it's the script content.
|
|
328
|
+
|
|
329
|
+
// want to get around that escaping.
|
|
330
|
+
// options escaping / escape : false
|
|
331
|
+
|
|
332
|
+
hd.include_js('/js/app.js');
|
|
333
|
+
|
|
334
|
+
// Would this be a place to register icons?
|
|
335
|
+
|
|
336
|
+
|
|
337
|
+
const strc = new jsgui.String_Control({
|
|
338
|
+
context: server_page_context,
|
|
339
|
+
|
|
340
|
+
// Won't have access to the context when registering there?
|
|
341
|
+
// Will need to access the client-side context.
|
|
342
|
+
// Setting jsgui.context on the client-side does make sense.
|
|
343
|
+
// There would only be one context per instance of jsgui on the client.
|
|
344
|
+
|
|
345
|
+
// Could raise an event on jsgui, which the page_context listens to?
|
|
346
|
+
// The calls need to be set up within the page_context, I think.
|
|
347
|
+
|
|
348
|
+
// Could just set the def_server_resources property.
|
|
349
|
+
// Then later activation with the page_context could refer to it.
|
|
350
|
+
|
|
351
|
+
// setting up the def_resource_publishers
|
|
352
|
+
// maybe 'resource' will be a generic term for something in some place.
|
|
353
|
+
// can be non-local, but api will localise its use.
|
|
354
|
+
|
|
355
|
+
text: `jsgui.register_server_resources(${JSON.stringify(this.app_server.def_resource_publishers)});`
|
|
356
|
+
});
|
|
357
|
+
|
|
358
|
+
resources_script.add(strc);
|
|
359
|
+
body.add(resources_script);
|
|
360
|
+
|
|
361
|
+
hd.all_html_render(function (err, deferred_html) {
|
|
362
|
+
if (err) {
|
|
363
|
+
throw err;
|
|
364
|
+
} else {
|
|
365
|
+
//console.log('deferred_html', deferred_html);
|
|
366
|
+
var mime_type = 'text/html';
|
|
367
|
+
//console.log('mime_type ' + mime_type);
|
|
368
|
+
res.writeHead(200, {
|
|
369
|
+
'Content-Type': mime_type
|
|
370
|
+
});
|
|
371
|
+
res.end('<!DOCTYPE html>' + deferred_html, 'utf-8');
|
|
372
|
+
}
|
|
373
|
+
});
|
|
374
|
+
});
|
|
375
|
+
//console.log('pre super start');
|
|
376
|
+
|
|
377
|
+
super.start(this.port, (err, res_super_start) => {
|
|
378
|
+
if (err) {
|
|
379
|
+
callback(err);
|
|
380
|
+
} else {
|
|
381
|
+
//console.log('res_super_start', res_super_start);
|
|
382
|
+
this.raise('scs_ready');
|
|
383
|
+
callback(null, res_super_start);
|
|
384
|
+
}
|
|
385
|
+
});
|
|
386
|
+
});
|
|
387
|
+
// console.log('this.port', this.port);
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
load_icon_set(path, map_icons) {
|
|
391
|
+
// will load each icon into the image resource.
|
|
392
|
+
// sequential way of doing this?
|
|
393
|
+
|
|
394
|
+
|
|
395
|
+
|
|
396
|
+
|
|
397
|
+
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
module.exports = Single_Control_Server;
|
|
402
|
+
|
|
403
|
+
// Rendering single page controls makes a lot of sense.
|
|
404
|
+
// It means the activation code can be contained better there.
|
|
405
|
+
|
|
406
|
+
//console.log('resource_pool', resource_pool);
|
|
407
|
+
//console.log('resource_pool.resources', resource_pool.resources);
|
|
408
|
+
|
|
409
|
+
// The start stop toggle button would need to be registered on the client side.
|
|
410
|
+
// May be worth it to have the standard controls registered to start with.
|
|
411
|
+
// Or to have the app know which controls are used, so it can register them.
|
|
412
|
+
|
|
413
|
+
// Get the website resource
|
|
414
|
+
|
|
415
|
+
// Caching items / resources by type?
|
|
416
|
+
// Need to give the resources a name.
|
|
417
|
+
//var website = resource_pool.get_resource('Server Router');
|
|
418
|
+
|
|
419
419
|
//console.log('\n\n');
|