iobroker.javascript 10.0.0 → 10.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 (157) hide show
  1. package/README.md +41 -6
  2. package/admin/assets/AiChatPanel-C4kuqP2U.js +237 -0
  3. package/admin/assets/AiDiffView-zJTEnv05.js +1 -0
  4. package/admin/assets/BlocklyEditor-BB77aFJI.js +84 -0
  5. package/admin/assets/ContextWrapper-C2yvd2Tn.css +1 -0
  6. package/admin/assets/ContextWrapper-W2H0z6zD.js +136 -0
  7. package/admin/assets/Debugger-DCMWjeGm.js +15 -0
  8. package/admin/assets/Error-CBC2oZzb.js +1 -0
  9. package/admin/assets/Import-B-F9IhZ-.js +1 -0
  10. package/admin/assets/RulesEditor-ByjgEaVo.js +1 -0
  11. package/admin/assets/RulesEditor-k-DMHotH.css +1 -0
  12. package/admin/assets/{ScriptEditor-BGIuoNei.js → ScriptEditor-CMYUt5S4.js} +2 -2
  13. package/admin/assets/{ScriptEditorVanillaMonaco-DyMQtoTQ.js → ScriptEditorVanillaMonaco-v12-gORS.js} +3 -3
  14. package/admin/assets/Send-CChqR5Oy.js +1 -0
  15. package/admin/assets/_virtual_mf-localSharedImportMap___mfe_internal__iobroker_javascript__mf_owner__1-7EPUlgCk.js +1 -0
  16. package/admin/assets/_virtual_mf___mfe_internal__iobroker_javascript__mf_owner__1__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-DuplUOZN.js +1243 -0
  17. package/admin/assets/{_virtual_mf___mfe_internal__iobroker_javascript__mf_owner__1__loadShare__react_mf_2_dom_mf_1_client__loadShare__.js-BBAXJaqI.js → _virtual_mf___mfe_internal__iobroker_javascript__mf_owner__1__loadShare__react_mf_2_dom_mf_1_client__loadShare__.js-JkwfVf8d.js} +1 -1
  18. package/admin/assets/{aiCodeLensProvider-hyAmut0e.js → aiCodeLensProvider-BGvIu6hH.js} +1 -1
  19. package/admin/assets/blockly-C4zJerWL.js +1047 -0
  20. package/admin/assets/blocks_action-CvnOHXwt.js +1 -0
  21. package/admin/assets/blocks_convert-BZlKcd02.js +3 -0
  22. package/admin/assets/blocks_logic-B33Pypxr.js +1 -0
  23. package/admin/assets/blocks_number-k2IjE7OH.js +1 -0
  24. package/admin/assets/blocks_object-B64vSfel.js +1 -0
  25. package/admin/assets/blocks_procedures-BpvNI5dO.js +3 -0
  26. package/admin/assets/blocks_sendto-pwZchfe0.js +5 -0
  27. package/admin/assets/blocks_switch-DViYCmQd.js +2 -0
  28. package/admin/assets/blocks_system-BZZcGqTJ.js +1 -0
  29. package/admin/assets/blocks_text-BOvtHN2r.js +1 -0
  30. package/admin/assets/blocks_time-BH2F-ylT.js +1 -0
  31. package/admin/assets/blocks_timeout-C3BoW4XJ.js +1 -0
  32. package/admin/assets/blocks_trigger-gwXvuAHV.js +2 -0
  33. package/admin/assets/blocks_words-D8PL_nSE.js +1 -0
  34. package/admin/assets/{cronHoverProvider-pKJkSevo.js → cronHoverProvider-DjY3jLvQ.js} +1 -1
  35. package/admin/assets/dist-D6o4h8Pd.js +4 -0
  36. package/admin/assets/field_cron-BMQWPb61.js +1 -0
  37. package/admin/assets/field_oid-BGIMv9gw.js +1 -0
  38. package/admin/assets/field_script-CdzYBCe6.js +1 -0
  39. package/admin/assets/helpers-Crmcgphg.js +1 -0
  40. package/admin/assets/hostInit-DBlZi_Kt.js +1 -0
  41. package/admin/assets/index-BvPVHv3P.js +192 -0
  42. package/admin/assets/{inlineChatWidget-ZaisTOLh.js → inlineChatWidget-SDoyVtOR.js} +2 -2
  43. package/admin/assets/{inlineDiffController-hTwHHqcc.js → inlineDiffController-CnHE3Rwd.js} +2 -2
  44. package/admin/assets/javascript-DVIhlTDr.js +218 -0
  45. package/admin/assets/{mf-entry-bootstrap-0-d6052b31.js → mf-entry-bootstrap-0-a03ecebd.js} +6 -2
  46. package/admin/assets/{mjs-DWqivHEk.js → mjs-Bh7xFIpd.js} +2 -2
  47. package/admin/assets/{stateHoverProvider-C7DawIs-.js → stateHoverProvider-D0iXo6YF.js} +3 -3
  48. package/admin/assets/{virtualExposes-Ed0lGq7k.js → virtualExposes-DgGB-18P.js} +1 -1
  49. package/admin/assets/virtual_mf-REMOTE_ENTRY_ID___mfe_internal__iobroker_javascript__remoteEntry_js-DYEYnOkt.js +1 -0
  50. package/admin/assets/virtual_mf-exposes___mfe_internal__iobroker_javascript__remoteEntry_js-ChiJXsfH.js +1 -0
  51. package/admin/custom/assets/Components-CuFt9lAY.js +1 -0
  52. package/admin/custom/assets/_virtual_mf-localSharedImportMap___mfe_internal__ConfigCustomJavascriptSet__mf_owner__1-DljJyQQg.js +1 -0
  53. package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__1__loadShare___mf_0_emotion_mf_1_react__loadShare__.js-D0M1SjIE.js +1 -0
  54. package/admin/custom/assets/{_virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__1__loadShare___mf_0_emotion_mf_1_styled__loadShare__.js-CGb5Cofy.js → _virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__1__loadShare___mf_0_emotion_mf_1_styled__loadShare__.js-BD2OkSge.js} +1 -1
  55. package/admin/custom/assets/{_virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__1__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-BVCIAgbo.js → _virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__1__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-pM642JFd.js} +91 -91
  56. package/admin/custom/assets/{_virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__1__loadShare___mf_0_iobroker_mf_1_json_mf_2_config__loadShare__.js-BkB0anQX.js → _virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__1__loadShare___mf_0_iobroker_mf_1_json_mf_2_config__loadShare__.js-BLelmJ7Y.js} +74 -74
  57. package/admin/custom/assets/{_virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__1__loadShare__react_mf_2_dom_mf_1_client__loadShare__.js-BotqDuw-.js → _virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__1__loadShare__react_mf_2_dom_mf_1_client__loadShare__.js-BGiB1l5e.js} +1 -1
  58. package/admin/custom/assets/{_virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__1__prebuild__date_mf_2_fns__prebuild__-Cb5TR7FB.js → _virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__1__prebuild__date_mf_2_fns__prebuild__-D5hqXJXI.js} +1 -1
  59. package/admin/custom/assets/hostInit-0DGPuZTB.js +1 -0
  60. package/admin/custom/assets/{index-uEKAoVT7.js → index-DcFI5r-g.js} +1 -1
  61. package/admin/custom/assets/{lib-Yj8cfN0A.js → lib-BlUjuGH7.js} +1 -1
  62. package/admin/custom/assets/{mf-entry-bootstrap-0-77793feb.js → mf-entry-bootstrap-0-efd847a6.js} +6 -2
  63. package/admin/custom/assets/{setYear-DJ9FbdkO.js → setYear-BaCcPbbI.js} +1 -1
  64. package/admin/custom/assets/virtualExposes-DGxNcyb6.js +1 -0
  65. package/admin/custom/assets/virtual_mf-REMOTE_ENTRY_ID___mfe_internal__ConfigCustomJavascriptSet__customComponents_js-DVNwFcUr.js +1 -0
  66. package/admin/custom/assets/virtual_mf-exposes___mfe_internal__ConfigCustomJavascriptSet__customComponents_js-DPck7zEs.js +2 -0
  67. package/admin/custom/customComponents.js +1 -1
  68. package/admin/google-blockly/VERSION +1 -0
  69. package/admin/google-blockly/media/drop.mp3 +0 -0
  70. package/admin/google-blockly/msg/js/de.js +332 -56
  71. package/admin/google-blockly/msg/js/en.js +319 -43
  72. package/admin/google-blockly/msg/js/es.js +319 -42
  73. package/admin/google-blockly/msg/js/fr.js +315 -39
  74. package/admin/google-blockly/msg/js/it.js +327 -51
  75. package/admin/google-blockly/msg/js/nl.js +376 -100
  76. package/admin/google-blockly/msg/js/pl.js +318 -42
  77. package/admin/google-blockly/msg/js/pt.js +318 -42
  78. package/admin/google-blockly/msg/js/ru.js +320 -44
  79. package/admin/google-blockly/msg/js/uk.js +326 -50
  80. package/admin/google-blockly/msg/js/zh-cn.js +322 -46
  81. package/admin/i18n/de.json +48 -26
  82. package/admin/i18n/en.json +47 -25
  83. package/admin/i18n/es.json +48 -18
  84. package/admin/i18n/fr.json +47 -17
  85. package/admin/i18n/it.json +47 -17
  86. package/admin/i18n/nl.json +47 -17
  87. package/admin/i18n/pl.json +48 -18
  88. package/admin/i18n/pt.json +47 -17
  89. package/admin/i18n/ru.json +47 -17
  90. package/admin/i18n/uk.json +47 -17
  91. package/admin/i18n/zh-cn.json +47 -17
  92. package/admin/jsonConfig.json +367 -0
  93. package/admin/mf-manifest.json +1 -1
  94. package/admin/mf-stats.json +1 -1
  95. package/admin/remoteEntry.js +1 -1
  96. package/admin/tab.html +12 -95
  97. package/build/lib/mirror.js +9 -0
  98. package/build/lib/mirror.js.map +1 -1
  99. package/build/lib/sandbox.js +35 -0
  100. package/build/lib/sandbox.js.map +1 -1
  101. package/build/lib/typescriptSettings.js +112 -2
  102. package/build/lib/typescriptSettings.js.map +1 -1
  103. package/build/lib/typescriptTools.js +168 -43
  104. package/build/lib/typescriptTools.js.map +1 -1
  105. package/build/main.js +10 -5
  106. package/build/main.js.map +1 -1
  107. package/build/types.d.ts +41 -0
  108. package/docs/en/javascript.md +16 -0
  109. package/docs/en/upgrade-guide.md +3 -0
  110. package/io-package.json +45 -15
  111. package/package.json +8 -3
  112. package/admin/assets/AiChatPanel-p0KAg6Cs.js +0 -237
  113. package/admin/assets/AiDiffView-BPTLnNx1.js +0 -1
  114. package/admin/assets/BlocklyEditor-CAjVMhYT.js +0 -81
  115. package/admin/assets/ContextWrapper-BVc8wTK_.css +0 -1
  116. package/admin/assets/ContextWrapper-D9CrnNKs.js +0 -127
  117. package/admin/assets/Debugger-SjROokFI.js +0 -15
  118. package/admin/assets/Error-DDfrxAt2.js +0 -1
  119. package/admin/assets/Import-DpTg1Jow.js +0 -1
  120. package/admin/assets/RulesEditor-BSRFWpEm.css +0 -1
  121. package/admin/assets/RulesEditor-D0hgrcBc.js +0 -1
  122. package/admin/assets/_virtual_mf-localSharedImportMap___mfe_internal__iobroker_javascript__mf_owner__1-DWJotR1B.js +0 -1
  123. package/admin/assets/_virtual_mf___mfe_internal__iobroker_javascript__mf_owner__1__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-CxICLr5Z.js +0 -1243
  124. package/admin/assets/dist-uw5orDgd.js +0 -4
  125. package/admin/assets/hostInit-BFg5u9hY.js +0 -1
  126. package/admin/assets/index-B1gICjdq.js +0 -192
  127. package/admin/assets/virtual_mf-REMOTE_ENTRY_ID___mfe_internal__iobroker_javascript__remoteEntry_js-BYs71IQF.js +0 -1
  128. package/admin/assets/virtual_mf-exposes___mfe_internal__iobroker_javascript__remoteEntry_js-DnnXQRkG.js +0 -1
  129. package/admin/custom/assets/Components-BrDyDHXh.js +0 -1
  130. package/admin/custom/assets/_virtual_mf-localSharedImportMap___mfe_internal__ConfigCustomJavascriptSet__mf_owner__1-CyYJM2-v.js +0 -1
  131. package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__1__loadShare___mf_0_emotion_mf_1_react__loadShare__.js-BdzCssLn.js +0 -1
  132. package/admin/custom/assets/hostInit-DJx2uXXy.js +0 -1
  133. package/admin/custom/assets/virtualExposes-CxDjLoYu.js +0 -1
  134. package/admin/custom/assets/virtual_mf-REMOTE_ENTRY_ID___mfe_internal__ConfigCustomJavascriptSet__customComponents_js-BU-ugy_7.js +0 -1
  135. package/admin/custom/assets/virtual_mf-exposes-ssr___mfe_internal__ConfigCustomJavascriptSet__customComponents_js-BEfZbrf7.js +0 -2
  136. package/admin/custom/assets/virtual_mf-exposes___mfe_internal__ConfigCustomJavascriptSet__customComponents_js-CTeZ0Jpm.js +0 -2
  137. package/admin/google-blockly/blockly_compressed.js +0 -1679
  138. package/admin/google-blockly/blocks_compressed.js +0 -193
  139. package/admin/google-blockly/javascript_compressed.js +0 -264
  140. package/admin/google-blockly/msg/messages.js +0 -1630
  141. package/admin/google-blockly/own/blocks_action.js +0 -765
  142. package/admin/google-blockly/own/blocks_convert.js +0 -480
  143. package/admin/google-blockly/own/blocks_logic.js +0 -459
  144. package/admin/google-blockly/own/blocks_number.js +0 -30
  145. package/admin/google-blockly/own/blocks_object.js +0 -402
  146. package/admin/google-blockly/own/blocks_procedures.js +0 -688
  147. package/admin/google-blockly/own/blocks_sendto.js +0 -702
  148. package/admin/google-blockly/own/blocks_switch.js +0 -257
  149. package/admin/google-blockly/own/blocks_system.js +0 -1409
  150. package/admin/google-blockly/own/blocks_text.js +0 -104
  151. package/admin/google-blockly/own/blocks_time.js +0 -639
  152. package/admin/google-blockly/own/blocks_timeout.js +0 -551
  153. package/admin/google-blockly/own/blocks_trigger.js +0 -1791
  154. package/admin/google-blockly/own/blocks_words.js +0 -708
  155. package/admin/google-blockly/own/field_cron.js +0 -158
  156. package/admin/google-blockly/own/field_oid.js +0 -642
  157. package/admin/google-blockly/own/field_script.js +0 -159
@@ -1,551 +0,0 @@
1
- 'use strict';
2
-
3
- if (typeof goog !== 'undefined') {
4
- goog.provide('Blockly.JavaScript.Timeouts');
5
- goog.require('Blockly.JavaScript');
6
- } else {
7
- // define this object for blockly modules from adapters
8
- window.goog = {
9
- provide: function () {},
10
- require: function () {},
11
- };
12
- }
13
-
14
- Blockly.CustomBlocks = Blockly.CustomBlocks || [];
15
- Blockly.CustomBlocks.push('Timeouts');
16
-
17
- Blockly.Timeouts = {
18
- HUE: 70,
19
- blocks: {},
20
- };
21
-
22
- /**
23
- * Ensure two identically-named procedures don't exist.
24
- * @param {string} name Proposed procedure name.
25
- * @param {!Blockly.Block} block Block to disambiguate.
26
- * @return {string} Non-colliding name.
27
- */
28
- Blockly.Timeouts.findLegalName = function (name, block) {
29
- if (block.isInFlyout) {
30
- // Flyouts can have multiple procedures called 'do something'.
31
- return name;
32
- }
33
- while (!Blockly.Timeouts.isLegalName_(name, block.workspace, block)) {
34
- // Collision with another procedure.
35
- const r = name.match(/^(.*?)(\d+)$/);
36
- if (!r) {
37
- name += '2';
38
- } else {
39
- name = r[1] + (parseInt(r[2], 10) + 1);
40
- }
41
- }
42
- return name;
43
- };
44
-
45
- /**
46
- * Does this procedure have a legal name? Illegal names include names of
47
- * procedures already defined.
48
- * @param {string} name The questionable name.
49
- * @param {!Blockly.Workspace} workspace The workspace to scan for collisions.
50
- * @param {Blockly.Block=} opt_exclude Optional block to exclude from
51
- * comparisons (one doesn't want to collide with oneself).
52
- * @return {boolean} True if the name is legal.
53
- * @private
54
- */
55
- Blockly.Timeouts.isLegalName_ = function (name, workspace, opt_exclude) {
56
- const blocks = workspace.getAllBlocks();
57
- // Iterate through every block and check the name.
58
- for (let i = 0; i < blocks.length; i++) {
59
- if (blocks[i] == opt_exclude) {
60
- continue;
61
- }
62
- if (blocks[i].isTimeout_ || blocks[i].isInterval_) {
63
- const blockName = blocks[i].getFieldValue('NAME');
64
- if (Blockly.Names.equals(blockName, name)) {
65
- return false;
66
- }
67
- }
68
- }
69
- return true;
70
- };
71
-
72
- /**
73
- * Rename a procedure. Called by the editable field.
74
- * @param {string} name The proposed new name.
75
- * @return {string} The accepted name.
76
- * @this {!Blockly.Field}
77
- */
78
- Blockly.Timeouts.rename = function (name) {
79
- // Strip leading and trailing whitespace. Beyond this, all names are legal.
80
- name = name.replace(/^[\s\xa0]+|[\s\xa0]+$/g, '');
81
-
82
- return Blockly.Timeouts.findLegalName(name, this.sourceBlock_);
83
- };
84
-
85
- // --- setTimeout -----------------------------------------------------------
86
- Blockly.Timeouts.blocks['timeouts_wait'] =
87
- '<block type="timeouts_wait">' +
88
- ' <field name="DELAY">1000</field>' +
89
- ' <field name="UNIT">ms</field>' +
90
- '</block>';
91
-
92
- Blockly.Blocks['timeouts_wait'] = {
93
- init: function () {
94
- this.appendDummyInput()
95
- .appendField(Blockly.Translate('timeouts_wait'))
96
- .appendField(new Blockly.FieldTextInput(1000), "DELAY")
97
- .appendField(new Blockly.FieldDropdown([
98
- [Blockly.Translate('timeouts_settimeout_ms'), 'ms'],
99
- [Blockly.Translate('timeouts_settimeout_sec'), 'sec'],
100
- [Blockly.Translate('timeouts_settimeout_min'), 'min'],
101
- ]), 'UNIT');
102
-
103
- this.setInputsInline(true);
104
- this.setPreviousStatement(true, null);
105
- this.setNextStatement(true, null);
106
-
107
- this.setColour(Blockly.Timeouts.HUE);
108
-
109
- this.setTooltip(Blockly.Translate('timeouts_wait_tooltip'));
110
- this.setHelpUrl(getHelp('timeouts_wait_help'));
111
- },
112
- };
113
-
114
- Blockly.JavaScript.forBlock['timeouts_wait'] = function (block) {
115
- const fUnit = block.getFieldValue('UNIT');
116
-
117
- let fDelay = block.getFieldValue('DELAY');
118
- if (fUnit === 'min') {
119
- fDelay *= 60000;
120
- } else if (fUnit === 'sec') {
121
- fDelay *= 1000;
122
- }
123
-
124
- return `await wait(${fDelay});\n`;
125
- };
126
-
127
- // --- setTimeout -----------------------------------------------------------
128
- Blockly.Timeouts.blocks['timeouts_settimeout'] =
129
- '<block type="timeouts_settimeout">' +
130
- ' <field name="NAME">timeout</field>' +
131
- ' <field name="DELAY">1000</field>' +
132
- ' <field name="UNIT">ms</field>' +
133
- '</block>';
134
-
135
- Blockly.Blocks['timeouts_settimeout'] = {
136
- init: function () {
137
- const nameField = new Blockly.FieldTextInput(Blockly.Timeouts.findLegalName('timeout', this), Blockly.Timeouts.rename);
138
-
139
- nameField.setSpellcheck(false);
140
-
141
- this.appendDummyInput()
142
- .appendField(Blockly.Translate('timeouts_settimeout'))
143
- .appendField(nameField, 'NAME')
144
- .appendField(Blockly.Translate('timeouts_settimeout_in'))
145
- .appendField(new Blockly.FieldTextInput(1000), 'DELAY')
146
- .appendField(new Blockly.FieldDropdown([
147
- [Blockly.Translate('timeouts_settimeout_ms'), 'ms'],
148
- [Blockly.Translate('timeouts_settimeout_sec'), 'sec'],
149
- [Blockly.Translate('timeouts_settimeout_min'), 'min'],
150
- ]), 'UNIT');
151
- //.appendField(Blockly.Translate('timeouts_settimeout_ms'));
152
-
153
- this.appendStatementInput('STATEMENT')
154
- .setCheck(null);
155
-
156
- this.setInputsInline(false);
157
- this.setPreviousStatement(true, null);
158
- this.setNextStatement(true, null);
159
-
160
- this.setColour(Blockly.Timeouts.HUE);
161
-
162
- this.setTooltip(Blockly.Translate('timeouts_settimeout_tooltip'));
163
- this.setHelpUrl(getHelp('timeouts_settimeout_help'));
164
- },
165
- isTimeout_: true,
166
- getVars: function () {
167
- return [this.getFieldValue('NAME')];
168
- },
169
- getVarModels: function () {
170
- const name = this.getFieldValue('NAME');
171
- return [{ getId: () => { return name; }, name: name, type: 'timeout' }];
172
- },
173
- };
174
-
175
- Blockly.JavaScript.forBlock['timeouts_settimeout'] = function (block) {
176
- const fName = Blockly.JavaScript.nameDB_.safeName(block.getFieldValue('NAME'));
177
- const fUnit = block.getFieldValue('UNIT');
178
-
179
- let fDelay = block.getFieldValue('DELAY');
180
- if (fUnit === 'min') {
181
- fDelay *= 60000;
182
- } else if (fUnit === 'sec') {
183
- fDelay *= 1000;
184
- }
185
-
186
- const statement = Blockly.JavaScript.statementToCode(block, 'STATEMENT');
187
-
188
- return `${fName} = setTimeout(async () => {\n` +
189
- Blockly.JavaScript.prefixLines(`${fName} = null;`, Blockly.JavaScript.INDENT) + '\n' +
190
- statement +
191
- `}, ${fDelay});\n`;
192
- };
193
-
194
- // --- setTimeout variable -----------------------------------------------------------
195
- Blockly.Timeouts.blocks['timeouts_settimeout_variable'] =
196
- '<sep gap="5"></sep>' +
197
- '<block type="timeouts_settimeout_variable">' +
198
- ' <value name="DELAY_MS">' +
199
- ' <shadow type="math_number">' +
200
- ' <field name="NUM">1000</field>' +
201
- ' </shadow>' +
202
- ' </value>' +
203
- '</block>';
204
-
205
- Blockly.Blocks['timeouts_settimeout_variable'] = {
206
- init: function () {
207
- const nameField = new Blockly.FieldTextInput(Blockly.Timeouts.findLegalName('timeout', this), Blockly.Timeouts.rename);
208
-
209
- nameField.setSpellcheck(false);
210
-
211
- this.appendDummyInput()
212
- .appendField(Blockly.Translate('timeouts_settimeout'))
213
- .appendField(nameField, 'NAME')
214
- .appendField(Blockly.Translate('timeouts_settimeout_in'));
215
-
216
- this.appendValueInput('DELAY_MS')
217
- .setCheck('Number')
218
- .appendField(Blockly.Translate('timeouts_settimeout_ms'));
219
-
220
- this.appendStatementInput('STATEMENT')
221
- .setCheck(null);
222
-
223
- this.setInputsInline(true);
224
- this.setPreviousStatement(true, null);
225
- this.setNextStatement(true, null);
226
-
227
- this.setColour(Blockly.Timeouts.HUE);
228
-
229
- this.setTooltip(Blockly.Translate('timeouts_settimeout_tooltip'));
230
- this.setHelpUrl(getHelp('timeouts_settimeout_help'));
231
- },
232
- isTimeout_: true,
233
- getVars: function () {
234
- return [this.getFieldValue('NAME')];
235
- },
236
- getVarModels: function () {
237
- const name = this.getFieldValue('NAME');
238
- return [{ getId: () => { return name; }, name: name, type: 'timeout' }];
239
- },
240
- };
241
-
242
- Blockly.JavaScript.forBlock['timeouts_settimeout_variable'] = function (block) {
243
- const vDelayMs = Blockly.JavaScript.valueToCode(block, 'DELAY_MS', Blockly.JavaScript.ORDER_ATOMIC);
244
- const fName = Blockly.JavaScript.nameDB_.safeName(block.getFieldValue('NAME'));
245
- const statement = Blockly.JavaScript.statementToCode(block, 'STATEMENT');
246
-
247
- return `${fName} = setTimeout(async () => {\n` +
248
- Blockly.JavaScript.prefixLines(`${fName} = null;`, Blockly.JavaScript.INDENT) + '\n' +
249
- statement +
250
- `}, parseInt(${vDelayMs}));\n`;
251
- };
252
-
253
- // --- clearTimeout -----------------------------------------------------------
254
- Blockly.Timeouts.getAllTimeouts = function (workspace) {
255
- const blocks = workspace.getAllBlocks();
256
- const result = [];
257
-
258
- // Iterate through every block and check the name.
259
- for (let i = 0; i < blocks.length; i++) {
260
- if (blocks[i].isTimeout_) {
261
- result.push([blocks[i].getFieldValue('NAME'), blocks[i].getFieldValue('NAME')]);
262
- }
263
- }
264
-
265
- // BF(2020.05.16) : for back compatibility. Remove it after 5 years
266
- if (window.scripts.loading) {
267
- const variables = workspace.getVariablesOfType('');
268
- variables.forEach(v => !result.find(it => it[0] === v.name) && result.push([v.name, v.name]));
269
- }
270
-
271
- const variables1 = workspace.getVariablesOfType('timeout');
272
- variables1.forEach(v => !result.find(it => it[0] === v.name) && result.push([v.name, v.name]));
273
-
274
- !result.length && result.push(['', '']);
275
-
276
- return result;
277
- };
278
-
279
- Blockly.Timeouts.blocks['timeouts_cleartimeout'] =
280
- '<sep gap="5"></sep>' +
281
- '<block type="timeouts_cleartimeout">' +
282
- ' <field name="NAME"></field>' +
283
- '</block>';
284
-
285
- Blockly.Blocks['timeouts_cleartimeout'] = {
286
- init: function () {
287
- this.appendDummyInput('NAME')
288
- .appendField(Blockly.Translate('timeouts_cleartimeout'))
289
- .appendField(new Blockly.FieldDropdown(function () {
290
- return window.scripts && window.scripts.blocklyWorkspace ? Blockly.Timeouts.getAllTimeouts(window.scripts.blocklyWorkspace) : [];
291
- }), 'NAME');
292
-
293
- this.setInputsInline(true);
294
- this.setPreviousStatement(true, null);
295
- this.setNextStatement(true, null);
296
-
297
- this.setColour(Blockly.Timeouts.HUE);
298
-
299
- this.setTooltip(Blockly.Translate('timeouts_cleartimeout_tooltip'));
300
- this.setHelpUrl(getHelp('timeouts_cleartimeout_help'));
301
- },
302
- };
303
-
304
- Blockly.JavaScript.forBlock['timeouts_cleartimeout'] = function (block) {
305
- const fName = Blockly.JavaScript.nameDB_.safeName(block.getFieldValue('NAME'));
306
-
307
- return `(() => { if (${fName}) { clearTimeout(${fName}); ${fName} = null; }})();\n`;
308
- };
309
-
310
- // --- getTimeout -----------------------------------------------------------
311
- Blockly.Timeouts.blocks['timeouts_gettimeout'] =
312
- '<sep gap="5"></sep>' +
313
- '<block type="timeouts_gettimeout">' +
314
- ' <field name="NAME"></field>' +
315
- '</block>';
316
-
317
- Blockly.Blocks['timeouts_gettimeout'] = {
318
- init: function () {
319
- this.appendDummyInput('NAME')
320
- .appendField(Blockly.Translate('timeouts_gettimeout'))
321
- .appendField(new Blockly.FieldDropdown(function () {
322
- return window.scripts.blocklyWorkspace ? Blockly.Timeouts.getAllTimeouts(window.scripts.blocklyWorkspace) : [];
323
- }), 'NAME');
324
-
325
- this.setInputsInline(true);
326
- this.setOutput(true);
327
-
328
- this.setColour(Blockly.Timeouts.HUE);
329
-
330
- this.setTooltip(Blockly.Translate('timeouts_gettimeout_tooltip'));
331
- this.setHelpUrl(getHelp('timeouts_gettimeout_help'));
332
- },
333
- };
334
-
335
- Blockly.JavaScript.forBlock['timeouts_gettimeout'] = function (block) {
336
- const fName = Blockly.JavaScript.nameDB_.safeName(block.getFieldValue('NAME'));
337
-
338
- return [fName, Blockly.JavaScript.ORDER_ATOMIC];
339
- };
340
-
341
- // --- setInterval -----------------------------------------------------------
342
- Blockly.Timeouts.blocks['timeouts_setinterval'] =
343
- '<block type="timeouts_setinterval">' +
344
- ' <field name="INTERVAL">1000</field>' +
345
- ' <field name="UNIT">ms</field>' +
346
- '</block>';
347
-
348
- Blockly.Blocks['timeouts_setinterval'] = {
349
- init: function () {
350
- const nameField = new Blockly.FieldTextInput(Blockly.Timeouts.findLegalName(Blockly.Translate('timeouts_setinterval_name'), this), Blockly.Timeouts.rename);
351
-
352
- nameField.setSpellcheck(false);
353
-
354
- this.appendDummyInput()
355
- .appendField(Blockly.Translate('timeouts_setinterval'))
356
- .appendField(nameField, 'NAME')
357
- .appendField(Blockly.Translate('timeouts_setinterval_in'))
358
- .appendField(new Blockly.FieldTextInput(1000), 'INTERVAL')
359
- .appendField(new Blockly.FieldDropdown([
360
- [Blockly.Translate('timeouts_settimeout_ms'), 'ms'],
361
- [Blockly.Translate('timeouts_settimeout_sec'), 'sec'],
362
- [Blockly.Translate('timeouts_settimeout_min'), 'min'],
363
- ]), 'UNIT');
364
-
365
- this.appendStatementInput('STATEMENT')
366
- .setCheck(null);
367
-
368
- this.setInputsInline(false);
369
- this.setPreviousStatement(true, null);
370
- this.setNextStatement(true, null);
371
-
372
- this.setColour(Blockly.Timeouts.HUE);
373
-
374
- this.setTooltip(Blockly.Translate('timeouts_setinterval_tooltip'));
375
- this.setHelpUrl(getHelp('timeouts_setinterval_help'));
376
- },
377
- isInterval_: true,
378
- getVars: function () {
379
- return [this.getFieldValue('NAME')];
380
- },
381
- getVarModels: function () {
382
- const name = this.getFieldValue('NAME');
383
- return [{ getId: () => { return name; }, name: name, type: 'interval' }];
384
- },
385
- };
386
-
387
- Blockly.JavaScript.forBlock['timeouts_setinterval'] = function (block) {
388
- const fName = Blockly.JavaScript.nameDB_.safeName(block.getFieldValue('NAME'));
389
- const fUnit = block.getFieldValue('UNIT');
390
-
391
- let fInterval = block.getFieldValue('INTERVAL');
392
- if (fUnit === 'min') {
393
- fInterval *= 60000;
394
- } else if (fUnit === 'sec') {
395
- fInterval *= 1000;
396
- }
397
-
398
- const statement = Blockly.JavaScript.statementToCode(block, 'STATEMENT');
399
-
400
- return `${fName} = setInterval(async () => {\n` +
401
- statement +
402
- `}, ${fInterval});\n`;
403
- };
404
-
405
- // --- setInterval variable -----------------------------------------------------------
406
- Blockly.Timeouts.blocks['timeouts_setinterval_variable'] =
407
- '<sep gap="5"></sep>' +
408
- '<block type="timeouts_setinterval_variable">' +
409
- ' <value name="INTERVAL_MS">' +
410
- ' <shadow type="math_number">' +
411
- ' <field name="NUM">1000</field>' +
412
- ' </shadow>' +
413
- ' </value>' +
414
- '</block>';
415
-
416
- Blockly.Blocks['timeouts_setinterval_variable'] = {
417
- init: function () {
418
- const nameField = new Blockly.FieldTextInput(
419
- Blockly.Timeouts.findLegalName(Blockly.Translate('timeouts_setinterval_name'), this),
420
- Blockly.Timeouts.rename);
421
-
422
- nameField.setSpellcheck(false);
423
-
424
- this.appendDummyInput()
425
- .appendField(Blockly.Translate('timeouts_setinterval'))
426
- .appendField(nameField, 'NAME')
427
- .appendField(Blockly.Translate('timeouts_setinterval_in'));
428
-
429
- this.appendValueInput('INTERVAL_MS')
430
- .setCheck('Number')
431
- .appendField(Blockly.Translate('timeouts_settimeout_ms'));
432
-
433
- this.appendStatementInput('STATEMENT')
434
- .setCheck(null);
435
-
436
- this.setInputsInline(true);
437
- this.setPreviousStatement(true, null);
438
- this.setNextStatement(true, null);
439
-
440
- this.setColour(Blockly.Timeouts.HUE);
441
-
442
- this.setTooltip(Blockly.Translate('timeouts_setinterval_tooltip'));
443
- this.setHelpUrl(getHelp('timeouts_setinterval_help'));
444
- },
445
- isInterval_: true,
446
- getVars: function () {
447
- return [this.getFieldValue('NAME')];
448
- },
449
- getVarModels: function () {
450
- const name = this.getFieldValue('NAME');
451
- return [{ getId: () => { return name; }, name: name, type: 'interval' }];
452
- },
453
- };
454
-
455
- Blockly.JavaScript.forBlock['timeouts_setinterval_variable'] = function (block) {
456
- const vIntervalMs = Blockly.JavaScript.valueToCode(block, 'INTERVAL_MS', Blockly.JavaScript.ORDER_ATOMIC);
457
- const fName = Blockly.JavaScript.nameDB_.safeName(block.getFieldValue('NAME'));
458
- const statement = Blockly.JavaScript.statementToCode(block, 'STATEMENT');
459
-
460
- return `${fName} = setInterval(async () => {\n` +
461
- statement +
462
- `}, parseInt(${vIntervalMs}));\n`;
463
- };
464
-
465
- // --- clearInterval -----------------------------------------------------------
466
- Blockly.Timeouts.blocks['timeouts_clearinterval'] =
467
- '<sep gap="5"></sep>' +
468
- '<block type="timeouts_clearinterval">' +
469
- ' <field name="NAME"></field>' +
470
- '</block>';
471
-
472
- Blockly.Timeouts.getAllIntervals = function (workspace) {
473
- const blocks = workspace.getAllBlocks();
474
- const result = [];
475
-
476
- // Iterate through every block and check the name.
477
- for (let i = 0; i < blocks.length; i++) {
478
- if (blocks[i].isInterval_) {
479
- result.push([blocks[i].getFieldValue('NAME'), blocks[i].getFieldValue('NAME')]);
480
- }
481
- }
482
-
483
- // BF(2020.05.16) : for back compatibility. Remove it after 5 years
484
- if (window.scripts.loading) {
485
- const variables = workspace.getVariablesOfType('');
486
- variables.forEach(v => !result.find(it => it[0] === v.name) && result.push([v.name, v.name]));
487
- }
488
-
489
- const variables1 = workspace.getVariablesOfType('interval');
490
- variables1.forEach(v => !result.find(it => it[0] === v.name) && result.push([v.name, v.name]));
491
-
492
- !result.length && result.push(['', '']);
493
-
494
- return result;
495
- };
496
-
497
- Blockly.Blocks['timeouts_clearinterval'] = {
498
- init: function () {
499
- this.appendDummyInput('NAME')
500
- .appendField(Blockly.Translate('timeouts_clearinterval'))
501
- .appendField(new Blockly.FieldDropdown(function () {
502
- return window.scripts.blocklyWorkspace ? Blockly.Timeouts.getAllIntervals(window.scripts.blocklyWorkspace) : [];
503
- }), 'NAME');
504
-
505
- this.setInputsInline(true);
506
- this.setPreviousStatement(true, null);
507
- this.setNextStatement(true, null);
508
-
509
- this.setColour(Blockly.Timeouts.HUE);
510
-
511
- this.setTooltip(Blockly.Translate('timeouts_clearinterval_tooltip'));
512
- this.setHelpUrl(getHelp('timeouts_clearinterval_help'));
513
- },
514
- };
515
-
516
- Blockly.JavaScript.forBlock['timeouts_clearinterval'] = function (block) {
517
- const fName = Blockly.JavaScript.nameDB_.safeName(block.getFieldValue('NAME'));
518
-
519
- return `(() => { if (${fName}) { clearInterval(${fName}); ${fName} = null; }})();\n`;
520
- };
521
-
522
- // --- getInterval -----------------------------------------------------------
523
- Blockly.Timeouts.blocks['timeouts_getinterval'] =
524
- '<sep gap="5"></sep>' +
525
- '<block type="timeouts_getinterval">' +
526
- ' <field name="NAME"></field>' +
527
- '</block>';
528
-
529
- Blockly.Blocks['timeouts_getinterval'] = {
530
- init: function () {
531
- this.appendDummyInput('NAME')
532
- .appendField(Blockly.Translate('timeouts_getinterval'))
533
- .appendField(new Blockly.FieldDropdown(function () {
534
- return window.scripts.blocklyWorkspace ? Blockly.Timeouts.getAllIntervals(window.scripts.blocklyWorkspace) : [];
535
- }), 'NAME');
536
-
537
- this.setInputsInline(true);
538
- this.setOutput(true);
539
-
540
- this.setColour(Blockly.Timeouts.HUE);
541
-
542
- this.setTooltip(Blockly.Translate('timeouts_getinterval_tooltip'));
543
- this.setHelpUrl(getHelp('timeouts_getinterval_help'));
544
- },
545
- };
546
-
547
- Blockly.JavaScript.forBlock['timeouts_getinterval'] = function (block) {
548
- const fName = Blockly.JavaScript.nameDB_.safeName(block.getFieldValue('NAME'));
549
-
550
- return [fName, Blockly.JavaScript.ORDER_ATOMIC];
551
- };