jsgui3-server 0.0.74 → 0.0.78

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.
Files changed (155) hide show
  1. package/examples/client-side-popup-menu-button.html +93 -93
  2. package/examples/controls/_html-server-color-palette.js +114 -114
  3. package/examples/controls/html-server-combo-box.js +104 -104
  4. package/examples/controls/html-server-list.js +98 -98
  5. package/examples/controls/html-server-popup-menu-button.js +114 -114
  6. package/examples/controls/html-server-start-stop-toggle-button.js +146 -146
  7. package/examples/controls/scs-arrow-button.js +36 -36
  8. package/examples/controls/scs-date-picker.js +157 -157
  9. package/examples/controls/scs-file-browser.js +82 -82
  10. package/examples/controls/scs-item.js +159 -159
  11. package/examples/controls/scs-month-arrow-selector.js +126 -126
  12. package/examples/controls/scs-month-view.js +95 -95
  13. package/examples/controls/scs-start-stop-toggle-button.js +40 -40
  14. package/examples/controls/scs-tree.js +49 -49
  15. package/examples/controls/scs-year-arrow-selector.js +127 -127
  16. package/examples/demos/date-picker.js +119 -119
  17. package/examples/demos/explain-encapsulation.js +9 -9
  18. package/examples/demos/resizing.js +35 -35
  19. package/examples/demos/server_time.js +6 -6
  20. package/examples/demos/square_box.js +324 -324
  21. package/examples/html-rendering.js +20 -20
  22. package/examples/html-server.js +102 -100
  23. package/fs2.js +1836 -1836
  24. package/module.js +21 -21
  25. package/old/single-control-server.js +418 -418
  26. package/package.json +44 -42
  27. package/publishing/function-publisher.js +202 -202
  28. package/publishing/notes.md +5 -5
  29. package/publishing/observable-publisher.js +118 -118
  30. package/publishing/resource-publisher.js +306 -306
  31. package/resources/data-resource.js +104 -104
  32. package/resources/fs-resource.js +148 -148
  33. package/resources/jsbuilder/Abstract_Single_Declaration.js +105 -0
  34. package/resources/jsbuilder/Abstract_Single_Declaration_Sequence.js +43 -0
  35. package/resources/jsbuilder/JS_AST/JS_AST_Abstract_Node.js +62 -0
  36. package/resources/jsbuilder/JS_AST/JS_AST_Abstract_Node_Group.js +42 -0
  37. package/resources/jsbuilder/JS_AST/JS_AST_Group_Shared.js +62 -0
  38. package/resources/jsbuilder/JS_AST/JS_AST_Node.js +94 -0
  39. package/resources/jsbuilder/JS_AST/JS_AST_Node_0-Core.js +228 -0
  40. package/resources/jsbuilder/JS_AST/JS_AST_Node_1-Babel.js +338 -0
  41. package/resources/jsbuilder/JS_AST/JS_AST_Node_10-Changing.js +40 -0
  42. package/resources/jsbuilder/JS_AST/JS_AST_Node_2.1.1-Child.js +97 -0
  43. package/resources/jsbuilder/JS_AST/JS_AST_Node_2.1.2-Parent.js +38 -0
  44. package/resources/jsbuilder/JS_AST/JS_AST_Node_2.1.3-Ancestor.js +62 -0
  45. package/resources/jsbuilder/JS_AST/JS_AST_Node_2.2-Inner.js +44 -0
  46. package/resources/jsbuilder/JS_AST/JS_AST_Node_2.3-All.js +73 -0
  47. package/resources/jsbuilder/JS_AST/JS_AST_Node_2.4-Sibling.js +93 -0
  48. package/resources/jsbuilder/JS_AST/JS_AST_Node_2.5-Available_In_Scope.js +29 -0
  49. package/resources/jsbuilder/JS_AST/JS_AST_Node_2.9-Signature.js +116 -0
  50. package/resources/jsbuilder/JS_AST/JS_AST_Node_3-Basics.js +160 -0
  51. package/resources/jsbuilder/JS_AST/JS_AST_Node_3.0.0-Basics_First.js +179 -0
  52. package/resources/jsbuilder/JS_AST/JS_AST_Node_3.0.1-Basics_Second.js +88 -0
  53. package/resources/jsbuilder/JS_AST/JS_AST_Node_3.0.99-Basics_Last.js +92 -0
  54. package/resources/jsbuilder/JS_AST/JS_AST_Node_3.1-Basics_Each.js +137 -0
  55. package/resources/jsbuilder/JS_AST/JS_AST_Node_3.1.5-Basics_Count.js +74 -0
  56. package/resources/jsbuilder/JS_AST/JS_AST_Node_3.2-Basics_Filter.js +40 -0
  57. package/resources/jsbuilder/JS_AST/JS_AST_Node_3.3-Basics_Collect.js +86 -0
  58. package/resources/jsbuilder/JS_AST/JS_AST_Node_3.4-Basics_Select.js +43 -0
  59. package/resources/jsbuilder/JS_AST/JS_AST_Node_3.5-Basics_Find.js +41 -0
  60. package/resources/jsbuilder/JS_AST/JS_AST_Node_3.6-Basics_Callmap.js +55 -0
  61. package/resources/jsbuilder/JS_AST/JS_AST_Node_4.0-Index_Indexes.js +46 -0
  62. package/resources/jsbuilder/JS_AST/JS_AST_Node_4.1-Index.js +344 -0
  63. package/resources/jsbuilder/JS_AST/JS_AST_Node_5.0-Category.js +39 -0
  64. package/resources/jsbuilder/JS_AST/JS_AST_Node_5.1-Category_Identifier.js +31 -0
  65. package/resources/jsbuilder/JS_AST/JS_AST_Node_5.2-Category_Literal.js +29 -0
  66. package/resources/jsbuilder/JS_AST/JS_AST_Node_5.3-Category_Expression.js +27 -0
  67. package/resources/jsbuilder/JS_AST/JS_AST_Node_5.4-Category_Pattern.js +9 -0
  68. package/resources/jsbuilder/JS_AST/JS_AST_Node_5.5-Category_Declaration.js +44 -0
  69. package/resources/jsbuilder/JS_AST/JS_AST_Node_5.6-Category_Statement.js +22 -0
  70. package/resources/jsbuilder/JS_AST/JS_AST_Node_6.0-Type.js +87 -0
  71. package/resources/jsbuilder/JS_AST/JS_AST_Node_6.1-Type_Class_Declaration.js +9 -0
  72. package/resources/jsbuilder/JS_AST/JS_AST_Node_6.2-Type_Variable_Declaration.js +28 -0
  73. package/resources/jsbuilder/JS_AST/JS_AST_Node_6.3-Type_Variable_Declarator.js +29 -0
  74. package/resources/jsbuilder/JS_AST/JS_AST_Node_7-Query.js +737 -0
  75. package/resources/jsbuilder/JS_AST/JS_AST_Node_8-Features.js +65 -0
  76. package/resources/jsbuilder/JS_AST/JS_AST_Node_9-Planning.js +32 -0
  77. package/resources/jsbuilder/JS_AST/JS_AST_Node_Arrangement.js +15 -0
  78. package/resources/jsbuilder/JS_AST/JS_AST_Node_Feature/JS_AST_Node_Declared_Object.js +306 -0
  79. package/resources/jsbuilder/JS_AST/JS_AST_Node_Feature/JS_AST_Node_Feature.js +78 -0
  80. package/resources/jsbuilder/JS_AST/JS_AST_Node_Feature/JS_AST_Node_Feature_Declaration.js +249 -0
  81. package/resources/jsbuilder/JS_AST/JS_AST_Node_Feature/JS_AST_Node_Feature_Declarator.js +139 -0
  82. package/resources/jsbuilder/JS_AST/JS_AST_Node_Feature/JS_AST_Root_Node_Feature/JS_AST_Root_Node_Feature.js +10 -0
  83. package/resources/jsbuilder/JS_AST/JS_AST_Node_Feature/JS_AST_Root_Node_Feature/JS_AST_Root_Node_Feature_Exported.js +101 -0
  84. package/resources/jsbuilder/JS_AST/JS_AST_Node_Feature/JS_AST_Root_Node_Feature/JS_AST_Root_Node_Feature_Exports.js +61 -0
  85. package/resources/jsbuilder/JS_AST/JS_AST_Node_Feature/JS_AST_Root_Node_Feature/JS_AST_Root_Node_Interpreted.js +180 -0
  86. package/resources/jsbuilder/JS_AST/JS_AST_Node_Feature/JS_AST_Root_Node_Feature/_JSGUI_Root_Node_Interpreted.js +43 -0
  87. package/resources/jsbuilder/JS_AST/JS_AST_Node_Feature/JS_AST_Root_Node_Feature/special_case_objectassign_to_object.js +12 -0
  88. package/resources/jsbuilder/JS_AST/JS_AST_Node_Group.js +35 -0
  89. package/resources/jsbuilder/JS_AST/JS_AST_Operation.js +11 -0
  90. package/resources/jsbuilder/JS_AST/JS_AST_Operation_On_Relationship.js +32 -0
  91. package/resources/jsbuilder/JS_AST/JS_AST_Ordered_Relationship_Node_To_Group.js +38 -0
  92. package/resources/jsbuilder/JS_AST/JS_AST_Ordinal.js +40 -0
  93. package/resources/jsbuilder/JS_AST/JS_AST_Ordinal_Relationship.js +25 -0
  94. package/resources/jsbuilder/JS_AST/JS_AST_Relationship_Node_To_Group.js +201 -0
  95. package/resources/jsbuilder/JS_AST/JS_AST_Relationship_Node_Within_Group_To_Node.js +44 -0
  96. package/resources/jsbuilder/JS_AST/_JS_AST_Node_3.8-Query_Features.js +77 -0
  97. package/resources/jsbuilder/JS_AST/query/all.js +0 -0
  98. package/resources/jsbuilder/JS_AST/query/enable_array_as_queryable.js +228 -0
  99. package/resources/jsbuilder/JS_AST/query/find_object_keys.js +405 -0
  100. package/resources/jsbuilder/JS_AST/query/node_queries.js +9 -0
  101. package/resources/jsbuilder/JS_AST/query/root_queries.js +0 -0
  102. package/resources/jsbuilder/JS_AST/query/root_query_identidy.js +12 -0
  103. package/resources/jsbuilder/JS_AST_Node_Extended/JSGUI_Singular_Declaration.js +86 -0
  104. package/resources/jsbuilder/JS_AST_Node_Extended/JS_AST_Node_Declaration.js +124 -0
  105. package/resources/jsbuilder/JS_AST_Node_Extended/JS_AST_Node_Extended.js +88 -0
  106. package/resources/jsbuilder/JS_AST_Node_Extended/JS_AST_Node_Extended_0-Core.js +11 -0
  107. package/resources/jsbuilder/JS_Builder.js +11 -0
  108. package/resources/jsbuilder/JS_File/Feature/JS_File_Declared_Object.js +32 -0
  109. package/resources/jsbuilder/JS_File/Feature/JS_File_Exported_Object_Info.js +26 -0
  110. package/resources/jsbuilder/JS_File/Feature/JS_File_Exports.js +79 -0
  111. package/resources/jsbuilder/JS_File/Feature/JS_File_Feature.js +18 -0
  112. package/resources/jsbuilder/JS_File/Feature/JS_File_Imported_Object_Info.js +26 -0
  113. package/resources/jsbuilder/JS_File/Feature/JS_File_Imports.js +9 -0
  114. package/resources/jsbuilder/JS_File/JS_File.js +12 -0
  115. package/resources/jsbuilder/JS_File/JS_File_0-Core.js +202 -0
  116. package/resources/jsbuilder/JS_File/JS_File_1-Early_Parse.js +175 -0
  117. package/resources/jsbuilder/JS_File/JS_File_2-Babel.js +81 -0
  118. package/resources/jsbuilder/JS_File/JS_File_3-JS_AST_Node.js +86 -0
  119. package/resources/jsbuilder/JS_File/JS_File_4-Query.js +414 -0
  120. package/resources/jsbuilder/JS_File/JS_File_4.1-Query_Features.js +415 -0
  121. package/resources/jsbuilder/JS_File/JS_File_5-Planning.js +59 -0
  122. package/resources/jsbuilder/JS_File/JS_File_6-Changing.js +24 -0
  123. package/resources/jsbuilder/JS_File/JS_File_Export_Reference.js +12 -0
  124. package/resources/jsbuilder/JS_File/JS_File_Import_Reference.js +24 -0
  125. package/resources/jsbuilder/JS_File/JS_File_Import_References.js +32 -0
  126. package/resources/jsbuilder/JS_File/JS_File_Processor.js +16 -0
  127. package/resources/jsbuilder/JS_File/JS_Files.js +16 -0
  128. package/resources/jsbuilder/Module.js +14 -0
  129. package/resources/jsbuilder/Platform.js +14 -0
  130. package/resources/jsbuilder/Platforms.js +70 -0
  131. package/resources/jsbuilder/Project.js +109 -0
  132. package/resources/jsbuilder/Reference.js +1 -0
  133. package/resources/jsbuilder/Reference_Sequence.js +16 -0
  134. package/resources/jsbuilder/Scope.js +30 -0
  135. package/resources/jsbuilder/Variable_Name_Provider.js +43 -0
  136. package/resources/jsbuilder/_JS_File.js +226 -0
  137. package/resources/jsbuilder/ast_query.js +21 -0
  138. package/resources/jsbuilder/babel/babel_consts.js +150 -0
  139. package/resources/jsbuilder/babel/babel_node_tools.js +542 -0
  140. package/resources/jsbuilder/babel/deep_iterate/deep_iterate_babel.js +604 -0
  141. package/resources/jsbuilder/build.js +16 -0
  142. package/resources/jsbuilder/platform_notes.md +66 -0
  143. package/resources/jsbuilder/test/test_ast_node.js +451 -0
  144. package/resources/jsbuilder/test/test_js_file.js +304 -0
  145. package/resources/jsbuilder/test/test_project.js +157 -0
  146. package/resources/local-server-info-resource.js +78 -78
  147. package/resources/process-js.js +537 -537
  148. package/resources/server-resource-pool.js +84 -84
  149. package/resources/website-css-resource.js +411 -411
  150. package/resources/website-javascript-resource.js +761 -731
  151. package/resources/website-resource.js +390 -390
  152. package/resources/website-static-html-resource.js +196 -196
  153. package/server.js +170 -170
  154. package/single-control-server.js +398 -398
  155. package/single-page-app.js +129 -129
@@ -1,325 +1,325 @@
1
- /*
2
- A simple demo. This will require a bit more work regarding separating / compiling client-side code.
3
- Being able to write a whole (simple) app in one JS file will be very useful for writing and using something quickly.
4
-
5
-
6
- Will be a demo of some styling, maybe theming.
7
- Size / pos / dim props.
8
- Maybe some things like dragging it.
9
- Maybe it could bounce back into place.
10
- See about physics modelling, eg simulated mass and accelerations, elastic forces.
11
- Maybe that will be in a mixin? Written as a mixin within the demo?
12
- Want interesting functionality to be encapsulated in mixins rather than controls where possible.
13
- Encapsulated so that controls can use this functionality easily.
14
- A little page explaining encapsulation would help...
15
-
16
-
17
- All the code will be valid on the server, apart from inner parts of functions that do checking to see the context (ie activate)
18
- Its not important to hide this code from the server like it is with hiding server-side code from the client.
19
-
20
- */
21
-
22
-
23
- // Will a client js file be generated?
24
- // How will it be generated?
25
-
26
- // Yes - will need to reference html-client.js, while having the control definitions, or code appropriately lifted from here.
27
- // However, would need to create a string js file that does what's needed.
28
-
29
- const jsgui = require('jsgui3-html'); // and will replace this with jsgui-client, I presume.
30
- const {controls, Control, mixins} = jsgui;
31
- const {dragable} = mixins;
32
-
33
- class Demo_UI extends Control {
34
- constructor(spec) {
35
- spec.__type_name = spec.__type_name || 'demo_ui';
36
- super(spec);
37
- const {context} = this;
38
- this.add_class('demo-ui');
39
-
40
- const compose = () => {
41
- const box = new Square_Box({
42
- context: context
43
- })
44
- this.add(box);
45
- }
46
- if (!spec.el) {
47
- compose();
48
- }
49
- }
50
- activate() {
51
- if (!this.__active) {
52
- super.activate();
53
- const {context} = this;
54
-
55
- console.log('activate Demo_UI');
56
- // listen for the context events regarding frames, changes, resizing.
57
-
58
- context.on('window-resize', e_resize => {
59
- console.log('window-resize', e_resize);
60
- });
61
-
62
- /*
63
-
64
- const freq = 10000;
65
- let ts_last_exec;
66
-
67
- const proc = (obj_frame) => {
68
- console.log('proc');
69
- console.log('obj_frame', obj_frame);
70
-
71
- // Need the dims for the dom controls.
72
- // Need i_dom_id for the index of items within the DOM.
73
- // Forget about iid for the moment?
74
- // As these indexes become too sparse for the typed array.
75
-
76
- // Need to look at the map_dom_controls
77
- // This map_dom_controls should be automatically maintained.
78
- // Needs to be updated whenever a control gets added to or removed from the DOM.
79
-
80
- // Could use mutation observer?
81
- // May make more sense to update it when we know that anything has been added to or removed from the DOM.
82
- // Nullify references to the controls when removed from the DOM?
83
- // Use delete? Is this still very slow? Is it appropriate?
84
- // Or build up new object?
85
-
86
- // arr_dom_ctrls...?
87
-
88
- // or keep track of what's being added or removed from the DOM, and deal with it at various stages between frames.
89
- // keeping track of and working within frames will make things work well.
90
-
91
-
92
- //const dims = context.create_dims_from_current_ctrls();
93
- //console.log('dims', dims);
94
- }
95
-
96
- context.on('frame', obj_frame => {
97
- //console.log('obj_frame', obj_frame);
98
- // Want to use the translate feature in the ctrl.ta.
99
-
100
- const {timestamp} = obj_frame;
101
- // Goes rather quickly.
102
- // The page context may do some kinds of observations.
103
-
104
- // The locations of all controls...
105
- // The locations of controls that we are monitoring for dimension changes
106
-
107
- // List / map of controls to check for different positions.
108
-
109
- if (ts_last_exec) {
110
- if (timestamp - ts_last_exec >= freq) {
111
- ts_last_exec = timestamp;
112
- proc(obj_frame);
113
- }
114
- } else {
115
- ts_last_exec = timestamp;
116
- proc(obj_frame);
117
- }
118
- });
119
- */
120
-
121
- // listen for the movement events?
122
- // Context will do more to handle movement.
123
-
124
- // Get a ta of positions etc from the context?
125
- // But a lot of that should be handled behind the scenes. Will keep a whole load of controls' properties together in a big typed array.
126
-
127
-
128
- }
129
- }
130
- }
131
- controls.Demo_UI = Demo_UI;
132
- Demo_UI.css = `
133
- .demo-ui {
134
- display: flex;
135
- flex-direction: column;
136
- justify-content: center;
137
- align-items: center;
138
- text-align: center;
139
- min-height: 100vh;
140
- }
141
- `;
142
- /*
143
-
144
- */
145
-
146
- // Will most likely make use of mixins to give the box some functionality.
147
- // Responding to clicks / presses.
148
- // Drags.
149
- // An elastic effect does seeem like it would be useful.
150
- // Physics sims too...
151
- // Double elastic drag...?
152
- // Could also predict / plan how it will move and set it up with css animation frames.
153
-
154
-
155
- // Making functionality as a mixin makes most sense for many things.
156
- // Code will be more adaptable, and the class defs will be clearer and more concise by referencing the named functionality rather than having the implementation code in there.
157
-
158
- // Could split it into functions?
159
- // client = () => {...}, iso, server
160
-
161
- // Stylistic definition in the code?
162
- // Worth using CSS?
163
- // It's the developer's choics.
164
-
165
- // Will make use of dims / dimensions functionality.
166
- // Changing values in dims could be recognised between frames, and in the next frame, the size & position get updated.
167
- // batching CSS changes?
168
-
169
- class Square_Box extends Control {
170
- constructor(spec) {
171
- spec.__type_name = spec.__type_name || 'square_box';
172
- super(spec);
173
- this.add_class('square-box');
174
- }
175
- activate() {
176
- if (!this.__active) {
177
- super.activate();
178
- console.log('Activate square box');
179
-
180
- // By default should be able to move it around.
181
- // Breaking out of its current positioning, if necessary.
182
- // Or will use a transformation to show it displaced from its current position.
183
- // Easier than not setting it to abs pos and setting left and top properties.
184
-
185
- // Will interact with the typed array that deals with translation properties.
186
- // Needs to happen on that lower level.
187
-
188
- // Will do work on translate mode dragging.
189
-
190
- dragable(this, {
191
- drag_mode: 'translate'
192
- });
193
-
194
- console.log('dragable mixin applied to square');
195
- this.dragable = true;
196
- console.log('this.dragable = true;');
197
-
198
- this.on('dragend', e => {
199
- console.log('square box dragend e', e);
200
-
201
- // Then snap it back to its original position?
202
- // Get a snap back function here?
203
-
204
- // Could snap it back by changing / animating the transform properties.
205
- // Or not right now... at least we have the main translate drag functionality working.
206
-
207
- // Also, could allow extensions / custom modes to be draggable.
208
-
209
-
210
-
211
-
212
-
213
-
214
- })
215
-
216
- // Use a variety of pieces of functionality.
217
-
218
- // Draggable
219
- // Then elastic effect upon release.
220
-
221
- // This should work quickly on a lower level.
222
- // Making a system for faster interactions.
223
-
224
- // Some other parts of the framework will use direct access to these typed arrays.
225
- // Need things coded on that lower level.
226
- // quite a lot of code involved....
227
-
228
- /*
229
-
230
- setTimeout(() => {
231
- // const X = 0, Y = 1, H = 2, W = 3, R = 4, B = 5, TX = 6, TY = 7;
232
- this.ta[6] = 100;
233
- }, 4000); // this works
234
- */
235
-
236
-
237
- }
238
- }
239
- }
240
- Square_Box.css = `
241
- .square-box {
242
- background-color: #BB3333;
243
- width: 220px;
244
- height: 220px;
245
- }
246
- `;
247
- controls.Square_Box = Square_Box;
248
-
249
- // Client and server
250
-
251
- // Overall control.
252
- // A square box inside that control.
253
-
254
- // Server
255
- // The definition of and loading in of server object.
256
- // Starting it up. All of the code within the part where the module runs.
257
-
258
- // SCS makes sense for this though.
259
-
260
- // Then will make a nice demo to do with dragging and elasticity.
261
- // Need to do more work on the js resource converting single file js to client-side js.
262
- // Won't be all that complicated overall but has parts with a bit of complexity that need to be written.
263
-
264
- if (require.main === module) {
265
- const SCS = require('../../single-control-server');
266
- // generate client js from this js itself...
267
- // possibly need to save client js in same path too...?
268
- // same file name, .client.js?
269
- // would make sense.
270
- // probably nicer without, but not sure how easy / possible to do it.
271
-
272
- // client js - be able to detect if its a server module.
273
- // if so, will need to do some replacements and removals.
274
- // (transformations)
275
- const server = new SCS({
276
- Ctrl: Demo_UI,
277
-
278
- // Will do necessary transformations to turn this into a client package.
279
- // Would first spot that it's a module that can run on the server.
280
- // Need this to work within jsgui like here, and outside.
281
- // Will need to do some replacements at some points in the process.
282
- // Further than just the CSS removal and extraction.
283
- // Needs server code removal.
284
- // Needs to include the client side js...
285
- // Or replace the jsgui3-html with jsgui3-client at the top.
286
-
287
- // Also interested in removing controls that are not used within the app.
288
- // Will save on download size.
289
- // For the moment, focus on splitting out the client-side code from server-side, and making it a nice package to serve to the client.
290
- /// Will be easier not to have to make a separate client js file in many cases.
291
- // Find a way to include activation code that references the context?
292
- // Could be within the controls' activation.
293
-
294
-
295
- // Need to go through / make the client side js at a relatively early stage.
296
- // Preferable before browserify (linking).
297
- // May be best / necessary to save a .client.js file.
298
-
299
-
300
- // Client package processing to remove any server references.
301
- // Change necessary ref to the client file.
302
- // A somewhat complex recomplition process but it will make the examples and demos simpler.
303
- // Single file full / single control server demos will be of great use.
304
-
305
-
306
- // String-only control definitions may come.
307
- // All properties available when given as text.
308
- // Property parsing.
309
- 'js_mode': 'debug',
310
-
311
- 'client_package': require.resolve('./square_box.js')
312
- //js_client: require.resolve('./square_box.js')
313
- });
314
-
315
- // then start the server....
316
-
317
- server.start(function (err, cb_start) {
318
- if (err) {
319
- throw err;
320
- } else {
321
- console.log('server started');
322
- }
323
- });
324
-
1
+ /*
2
+ A simple demo. This will require a bit more work regarding separating / compiling client-side code.
3
+ Being able to write a whole (simple) app in one JS file will be very useful for writing and using something quickly.
4
+
5
+
6
+ Will be a demo of some styling, maybe theming.
7
+ Size / pos / dim props.
8
+ Maybe some things like dragging it.
9
+ Maybe it could bounce back into place.
10
+ See about physics modelling, eg simulated mass and accelerations, elastic forces.
11
+ Maybe that will be in a mixin? Written as a mixin within the demo?
12
+ Want interesting functionality to be encapsulated in mixins rather than controls where possible.
13
+ Encapsulated so that controls can use this functionality easily.
14
+ A little page explaining encapsulation would help...
15
+
16
+
17
+ All the code will be valid on the server, apart from inner parts of functions that do checking to see the context (ie activate)
18
+ Its not important to hide this code from the server like it is with hiding server-side code from the client.
19
+
20
+ */
21
+
22
+
23
+ // Will a client js file be generated?
24
+ // How will it be generated?
25
+
26
+ // Yes - will need to reference html-client.js, while having the control definitions, or code appropriately lifted from here.
27
+ // However, would need to create a string js file that does what's needed.
28
+
29
+ const jsgui = require('jsgui3-html'); // and will replace this with jsgui-client, I presume.
30
+ const {controls, Control, mixins} = jsgui;
31
+ const {dragable} = mixins;
32
+
33
+ class Demo_UI extends Control {
34
+ constructor(spec) {
35
+ spec.__type_name = spec.__type_name || 'demo_ui';
36
+ super(spec);
37
+ const {context} = this;
38
+ this.add_class('demo-ui');
39
+
40
+ const compose = () => {
41
+ const box = new Square_Box({
42
+ context: context
43
+ })
44
+ this.add(box);
45
+ }
46
+ if (!spec.el) {
47
+ compose();
48
+ }
49
+ }
50
+ activate() {
51
+ if (!this.__active) {
52
+ super.activate();
53
+ const {context} = this;
54
+
55
+ console.log('activate Demo_UI');
56
+ // listen for the context events regarding frames, changes, resizing.
57
+
58
+ context.on('window-resize', e_resize => {
59
+ console.log('window-resize', e_resize);
60
+ });
61
+
62
+ /*
63
+
64
+ const freq = 10000;
65
+ let ts_last_exec;
66
+
67
+ const proc = (obj_frame) => {
68
+ console.log('proc');
69
+ console.log('obj_frame', obj_frame);
70
+
71
+ // Need the dims for the dom controls.
72
+ // Need i_dom_id for the index of items within the DOM.
73
+ // Forget about iid for the moment?
74
+ // As these indexes become too sparse for the typed array.
75
+
76
+ // Need to look at the map_dom_controls
77
+ // This map_dom_controls should be automatically maintained.
78
+ // Needs to be updated whenever a control gets added to or removed from the DOM.
79
+
80
+ // Could use mutation observer?
81
+ // May make more sense to update it when we know that anything has been added to or removed from the DOM.
82
+ // Nullify references to the controls when removed from the DOM?
83
+ // Use delete? Is this still very slow? Is it appropriate?
84
+ // Or build up new object?
85
+
86
+ // arr_dom_ctrls...?
87
+
88
+ // or keep track of what's being added or removed from the DOM, and deal with it at various stages between frames.
89
+ // keeping track of and working within frames will make things work well.
90
+
91
+
92
+ //const dims = context.create_dims_from_current_ctrls();
93
+ //console.log('dims', dims);
94
+ }
95
+
96
+ context.on('frame', obj_frame => {
97
+ //console.log('obj_frame', obj_frame);
98
+ // Want to use the translate feature in the ctrl.ta.
99
+
100
+ const {timestamp} = obj_frame;
101
+ // Goes rather quickly.
102
+ // The page context may do some kinds of observations.
103
+
104
+ // The locations of all controls...
105
+ // The locations of controls that we are monitoring for dimension changes
106
+
107
+ // List / map of controls to check for different positions.
108
+
109
+ if (ts_last_exec) {
110
+ if (timestamp - ts_last_exec >= freq) {
111
+ ts_last_exec = timestamp;
112
+ proc(obj_frame);
113
+ }
114
+ } else {
115
+ ts_last_exec = timestamp;
116
+ proc(obj_frame);
117
+ }
118
+ });
119
+ */
120
+
121
+ // listen for the movement events?
122
+ // Context will do more to handle movement.
123
+
124
+ // Get a ta of positions etc from the context?
125
+ // But a lot of that should be handled behind the scenes. Will keep a whole load of controls' properties together in a big typed array.
126
+
127
+
128
+ }
129
+ }
130
+ }
131
+ controls.Demo_UI = Demo_UI;
132
+ Demo_UI.css = `
133
+ .demo-ui {
134
+ display: flex;
135
+ flex-direction: column;
136
+ justify-content: center;
137
+ align-items: center;
138
+ text-align: center;
139
+ min-height: 100vh;
140
+ }
141
+ `;
142
+ /*
143
+
144
+ */
145
+
146
+ // Will most likely make use of mixins to give the box some functionality.
147
+ // Responding to clicks / presses.
148
+ // Drags.
149
+ // An elastic effect does seeem like it would be useful.
150
+ // Physics sims too...
151
+ // Double elastic drag...?
152
+ // Could also predict / plan how it will move and set it up with css animation frames.
153
+
154
+
155
+ // Making functionality as a mixin makes most sense for many things.
156
+ // Code will be more adaptable, and the class defs will be clearer and more concise by referencing the named functionality rather than having the implementation code in there.
157
+
158
+ // Could split it into functions?
159
+ // client = () => {...}, iso, server
160
+
161
+ // Stylistic definition in the code?
162
+ // Worth using CSS?
163
+ // It's the developer's choics.
164
+
165
+ // Will make use of dims / dimensions functionality.
166
+ // Changing values in dims could be recognised between frames, and in the next frame, the size & position get updated.
167
+ // batching CSS changes?
168
+
169
+ class Square_Box extends Control {
170
+ constructor(spec) {
171
+ spec.__type_name = spec.__type_name || 'square_box';
172
+ super(spec);
173
+ this.add_class('square-box');
174
+ }
175
+ activate() {
176
+ if (!this.__active) {
177
+ super.activate();
178
+ console.log('Activate square box');
179
+
180
+ // By default should be able to move it around.
181
+ // Breaking out of its current positioning, if necessary.
182
+ // Or will use a transformation to show it displaced from its current position.
183
+ // Easier than not setting it to abs pos and setting left and top properties.
184
+
185
+ // Will interact with the typed array that deals with translation properties.
186
+ // Needs to happen on that lower level.
187
+
188
+ // Will do work on translate mode dragging.
189
+
190
+ dragable(this, {
191
+ drag_mode: 'translate'
192
+ });
193
+
194
+ console.log('dragable mixin applied to square');
195
+ this.dragable = true;
196
+ console.log('this.dragable = true;');
197
+
198
+ this.on('dragend', e => {
199
+ console.log('square box dragend e', e);
200
+
201
+ // Then snap it back to its original position?
202
+ // Get a snap back function here?
203
+
204
+ // Could snap it back by changing / animating the transform properties.
205
+ // Or not right now... at least we have the main translate drag functionality working.
206
+
207
+ // Also, could allow extensions / custom modes to be draggable.
208
+
209
+
210
+
211
+
212
+
213
+
214
+ })
215
+
216
+ // Use a variety of pieces of functionality.
217
+
218
+ // Draggable
219
+ // Then elastic effect upon release.
220
+
221
+ // This should work quickly on a lower level.
222
+ // Making a system for faster interactions.
223
+
224
+ // Some other parts of the framework will use direct access to these typed arrays.
225
+ // Need things coded on that lower level.
226
+ // quite a lot of code involved....
227
+
228
+ /*
229
+
230
+ setTimeout(() => {
231
+ // const X = 0, Y = 1, H = 2, W = 3, R = 4, B = 5, TX = 6, TY = 7;
232
+ this.ta[6] = 100;
233
+ }, 4000); // this works
234
+ */
235
+
236
+
237
+ }
238
+ }
239
+ }
240
+ Square_Box.css = `
241
+ .square-box {
242
+ background-color: #BB3333;
243
+ width: 220px;
244
+ height: 220px;
245
+ }
246
+ `;
247
+ controls.Square_Box = Square_Box;
248
+
249
+ // Client and server
250
+
251
+ // Overall control.
252
+ // A square box inside that control.
253
+
254
+ // Server
255
+ // The definition of and loading in of server object.
256
+ // Starting it up. All of the code within the part where the module runs.
257
+
258
+ // SCS makes sense for this though.
259
+
260
+ // Then will make a nice demo to do with dragging and elasticity.
261
+ // Need to do more work on the js resource converting single file js to client-side js.
262
+ // Won't be all that complicated overall but has parts with a bit of complexity that need to be written.
263
+
264
+ if (require.main === module) {
265
+ const SCS = require('../../single-control-server');
266
+ // generate client js from this js itself...
267
+ // possibly need to save client js in same path too...?
268
+ // same file name, .client.js?
269
+ // would make sense.
270
+ // probably nicer without, but not sure how easy / possible to do it.
271
+
272
+ // client js - be able to detect if its a server module.
273
+ // if so, will need to do some replacements and removals.
274
+ // (transformations)
275
+ const server = new SCS({
276
+ Ctrl: Demo_UI,
277
+
278
+ // Will do necessary transformations to turn this into a client package.
279
+ // Would first spot that it's a module that can run on the server.
280
+ // Need this to work within jsgui like here, and outside.
281
+ // Will need to do some replacements at some points in the process.
282
+ // Further than just the CSS removal and extraction.
283
+ // Needs server code removal.
284
+ // Needs to include the client side js...
285
+ // Or replace the jsgui3-html with jsgui3-client at the top.
286
+
287
+ // Also interested in removing controls that are not used within the app.
288
+ // Will save on download size.
289
+ // For the moment, focus on splitting out the client-side code from server-side, and making it a nice package to serve to the client.
290
+ /// Will be easier not to have to make a separate client js file in many cases.
291
+ // Find a way to include activation code that references the context?
292
+ // Could be within the controls' activation.
293
+
294
+
295
+ // Need to go through / make the client side js at a relatively early stage.
296
+ // Preferable before browserify (linking).
297
+ // May be best / necessary to save a .client.js file.
298
+
299
+
300
+ // Client package processing to remove any server references.
301
+ // Change necessary ref to the client file.
302
+ // A somewhat complex recomplition process but it will make the examples and demos simpler.
303
+ // Single file full / single control server demos will be of great use.
304
+
305
+
306
+ // String-only control definitions may come.
307
+ // All properties available when given as text.
308
+ // Property parsing.
309
+ 'js_mode': 'debug',
310
+
311
+ 'client_package': require.resolve('./square_box.js')
312
+ //js_client: require.resolve('./square_box.js')
313
+ });
314
+
315
+ // then start the server....
316
+
317
+ server.start(function (err, cb_start) {
318
+ if (err) {
319
+ throw err;
320
+ } else {
321
+ console.log('server started');
322
+ }
323
+ });
324
+
325
325
  }