iobroker.javascript 7.0.7 → 7.0.10

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 (42) hide show
  1. package/README.md +6 -12
  2. package/admin/asset-manifest.json +7 -7
  3. package/admin/google-blockly/blockly_compressed.js +1469 -1704
  4. package/admin/google-blockly/blocks_compressed.js +164 -218
  5. package/admin/google-blockly/javascript_compressed.js +100 -328
  6. package/admin/google-blockly/msg/js/de.js +64 -70
  7. package/admin/google-blockly/msg/js/en.js +14 -20
  8. package/admin/google-blockly/msg/js/es.js +39 -45
  9. package/admin/google-blockly/msg/js/fr.js +59 -65
  10. package/admin/google-blockly/msg/js/it.js +19 -25
  11. package/admin/google-blockly/msg/js/nl.js +55 -61
  12. package/admin/google-blockly/msg/js/pl.js +46 -52
  13. package/admin/google-blockly/msg/js/pt.js +30 -36
  14. package/admin/google-blockly/msg/js/ru.js +41 -47
  15. package/admin/google-blockly/msg/js/uk.js +13 -17
  16. package/admin/google-blockly/msg/js/zh-cn.js +86 -92
  17. package/admin/google-blockly/own/blocks_action.js +4 -4
  18. package/admin/google-blockly/own/blocks_logic.js +2 -2
  19. package/admin/google-blockly/own/blocks_procedures.js +63 -62
  20. package/admin/google-blockly/own/blocks_sendto.js +62 -60
  21. package/admin/google-blockly/own/blocks_switch.js +40 -29
  22. package/admin/google-blockly/own/blocks_system.js +109 -170
  23. package/admin/google-blockly/own/blocks_time.js +35 -35
  24. package/admin/google-blockly/own/blocks_timeout.js +42 -42
  25. package/admin/google-blockly/own/blocks_trigger.js +51 -68
  26. package/admin/google-blockly/own/blocks_words.js +12 -8
  27. package/admin/google-blockly/own/field_cron.js +189 -139
  28. package/admin/google-blockly/own/field_oid.js +250 -170
  29. package/admin/google-blockly/own/field_script.js +168 -122
  30. package/admin/static/js/{565.643198c0.chunk.js → 569.e2b427a7.chunk.js} +2 -2
  31. package/admin/static/js/569.e2b427a7.chunk.js.map +1 -0
  32. package/admin/static/js/759.7f25ba6c.chunk.js.map +1 -1
  33. package/admin/static/js/98.eee0c52f.chunk.js +2 -0
  34. package/admin/static/js/98.eee0c52f.chunk.js.map +1 -0
  35. package/admin/static/js/{main.d86fb9de.js → main.d5dc2784.js} +2 -2
  36. package/admin/static/js/{main.d86fb9de.js.map → main.d5dc2784.js.map} +1 -1
  37. package/admin/tab.html +1 -1
  38. package/io-package.json +27 -27
  39. package/package.json +1 -1
  40. package/admin/static/js/565.643198c0.chunk.js.map +0 -1
  41. package/admin/static/js/98.f78be4fc.chunk.js +0 -2
  42. package/admin/static/js/98.f78be4fc.chunk.js.map +0 -1
@@ -85,7 +85,6 @@ Blockly.Blocks['on_ext'] = {
85
85
  mutationToDom: function () {
86
86
  const container = document.createElement('mutation');
87
87
  container.setAttribute('items', this.itemCount_);
88
-
89
88
  return container;
90
89
  },
91
90
  /**
@@ -106,7 +105,6 @@ Blockly.Blocks['on_ext'] = {
106
105
  decompose: function (workspace) {
107
106
  const containerBlock = workspace.newBlock('on_ext_oid_container');
108
107
  containerBlock.initSvg();
109
-
110
108
  let connection = containerBlock.getInput('STACK').connection;
111
109
  for (let i = 0; i < this.itemCount_; i++) {
112
110
  const itemBlock = workspace.newBlock('on_ext_oid');
@@ -114,7 +112,6 @@ Blockly.Blocks['on_ext'] = {
114
112
  connection.connect(itemBlock.previousConnection);
115
113
  connection = itemBlock.nextConnection;
116
114
  }
117
-
118
115
  return containerBlock;
119
116
  },
120
117
  /**
@@ -131,19 +128,18 @@ Blockly.Blocks['on_ext'] = {
131
128
  itemBlock = itemBlock.nextConnection &&
132
129
  itemBlock.nextConnection.targetBlock();
133
130
  }
134
-
135
131
  // Disconnect any children that don't belong.
136
132
  for (let k = 0; k < this.itemCount_; k++) {
137
- var connection = this.getInput('OID' + k).connection.targetConnection;
133
+ const connection = this.getInput('OID' + k).connection.targetConnection;
138
134
  if (connection && connections.indexOf(connection) === -1) {
139
135
  connection.disconnect();
140
136
  }
141
137
  }
142
-
143
138
  this.itemCount_ = connections.length;
144
- if (this.itemCount_ < 1) this.itemCount_ = 1;
139
+ if (this.itemCount_ < 1) {
140
+ this.itemCount_ = 1;
141
+ }
145
142
  this.updateShape_();
146
-
147
143
  // Reconnect any child blocks.
148
144
  for (let i = 0; i < this.itemCount_; i++) {
149
145
  Blockly.Mutator.reconnect(connections[i], this, 'OID' + i);
@@ -157,9 +153,8 @@ Blockly.Blocks['on_ext'] = {
157
153
  saveConnections: function(containerBlock) {
158
154
  let itemBlock = containerBlock.getInputTargetBlock('STACK');
159
155
  let i = 0;
160
-
161
156
  while (itemBlock) {
162
- var input = this.getInput('OID' + i);
157
+ const input = this.getInput('OID' + i);
163
158
  itemBlock.valueConnection_ = input && input.connection.targetConnection;
164
159
  i++;
165
160
  itemBlock = itemBlock.nextConnection &&
@@ -191,7 +186,8 @@ Blockly.Blocks['on_ext'] = {
191
186
  // Add new inputs.
192
187
  const wp = this.workspace;
193
188
 
194
- for (var i = 0; i < this.itemCount_; i++) {
189
+ let i;
190
+ for (i = 0; i < this.itemCount_; i++) {
195
191
  let _input = this.getInput('OID' + i);
196
192
  if (!_input) {
197
193
  _input = this.appendValueInput('OID' + i);
@@ -220,7 +216,6 @@ Blockly.Blocks['on_ext'] = {
220
216
  }, 100, _input);
221
217
  }
222
218
  }
223
-
224
219
  // Remove deleted inputs.
225
220
  while (this.getInput('OID' + i)) {
226
221
  this.removeInput('OID' + i);
@@ -257,14 +252,13 @@ Blockly.Blocks['on_ext'] = {
257
252
  };
258
253
  Blockly.JavaScript['on_ext'] = function(block) {
259
254
  const dropdown_condition = block.getFieldValue('CONDITION');
255
+ const statements_name = Blockly.JavaScript.statementToCode(block, 'STATEMENT');
260
256
  const ack_condition = block.getFieldValue('ACK_CONDITION');
261
- const statement = Blockly.JavaScript.statementToCode(block, 'STATEMENT');
262
-
263
257
  let val;
264
258
  if (dropdown_condition === 'true' || dropdown_condition === 'false') {
265
259
  val = 'val: ' + dropdown_condition;
266
260
  } else {
267
- val = `change: '${dropdown_condition}'`;
261
+ val = 'change: "' + dropdown_condition + '"';
268
262
  }
269
263
 
270
264
  const oids = [];
@@ -280,12 +274,12 @@ Blockly.JavaScript['on_ext'] = function(block) {
280
274
  }
281
275
  }
282
276
  }
283
-
284
277
  const oid = '[].concat(' + oids.join(').concat(') + ')';
285
278
 
286
- return `on({ id: ${oid}, ${val} ${ack_condition ? ', ack: ' + ack_condition : ''} }, async (obj) => {\n` +
279
+ const code = 'on({ id: ' + oid + ', ' + val + (ack_condition ? ', ack: ' + ack_condition : '') + ' }, async (obj) => {\n' +
287
280
  (oids.length === 1 ? Blockly.JavaScript.prefixLines('let value = obj.state.val;\nlet oldValue = obj.oldState.val;', Blockly.JavaScript.INDENT) + '\n' : '') +
288
- statement + '});\n';
281
+ statements_name + '});\n';
282
+ return code;
289
283
  };
290
284
 
291
285
  // --- ON -----------------------------------------------------------
@@ -344,8 +338,8 @@ Blockly.JavaScript['on'] = function(block) {
344
338
  const value_objectid = block.getFieldValue('OID');
345
339
  const dropdown_condition = block.getFieldValue('CONDITION');
346
340
  const ack_condition = block.getFieldValue('ACK_CONDITION');
347
- const statement = Blockly.JavaScript.statementToCode(block, 'STATEMENT');
348
- const objectName = main.objects[value_objectid] && main.objects[value_objectid].common && main.objects[value_objectid].common.name ? main.objects[value_objectid].common.name : '';
341
+ const statements_name = Blockly.JavaScript.statementToCode(block, 'STATEMENT');
342
+ const objectname = main.objects[value_objectid] && main.objects[value_objectid].common && main.objects[value_objectid].common.name ? main.objects[value_objectid].common.name : '';
349
343
 
350
344
  Blockly.Msg.VARIABLES_DEFAULT_NAME = 'value';
351
345
 
@@ -353,13 +347,13 @@ Blockly.JavaScript['on'] = function(block) {
353
347
  if (dropdown_condition === 'true' || dropdown_condition === 'false') {
354
348
  val = 'val: ' + dropdown_condition;
355
349
  } else {
356
- val = `change: '${dropdown_condition}'`;
350
+ val = 'change: "' + dropdown_condition + '"';
357
351
  }
358
352
 
359
- return `on({ id: '${value_objectid}'${objectName ? ` /* ${objectName} */` : ''}, ${val} ${ack_condition ? ', ack: ' + ack_condition : ''} }, async (obj) => {\n` +
360
- Blockly.JavaScript.prefixLines('let value = obj.state.val;', Blockly.JavaScript.INDENT) + '\n' +
353
+ return 'on({ id: "' + value_objectid + '"' + (objectname ? '/*' + objectname + '*/' : '') + ', ' + val + (ack_condition ? ', ack: ' + ack_condition : '') + ' }, async (obj) => {\n' +
354
+ Blockly.JavaScript.prefixLines('let value = obj.state.val;\n', Blockly.JavaScript.INDENT) + '\n' +
361
355
  Blockly.JavaScript.prefixLines('let oldValue = obj.oldState.val;', Blockly.JavaScript.INDENT) + '\n' +
362
- statement +
356
+ + statements_name +
363
357
  '});\n';
364
358
  };
365
359
 
@@ -376,7 +370,6 @@ Blockly.Blocks['on_source'] = {
376
370
  * @this Blockly.Block
377
371
  */
378
372
  init: function() {
379
-
380
373
  this.appendDummyInput()
381
374
  .appendField('↪');
382
375
 
@@ -404,7 +397,7 @@ Blockly.Blocks['on_source'] = {
404
397
  [Blockly.Translate('on_source_oldstate_ack'), 'oldState.ack'],
405
398
  [Blockly.Translate('on_source_oldstate_lc'), 'oldState.lc'],
406
399
  [Blockly.Translate('on_source_oldstate_c'), 'oldState.c'],
407
- [Blockly.Translate('on_source_oldstate_user'), 'oldState.user']
400
+ [Blockly.Translate('on_source_oldstate_user'), 'oldState.user']
408
401
  ]), 'ATTR');
409
402
 
410
403
  this.setInputsInline(true);
@@ -424,7 +417,7 @@ Blockly.Blocks['on_source'] = {
424
417
  // Is the block nested in a trigger?
425
418
  let block = this;
426
419
  do {
427
- if (this.FUNCTION_TYPES.indexOf(block.type) !== -1) {
420
+ if (this.FUNCTION_TYPES.includes(block.type)) {
428
421
  legal = true;
429
422
  break;
430
423
  }
@@ -447,13 +440,11 @@ Blockly.Blocks['on_source'] = {
447
440
  Blockly.JavaScript['on_source'] = function(block) {
448
441
  let attr = block.getFieldValue('ATTR');
449
442
  const parts = attr.split('.');
450
-
451
443
  if (parts.length > 1) {
452
444
  attr = '(obj.' + parts[0] + ' ? obj.' + attr + ' : "")';
453
445
  } else {
454
446
  attr = 'obj.' + attr;
455
447
  }
456
-
457
448
  return [attr, Blockly.JavaScript.ORDER_ATOMIC];
458
449
  };
459
450
 
@@ -461,6 +452,9 @@ Blockly.JavaScript['on_source'] = function(block) {
461
452
  Blockly.Trigger.blocks['schedule'] =
462
453
  '<block type="schedule">'
463
454
  + ' <value name="SCHEDULE">'
455
+ //+ ' <shadow type="text">'
456
+ //+ ' <field name="TEXT">test</field>'
457
+ //+ ' </shadow>'
464
458
  + ' </value>'
465
459
  + ' <value name="STATEMENT">'
466
460
  + ' </value>'
@@ -487,16 +481,15 @@ Blockly.Blocks['schedule'] = {
487
481
  };
488
482
  Blockly.JavaScript['schedule'] = function(block) {
489
483
  let schedule = block.getFieldValue('SCHEDULE');
490
- const statement = Blockly.JavaScript.statementToCode(block, 'STATEMENT');
484
+ const statements_name = Blockly.JavaScript.statementToCode(block, 'STATEMENT');
491
485
 
492
486
  if (schedule[0] === '{') {
493
487
  schedule = "'" + schedule + "'";
494
488
  } else {
495
489
  schedule = '"' + schedule + '"';
496
490
  }
497
-
498
- return `schedule(${schedule}, async () => {\n` +
499
- statement +
491
+ return 'schedule(' + schedule + ', async () => {\n' +
492
+ statements_name +
500
493
  '});\n';
501
494
  };
502
495
 
@@ -559,11 +552,11 @@ Blockly.Blocks['astro'] = {
559
552
  };
560
553
  Blockly.JavaScript['astro'] = function(block) {
561
554
  const astrotype = block.getFieldValue('TYPE');
562
- const offset = parseInt(block.getFieldValue('OFFSET'), 10);
563
- const statement = Blockly.JavaScript.statementToCode(block, 'STATEMENT');
555
+ const offset = parseInt(block.getFieldValue('OFFSET'), 10);
556
+ const statements_name = Blockly.JavaScript.statementToCode(block, 'STATEMENT');
564
557
 
565
- return `schedule({ astro: '${astrotype}', shift: ${offset} }, async () => {\n` +
566
- statement +
558
+ return 'schedule({ astro: "' + astrotype + '", shift: ' + offset + ' }, async () => {\n' +
559
+ statements_name +
567
560
  '});\n';
568
561
  };
569
562
 
@@ -683,10 +676,10 @@ Blockly.Blocks['schedule_create'] = {
683
676
  Blockly.JavaScript['schedule_create'] = function (block) {
684
677
  const name = Blockly.JavaScript.variableDB_.safeName_(block.getFieldValue('NAME'));
685
678
  const schedule = Blockly.JavaScript.valueToCode(block, 'SCHEDULE', Blockly.JavaScript.ORDER_ATOMIC);
686
- const statement = Blockly.JavaScript.statementToCode(block, 'STATEMENT');
679
+ const statements_name = Blockly.JavaScript.statementToCode(block, 'STATEMENT');
687
680
 
688
681
  return name + ' = schedule(' + schedule + ', async () => {\n' +
689
- statement +
682
+ statements_name +
690
683
  '});\n';
691
684
  };
692
685
 
@@ -741,7 +734,7 @@ Blockly.Blocks['schedule_clear'] = {
741
734
 
742
735
  Blockly.JavaScript['schedule_clear'] = function(block) {
743
736
  const name = Blockly.JavaScript.variableDB_.safeName_(block.getFieldValue('NAME'));
744
- return `(function () { if (${name}) { clearSchedule(${name}); ${name} = null; }})();\n`;
737
+ return '(function () { if (' + name + ') { clearSchedule(' + name + '); ' + name + ' = null; }})();\n';
745
738
  };
746
739
 
747
740
  // --- CRON dialog --------------------------------------------------
@@ -769,7 +762,7 @@ Blockly.Blocks['field_cron'] = {
769
762
 
770
763
  Blockly.JavaScript['field_cron'] = function(block) {
771
764
  const cron = block.getFieldValue('CRON');
772
- return [`'${cron}'`, Blockly.JavaScript.ORDER_ATOMIC]
765
+ return ['\'' + cron + '\'', Blockly.JavaScript.ORDER_ATOMIC]
773
766
  };
774
767
 
775
768
  // --- CRON builder --------------------------------------------------
@@ -795,7 +788,6 @@ Blockly.Trigger.blocks['cron_builder'] =
795
788
  Blockly.Blocks['cron_builder'] = {
796
789
  // Checkbox.
797
790
  init: function() {
798
-
799
791
  this.appendDummyInput()
800
792
  .appendField(Blockly.Translate('cron_builder_CRON'));
801
793
 
@@ -809,7 +801,6 @@ Blockly.Blocks['cron_builder'] = {
809
801
  .appendField(Blockly.Translate('cron_builder_dow'));
810
802
 
811
803
  const wp = this.workspace;
812
-
813
804
  setTimeout(function (_input) {
814
805
  if (!_input.connection.isConnected()) {
815
806
  const _shadow = wp.newBlock('text');
@@ -819,9 +810,9 @@ Blockly.Blocks['cron_builder'] = {
819
810
  }
820
811
  }, 100, _input);
821
812
 
813
+
822
814
  _input = this.appendValueInput('MONTHS')
823
815
  .appendField(Blockly.Translate('cron_builder_month'));
824
-
825
816
  setTimeout(function (_input) {
826
817
  if (!_input.connection.isConnected()) {
827
818
  const _shadow = wp.newBlock('text');
@@ -833,7 +824,6 @@ Blockly.Blocks['cron_builder'] = {
833
824
 
834
825
  _input = this.appendValueInput('DAYS')
835
826
  .appendField(Blockly.Translate('cron_builder_day'));
836
-
837
827
  setTimeout(function (_input) {
838
828
  if (!_input.connection.isConnected()) {
839
829
  const _shadow = wp.newBlock('text');
@@ -845,7 +835,6 @@ Blockly.Blocks['cron_builder'] = {
845
835
 
846
836
  _input = this.appendValueInput('HOURS')
847
837
  .appendField(Blockly.Translate('cron_builder_hour'));
848
-
849
838
  setTimeout(function (_input) {
850
839
  if (!_input.connection.isConnected()) {
851
840
  const _shadow = wp.newBlock('text');
@@ -857,7 +846,6 @@ Blockly.Blocks['cron_builder'] = {
857
846
 
858
847
  _input = this.appendValueInput('MINUTES')
859
848
  .appendField(Blockly.Translate('cron_builder_minutes'));
860
-
861
849
  setTimeout(function (_input) {
862
850
  if (!_input.connection.isConnected()) {
863
851
  const _shadow = wp.newBlock('text');
@@ -890,7 +878,6 @@ Blockly.Blocks['cron_builder'] = {
890
878
  const container = document.createElement('mutation');
891
879
  container.setAttribute('seconds', this.seconds_);
892
880
  container.setAttribute('as_line', this.as_line_);
893
-
894
881
  return container;
895
882
  },
896
883
  /**
@@ -943,12 +930,11 @@ Blockly.JavaScript['cron_builder'] = function(block) {
943
930
  const code =
944
931
  (withSeconds === 'TRUE' || withSeconds === 'true' || withSeconds === true ?
945
932
  seconds + '.toString().trim() + \' \' + ' : '') +
946
- minutes + '.toString().trim() + \' \' + ' +
947
- hours + '.toString().trim() + \' \' + ' +
948
- days + '.toString().trim() + \' \' + ' +
949
- months + '.toString().trim() + \' \' + ' +
950
- dow + '.toString().trim()';
951
-
933
+ minutes + '.toString().trim() + \' \' + ' +
934
+ hours + '.toString().trim() + \' \' + ' +
935
+ days + '.toString().trim() + \' \' + ' +
936
+ months + '.toString().trim() + \' \' + ' +
937
+ dow + '.toString().trim()';
952
938
  return [code, Blockly.JavaScript.ORDER_ATOMIC]
953
939
  };
954
940
 
@@ -986,10 +972,10 @@ Blockly.Blocks['onMessage'] = {
986
972
 
987
973
  Blockly.JavaScript['onMessage'] = function (block) {
988
974
  const message = block.getFieldValue('MESSAGE');
989
- const statement = Blockly.JavaScript.statementToCode(block, 'STATEMENT');
975
+ const statements_name = Blockly.JavaScript.statementToCode(block, 'STATEMENT');
990
976
 
991
- return `onMessage('${message}', async (data) => {\n` +
992
- statement +
977
+ return 'onMessage("' + message + '", async (data) => {\n' +
978
+ statements_name +
993
979
  '});\n';
994
980
  };
995
981
 
@@ -1037,18 +1023,16 @@ Blockly.Blocks['onFile'] = {
1037
1023
  this.setHelpUrl(getHelp('onFile_help'));
1038
1024
  }
1039
1025
  };
1040
-
1041
1026
  Blockly.JavaScript['onFile'] = function (block) {
1042
1027
  const value_objectid = Blockly.JavaScript.valueToCode(block, 'OID', Blockly.JavaScript.ORDER_ATOMIC);
1043
1028
  const file = Blockly.JavaScript.valueToCode(block, 'FILE', Blockly.JavaScript.ORDER_ATOMIC);
1044
1029
  const withFile = block.getFieldValue('WITH_FILE');
1045
- const statement = Blockly.JavaScript.statementToCode(block, 'STATEMENT');
1046
- const objectName = main.objects[value_objectid] && main.objects[value_objectid].common && main.objects[value_objectid].common.name ? main.objects[value_objectid].common.name : '';
1030
+ const statements_name = Blockly.JavaScript.statementToCode(block, 'STATEMENT');
1031
+ const objectname = main.objects[value_objectid] && main.objects[value_objectid].common && main.objects[value_objectid].common.name ? main.objects[value_objectid].common.name : '';
1047
1032
 
1048
- return `onFile(${value_objectid}${objectName ? ` /* ${objectName} */` : ''}, ${file}, ${withFile === 'TRUE' ? 'true' : 'false'}, ` +
1049
- 'async (id, fileName, size, data, mimeType) => {\n' +
1050
- statement +
1051
- '});\n';
1033
+ return 'onFile(' + value_objectid + (objectname ? '/*' + objectname + '*/' : '') + ', ' +
1034
+ file + ', ' + (withFile === 'TRUE' ? 'true' : 'false') +
1035
+ ', async (id, fileName, size, data, mimeType) => {\n' + statements_name + '});\n';
1052
1036
  };
1053
1037
 
1054
1038
  // --- onFile -----------------------------------------------------------
@@ -1083,11 +1067,10 @@ Blockly.Blocks['offFile'] = {
1083
1067
  this.setHelpUrl(getHelp('offFile_help'));
1084
1068
  }
1085
1069
  };
1086
-
1087
1070
  Blockly.JavaScript['offFile'] = function (block) {
1088
1071
  const value_objectid = Blockly.JavaScript.valueToCode(block, 'OID', Blockly.JavaScript.ORDER_ATOMIC);
1089
1072
  const file = Blockly.JavaScript.valueToCode(block, 'FILE', Blockly.JavaScript.ORDER_ATOMIC);
1090
- const objectName = main.objects[value_objectid] && main.objects[value_objectid].common && main.objects[value_objectid].common.name ? main.objects[value_objectid].common.name : '';
1073
+ const objectname = main.objects[value_objectid] && main.objects[value_objectid].common && main.objects[value_objectid].common.name ? main.objects[value_objectid].common.name : '';
1091
1074
 
1092
- return `offFile(${value_objectid}${objectName ? ` /* ${objectName} */` : ''}, ${file});\n`;
1093
- };
1075
+ return 'offFile(' + value_objectid + (objectname ? '/*' + objectname + '*/' : '') + ', ' + file + ');\n';
1076
+ };
@@ -163,12 +163,12 @@ Blockly.Words['get_value_comment'] = {'en': 'Value comment',
163
163
  Blockly.Words['get_value_from'] = {'en': 'Source', 'de': 'Quelle', 'ru': 'Происхождение', 'pt': 'Fonte', 'nl': 'Bron', 'fr': 'La source', 'it': 'fonte', 'es': 'Fuente', 'pl': 'Source', 'zh-cn': '上次变更发起者', 'uk': 'Джерело'};
164
164
  Blockly.Words['get_common_name'] = {'en': 'Object name', 'de': 'Objektname', 'ru': 'Имя объекта', 'pt': 'Nome do objeto', 'nl': 'Object naam', 'fr': 'Nom de l\'objet', 'it': 'Nome oggetto', 'es': 'Nombre del objeto', 'pl': 'Nazwa obiektu', 'zh-cn': '对象名称', 'uk': 'Назва об\'єкта'};
165
165
  Blockly.Words['get_common_desc'] = {'en': 'Object description', 'de': 'Objektbeschreibung', 'ru': 'Описание объекта', 'pt': 'Descrição do objeto', 'nl': 'Objectbeschrijving', 'fr': 'Descriptif de l\'objet', 'it': 'Descrizione dell\'oggetto', 'es': 'Descripción del objeto', 'pl': 'Opis obiektu', 'zh-cn': '对象描述', 'uk': 'Опис об\'єкта'};
166
- Blockly.Words['get_common_unit'] = {'en': 'State unit', 'de': 'Zustands-Einheit', 'ru': 'Единица измерения', 'pt': 'unidade estadual', 'nl': 'Staatseenheid', 'fr': 'Unité d\'état', 'it': 'Unità statale', 'es': 'unidad estatal', 'pl': 'Jednostka państwowa', 'zh-cn': '国家单位', 'uk': 'Державна одиниця'};
166
+ Blockly.Words['get_common_unit'] = {'en': 'State unit', 'de': 'Zustands-Einheit', 'ru': 'Единица измерения', 'pt': 'unidade estadual', 'nl': 'Staatseenheid', 'fr': 'Unité d\'état', 'it': 'Unità statale', 'es': 'unidad estatal', 'pl': 'Jednostka państwowa', 'zh-cn': '国家单位', 'uk': 'Державна одиниця'};
167
167
  Blockly.Words['get_common_role'] = {'en': 'Object role', 'de': 'Objektrolle', 'ru': 'Роль объекта', 'pt': 'função do objeto', 'nl': 'Object rol', 'fr': 'Rôle d\'objet', 'it': 'Ruolo dell\'oggetto', 'es': 'Rol de objeto', 'pl': 'Rola obiektu', 'zh-cn': '对象角色', 'uk': 'Об\'єктна роль'};
168
168
  Blockly.Words['get_common_state_type'] = {'en': 'State type', 'de': 'Zustandstyp', 'ru': 'Тип состояния', 'pt': 'tipo de estado', 'nl': 'Type staat', 'fr': 'Type d\'état', 'it': 'Tipo di stato', 'es': 'tipo de estado', 'pl': 'Typ stanu', 'zh-cn': '状态类型', 'uk': 'Державний тип'};
169
169
  Blockly.Words['get_common_object_type'] = {'en': 'Object type', 'de': 'Objekttyp', 'ru': 'Тип объекта', 'pt': 'Tipo de objeto', 'nl': 'Object type', 'fr': 'Type d\'objet', 'it': 'Tipo di oggetto', 'es': 'Tipo de objeto', 'pl': 'Rodzaj obiektu', 'zh-cn': '对象类型', 'uk': 'Тип об\'єкта'};
170
- Blockly.Words['get_common_read'] = {'en': 'Is state readable', 'de': 'Zustand lesbar ist', 'ru': 'Является читаемым', 'pt': 'O estado é legível', 'nl': 'Staat leesbaar', 'fr': 'L\'état est-il lisible', 'it': 'È leggibile dallo stato', 'es': 'Es estado legible', 'pl': 'Czy stan jest czytelny', 'zh-cn': '状态是否可读', 'uk': 'Чи читається стан'};
171
- Blockly.Words['get_common_write'] = {'en': 'Is state writable', 'de': 'Zustand beschreibbar ist', 'ru': 'Доступно для записи', 'pt': 'É estado gravável', 'nl': 'Staat beschrijfbaar', 'fr': 'L\'état est-il accessible en écriture', 'it': 'È stato scrivibile', 'es': 'Es el estado escribible', 'pl': 'Czy stan jest zapisywalny', 'zh-cn': '状态是否可写', 'uk': 'Доступний для запису в стані'};
170
+ Blockly.Words['get_common_read'] = {'en': 'Is state readable', 'de': 'Zustand lesbar ist', 'ru': 'Является читаемым', 'pt': 'O estado é legível', 'nl': 'Staat leesbaar', 'fr': 'L\'état est-il lisible', 'it': 'È leggibile dallo stato', 'es': 'Es estado legible', 'pl': 'Czy stan jest czytelny', 'zh-cn': '状态是否可读', 'uk': 'Чи читається стан'};
171
+ Blockly.Words['get_common_write'] = {'en': 'Is state writable', 'de': 'Zustand beschreibbar ist', 'ru': 'Доступно для записи', 'pt': 'É estado gravável', 'nl': 'Staat beschrijfbaar', 'fr': 'L\'état est-il accessible en écriture', 'it': 'È stato scrivibile', 'es': 'Es el estado escribible', 'pl': 'Czy stan jest zapisywalny', 'zh-cn': '状态是否可写', 'uk': 'Доступний для запису в стані'};
172
172
  Blockly.Words['get_value_async'] = {'en': 'Get state value', 'de': 'Zustandswert nehmen', 'ru': 'Взять значение состояния', 'pt': 'Tome o valor do estado', 'nl': 'Krijg statuswaarde', 'fr': 'Obtenir la valeur de l\'état', 'it': 'Ottieni valore statale', 'es': 'Obtener valor de estado', 'pl': 'Get state value', 'zh-cn': '获取状态的值', 'uk': 'Отримати державне значення'};
173
173
 
174
174
  // --- system field --------------------------------------------------
@@ -444,13 +444,17 @@ Blockly.Words['onMessage_message'] = {'en': 'message',
444
444
  Blockly.Words['onMessage_tooltip'] = {'en': 'message', 'de': 'Meldung', 'ru': 'сообщение', 'pt': 'mensagem', 'nl': 'bericht', 'fr': 'message', 'it': 'messaggio', 'es': 'mensaje', 'pl': 'komunikat', 'zh-cn': '消息', 'uk': 'повідомлення'};
445
445
  Blockly.Words['onMessage_help'] = {'en': 'onMessage', 'de': 'onMessage', 'ru': 'onMessage', 'pt': 'onMessage', 'nl': 'onMessage', 'fr': 'onMessage', 'it': 'onMessage', 'es': 'onMessage', 'pl': 'onMessage', 'zh-cn': 'onMessage', 'uk': 'onMessage'};
446
446
 
447
+ // --- LOGIC --------------------------------------------------
448
+
447
449
  // --- logic between --------------------------------------------------
448
- Blockly.Words['logic_between_min'] = { "en": "Min", "de": "Min", "ru": "Мин", "pt": "Min", "nl": "Min", "fr": "Min", "it": "Min", "es": "Min", "pl": "Min", "uk": "Мінуси", "zh-cn": "明 明" };
449
- Blockly.Words['logic_between_max'] = { "en": "Max", "de": "Max", "ru": "Макс", "pt": "Max", "nl": "Max", "fr": "Max", "it": "Max", "es": "Max", "pl": "Max", "uk": "Макс", "zh-cn": "Max" };
450
+ Blockly.Words['logic_between_min'] = {'en': 'Min', 'de': 'Min', 'ru': 'Мин', 'pt': 'Min', 'nl': 'Min', 'fr': 'Min', 'it': 'Min', 'es': 'Min', 'pl': 'Min', 'zh-cn': '明 明', 'uk': 'Мінуси'};
451
+ Blockly.Words['logic_between_max'] = {'en': 'Max', 'de': 'Max', 'ru': 'Макс', 'pt': 'Max', 'nl': 'Max', 'fr': 'Max', 'it': 'Max', 'es': 'Max', 'pl': 'Max', 'zh-cn': 'Max', 'uk': 'Макс'};
452
+ Blockly.Words['logic_between_tooltip'] = {'en': 'if a number between min and max', 'de': 'wenn eine Zahl zwischen min und max', 'ru': 'если число между min и max', 'pt': 'se um número entre min e max', 'nl': 'als een getal tussen min en max', 'fr': 'si un nombre entre min et max', 'it': 'se un numero compreso tra min e max', 'es': 'si un número entre min y max', 'pl': 'jeśli liczba między min a max', 'zh-cn': '如果最小值和最大值之间的数字', 'uk': 'якщо число між min і max'};
450
453
 
451
454
  // --- logic ifempty --------------------------------------------------
452
- Blockly.Words['logic_ifempty'] = { "en": "if empty", "de": "wenn leer", "ru": "если пусто", "pt": "se vazio", "nl": "_", "fr": "si vide", "it": "se vuoto", "es": "si está vacío", "pl": "jeśli chodzi o puste", "uk": "якщо порожній", "zh-cn": "" };
453
- Blockly.Words['logic_ifempty_then'] = { "en": "then", "de": "dann", "ru": "затем", "pt": "então", "nl": "dan", "fr": "puis", "it": "allora", "es": "entonces", "pl": "potem", "uk": "потім", "zh-cn": "然后" };
455
+ Blockly.Words['logic_ifempty'] = {'en': 'if empty', 'de': 'wenn leer', 'ru': 'если пусто', 'pt': 'se vazio', 'nl': '_', 'fr': 'si vide', 'it': 'se vuoto', 'es': 'si está vacío', 'pl': 'jeśli chodzi o puste', 'zh-cn': '', 'uk': 'якщо порожній'};
456
+ Blockly.Words['logic_ifempty_then'] = {'en': 'then', 'de': 'dann', 'ru': 'затем', 'pt': 'então', 'nl': 'dan', 'fr': 'puis', 'it': 'allora', 'es': 'entonces', 'pl': 'potem', 'zh-cn': '然后', 'uk': 'потім'};
457
+ Blockly.Words['logic_ifempty_tooltip'] = {'en': 'check if empty', 'de': 'Überprüfen, ob es leer ist', 'ru': 'проверить, если пусто', 'pt': 'verifique se está vazio', 'nl': 'controleer of leeg', 'fr': 'vérifier si vide', 'it': 'controlla se vuoto', 'es': 'comprobar si está vacío', 'pl': 'sprawdź, czy jest pusty', 'zh-cn': '检查是否为空', 'uk': 'перевірити, чи порожній'};
454
458
 
455
459
  function getHelp(word) {
456
460
  return 'https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/javascript.md#' + Blockly.Words[word][systemLang];
@@ -467,4 +471,4 @@ Blockly.Translate = function (word, lang) {
467
471
 
468
472
  if (typeof module !== 'undefined' && typeof module.parent !== 'undefined') {
469
473
  module.exports = Blockly;
470
- }
474
+ }