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.
Files changed (48) hide show
  1. package/README.md +5 -11
  2. package/admin/asset-manifest.json +7 -7
  3. package/admin/google-blockly/blockly-9.3.3.tgz +0 -0
  4. package/admin/google-blockly/blockly_compressed.js +1704 -1469
  5. package/admin/google-blockly/blocks_compressed.js +218 -164
  6. package/admin/google-blockly/javascript_compressed.js +328 -100
  7. package/admin/google-blockly/msg/js/de.js +70 -64
  8. package/admin/google-blockly/msg/js/en.js +20 -14
  9. package/admin/google-blockly/msg/js/es.js +45 -39
  10. package/admin/google-blockly/msg/js/fr.js +65 -59
  11. package/admin/google-blockly/msg/js/it.js +25 -19
  12. package/admin/google-blockly/msg/js/nl.js +61 -55
  13. package/admin/google-blockly/msg/js/pl.js +52 -46
  14. package/admin/google-blockly/msg/js/pt.js +36 -30
  15. package/admin/google-blockly/msg/js/ru.js +47 -41
  16. package/admin/google-blockly/msg/js/uk.js +17 -13
  17. package/admin/google-blockly/msg/js/zh-cn.js +92 -86
  18. package/admin/google-blockly/own/blocks_action.js +4 -4
  19. package/admin/google-blockly/own/blocks_logic.js +64 -0
  20. package/admin/google-blockly/own/blocks_number.js +26 -0
  21. package/admin/google-blockly/own/blocks_procedures.js +106 -75
  22. package/admin/google-blockly/own/blocks_sendto.js +2 -2
  23. package/admin/google-blockly/own/blocks_switch.js +8 -19
  24. package/admin/google-blockly/own/blocks_system.js +171 -117
  25. package/admin/google-blockly/own/blocks_text.js +23 -0
  26. package/admin/google-blockly/own/blocks_time.js +2 -1
  27. package/admin/google-blockly/own/blocks_timeout.js +31 -27
  28. package/admin/google-blockly/own/blocks_trigger.js +62 -44
  29. package/admin/google-blockly/own/blocks_words.js +20 -15
  30. package/admin/google-blockly/own/field_cron.js +138 -189
  31. package/admin/google-blockly/own/field_oid.js +167 -249
  32. package/admin/google-blockly/own/field_script.js +124 -170
  33. package/admin/static/js/{565.643198c0.chunk.js → 569.e2b427a7.chunk.js} +2 -2
  34. package/admin/static/js/569.e2b427a7.chunk.js.map +1 -0
  35. package/admin/static/js/759.7f25ba6c.chunk.js.map +1 -1
  36. package/admin/static/js/98.7af6b699.chunk.js +2 -0
  37. package/admin/static/js/98.7af6b699.chunk.js.map +1 -0
  38. package/admin/static/js/{main.d9e7d255.js → main.bf8794f5.js} +2 -2
  39. package/admin/static/js/{main.d9e7d255.js.map → main.bf8794f5.js.map} +1 -1
  40. package/admin/tab.html +1 -1
  41. package/io-package.json +14 -14
  42. package/main.js +9 -10
  43. package/package.json +1 -1
  44. package/admin/blockly-9.0.1.tgz +0 -0
  45. package/admin/google-blockly/own/blocks_other.js +0 -103
  46. package/admin/static/js/565.643198c0.chunk.js.map +0 -1
  47. package/admin/static/js/98.bf3dfa2b.chunk.js +0 -2
  48. 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
- return 'console.' + dropdown_severity + '(' + value_text + ');\n';
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
- return '// ' + comment + '\n';
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 = parseInt(block.getFieldValue('DELAY_MS'), 10);
174
- const unit = block.getFieldValue('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 = 'setStateDelayed("' + valueObjectID + '"' + (objectName ? '/*' + objectName + '*/' : '') + ', ' + valueValue + ', ' + valueDelay + ', ' + clearRunning + ');\n';
188
+ code = `setStateDelayed('${valueObjectID}'${objectName ? ` /* ${objectName} */` : ''}, ${valueValue}, ${valueDelay}, ${clearRunning});\n`;
190
189
  } else {
191
- code = 'setState("' + valueObjectID + '"' + (objectName ? '/*' + objectName + '*/' : '') + ', ' + valueValue + ');\n';
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
- setCommand = 'setState("' + valueObjectID + '"' + (objectName ? '/*' + objectName + '*/' : '') + ', state ? (state.val == ' + min + ' ? ' + max + ' : ' + min + ') : ' + max + ');';
309
+
310
+ setCommand = `setState('${valueObjectID}'${objectName ? ` /* ${objectName} */` : ''}, state ? (state.val === ${min} ? ${max} : ${min}) : ${max});`;
308
311
  } else {
309
- setCommand = 'setState("' + valueObjectID + '"' + (objectName ? '/*' + objectName + '*/' : '') + ', state ? !state.val : true);';
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 = 'getState("' + valueObjectID + '", (err, state) => {\n' +
316
- Blockly.JavaScript.prefixLines('setStateDelayed("' + valueObjectID + '"' + (objectName ? '/*' + objectName + '*/' : '') + ', state ? !state.val : true, ' + valueDelay + ', ' + clearRunning + ');', Blockly.JavaScript.INDENT) + '\n' +
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 = 'getState("' + valueObjectID + '", (err, state) => {\n' +
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 objectname = main.objects[value_objectid] && main.objects[value_objectid].common && main.objects[value_objectid].common.name ? main.objects[value_objectid].common.name : '';
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 = 'setStateDelayed("' + value_objectid + '"' + (objectname ? '/*' + objectname + '*/' : '') + ', ' + value_value + ', true, ' + value_delay + ', ' + clearRunning + ');\n';
443
+ code = `setStateDelayed('${value_objectid}'${objectName ? ` /* ${objectName} */` : ''}, ${value_value}, true, ${value_delay}, ${clearRunning});\n`;
437
444
  } else {
438
- code = 'setState("' + value_objectid + '"' + (objectname ? '/*' + objectname + '*/' : '') + ', ' + value_value + ', true);\n';
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
- return 'on({ id: ' + oidSrc + ', change: "' + (onlyChanges ? 'ne' : 'any') + '" }, (obj) => {\n' +
492
- Blockly.JavaScript.prefixLines('setState(' + oidDest + ', obj.state.val);', Blockly.JavaScript.INDENT) + '\n' +
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 = Blockly.JavaScript.valueToCode(block, 'VALUE', Blockly.JavaScript.ORDER_ATOMIC);
559
- const valueDelay = Blockly.JavaScript.valueToCode(block, 'DELAY_MS', Blockly.JavaScript.ORDER_ATOMIC);
560
- let clearRunning = block.getFieldValue('CLEAR_RUNNING');
561
- let type = block.getFieldValue('TYPE');
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
- return 'setStateDelayed(' + valueObjectID + ', ' + value + ', ' + type + ', parseInt(((' + valueDelay + ') || "").toString(), 10), ' + clearRunning + ');\n';
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
- if (isNaN(value)) {
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 = ', JSON.parse(' + JSON.stringify(common) + ')';
637
+ paraC = `, JSON.parse(${JSON.stringify(common)})`;
630
638
  } else {
631
- paraC = ', JSON.parse(' + common + ')';
639
+ paraC = `, JSON.parse(${common})`;
632
640
  }
633
641
  }
634
642
 
635
- return 'createState("' + name + '"' + paraV + paraC + ', async () => {\n' +
636
- Blockly.JavaScript.prefixLines(statement, Blockly.JavaScript.INDENT) + '\n' +
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
- if (attr === 'type' || attr.indexOf('.') !== -1) {
691
- return ['(await getObjectAsync("' + oid + '")).' + attr, Blockly.JavaScript.ORDER_ATOMIC];
788
+
789
+ if (attr === 'type' || attr.startsWith('common.')) {
790
+ return [`(await getObjectAsync('${oid}')).${attr}`, Blockly.JavaScript.ORDER_ATOMIC];
692
791
  } else {
693
- return ['getState("' + oid + '").' + attr, Blockly.JavaScript.ORDER_ATOMIC];
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
- if (attr === 'type' || attr.startsWith('common.') || attr.startsWith('native.')) {
751
- return ['(await getObjectAsync("' + oid + '")).' + attr, Blockly.JavaScript.ORDER_ATOMIC];
847
+
848
+ if (attr === 'type' || attr.startsWith('common.')) {
849
+ return [`(await getObjectAsync(${oid})).${attr}`, Blockly.JavaScript.ORDER_ATOMIC];
752
850
  } else {
753
- return ['getState(' + oid + ').' + attr, Blockly.JavaScript.ORDER_ATOMIC];
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
- if (attr === 'type' || attr.startsWith('common.') || attr.startsWith('native.')) {
816
- return 'getObjectAsync("' + oid + '", async (err, obj) => {\n' +
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
- return ['\'' + oid + '\'', Blockly.JavaScript.ORDER_ATOMIC];
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
- return ['\'' + oid + '\'', Blockly.JavaScript.ORDER_ATOMIC];
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
- return ['\'' + oid + '\'', Blockly.JavaScript.ORDER_ATOMIC];
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
- return ['new RegExp("' + oid + '")', Blockly.JavaScript.ORDER_ATOMIC];
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
- // --- Round Number to n decimal places -------------------------------
1028
- Blockly.Blocks['math_rndfixed'] = {
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
- return ['getAstroDate("' + type + '", undefined, ' + offset + ')', Blockly.JavaScript.ORDER_ATOMIC];
489
+
490
+ return [`getAstroDate('${type}', undefined, ${offset})`, Blockly.JavaScript.ORDER_ATOMIC];
490
491
  };