iobroker.javascript 10.0.0 → 10.1.1

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 (180) hide show
  1. package/README.md +48 -12
  2. package/admin/assets/AiChatPanel-C_WbKMGX.js +242 -0
  3. package/admin/assets/AiDiffView-BtXbDWZ8.js +1 -0
  4. package/admin/assets/Debugger-DAdJnEhw.js +15 -0
  5. package/admin/assets/Error-DQ1pzKcf.js +1 -0
  6. package/admin/assets/Import-BjMtH6Gk.js +1 -0
  7. package/admin/assets/RulesEditor-dDRPHw4X.js +1 -0
  8. package/admin/assets/RulesEditor-k-DMHotH.css +1 -0
  9. package/admin/assets/{ScriptEditor-BGIuoNei.js → ScriptEditor-CZSc7rwE.js} +2 -2
  10. package/admin/assets/ScriptEditorVanillaMonaco-DEKg14_A.js +3 -0
  11. package/admin/assets/_virtual_mf-localSharedImportMap___mfe_internal__iobroker_javascript__mf_owner__1-DPmwd_G2.js +1 -0
  12. package/admin/assets/_virtual_mf___mfe_internal__iobroker_javascript__mf_owner__1__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-C8inUeKt.js +1243 -0
  13. package/admin/assets/_virtual_mf___mfe_internal__iobroker_javascript__mf_owner__1__loadShare__react_mf_2_dom_mf_1_client__loadShare__.js-VcQjt7_9.js +9 -0
  14. package/admin/assets/aiPromptBuilder-D5FDo74i.js +1 -0
  15. package/admin/assets/blockly-DBw-ytY1.js +1047 -0
  16. package/admin/assets/blocks_action-BqfWEwpf.js +1 -0
  17. package/admin/assets/blocks_convert-CX0i-JfS.js +3 -0
  18. package/admin/assets/blocks_logic-D-QSzw95.js +1 -0
  19. package/admin/assets/blocks_number-D7JuNYsw.js +1 -0
  20. package/admin/assets/blocks_object-C9DzAlc7.js +1 -0
  21. package/admin/assets/blocks_procedures-BJMz6HWW.js +3 -0
  22. package/admin/assets/blocks_sendto-DRh7lk9o.js +5 -0
  23. package/admin/assets/blocks_switch-BfmboMex.js +2 -0
  24. package/admin/assets/blocks_system-B-78JfAc.js +1 -0
  25. package/admin/assets/blocks_text-CGbR0Ozw.js +1 -0
  26. package/admin/assets/blocks_time-5vS2geJg.js +1 -0
  27. package/admin/assets/blocks_timeout-BdaTywfN.js +1 -0
  28. package/admin/assets/blocks_trigger-D8kgHKbg.js +2 -0
  29. package/admin/assets/blocks_words-BhHIf_1o.js +1 -0
  30. package/admin/assets/{cronHoverProvider-pKJkSevo.js → cronHoverProvider-DpgESCox.js} +1 -1
  31. package/admin/assets/dist-CaOsN0XW.js +4 -0
  32. package/admin/assets/field_cron-B40zwSfJ.js +1 -0
  33. package/admin/assets/field_oid-KfoBnEM9.js +1 -0
  34. package/admin/assets/field_script-yXhe1iCp.js +1 -0
  35. package/admin/assets/helpers-B0ByElPJ.js +1 -0
  36. package/admin/assets/hostInit-9REPDUe7.js +1 -0
  37. package/admin/assets/index-07o_WKsX.js +726 -0
  38. package/admin/assets/index-Z8Hkv58g.css +1 -0
  39. package/admin/assets/{inlineChatWidget-ZaisTOLh.js → inlineChatWidget-B9y_gQcH.js} +2 -2
  40. package/admin/assets/{inlineDiffController-hTwHHqcc.js → inlineDiffController-C07CdIFo.js} +2 -2
  41. package/admin/assets/{mf-entry-bootstrap-0-d6052b31.js → mf-entry-bootstrap-0-efcb49d3.js} +7 -2
  42. package/admin/assets/stateHoverProvider-CqeoOjXs.js +9 -0
  43. package/admin/assets/{virtualExposes-Ed0lGq7k.js → virtualExposes-DgGB-18P.js} +1 -1
  44. package/admin/assets/virtual_mf-REMOTE_ENTRY_ID___mfe_internal__iobroker_javascript__remoteEntry_js-BwSvIKEV.js +1 -0
  45. package/admin/assets/virtual_mf-exposes___mfe_internal__iobroker_javascript__remoteEntry_js-ChiJXsfH.js +1 -0
  46. package/admin/custom/assets/Components-BCQTjBgm.js +1 -0
  47. package/admin/custom/assets/_virtual_mf-localSharedImportMap___mfe_internal__ConfigCustomJavascriptSet__mf_owner__1-BuAc8OyX.js +1 -0
  48. package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__1__loadShare___mf_0_emotion_mf_1_react__loadShare__.js-BGJv4zZP.js +1 -0
  49. 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-B4E6MFJ4.js} +1 -1
  50. 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-aRlxyEhq.js} +78 -78
  51. package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__1__loadShare___mf_0_iobroker_mf_1_json_mf_2_config__loadShare__.js-DQwzYx75.js +1494 -0
  52. package/admin/custom/assets/{_virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__1__loadShare__leaflet__loadShare__.js-h-rCw3iz.js → _virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__1__loadShare__leaflet__loadShare__.js-n2zIPi0L.js} +1 -1
  53. package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__1__loadShare__react_mf_2_dom_mf_1_client__loadShare__.js-xxszBNje.js +9 -0
  54. 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__-Tq7tesSS.js} +1 -1
  55. package/admin/custom/assets/{_virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__1__prebuild__leaflet__prebuild__-DARUoA03.js → _virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__1__prebuild__leaflet__prebuild__-BeF0jEWM.js} +1 -1
  56. package/admin/custom/assets/hostInit-CHwrowP4.js +1 -0
  57. package/admin/custom/assets/{index-uEKAoVT7.js → index-Cm6xl9K4.js} +1 -1
  58. package/admin/custom/assets/{lib-Yj8cfN0A.js → lib-bhrFL6jR.js} +1 -1
  59. package/admin/custom/assets/{mf-entry-bootstrap-0-77793feb.js → mf-entry-bootstrap-0-f08941e2.js} +7 -2
  60. package/admin/custom/assets/{setYear-DJ9FbdkO.js → setYear-DzTZ2h9A.js} +1 -1
  61. package/admin/custom/assets/virtualExposes-B5LJmnfO.js +1 -0
  62. package/admin/custom/assets/virtual_mf-REMOTE_ENTRY_ID___mfe_internal__ConfigCustomJavascriptSet__customComponents_js-ML-chjs6.js +1 -0
  63. package/admin/custom/assets/virtual_mf-exposes___mfe_internal__ConfigCustomJavascriptSet__customComponents_js-C3ImybiM.js +2 -0
  64. package/admin/custom/customComponents.js +12 -1
  65. package/admin/custom/i18n/de.json +11 -1
  66. package/admin/custom/i18n/en.json +11 -1
  67. package/admin/custom/i18n/es.json +11 -1
  68. package/admin/custom/i18n/fr.json +11 -1
  69. package/admin/custom/i18n/it.json +11 -1
  70. package/admin/custom/i18n/nl.json +11 -1
  71. package/admin/custom/i18n/pl.json +11 -1
  72. package/admin/custom/i18n/pt.json +11 -1
  73. package/admin/custom/i18n/ru.json +11 -1
  74. package/admin/custom/i18n/uk.json +11 -1
  75. package/admin/custom/i18n/zh-cn.json +11 -1
  76. package/admin/google-blockly/VERSION +1 -0
  77. package/admin/google-blockly/media/drop.mp3 +0 -0
  78. package/admin/google-blockly/msg/js/de.js +332 -56
  79. package/admin/google-blockly/msg/js/en.js +319 -43
  80. package/admin/google-blockly/msg/js/es.js +319 -42
  81. package/admin/google-blockly/msg/js/fr.js +315 -39
  82. package/admin/google-blockly/msg/js/it.js +327 -51
  83. package/admin/google-blockly/msg/js/nl.js +376 -100
  84. package/admin/google-blockly/msg/js/pl.js +318 -42
  85. package/admin/google-blockly/msg/js/pt.js +318 -42
  86. package/admin/google-blockly/msg/js/ru.js +320 -44
  87. package/admin/google-blockly/msg/js/uk.js +326 -50
  88. package/admin/google-blockly/msg/js/zh-cn.js +322 -46
  89. package/admin/i18n/de.json +51 -26
  90. package/admin/i18n/en.json +50 -25
  91. package/admin/i18n/es.json +51 -18
  92. package/admin/i18n/fr.json +50 -17
  93. package/admin/i18n/it.json +50 -17
  94. package/admin/i18n/nl.json +50 -17
  95. package/admin/i18n/pl.json +51 -18
  96. package/admin/i18n/pt.json +50 -17
  97. package/admin/i18n/ru.json +50 -17
  98. package/admin/i18n/uk.json +50 -17
  99. package/admin/i18n/zh-cn.json +50 -17
  100. package/admin/jsonConfig.json +398 -0
  101. package/admin/mf-manifest.json +1 -1
  102. package/admin/mf-stats.json +1 -1
  103. package/admin/remoteEntry.js +12 -1
  104. package/admin/tab.html +6 -98
  105. package/build/lib/javascript.d.ts +48 -0
  106. package/build/lib/mirror.js +9 -0
  107. package/build/lib/mirror.js.map +1 -1
  108. package/build/lib/sandbox.js +37 -0
  109. package/build/lib/sandbox.js.map +1 -1
  110. package/build/lib/secrets.js +220 -0
  111. package/build/lib/secrets.js.map +1 -0
  112. package/build/lib/typescriptSettings.js +112 -2
  113. package/build/lib/typescriptSettings.js.map +1 -1
  114. package/build/lib/typescriptTools.js +168 -43
  115. package/build/lib/typescriptTools.js.map +1 -1
  116. package/build/main.js +61 -5
  117. package/build/main.js.map +1 -1
  118. package/build/types.d.ts +48 -0
  119. package/docs/en/blockly.md +29 -0
  120. package/docs/en/javascript.md +72 -0
  121. package/docs/en/upgrade-guide.md +3 -0
  122. package/io-package.json +59 -28
  123. package/package.json +8 -3
  124. package/admin/assets/AiChatPanel-p0KAg6Cs.js +0 -237
  125. package/admin/assets/AiDiffView-BPTLnNx1.js +0 -1
  126. package/admin/assets/AiScriptAnalyzer--BHML2rN.js +0 -9
  127. package/admin/assets/BlocklyEditor-CAjVMhYT.js +0 -81
  128. package/admin/assets/ContextWrapper-BVc8wTK_.css +0 -1
  129. package/admin/assets/ContextWrapper-D9CrnNKs.js +0 -127
  130. package/admin/assets/Debugger-SjROokFI.js +0 -15
  131. package/admin/assets/Error-DDfrxAt2.js +0 -1
  132. package/admin/assets/Import-DpTg1Jow.js +0 -1
  133. package/admin/assets/RulesEditor-BSRFWpEm.css +0 -1
  134. package/admin/assets/RulesEditor-D0hgrcBc.js +0 -1
  135. package/admin/assets/ScriptEditorVanillaMonaco-DyMQtoTQ.js +0 -3
  136. package/admin/assets/_virtual_mf-localSharedImportMap___mfe_internal__iobroker_javascript__mf_owner__1-DWJotR1B.js +0 -1
  137. 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
  138. package/admin/assets/_virtual_mf___mfe_internal__iobroker_javascript__mf_owner__1__loadShare__react_mf_2_dom_mf_1_client__loadShare__.js-BBAXJaqI.js +0 -9
  139. package/admin/assets/aiCodeLensProvider-hyAmut0e.js +0 -4
  140. package/admin/assets/aiPromptBuilder-Bs27qOHT.js +0 -7
  141. package/admin/assets/blocklyDarkTheme-DEiAX5DT.js +0 -1
  142. package/admin/assets/dist-uw5orDgd.js +0 -4
  143. package/admin/assets/hostInit-BFg5u9hY.js +0 -1
  144. package/admin/assets/index-B1gICjdq.js +0 -192
  145. package/admin/assets/index-BHhhebRG.css +0 -1
  146. package/admin/assets/mjs-DWqivHEk.js +0 -90
  147. package/admin/assets/stateHoverProvider-C7DawIs-.js +0 -9
  148. package/admin/assets/virtual_mf-REMOTE_ENTRY_ID___mfe_internal__iobroker_javascript__remoteEntry_js-BYs71IQF.js +0 -1
  149. package/admin/assets/virtual_mf-exposes___mfe_internal__iobroker_javascript__remoteEntry_js-DnnXQRkG.js +0 -1
  150. package/admin/custom/assets/Components-BrDyDHXh.js +0 -1
  151. package/admin/custom/assets/_virtual_mf-localSharedImportMap___mfe_internal__ConfigCustomJavascriptSet__mf_owner__1-CyYJM2-v.js +0 -1
  152. 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
  153. 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 +0 -1494
  154. package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__1__loadShare__react_mf_2_dom_mf_1_client__loadShare__.js-BotqDuw-.js +0 -9
  155. package/admin/custom/assets/hostInit-DJx2uXXy.js +0 -1
  156. package/admin/custom/assets/virtualExposes-CxDjLoYu.js +0 -1
  157. package/admin/custom/assets/virtual_mf-REMOTE_ENTRY_ID___mfe_internal__ConfigCustomJavascriptSet__customComponents_js-BU-ugy_7.js +0 -1
  158. package/admin/custom/assets/virtual_mf-exposes-ssr___mfe_internal__ConfigCustomJavascriptSet__customComponents_js-BEfZbrf7.js +0 -2
  159. package/admin/custom/assets/virtual_mf-exposes___mfe_internal__ConfigCustomJavascriptSet__customComponents_js-CTeZ0Jpm.js +0 -2
  160. package/admin/google-blockly/blockly_compressed.js +0 -1679
  161. package/admin/google-blockly/blocks_compressed.js +0 -193
  162. package/admin/google-blockly/javascript_compressed.js +0 -264
  163. package/admin/google-blockly/msg/messages.js +0 -1630
  164. package/admin/google-blockly/own/blocks_action.js +0 -765
  165. package/admin/google-blockly/own/blocks_convert.js +0 -480
  166. package/admin/google-blockly/own/blocks_logic.js +0 -459
  167. package/admin/google-blockly/own/blocks_number.js +0 -30
  168. package/admin/google-blockly/own/blocks_object.js +0 -402
  169. package/admin/google-blockly/own/blocks_procedures.js +0 -688
  170. package/admin/google-blockly/own/blocks_sendto.js +0 -702
  171. package/admin/google-blockly/own/blocks_switch.js +0 -257
  172. package/admin/google-blockly/own/blocks_system.js +0 -1409
  173. package/admin/google-blockly/own/blocks_text.js +0 -104
  174. package/admin/google-blockly/own/blocks_time.js +0 -639
  175. package/admin/google-blockly/own/blocks_timeout.js +0 -551
  176. package/admin/google-blockly/own/blocks_trigger.js +0 -1791
  177. package/admin/google-blockly/own/blocks_words.js +0 -708
  178. package/admin/google-blockly/own/field_cron.js +0 -158
  179. package/admin/google-blockly/own/field_oid.js +0 -642
  180. 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
- };