iobroker.javascript 7.0.8 → 7.1.0
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/README.md +5 -11
- package/admin/asset-manifest.json +7 -7
- package/admin/google-blockly/blockly-9.3.3.tgz +0 -0
- package/admin/google-blockly/blockly_compressed.js +1704 -1469
- package/admin/google-blockly/blocks_compressed.js +218 -164
- package/admin/google-blockly/javascript_compressed.js +328 -100
- package/admin/google-blockly/msg/js/de.js +70 -64
- package/admin/google-blockly/msg/js/en.js +20 -14
- package/admin/google-blockly/msg/js/es.js +45 -39
- package/admin/google-blockly/msg/js/fr.js +65 -59
- package/admin/google-blockly/msg/js/it.js +25 -19
- package/admin/google-blockly/msg/js/nl.js +61 -55
- package/admin/google-blockly/msg/js/pl.js +52 -46
- package/admin/google-blockly/msg/js/pt.js +36 -30
- package/admin/google-blockly/msg/js/ru.js +47 -41
- package/admin/google-blockly/msg/js/uk.js +17 -13
- package/admin/google-blockly/msg/js/zh-cn.js +92 -86
- package/admin/google-blockly/own/blocks_action.js +4 -4
- package/admin/google-blockly/own/blocks_logic.js +64 -0
- package/admin/google-blockly/own/blocks_number.js +26 -0
- package/admin/google-blockly/own/blocks_procedures.js +106 -75
- package/admin/google-blockly/own/blocks_sendto.js +2 -2
- package/admin/google-blockly/own/blocks_switch.js +8 -19
- package/admin/google-blockly/own/blocks_system.js +171 -117
- package/admin/google-blockly/own/blocks_text.js +23 -0
- package/admin/google-blockly/own/blocks_time.js +2 -1
- package/admin/google-blockly/own/blocks_timeout.js +31 -27
- package/admin/google-blockly/own/blocks_trigger.js +62 -44
- package/admin/google-blockly/own/blocks_words.js +20 -15
- package/admin/google-blockly/own/field_cron.js +138 -189
- package/admin/google-blockly/own/field_oid.js +167 -249
- package/admin/google-blockly/own/field_script.js +124 -170
- package/admin/static/js/{565.643198c0.chunk.js → 569.e2b427a7.chunk.js} +2 -2
- package/admin/static/js/569.e2b427a7.chunk.js.map +1 -0
- package/admin/static/js/759.7f25ba6c.chunk.js.map +1 -1
- package/admin/static/js/98.7af6b699.chunk.js +2 -0
- package/admin/static/js/98.7af6b699.chunk.js.map +1 -0
- package/admin/static/js/{main.d9e7d255.js → main.bf8794f5.js} +2 -2
- package/admin/static/js/{main.d9e7d255.js.map → main.bf8794f5.js.map} +1 -1
- package/admin/tab.html +1 -1
- package/io-package.json +14 -14
- package/main.js +9 -10
- package/package.json +1 -1
- package/admin/blockly-9.0.1.tgz +0 -0
- package/admin/google-blockly/own/blocks_other.js +0 -103
- package/admin/static/js/565.643198c0.chunk.js.map +0 -1
- package/admin/static/js/98.bf3dfa2b.chunk.js +0 -2
- package/admin/static/js/98.bf3dfa2b.chunk.js.map +0 -1
|
@@ -9,10 +9,6 @@ if (typeof goog !== 'undefined') {
|
|
|
9
9
|
Blockly.CustomBlocks = Blockly.CustomBlocks || [];
|
|
10
10
|
Blockly.CustomBlocks.push('System');
|
|
11
11
|
|
|
12
|
-
function getHelp(word) {
|
|
13
|
-
return 'https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/javascript.md#' + Blockly.Words[word][systemLang];
|
|
14
|
-
}
|
|
15
|
-
|
|
16
12
|
Blockly.System = {
|
|
17
13
|
HUE: 210,
|
|
18
14
|
blocks: {}
|
|
@@ -49,7 +45,8 @@ Blockly.Blocks['debug'] = {
|
|
|
49
45
|
Blockly.JavaScript['debug'] = function(block) {
|
|
50
46
|
const value_text = Blockly.JavaScript.valueToCode(block, 'TEXT', Blockly.JavaScript.ORDER_ATOMIC);
|
|
51
47
|
const dropdown_severity = block.getFieldValue('Severity');
|
|
52
|
-
|
|
48
|
+
|
|
49
|
+
return `console.${dropdown_severity}(${value_text});\n`;
|
|
53
50
|
};
|
|
54
51
|
|
|
55
52
|
// --- comment --------------------------------------------------
|
|
@@ -74,7 +71,8 @@ Blockly.Blocks['comment'] = {
|
|
|
74
71
|
|
|
75
72
|
Blockly.JavaScript['comment'] = function(block) {
|
|
76
73
|
const comment = block.getFieldValue('COMMENT');
|
|
77
|
-
|
|
74
|
+
|
|
75
|
+
return `// ${comment}\n`;
|
|
78
76
|
};
|
|
79
77
|
|
|
80
78
|
// --- control -----------------------------------------------------------
|
|
@@ -113,7 +111,6 @@ Blockly.Blocks['control'] = {
|
|
|
113
111
|
this.sourceBlock_.updateShape_(option === true || option === 'true' || option === 'TRUE');
|
|
114
112
|
}), 'WITH_DELAY');
|
|
115
113
|
|
|
116
|
-
|
|
117
114
|
this.setInputsInline(true);
|
|
118
115
|
this.setPreviousStatement(true, null);
|
|
119
116
|
this.setNextStatement(true, null);
|
|
@@ -124,7 +121,9 @@ Blockly.Blocks['control'] = {
|
|
|
124
121
|
mutationToDom: function() {
|
|
125
122
|
const container = document.createElement('mutation');
|
|
126
123
|
const option = this.getFieldValue('WITH_DELAY');
|
|
124
|
+
|
|
127
125
|
container.setAttribute('delay_input', option === true || option === 'true' || option === 'TRUE');
|
|
126
|
+
|
|
128
127
|
return container;
|
|
129
128
|
},
|
|
130
129
|
domToMutation: function(xmlElement) {
|
|
@@ -145,7 +144,6 @@ Blockly.Blocks['control'] = {
|
|
|
145
144
|
[Blockly.Translate('control_sec'), 'sec'],
|
|
146
145
|
[Blockly.Translate('control_min'), 'min']
|
|
147
146
|
]), 'UNIT');
|
|
148
|
-
//.appendField(Blockly.Translate('control_ms'));
|
|
149
147
|
}
|
|
150
148
|
} else if (inputExists) {
|
|
151
149
|
this.removeInput('DELAY');
|
|
@@ -170,25 +168,26 @@ Blockly.JavaScript['control'] = function(block) {
|
|
|
170
168
|
|
|
171
169
|
Blockly.Msg.VARIABLES_DEFAULT_NAME = 'value';
|
|
172
170
|
|
|
173
|
-
let valueDelay
|
|
174
|
-
const unit
|
|
171
|
+
let valueDelay = parseInt(block.getFieldValue('DELAY_MS'), 10);
|
|
172
|
+
const unit = block.getFieldValue('UNIT');
|
|
175
173
|
if (unit === 'min') {
|
|
176
174
|
valueDelay *= 60000;
|
|
177
175
|
} else if (unit === 'sec') {
|
|
178
176
|
valueDelay *= 1000;
|
|
179
177
|
}
|
|
180
|
-
let clearRunning = block.getFieldValue('CLEAR_RUNNING');
|
|
181
|
-
const valueValue = Blockly.JavaScript.valueToCode(block, 'VALUE', Blockly.JavaScript.ORDER_ATOMIC);
|
|
182
|
-
const objectName = main.objects[valueObjectID] && main.objects[valueObjectID].common && main.objects[valueObjectID].common.name ? main.objects[valueObjectID].common.name : '';
|
|
183
|
-
let code;
|
|
184
178
|
|
|
179
|
+
let clearRunning = block.getFieldValue('CLEAR_RUNNING');
|
|
185
180
|
clearRunning = clearRunning === 'TRUE' || clearRunning === 'true' || clearRunning === true;
|
|
181
|
+
|
|
182
|
+
const valueValue = Blockly.JavaScript.valueToCode(block, 'VALUE', Blockly.JavaScript.ORDER_ATOMIC);
|
|
183
|
+
const objectName = main.objects[valueObjectID] && main.objects[valueObjectID].common && main.objects[valueObjectID].common.name ? main.objects[valueObjectID].common.name : '';
|
|
186
184
|
const withDelay = this.getFieldValue('WITH_DELAY');
|
|
187
185
|
|
|
186
|
+
let code;
|
|
188
187
|
if (withDelay === 'true' || withDelay === true || withDelay === 'TRUE') {
|
|
189
|
-
code =
|
|
188
|
+
code = `setStateDelayed('${valueObjectID}'${objectName ? ` /* ${objectName} */` : ''}, ${valueValue}, ${valueDelay}, ${clearRunning});\n`;
|
|
190
189
|
} else {
|
|
191
|
-
code =
|
|
190
|
+
code = `setState('${valueObjectID}'${objectName ? ` /* ${objectName} */` : ''}, ${valueValue});\n`;
|
|
192
191
|
}
|
|
193
192
|
|
|
194
193
|
return code;
|
|
@@ -234,7 +233,9 @@ Blockly.Blocks['toggle'] = {
|
|
|
234
233
|
mutationToDom: function() {
|
|
235
234
|
const container = document.createElement('mutation');
|
|
236
235
|
const option = this.getFieldValue('WITH_DELAY');
|
|
236
|
+
|
|
237
237
|
container.setAttribute('delay_input', option === true || option === 'true' || option === 'TRUE');
|
|
238
|
+
|
|
238
239
|
return container;
|
|
239
240
|
},
|
|
240
241
|
domToMutation: function(xmlElement) {
|
|
@@ -277,46 +278,49 @@ Blockly.Blocks['toggle'] = {
|
|
|
277
278
|
|
|
278
279
|
Blockly.JavaScript['toggle'] = function(block) {
|
|
279
280
|
const valueObjectID = block.getFieldValue('OID');
|
|
281
|
+
const unit = block.getFieldValue('UNIT');
|
|
280
282
|
|
|
281
283
|
Blockly.Msg.VARIABLES_DEFAULT_NAME = 'value';
|
|
282
284
|
|
|
283
285
|
let valueDelay = parseInt(block.getFieldValue('DELAY_MS'), 10);
|
|
284
|
-
const unit = block.getFieldValue('UNIT');
|
|
285
286
|
if (unit === 'min') {
|
|
286
287
|
valueDelay *= 60000;
|
|
287
288
|
} else if (unit === 'sec') {
|
|
288
289
|
valueDelay *= 1000;
|
|
289
290
|
}
|
|
290
|
-
let clearRunning = block.getFieldValue('CLEAR_RUNNING');
|
|
291
|
-
const objectName = main.objects[valueObjectID] && main.objects[valueObjectID].common && main.objects[valueObjectID].common.name ? main.objects[valueObjectID].common.name : '';
|
|
292
|
-
const objectType = main.objects[valueObjectID] && main.objects[valueObjectID].common && main.objects[valueObjectID].common.type ? main.objects[valueObjectID].common.type : 'boolean';
|
|
293
|
-
let code;
|
|
294
|
-
let setCommand;
|
|
295
291
|
|
|
292
|
+
const objectName = main.objects[valueObjectID] && main.objects[valueObjectID].common && main.objects[valueObjectID].common.name ? main.objects[valueObjectID].common.name : '';
|
|
293
|
+
const objectType = main.objects[valueObjectID] && main.objects[valueObjectID].common && main.objects[valueObjectID].common.type ? main.objects[valueObjectID].common.type : 'boolean';
|
|
294
|
+
|
|
295
|
+
let clearRunning = block.getFieldValue('CLEAR_RUNNING');
|
|
296
296
|
clearRunning = clearRunning === 'TRUE' || clearRunning === 'true' || clearRunning === true;
|
|
297
297
|
|
|
298
|
+
let setCommand;
|
|
298
299
|
if (objectType === 'number') {
|
|
299
300
|
let max = 100;
|
|
300
301
|
let min = 0;
|
|
302
|
+
|
|
301
303
|
if (main.objects[valueObjectID].common.max !== undefined) {
|
|
302
304
|
max = parseFloat(main.objects[valueObjectID].common.max);
|
|
303
305
|
}
|
|
304
306
|
if (main.objects[valueObjectID].common.min !== undefined) {
|
|
305
307
|
min = parseFloat(main.objects[valueObjectID].common.min);
|
|
306
308
|
}
|
|
307
|
-
|
|
309
|
+
|
|
310
|
+
setCommand = `setState('${valueObjectID}'${objectName ? ` /* ${objectName} */` : ''}, state ? (state.val === ${min} ? ${max} : ${min}) : ${max});`;
|
|
308
311
|
} else {
|
|
309
|
-
setCommand =
|
|
312
|
+
setCommand = `setState('${valueObjectID}'${objectName ? ` /* ${objectName} */` : ''}, state ? !state.val : true);`;
|
|
310
313
|
}
|
|
311
314
|
|
|
312
315
|
const withDelay = block.getFieldValue('WITH_DELAY');
|
|
313
316
|
|
|
317
|
+
let code;
|
|
314
318
|
if (withDelay === 'TRUE' || withDelay === 'true' || withDelay === true) {
|
|
315
|
-
code =
|
|
316
|
-
Blockly.JavaScript.prefixLines(
|
|
319
|
+
code = `getState('${valueObjectID}', (err, state) => {\n` +
|
|
320
|
+
Blockly.JavaScript.prefixLines(`setStateDelayed('${valueObjectID}'${objectName ? ` /* ${objectName} */` : ''}, state ? !state.val : true, ${valueDelay}, ${clearRunning});`, Blockly.JavaScript.INDENT) + '\n' +
|
|
317
321
|
'});\n';
|
|
318
322
|
} else {
|
|
319
|
-
code =
|
|
323
|
+
code = `getState('${valueObjectID}', (err, state) => {\n` +
|
|
320
324
|
Blockly.JavaScript.prefixLines(setCommand, Blockly.JavaScript.INDENT) + '\n' +
|
|
321
325
|
'});\n';
|
|
322
326
|
}
|
|
@@ -370,7 +374,9 @@ Blockly.Blocks['update'] = {
|
|
|
370
374
|
mutationToDom: function() {
|
|
371
375
|
const container = document.createElement('mutation');
|
|
372
376
|
const option = this.getFieldValue('WITH_DELAY');
|
|
377
|
+
|
|
373
378
|
container.setAttribute('delay_input', option === true || option === 'true' || option === 'TRUE');
|
|
379
|
+
|
|
374
380
|
return container;
|
|
375
381
|
},
|
|
376
382
|
domToMutation: function(xmlElement) {
|
|
@@ -417,25 +423,26 @@ Blockly.JavaScript['update'] = function(block) {
|
|
|
417
423
|
Blockly.Msg.VARIABLES_DEFAULT_NAME = 'value';
|
|
418
424
|
|
|
419
425
|
const value_value = Blockly.JavaScript.valueToCode(block, 'VALUE', Blockly.JavaScript.ORDER_ATOMIC);
|
|
420
|
-
let value_delay = parseInt(block.getFieldValue('DELAY_MS'), 10);
|
|
421
|
-
let clearRunning = block.getFieldValue('CLEAR_RUNNING');
|
|
422
426
|
const unit = block.getFieldValue('UNIT');
|
|
427
|
+
|
|
428
|
+
let value_delay = parseInt(block.getFieldValue('DELAY_MS'), 10);
|
|
423
429
|
if (unit === 'min') {
|
|
424
430
|
value_delay *= 60000;
|
|
425
431
|
} else if (unit === 'sec') {
|
|
426
432
|
value_delay *= 1000;
|
|
427
433
|
}
|
|
428
434
|
|
|
435
|
+
let clearRunning = block.getFieldValue('CLEAR_RUNNING');
|
|
429
436
|
clearRunning = clearRunning === 'TRUE' || clearRunning === 'true' || clearRunning === true;
|
|
430
437
|
|
|
431
|
-
const
|
|
432
|
-
let code;
|
|
438
|
+
const objectName = main.objects[value_objectid] && main.objects[value_objectid].common && main.objects[value_objectid].common.name ? main.objects[value_objectid].common.name : '';
|
|
433
439
|
const withDelay = this.getFieldValue('WITH_DELAY');
|
|
434
440
|
|
|
441
|
+
let code;
|
|
435
442
|
if (withDelay === true || withDelay === 'true' || withDelay === 'TRUE') {
|
|
436
|
-
code =
|
|
443
|
+
code = `setStateDelayed('${value_objectid}'${objectName ? ` /* ${objectName} */` : ''}, ${value_value}, true, ${value_delay}, ${clearRunning});\n`;
|
|
437
444
|
} else {
|
|
438
|
-
code =
|
|
445
|
+
code = `setState('${value_objectid}'${objectName ? ` /* ${objectName} */` : ''}, ${value_value}, true);\n`;
|
|
439
446
|
}
|
|
440
447
|
|
|
441
448
|
return code;
|
|
@@ -485,11 +492,13 @@ Blockly.Blocks['direct'] = {
|
|
|
485
492
|
|
|
486
493
|
Blockly.JavaScript['direct'] = function(block) {
|
|
487
494
|
const oidSrc = Blockly.JavaScript.valueToCode(block, 'OID_SRC', Blockly.JavaScript.ORDER_ATOMIC);
|
|
488
|
-
let onlyChanges = block.getFieldValue('ONLY_CHANGES');
|
|
489
495
|
const oidDest = Blockly.JavaScript.valueToCode(block, 'OID_DST', Blockly.JavaScript.ORDER_ATOMIC);
|
|
496
|
+
|
|
497
|
+
let onlyChanges = block.getFieldValue('ONLY_CHANGES');
|
|
490
498
|
onlyChanges = onlyChanges === true || onlyChanges === 'true' || onlyChanges === 'TRUE';
|
|
491
|
-
|
|
492
|
-
|
|
499
|
+
|
|
500
|
+
return `on({ id: ${oidSrc}, change: '${onlyChanges ? 'ne' : 'any'}' }, (obj) => {\n` +
|
|
501
|
+
Blockly.JavaScript.prefixLines(`setState(${oidDest}, obj.state.val);`, Blockly.JavaScript.INDENT) + '\n' +
|
|
493
502
|
'});\n';
|
|
494
503
|
};
|
|
495
504
|
|
|
@@ -555,13 +564,16 @@ Blockly.Blocks['control_ex'] = {
|
|
|
555
564
|
|
|
556
565
|
Blockly.JavaScript['control_ex'] = function(block) {
|
|
557
566
|
const valueObjectID = Blockly.JavaScript.valueToCode(block, 'OID', Blockly.JavaScript.ORDER_ATOMIC);
|
|
558
|
-
const value
|
|
559
|
-
const valueDelay
|
|
560
|
-
|
|
561
|
-
let
|
|
562
|
-
type = type === true || type === 'true' || type === 'TRUE';
|
|
567
|
+
const value = Blockly.JavaScript.valueToCode(block, 'VALUE', Blockly.JavaScript.ORDER_ATOMIC);
|
|
568
|
+
const valueDelay = Blockly.JavaScript.valueToCode(block, 'DELAY_MS', Blockly.JavaScript.ORDER_ATOMIC);
|
|
569
|
+
|
|
570
|
+
let clearRunning = block.getFieldValue('CLEAR_RUNNING');
|
|
563
571
|
clearRunning = clearRunning === true || clearRunning === 'true' || clearRunning === 'TRUE';
|
|
564
|
-
|
|
572
|
+
|
|
573
|
+
let type = block.getFieldValue('TYPE');
|
|
574
|
+
type = type === true || type === 'true' || type === 'TRUE';
|
|
575
|
+
|
|
576
|
+
return `setStateDelayed(${valueObjectID}, ${value}, ${type}, parseInt(((${valueDelay}) || '').toString(), 10), ${clearRunning});\n`;
|
|
565
577
|
};
|
|
566
578
|
|
|
567
579
|
// --- create state --------------------------------------------------
|
|
@@ -617,23 +629,109 @@ Blockly.JavaScript['create'] = function(block) {
|
|
|
617
629
|
let paraC = '';
|
|
618
630
|
|
|
619
631
|
if (value !== null && value !== '') {
|
|
620
|
-
|
|
621
|
-
paraV = ', ' + value;
|
|
622
|
-
} else {
|
|
623
|
-
paraV = ', ' + value;
|
|
624
|
-
}
|
|
632
|
+
paraV = ', ' + value;
|
|
625
633
|
}
|
|
626
634
|
|
|
627
635
|
if (common !== null && common !== '') {
|
|
628
636
|
if (typeof common === 'object') {
|
|
629
|
-
paraC =
|
|
637
|
+
paraC = `, JSON.parse(${JSON.stringify(common)})`;
|
|
630
638
|
} else {
|
|
631
|
-
paraC =
|
|
639
|
+
paraC = `, JSON.parse(${common})`;
|
|
632
640
|
}
|
|
633
641
|
}
|
|
634
642
|
|
|
635
|
-
return
|
|
636
|
-
|
|
643
|
+
return `createState('${name}'${paraV}${paraC}, async () => {\n` +
|
|
644
|
+
statement +
|
|
645
|
+
'});\n';
|
|
646
|
+
};
|
|
647
|
+
|
|
648
|
+
// --- create state ex --------------------------------------------------
|
|
649
|
+
Blockly.System.blocks['create_ex'] =
|
|
650
|
+
'<block type="create_ex">'
|
|
651
|
+
+ ' <value name="NAME">'
|
|
652
|
+
+ ' </value>'
|
|
653
|
+
+ ' <value name="TYPE">'
|
|
654
|
+
+ ' </value>'
|
|
655
|
+
+ ' <value name="VALUE">'
|
|
656
|
+
+ ' </value>'
|
|
657
|
+
+ ' <value name="READABLE">'
|
|
658
|
+
+ ' </value>'
|
|
659
|
+
+ ' <value name="WRITEABLE">'
|
|
660
|
+
+ ' </value>'
|
|
661
|
+
+ ' <value name="STATEMENT">'
|
|
662
|
+
+ ' </value>'
|
|
663
|
+
+ '</block>';
|
|
664
|
+
|
|
665
|
+
Blockly.Blocks['create_ex'] = {
|
|
666
|
+
init: function() {
|
|
667
|
+
this.appendDummyInput()
|
|
668
|
+
.appendField(Blockly.Translate('create'));
|
|
669
|
+
|
|
670
|
+
this.appendDummyInput('NAME')
|
|
671
|
+
.appendField(Blockly.Translate('create_oid'))
|
|
672
|
+
.appendField(new Blockly.FieldTextInput(Blockly.Translate('create_jsState')), 'NAME');
|
|
673
|
+
|
|
674
|
+
this.appendDummyInput('TYPE')
|
|
675
|
+
.appendField(Blockly.Translate('create_type'))
|
|
676
|
+
.appendField(new Blockly.FieldDropdown([
|
|
677
|
+
[Blockly.Translate('create_type_string'), 'string'],
|
|
678
|
+
[Blockly.Translate('create_type_number'), 'number'],
|
|
679
|
+
[Blockly.Translate('create_type_boolean'), 'boolean'],
|
|
680
|
+
[Blockly.Translate('create_type_json'), 'json'],
|
|
681
|
+
//[Blockly.Translate('create_type_object'), 'object'],
|
|
682
|
+
//[Blockly.Translate('create_type_array'), 'array'],
|
|
683
|
+
//[Blockly.Translate('create_type_file'), 'file'],
|
|
684
|
+
]), 'TYPE');
|
|
685
|
+
|
|
686
|
+
this.appendValueInput('VALUE')
|
|
687
|
+
.setCheck(null)
|
|
688
|
+
.appendField(Blockly.Translate('create_init'));
|
|
689
|
+
|
|
690
|
+
this.appendDummyInput('READABLE_INPUT')
|
|
691
|
+
.appendField(Blockly.Translate('create_readable'))
|
|
692
|
+
.appendField(new Blockly.FieldCheckbox('FALSE'), 'READABLE');
|
|
693
|
+
|
|
694
|
+
this.appendDummyInput('WRITEABLE_INPUT')
|
|
695
|
+
.appendField(Blockly.Translate('create_writeable'))
|
|
696
|
+
.appendField(new Blockly.FieldCheckbox('FALSE'), 'WRITEABLE');
|
|
697
|
+
|
|
698
|
+
this.appendStatementInput('STATEMENT')
|
|
699
|
+
.setCheck(null);
|
|
700
|
+
|
|
701
|
+
this.setPreviousStatement(true, null);
|
|
702
|
+
this.setNextStatement(true, null);
|
|
703
|
+
|
|
704
|
+
this.setInputsInline(false);
|
|
705
|
+
this.setColour(Blockly.System.HUE);
|
|
706
|
+
this.setTooltip(Blockly.Translate('create_tooltip'));
|
|
707
|
+
this.setHelpUrl(getHelp('create_help'));
|
|
708
|
+
}
|
|
709
|
+
};
|
|
710
|
+
|
|
711
|
+
Blockly.JavaScript['create_ex'] = function(block) {
|
|
712
|
+
const name = block.getFieldValue('NAME');
|
|
713
|
+
const type = block.getFieldValue('TYPE');
|
|
714
|
+
const value = Blockly.JavaScript.valueToCode(block, 'VALUE', Blockly.JavaScript.ORDER_ATOMIC);
|
|
715
|
+
const statement = Blockly.JavaScript.statementToCode(block, 'STATEMENT');
|
|
716
|
+
|
|
717
|
+
let paraV = '';
|
|
718
|
+
|
|
719
|
+
if (value !== null && value !== '') {
|
|
720
|
+
if (type === 'number') {
|
|
721
|
+
paraV = `, parseFloat(${value})`;
|
|
722
|
+
} else {
|
|
723
|
+
paraV = ', ' + value;
|
|
724
|
+
}
|
|
725
|
+
}
|
|
726
|
+
|
|
727
|
+
let readable = block.getFieldValue('READABLE');
|
|
728
|
+
readable = readable === 'TRUE' || readable === 'true' || readable === true;
|
|
729
|
+
|
|
730
|
+
let writeable = block.getFieldValue('WRITEABLE');
|
|
731
|
+
writeable = writeable === 'TRUE' || writeable === 'true' || writeable === true;
|
|
732
|
+
|
|
733
|
+
return `createState('${name}'${paraV}, { type: "${type}", read: ${readable}, write: ${writeable} }, async () => {\n` +
|
|
734
|
+
statement +
|
|
637
735
|
'});\n';
|
|
638
736
|
};
|
|
639
737
|
|
|
@@ -687,10 +785,11 @@ Blockly.Blocks['get_value'] = {
|
|
|
687
785
|
Blockly.JavaScript['get_value'] = function(block) {
|
|
688
786
|
const oid = block.getFieldValue('OID');
|
|
689
787
|
const attr = block.getFieldValue('ATTR');
|
|
690
|
-
|
|
691
|
-
|
|
788
|
+
|
|
789
|
+
if (attr === 'type' || attr.startsWith('common.')) {
|
|
790
|
+
return [`(await getObjectAsync('${oid}')).${attr}`, Blockly.JavaScript.ORDER_ATOMIC];
|
|
692
791
|
} else {
|
|
693
|
-
return [
|
|
792
|
+
return [`getState('${oid}').${attr}`, Blockly.JavaScript.ORDER_ATOMIC];
|
|
694
793
|
}
|
|
695
794
|
};
|
|
696
795
|
|
|
@@ -707,9 +806,7 @@ Blockly.System.blocks['get_value_var'] =
|
|
|
707
806
|
+ '</block>';
|
|
708
807
|
|
|
709
808
|
Blockly.Blocks['get_value_var'] = {
|
|
710
|
-
// Checkbox.
|
|
711
809
|
init: function() {
|
|
712
|
-
|
|
713
810
|
this.appendDummyInput('ATTR')
|
|
714
811
|
.appendField(new Blockly.FieldDropdown([
|
|
715
812
|
[Blockly.Translate('get_value_val'), 'val'],
|
|
@@ -747,10 +844,11 @@ Blockly.Blocks['get_value_var'] = {
|
|
|
747
844
|
Blockly.JavaScript['get_value_var'] = function(block) {
|
|
748
845
|
const oid = Blockly.JavaScript.valueToCode(block, 'OID', Blockly.JavaScript.ORDER_ATOMIC);
|
|
749
846
|
const attr = block.getFieldValue('ATTR');
|
|
750
|
-
|
|
751
|
-
|
|
847
|
+
|
|
848
|
+
if (attr === 'type' || attr.startsWith('common.')) {
|
|
849
|
+
return [`(await getObjectAsync(${oid})).${attr}`, Blockly.JavaScript.ORDER_ATOMIC];
|
|
752
850
|
} else {
|
|
753
|
-
return [
|
|
851
|
+
return [`getState(${oid}).${attr}`, Blockly.JavaScript.ORDER_ATOMIC];
|
|
754
852
|
}
|
|
755
853
|
};
|
|
756
854
|
|
|
@@ -766,9 +864,7 @@ Blockly.System.blocks['get_value_async'] =
|
|
|
766
864
|
+ '</block>';
|
|
767
865
|
|
|
768
866
|
Blockly.Blocks['get_value_async'] = {
|
|
769
|
-
// Checkbox.
|
|
770
867
|
init: function() {
|
|
771
|
-
|
|
772
868
|
this.appendDummyInput('ATTR')
|
|
773
869
|
.appendField(new Blockly.FieldDropdown([
|
|
774
870
|
[Blockly.Translate('get_value_val'), 'val'],
|
|
@@ -812,8 +908,9 @@ Blockly.JavaScript['get_value_async'] = function(block) {
|
|
|
812
908
|
const oid = block.getFieldValue('OID');
|
|
813
909
|
const attr = block.getFieldValue('ATTR');
|
|
814
910
|
const statement = Blockly.JavaScript.statementToCode(block, 'STATEMENT');
|
|
815
|
-
|
|
816
|
-
|
|
911
|
+
|
|
912
|
+
if (attr === 'type' || attr.startsWith('common.')) {
|
|
913
|
+
return `getObjectAsync('${oid}', async (err, obj) => {\n` +
|
|
817
914
|
Blockly.JavaScript.prefixLines('let value = obj.' + attr + ';', Blockly.JavaScript.INDENT) + '\n' +
|
|
818
915
|
statement + '\n' +
|
|
819
916
|
'});\n';
|
|
@@ -849,7 +946,8 @@ Blockly.Blocks['field_oid'] = {
|
|
|
849
946
|
|
|
850
947
|
Blockly.JavaScript['field_oid'] = function(block) {
|
|
851
948
|
const oid = block.getFieldValue('oid');
|
|
852
|
-
|
|
949
|
+
|
|
950
|
+
return [`'${oid}'`, Blockly.JavaScript.ORDER_ATOMIC];
|
|
853
951
|
};
|
|
854
952
|
|
|
855
953
|
// --- select OID meta--------------------------------------------------
|
|
@@ -876,7 +974,8 @@ Blockly.Blocks['field_oid_meta'] = {
|
|
|
876
974
|
|
|
877
975
|
Blockly.JavaScript['field_oid_meta'] = function(block) {
|
|
878
976
|
const oid = block.getFieldValue('oid');
|
|
879
|
-
|
|
977
|
+
|
|
978
|
+
return [`'${oid}'`, Blockly.JavaScript.ORDER_ATOMIC];
|
|
880
979
|
};
|
|
881
980
|
|
|
882
981
|
// --- select OID script--------------------------------------------------
|
|
@@ -903,7 +1002,8 @@ Blockly.Blocks['field_oid_script'] = {
|
|
|
903
1002
|
|
|
904
1003
|
Blockly.JavaScript['field_oid_script'] = function(block) {
|
|
905
1004
|
const oid = block.getFieldValue('oid');
|
|
906
|
-
|
|
1005
|
+
|
|
1006
|
+
return [`'${oid}'`, Blockly.JavaScript.ORDER_ATOMIC];
|
|
907
1007
|
};
|
|
908
1008
|
|
|
909
1009
|
// --- get attribute --------------------------------------------------
|
|
@@ -924,8 +1024,6 @@ Blockly.Blocks['get_attr'] = {
|
|
|
924
1024
|
.setCheck(null)
|
|
925
1025
|
.appendField(Blockly.Translate('get_attr_path'));
|
|
926
1026
|
|
|
927
|
-
// this.appendDummyInput()
|
|
928
|
-
|
|
929
1027
|
this.appendValueInput('OBJECT')
|
|
930
1028
|
.appendField(Blockly.Translate('get_attr_by'));
|
|
931
1029
|
|
|
@@ -940,6 +1038,7 @@ Blockly.Blocks['get_attr'] = {
|
|
|
940
1038
|
Blockly.JavaScript['get_attr'] = function(block) {
|
|
941
1039
|
const path = Blockly.JavaScript.valueToCode(block, 'PATH', Blockly.JavaScript.ORDER_ATOMIC);
|
|
942
1040
|
const obj = Blockly.JavaScript.valueToCode(block, 'OBJECT', Blockly.JavaScript.ORDER_ATOMIC);
|
|
1041
|
+
|
|
943
1042
|
return ['getAttr(' + obj + ', ' + path + ')', Blockly.JavaScript.ORDER_ATOMIC];
|
|
944
1043
|
};
|
|
945
1044
|
|
|
@@ -951,7 +1050,6 @@ Blockly.System.blocks['regex'] =
|
|
|
951
1050
|
+ '</block>';
|
|
952
1051
|
|
|
953
1052
|
Blockly.Blocks['regex'] = {
|
|
954
|
-
// Checkbox.
|
|
955
1053
|
init: function() {
|
|
956
1054
|
this.appendDummyInput()
|
|
957
1055
|
.appendField('RegExp');
|
|
@@ -968,7 +1066,8 @@ Blockly.Blocks['regex'] = {
|
|
|
968
1066
|
|
|
969
1067
|
Blockly.JavaScript['regex'] = function(block) {
|
|
970
1068
|
const oid = block.getFieldValue('TEXT');
|
|
971
|
-
|
|
1069
|
+
|
|
1070
|
+
return [`new RegExp('${oid}')`, Blockly.JavaScript.ORDER_ATOMIC];
|
|
972
1071
|
};
|
|
973
1072
|
|
|
974
1073
|
// --- selector --------------------------------------------------
|
|
@@ -979,9 +1078,7 @@ Blockly.System.blocks['selector'] =
|
|
|
979
1078
|
+ '</block>';
|
|
980
1079
|
|
|
981
1080
|
Blockly.Blocks['selector'] = {
|
|
982
|
-
// Checkbox.
|
|
983
1081
|
init: function() {
|
|
984
|
-
|
|
985
1082
|
this.appendDummyInput()
|
|
986
1083
|
.appendField(Blockly.Translate('selector') + ' $(');
|
|
987
1084
|
|
|
@@ -1000,49 +1097,6 @@ Blockly.Blocks['selector'] = {
|
|
|
1000
1097
|
|
|
1001
1098
|
Blockly.JavaScript['selector'] = function(block) {
|
|
1002
1099
|
const oid = block.getFieldValue('TEXT');
|
|
1003
|
-
return ['Array.prototype.slice.apply($("' + oid + '"))', Blockly.JavaScript.ORDER_ATOMIC];
|
|
1004
|
-
};
|
|
1005
|
-
|
|
1006
|
-
// --- Text new line --------------------------------------------------
|
|
1007
|
-
Blockly.Blocks['text_newline'] = {
|
|
1008
|
-
// Checkbox.
|
|
1009
|
-
init: function() {
|
|
1010
|
-
this.appendDummyInput()
|
|
1011
|
-
.appendField(Blockly.Translate('text_newline'));
|
|
1012
|
-
|
|
1013
|
-
this.appendDummyInput()
|
|
1014
|
-
.appendField(new Blockly.FieldDropdown([['\\n', '\\n'], ['\\r\\n', '\\r\\n'], ['\\r', '\\r']]), 'Type');
|
|
1015
|
-
this.setInputsInline(true);
|
|
1016
|
-
this.setColour(Blockly.Msg['TEXTS_HUE']);
|
|
1017
|
-
this.setOutput(true, 'String');
|
|
1018
|
-
this.setTooltip(Blockly.Translate('text_newline_tooltip'));
|
|
1019
|
-
}
|
|
1020
|
-
};
|
|
1021
|
-
|
|
1022
|
-
Blockly.JavaScript['text_newline'] = function(block) {
|
|
1023
|
-
const dropdown_type = block.getFieldValue('Type');
|
|
1024
|
-
return ['\'' + dropdown_type + '\'', Blockly.JavaScript.ORDER_ATOMIC];
|
|
1025
|
-
};
|
|
1026
1100
|
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
init: function() {
|
|
1030
|
-
this.appendValueInput('x')
|
|
1031
|
-
.setCheck('Number')
|
|
1032
|
-
.appendField(Blockly.Translate('math_rndfixed_round'));
|
|
1033
|
-
this.appendDummyInput()
|
|
1034
|
-
.appendField(Blockly.Translate('math_rndfixed_to'))
|
|
1035
|
-
.appendField(new Blockly.FieldNumber(0, 1, 25), 'n')
|
|
1036
|
-
.appendField(Blockly.Translate('math_rndfixed_decplcs'));
|
|
1037
|
-
this.setInputsInline(true);
|
|
1038
|
-
this.setColour(Blockly.Msg['MATH_HUE']);
|
|
1039
|
-
this.setOutput(true, 'Number');
|
|
1040
|
-
this.setTooltip(Blockly.Translate('math_rndfixed_tooltip'));
|
|
1041
|
-
}
|
|
1042
|
-
};
|
|
1043
|
-
|
|
1044
|
-
Blockly.JavaScript['math_rndfixed'] = function(block) {
|
|
1045
|
-
const x = Blockly.JavaScript.valueToCode(block, 'x', Blockly.JavaScript.ORDER_ATOMIC);
|
|
1046
|
-
const exp = Math.pow(10, block.getFieldValue('n'));
|
|
1047
|
-
return ['Math.round(' + x + '*' + exp + ')/' + exp, Blockly.JavaScript.ORDER_ATOMIC];
|
|
1048
|
-
};
|
|
1101
|
+
return [`Array.prototype.slice.apply($('${oid}'))`, Blockly.JavaScript.ORDER_ATOMIC];
|
|
1102
|
+
};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
// --- Text new line --------------------------------------------------
|
|
4
|
+
|
|
5
|
+
Blockly.Blocks['text_newline'] = {
|
|
6
|
+
// Checkbox.
|
|
7
|
+
init: function() {
|
|
8
|
+
this.appendDummyInput()
|
|
9
|
+
.appendField(Blockly.Translate('text_newline'));
|
|
10
|
+
|
|
11
|
+
this.appendDummyInput()
|
|
12
|
+
.appendField(new Blockly.FieldDropdown([['\\n', '\\n'], ['\\r\\n', '\\r\\n'], ['\\r', '\\r']]), 'Type');
|
|
13
|
+
this.setInputsInline(true);
|
|
14
|
+
this.setColour(Blockly.Msg['TEXTS_HUE']);
|
|
15
|
+
this.setOutput(true, 'String');
|
|
16
|
+
this.setTooltip(Blockly.Translate('text_newline_tooltip'));
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
Blockly.JavaScript['text_newline'] = function(block) {
|
|
21
|
+
const dropdown_type = block.getFieldValue('Type');
|
|
22
|
+
return ['\'' + dropdown_type + '\'', Blockly.JavaScript.ORDER_ATOMIC];
|
|
23
|
+
};
|
|
@@ -486,5 +486,6 @@ Blockly.Blocks['time_astro'] = {
|
|
|
486
486
|
Blockly.JavaScript['time_astro'] = function(block) {
|
|
487
487
|
const type = block.getFieldValue('TYPE');
|
|
488
488
|
const offset = parseFloat(block.getFieldValue('OFFSET'));
|
|
489
|
-
|
|
489
|
+
|
|
490
|
+
return [`getAstroDate('${type}', undefined, ${offset})`, Blockly.JavaScript.ORDER_ATOMIC];
|
|
490
491
|
};
|