@dualbox/editor 1.0.1 → 1.0.3

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 (43) hide show
  1. package/js/src/GraphEditor.js +159 -0
  2. package/js/src/c/GraphController.js +646 -0
  3. package/js/src/libs/CodeMirror.js +8 -0
  4. package/js/src/libs/fontawesome.js +1 -0
  5. package/js/src/libs/jsoneditor.css +2 -0
  6. package/js/src/libs/jsoneditor.js +4 -0
  7. package/js/src/m/DualboxUtils.js +35 -0
  8. package/js/src/m/GraphModel.js +2167 -0
  9. package/js/src/m/History.js +94 -0
  10. package/js/src/m/Merger.js +357 -0
  11. package/js/src/v/AppManager.js +61 -0
  12. package/js/src/v/CanvasSizeHandler.js +136 -0
  13. package/js/src/v/ContextMenu.css +45 -0
  14. package/js/src/v/ContextMenu.js +239 -0
  15. package/js/src/v/GraphView.js +928 -0
  16. package/js/src/v/PlumbStyle.js +254 -0
  17. package/js/src/v/Selector.js +239 -0
  18. package/js/src/v/TemplateManager.js +79 -0
  19. package/js/src/v/Translater.js +174 -0
  20. package/js/src/v/Utils.js +7 -0
  21. package/js/src/v/Zoomer.js +201 -0
  22. package/js/src/v/templates/addNode.css +45 -0
  23. package/js/src/v/templates/addNode.html +62 -0
  24. package/js/src/v/templates/addNode.js +34 -0
  25. package/js/src/v/templates/debugNodeInfos.css +5 -0
  26. package/js/src/v/templates/debugNodeInfos.html +336 -0
  27. package/js/src/v/templates/debugNodeInfos.js +31 -0
  28. package/js/src/v/templates/editMainSettings.css +67 -0
  29. package/js/src/v/templates/editMainSettings.html +265 -0
  30. package/js/src/v/templates/editMainSettings.js +240 -0
  31. package/js/src/v/templates/editNodeSettings.css +86 -0
  32. package/js/src/v/templates/editNodeSettings.html +539 -0
  33. package/js/src/v/templates/editNodeSettings.js +356 -0
  34. package/js/src/v/templates/graphNode.css +333 -0
  35. package/js/src/v/templates/graphNode.html +227 -0
  36. package/js/src/v/templates/graphNode.js +412 -0
  37. package/js/src/v/templates/main.css +353 -0
  38. package/js/src/v/templates/main.html +149 -0
  39. package/js/src/v/templates/main.js +511 -0
  40. package/js/src/v/templates/searchResults.css +50 -0
  41. package/js/src/v/templates/searchResults.html +46 -0
  42. package/js/src/v/templates/searchResults.js +176 -0
  43. package/package.json +3 -2
@@ -0,0 +1,336 @@
1
+ @{ var utils = require('../Utils'); }
2
+ @{ var moment = require('moment'); }
3
+
4
+ @!(data)
5
+ @{ var debug = data.node.getSnapshot(); }
6
+ <div class="card-debug h100" id="debug-node">
7
+ <div style="padding-left: 10px; padding-top: 10px; padding-right: 10px;">
8
+ <h2 class="edit-dualbox-node-id">
9
+ <div class="dualbox-node-name">
10
+ <span class="text-truncate d-inline-block" style="width: 290px">@(data.node.graphId)</span>
11
+ </div>
12
+ <div class="dualbox-node-name-edit" style="display: none;">
13
+ <input type="text" class="form-control dualbox-node-name-input" style="display: inline-block;" value="@(data.node.graphId)" data-type="@(data.node.type)" autofocus/>
14
+ <button class="btn btn-primary btn-save-node-name-change" data-id="@(data.node.graphId)" data-type="@(data.node.type)" style="display: inline-block;">Save</button>
15
+ </div>
16
+ </h2>
17
+ <p><small class="edit-dualbox-node-package-name">@(data.node.getPackageName())</small></p>
18
+ </div>
19
+
20
+ <div class="edit-body">
21
+ <div class="card card-state">
22
+ <div class="card-header" id="debug-node-state" data-toggle="collapse" data-target="#debug-node-state-collapse" aria-expanded="true" aria-controls="debug-node-state-collapse">
23
+ <h5 class="mb-0 btn-link">State</h5>
24
+ </div>
25
+
26
+ <div id="debug-node-state-collapse" class="collapse show" aria-labelledby="debug-node-state" data-parent="#debug-node">
27
+ <div class="card-body" style="padding-left: 15px;">
28
+ <table class="table-desc table-striped">
29
+ <thead class="thead-dark">
30
+ <th>Key</th>
31
+ <th>Value</th>
32
+ </thead>
33
+ <tbody>
34
+ <tr><td>status</td><td>@showStatus(debug.state.status)</td></tr>
35
+ <tr><td>invalidateSent</td><td>@(debug.state.invalidateSent)</td></tr>
36
+ <tr><td>readSent</td><td>@(debug.state.readSent)</td></tr>
37
+ <tr><td>allowedToRestart</td><td>@(debug.state.allowedToRestart)</td></tr>
38
+ <tr><td>evaluating</td><td>@(debug.state.evaluating)</td></tr>
39
+ <tr><td>initialized</td><td>@(debug.state.initialized)</td></tr>
40
+ </tbody>
41
+ </table>
42
+ </div>
43
+ </div>
44
+ </div>
45
+
46
+
47
+ @if( data.node.hasInputs() ) {
48
+ <div class="card card-settings">
49
+ <div class="card-header" id="debug-node-inputs" data-toggle="collapse" data-target="#debug-node-inputs-collapse" aria-expanded="false" aria-controls="debug-node-inputs-collapse">
50
+ <h5 class="mb-0 btn-link">Data <small><span class="badge badge-secondary">@(data.node.getInputsNames().length)</span></small></h5>
51
+ </div>
52
+ <div id="debug-node-inputs-collapse" class="collapse" aria-labelledby="debug-node-inputs" data-parent="#card-debug">
53
+ <div class="card-body">
54
+ <table class="table-desc table-striped">
55
+ <thead class="thead-dark">
56
+ <th>Input</th>
57
+ <th>Valid</th>
58
+ <th>Type</th>
59
+ <th>Value</th>
60
+ <th>Default</th>
61
+ </thead>
62
+ <tbody>
63
+ @{var keys = data.node.getInputsNames() }
64
+ @for(var i=0; i<keys.length; i++) {
65
+ @{ var key = keys[i]; }
66
+ @{ var inputData = debug.data[key]; }
67
+ @if( inputData.value ) {
68
+ @{ var val = data.m.getSnapshotValue(val); }
69
+ }
70
+ @if( inputData.default ) {
71
+ @{ var defaultValue = data.m.getSnapshotValue(inputData.default); }
72
+ }
73
+ <tr>
74
+ <td>
75
+ @(key)
76
+ @if( data.node.hasInputDesc(key) ) {
77
+ <button type="button" class="btn btn-transparent" data-toggle="tooltip" data-placement="right" title="@(data.node.getInputDesc(key))" style="padding: 0;"><i class="text-info far fa-question-circle"></i></button>
78
+ }
79
+ </td>
80
+ <td>@(inputData.valid)</td>
81
+ <td>
82
+ @if( val ) {
83
+ @if( val.metadata && val.metadata.type ) {
84
+ @(val.metadata.type)
85
+ }
86
+ else {
87
+ @(typeof val)
88
+ }
89
+ }
90
+ </td>
91
+ <td>
92
+ @if( val ) {
93
+ @displayValue(val)
94
+ }
95
+ </td>
96
+ <td>
97
+ @if( defaultValue ) {
98
+ @displayValue(defaultValue)
99
+ }
100
+ </td>
101
+ </tr>
102
+ }
103
+ </tbody>
104
+ </table>
105
+ </div>
106
+ </div>
107
+ </div>
108
+ }
109
+
110
+ @if( debug.cache ) {
111
+ <div class="card card-settings">
112
+ <div class="card-header" id="debug-node-cache" data-toggle="collapse" data-target="#debug-node-cache-collapse" aria-expanded="false" aria-controls="debug-node-cache-collapse">
113
+ <h5 class="mb-0 btn-link">Cache</h5>
114
+ </div>
115
+ <div id="debug-node-cache-collapse" class="collapse" aria-labelledby="debug-node-cache" data-parent="#card-debug">
116
+ <div class="card-body" style="padding-left: 15px;">
117
+ <table class="table-desc table-striped">
118
+ <thead class="thead-dark">
119
+ <th>Output</th>
120
+ <th>Value</th>
121
+ </thead>
122
+ <tbody>
123
+ @{var keys = Object.keys(debug.cache) }
124
+ @for(var i=0; i<keys.length; i++) {
125
+ @{ var key = keys[i]; }
126
+ @{ var outputData = data.m.getSnapshotValue(debug.cache[key]); }
127
+ <tr>
128
+ <td>@(key)</td>
129
+ <td>@displayValue(outputData)</td>
130
+ </tr>
131
+ }
132
+ </tbody>
133
+ </table>
134
+ </div>
135
+ </div>
136
+ </div>
137
+ }
138
+
139
+ @if( debug.times ) {
140
+ @if( debug.times.emissions && (debug.times.emissions.lastRead || debug.times.emissions.lastInvalidate || debug.times.emissions.lastData ) ) {
141
+ <div class="card card-settings">
142
+ <div class="card-header" id="debug-node-events" data-toggle="collapse" data-target="#debug-node-events-collapse" aria-expanded="false" aria-controls="debug-node-events-collapse">
143
+ <h5 class="mb-0 btn-link">Last events</h5>
144
+ </div>
145
+ <div id="debug-node-events-collapse" class="collapse" aria-labelledby="debug-node-events" data-parent="#card-debug">
146
+ <div class="card-body" style="padding-left: 15px;">
147
+
148
+ @if( debug.times.emissions.lastRead ) {
149
+ <div class="mb-3">
150
+ <p><b><u>Last read @displayNumber(debug.times.emissions.nbRead)</u> <span class="float-right">@displayTime(debug.times.emissions.lastRead.date)</span></b></p>
151
+ <span>Missing: <b>@( debug.times.emissions.lastRead.data.join(', ') )</b></span><br/>
152
+ </div>
153
+ }
154
+
155
+ @if( debug.times.emissions.lastInvalidate ) {
156
+ <div class="mb-3">
157
+ <p><b><u>Last Invalidate @displayNumber(debug.times.emissions.nbInvalidate)</u> <span class="float-right">@displayTime(debug.times.emissions.lastInvalidate.date)</span></b></p>
158
+ <span>Invalidated keys: <b>@( debug.times.emissions.lastInvalidate.data.join(', ') )</b></span><br/>
159
+ </div>
160
+ }
161
+
162
+ @if( debug.times.emissions.lastData ) {
163
+ <div class="mb-3">
164
+ <p><b><u>Last Data @displayNumber(debug.times.emissions.nbData)</u> <span class="float-right">@displayTime(debug.times.emissions.lastData.date)</span></b></p>
165
+ <table class="table-desc table-striped">
166
+ <thead class="thead-dark">
167
+ <th>Output</th>
168
+ <th>Value</th>
169
+ </thead>
170
+ <tbody>
171
+ @{var keys = Object.keys(debug.times.emissions.lastData.data) }
172
+ @for(var i=0; i<keys.length; i++) {
173
+ @{ var key = keys[i]; }
174
+ @{ var outputData = data.m.getSnapshotValue(debug.times.emissions.lastData.data[key]); }
175
+ <tr>
176
+ <td>@(key)</td>
177
+ <td>@displayValue(outputData)</td>
178
+ </tr>
179
+ }
180
+ </tbody>
181
+ </table>
182
+ </div>
183
+ }
184
+ </div>
185
+ </div>
186
+ </div>
187
+ }
188
+
189
+ @if( debug.times.evaluations && (debug.times.evaluations.lastStart || debug.times.evaluations.lastEnd || debug.times.evaluations.lastCancel ) ) {
190
+ <div class="card card-settings">
191
+ <div class="card-header" id="debug-node-evaluations" data-toggle="collapse" data-target="#debug-node-evaluations-collapse" aria-expanded="false" aria-controls="debug-node-evaluations-collapse">
192
+ <h5 class="mb-0 btn-link">Last evaluations</h5>
193
+ </div>
194
+ <div id="debug-node-evaluations-collapse" class="collapse" aria-labelledby="debug-node-evaluations" data-parent="#card-debug">
195
+ <div class="card-body" style="padding-left: 15px;">
196
+
197
+ @if( debug.times.evaluations.lastStart ) {
198
+ <div class="mb-3">
199
+ <p><b><u>Last start</u> <span class="float-right">@displayTime(debug.times.evaluations.lastStart.date)</span></b></p>
200
+ </div>
201
+ }
202
+
203
+ @if( debug.times.evaluations.lastEnd ) {
204
+ <div class="mb-3">
205
+ <p><b><u>Last end</u> <span class="float-right">@displayTime(debug.times.evaluations.lastEnd.date)</span></b></p>
206
+ </div>
207
+ }
208
+
209
+ @if( debug.times.evaluations.lastCancel ) {
210
+ <div class="mb-3">
211
+ <p><b><u>Last Cancel</u> <span class="float-right">@displayTime(debug.times.evaluations.lastCancel.date)</span></b></p>
212
+ <span>reason: <b>@( debug.times.evaluations.lastCancel.reason )</b></span><br/>
213
+ </div>
214
+ }
215
+ </div>
216
+ </div>
217
+ </div>
218
+ }
219
+ }
220
+
221
+
222
+ @if( debug.performances ) {
223
+ <div class="card card-performances">
224
+ <div class="card-header" id="debug-node-performances" data-toggle="collapse" data-target="#debug-node-performances-collapse" aria-expanded="false" aria-controls="debug-node-performances-collapse">
225
+ <h5 class="mb-0 btn-link">Performances</h5>
226
+ </div>
227
+
228
+ <div id="debug-node-performances-collapse" class="collapse" aria-labelledby="debug-node-performances" data-parent="#debug-node">
229
+ <div class="card-body" style="padding-left: 15px;">
230
+ <table class="table-desc table-striped">
231
+ <thead class="thead-dark">
232
+ <th>Stat</th>
233
+ <th>Value</th>
234
+ </thead>
235
+ <tbody>
236
+ <tr><td>min</td><td>@(debug.performances.min && debug.performances.min.toFixed(0))ms</td></tr>
237
+ <tr><td>max</td><td>@(debug.performances.max && debug.performances.max.toFixed(0))ms</td></tr>
238
+ <tr><td>avg</td><td>@(debug.performances.avg && debug.performances.avg.toFixed(0))ms</td></tr>
239
+ <tr><td>total</td><td>@(debug.performances.total && debug.performances.total.toFixed(0))ms</td></tr>
240
+ <tr><td>Nb of runs</td><td>@(debug.performances.nbRuns)</td></tr>
241
+ </tbody>
242
+ </table>
243
+ </div>
244
+ </div>
245
+ </div>
246
+ }
247
+ </div>
248
+
249
+ <div class="modal debug-json-modal" tabindex="-1" role="dialog">
250
+ <div class="modal-dialog" role="document">
251
+ <div class="modal-content">
252
+ <div class="modal-header">
253
+ <h5 class="modal-title">Value debugger</h5>
254
+ <button type="button" class="close" data-dismiss="modal" aria-label="Close">
255
+ <span aria-hidden="true">&times;</span>
256
+ </button>
257
+ </div>
258
+ <div class="modal-body">
259
+ <div class="json-editor" style="height: 400px;"></div>
260
+ </div>
261
+ <div class="modal-footer">
262
+ <button type="button" class="btn btn-primary btn-save">Save changes</button>
263
+ <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
264
+ </div>
265
+ </div>
266
+ </div>
267
+ </div>
268
+ </div>
269
+
270
+ @function showStatus(s) {
271
+ @if( data.node.isSnapshotStatus(0) ) {
272
+ <span class="card-status-idle">IDLE</span>
273
+ }
274
+ @if( data.node.isSnapshotStatus(1) ) {
275
+ <span class="card-status-computing">COMPUTING</span>
276
+ }
277
+ @if( data.node.isSnapshotStatus(2) ) {
278
+ <span class="card-status-awaiting-data">WAITING</span>
279
+ }
280
+ @if( data.node.isSnapshotStatus(3) ) {
281
+ <span class="card-status-ready">READY</span>
282
+ }
283
+ }
284
+
285
+ @function short(s) {
286
+ @if( s.length > 20 ) {
287
+ @(s.slice(0,17) + "...")
288
+ }
289
+ else {
290
+ @(s)
291
+ }
292
+ }
293
+
294
+ @function displayValue(v) {
295
+ @if( v == null ) {
296
+ null
297
+ }
298
+ else if( v == undefined ) {
299
+ undefined
300
+ }
301
+ else if( typeof v == "number" || typeof v == "boolean" ) {
302
+ @(v)
303
+ }
304
+ else if( typeof(v) == "string" ) {
305
+ @if( v == "[[removed]]" ) {
306
+ @(v) <button type="button" class="btn btn-transparent" data-toggle="tooltip" data-placement="top" title="This data is too big to be snapshoted" style="padding: 0;"><i class="text-info far fa-question-circle"></i></button>
307
+ }
308
+ else if( v == "[[serialization failed]]" ) {
309
+ @(v) <button type="button" class="btn btn-transparent" data-toggle="tooltip" data-placement="top" title="An error happened during serialization. Please report this as an issue." style="padding: 0;"><i class="text-info far fa-question-circle"></i></button>
310
+ }
311
+ else {
312
+ "@(v)"
313
+ }
314
+ }
315
+ else if( typeof(v) == "object" ) {
316
+ @if( Array.isArray(v) ) {
317
+ Array(...)
318
+ <button type="button" class="btn btn-primary btn-xs btn-displayValue" data-value="@(utils.htmlentities(JSON.stringify(v)))" style="font-weight: 900; width: 24px; padding-top: 6px; padding-bottom: 6px;">{ }</button>
319
+ }
320
+ else if( v.metadata && v.metadata.type ) {
321
+ @(v.metadata.type)(...)
322
+ <button type="button" class="btn btn-primary btn-xs btn-displayValue" data-value="@(utils.htmlentities(JSON.stringify(v)))" style="font-weight: 900; width: 24px; padding-top: 6px; padding-bottom: 6px;">{ }</button>
323
+ }
324
+ else {
325
+ ??
326
+ }
327
+ }
328
+ }
329
+
330
+ @function displayTime(d) {
331
+ @( moment(d).format('HH:mm:ss.SSS') )
332
+ }
333
+
334
+ @function displayNumber(n) {
335
+ @if( n ) {(@(n))}
336
+ }
@@ -0,0 +1,31 @@
1
+ const swal = require('sweetalert2');
2
+ const _ = require('lodash');
3
+
4
+ const JSONEditor = require('@dualbox/dualbox-lib-jsoneditor');
5
+
6
+ var TemplateBinds = function(view, div, data) {
7
+ var node = data.node;
8
+ var pkg = node.getPackage();
9
+ var editor = null;
10
+
11
+ div.ready(() => {
12
+ // bind the json editor
13
+ editor = new JSONEditor(div.find('.json-editor')[0], { modes: ['tree', 'code', 'text' ]});
14
+ editor.set({});
15
+
16
+ div.find('button[data-toggle="tooltip"]').tooltip();
17
+
18
+ div.find('.btn-displayValue').click(function(e) {
19
+ e.preventDefault();
20
+ e.stopPropagation();
21
+
22
+ var modal = div.find('.debug-json-modal');
23
+ modal.modal('show');
24
+
25
+ var value = $(this).attr('data-value');
26
+ editor.set((value && JSON.parse(value)) || {});
27
+ });
28
+ });
29
+ };
30
+
31
+ module.exports = TemplateBinds;
@@ -0,0 +1,67 @@
1
+ .card-settings .card-body {
2
+ font-size: 12px;
3
+ padding-left: 5px;
4
+ padding-right: 5px;
5
+ }
6
+
7
+ .fa {
8
+ pointer-events: none;
9
+ }
10
+
11
+ .table-desc {
12
+ width: 100%;
13
+ }
14
+
15
+ .table-desc thead td {
16
+ margin-right: 6px;
17
+ }
18
+
19
+ .table-desc tbody td {
20
+ margin-right: 6px;
21
+ padding-top: 8px;
22
+ padding-bottom: 8px;
23
+ height: 40px;
24
+ }
25
+
26
+ .application-description {
27
+ margin-top: 20px;
28
+ text-align: left;
29
+ font-size: 12px;
30
+ }
31
+
32
+ .card-header[data-toggle="collapse"] {
33
+ cursor: pointer;
34
+ }
35
+
36
+ .card-header[data-toggle="collapse"] h5 {
37
+ user-select: none;
38
+ }
39
+
40
+ .card-header[data-toggle="collapse"]:hover .btn-link {
41
+ text-decoration: none;
42
+ }
43
+
44
+ .text-value, .number-value, .boolean-value {
45
+ max-width: 140px;
46
+ }
47
+
48
+ .event-if, .event-data {
49
+ max-width: 80px;
50
+ }
51
+
52
+ .select-event-target, .select-event-name, .event-if, .event-data {
53
+ font-size: 12px;
54
+ }
55
+
56
+ .edit-body {
57
+ overflow-y: auto;
58
+ overflow-x: hidden;
59
+ max-height: calc(100% - 80px);
60
+ }
61
+
62
+ /* remove bs4 transition on collapsing */
63
+ .edit-main-panel .collapsing {
64
+ -webkit-transition: none!important;
65
+ transition: none!important;
66
+ display: none!important;
67
+ }