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,702 +0,0 @@
1
- 'use strict';
2
-
3
- if (typeof goog !== 'undefined') {
4
- goog.provide('Blockly.JavaScript.Sendto');
5
- goog.require('Blockly.JavaScript');
6
- }
7
-
8
- Blockly.CustomBlocks = Blockly.CustomBlocks || [];
9
- Blockly.CustomBlocks.push('Sendto');
10
-
11
- Blockly.Sendto = {
12
- HUE: 310,
13
- blocks: {},
14
- };
15
-
16
- // --- sendTo Custom --------------------------------------------------
17
- Blockly.Sendto.blocks['sendto_custom'] =
18
- '<block type="sendto_custom">' +
19
- ' <mutation xmlns="http://www.w3.org/1999/xhtml" items="parameter"></mutation>' +
20
- ' <field name="INSTANCE">admin.0</field>' +
21
- ' <field name="COMMAND">send</field>' +
22
- ' <field name="LOG"></field>' +
23
- ' <field name="WITH_STATEMENT">FALSE</field>' +
24
- ' <value name="ARG0">' +
25
- ' <shadow type="text">' +
26
- ' <field name="TEXT"></field>' +
27
- ' </shadow>' +
28
- ' </value>' +
29
- '</block>';
30
-
31
- Blockly.Blocks['sendto_custom_container'] = {
32
- /**
33
- * Mutator block for container.
34
- * @this Blockly.Block
35
- */
36
- init: function () {
37
- this.appendDummyInput()
38
- .appendField(Blockly.Translate('sendto_custom_arguments'));
39
-
40
- this.appendStatementInput('STACK');
41
-
42
- this.setColour(Blockly.Sendto.HUE);
43
-
44
- this.setTooltip(Blockly.Translate('sendto_custom_arg_tooltip'));
45
-
46
- this.contextMenu = false;
47
- },
48
- };
49
-
50
- Blockly.Blocks['sendto_custom_mutator'] = {
51
- /**
52
- * Mutator block for add items.
53
- * @this Blockly.Block
54
- */
55
- init: function () {
56
- this.appendDummyInput('ATTR')
57
- .appendField(Blockly.Translate('sendto_custom_argument'))
58
- .appendField(new Blockly.FieldTextInput('parameter'), 'ATTR');
59
-
60
- this.setPreviousStatement(true);
61
- this.setNextStatement(true);
62
-
63
- this.setColour(Blockly.Sendto.HUE);
64
-
65
- this.setTooltip(Blockly.Translate('sendto_custom_arg_tooltip'));
66
-
67
- this.contextMenu = false;
68
- },
69
- };
70
-
71
- Blockly.Blocks['sendto_custom'] = {
72
- /**
73
- * Block for creating a string made up of any number of elements of any type.
74
- * @this Blockly.Block
75
- */
76
- init: function () {
77
- const options = [];
78
- if (typeof main !== 'undefined' && main.instances) {
79
- for (let i = 0; i < main.instances.length; i++) {
80
- if (main.objects[main.instances[i]].common.messagebox) {
81
- const id = main.instances[i].substring('system.adapter.'.length);
82
- options.push([id, id]);
83
- }
84
- }
85
- if (!options.length) {
86
- options.push([Blockly.Translate('sendto_no_instances'), '']);
87
- }
88
-
89
- this.appendDummyInput('INSTANCE')
90
- .appendField(Blockly.Translate('sendto_custom'))
91
- .appendField(new Blockly.FieldDropdown(options), 'INSTANCE');
92
- } else {
93
- this.appendDummyInput('INSTANCE')
94
- .appendField(Blockly.Translate('sendto_custom'))
95
- .appendField(new Blockly.FieldTextInput('adapter.0'), 'INSTANCE');
96
- }
97
-
98
- this.appendDummyInput('COMMAND')
99
- .appendField(Blockly.Translate('sendto_custom_command'))
100
- .appendField(new Blockly.FieldTextInput('send'), 'COMMAND');
101
-
102
- this.appendDummyInput('LOG')
103
- .appendField(Blockly.Translate('loglevel'))
104
- .appendField(new Blockly.FieldDropdown([
105
- [Blockly.Translate('loglevel_none'), ''],
106
- [Blockly.Translate('loglevel_debug'), 'debug'],
107
- [Blockly.Translate('loglevel_info'), 'info'],
108
- [Blockly.Translate('loglevel_warn'), 'warn'],
109
- [Blockly.Translate('loglevel_error'), 'error'],
110
- ]), 'LOG');
111
-
112
- this.appendDummyInput('WITH_STATEMENT')
113
- .appendField(Blockly.Translate('with_results'))
114
- .appendField(new Blockly.FieldCheckbox('FALSE', function (option) {
115
- const withStatement = option === true || option === 'true' || option === 'TRUE';
116
- this.sourceBlock_.updateShape_(withStatement);
117
- }), 'WITH_STATEMENT');
118
-
119
- this.attributes_ = [];
120
- this.itemCount_ = 0;
121
-
122
- this.setMutator(new Blockly.icons.MutatorIcon(['sendto_custom_mutator'], this));
123
-
124
- this.updateShape_();
125
-
126
- this.setInputsInline(false);
127
- this.setPreviousStatement(true, null);
128
- this.setNextStatement(true, null);
129
-
130
- this.setColour(Blockly.Sendto.HUE);
131
-
132
- this.setTooltip(Blockly.Translate('sendto_custom_tooltip'));
133
- this.setHelpUrl(getHelp('sendto_custom_help'));
134
- },
135
- /**
136
- * Create XML to represent number of text inputs.
137
- * @return {!Element} XML storage element.
138
- * @this Blockly.Block
139
- */
140
- mutationToDom: function () {
141
- const container = document.createElement('mutation');
142
-
143
- container.setAttribute('items', this.attributes_.map(a => encodeURIComponent(a)).join(','));
144
-
145
- return container;
146
- },
147
- /**
148
- * Parse XML to restore the text inputs.
149
- * @param {!Element} xmlElement XML storage element.
150
- * @this Blockly.Block
151
- */
152
- domToMutation: function (xmlElement) {
153
- this.attributes_ = [];
154
-
155
- const names = xmlElement.getAttribute('items');
156
- for (const name of names.split(',')) {
157
- this.attributes_.push(decodeURIComponent(name));
158
- }
159
-
160
- this.itemCount_ = this.attributes_.length;
161
- this.updateShape_();
162
- },
163
- /**
164
- * Populate the mutator's dialog with this block's components.
165
- * @param {!Blockly.Workspace} workspace Mutator's workspace.
166
- * @return {!Blockly.Block} Root block in mutator.
167
- * @this Blockly.Block
168
- */
169
- decompose: function (workspace) {
170
- const containerBlock = workspace.newBlock('sendto_custom_container');
171
- containerBlock.initSvg();
172
-
173
- let connection = containerBlock.getInput('STACK').connection;
174
- for (let i = 0; i < this.itemCount_; i++) {
175
- const itemBlock = workspace.newBlock('sendto_custom_mutator');
176
- itemBlock.setFieldValue(this.attributes_[i], 'ATTR');
177
- itemBlock.initSvg();
178
- connection.connect(itemBlock.previousConnection);
179
- connection = itemBlock.nextConnection;
180
- }
181
- return containerBlock;
182
- },
183
- /**
184
- * Reconfigure this block based on the mutator dialog's components.
185
- * @param {!Blockly.Block} containerBlock Root block in mutator.
186
- * @this Blockly.Block
187
- */
188
- compose: function (containerBlock) {
189
- this.attributes_ = [];
190
-
191
- let itemBlock = containerBlock.getInputTargetBlock('STACK');
192
- // Count number of inputs.
193
- const connections = [];
194
- while (itemBlock) {
195
- const attrName = itemBlock.getFieldValue('ATTR');
196
- this.attributes_.push(attrName);
197
-
198
- connections.push(itemBlock.valueConnection_);
199
- itemBlock = itemBlock.nextConnection &&
200
- itemBlock.nextConnection.targetBlock();
201
- }
202
-
203
- // Disconnect any children that don't belong.
204
- for (let k = 0; k < this.itemCount_; k++) {
205
- const connection = this.getInput('ARG' + k).connection.targetConnection;
206
- if (connection && !connections.includes(connection)) {
207
- connection.disconnect();
208
- }
209
- }
210
-
211
- this.itemCount_ = connections.length;
212
- if (this.itemCount_ < 0) {
213
- this.itemCount_ = 0;
214
- }
215
- this.updateShape_();
216
-
217
- // Reconnect any child blocks.
218
- for (let i = 0; i < this.itemCount_; i++) {
219
- Blockly.icons.MutatorIcon.reconnect(connections[i], this, 'ARG' + i);
220
- }
221
- },
222
- /**
223
- * Store pointers to any connected child blocks.
224
- * @param {!Blockly.Block} containerBlock Root block in mutator.
225
- * @this Blockly.Block
226
- */
227
- saveConnections: function (containerBlock) {
228
- let itemBlock = containerBlock.getInputTargetBlock('STACK');
229
- let i = 0;
230
- while (itemBlock) {
231
- let input;
232
- try {
233
- input = this.getInput('ARG' + i);
234
- } catch (e) {
235
- // if the input does not exist, it means that the block was deleted
236
- }
237
- itemBlock.valueConnection_ = input?.connection.targetConnection;
238
- itemBlock = itemBlock.nextConnection?.targetBlock();
239
- i++;
240
- }
241
- },
242
- /**
243
- * Modify this block to have the correct number of inputs.
244
- * @private
245
- * @this Blockly.Block
246
- */
247
- updateShape_: function (withStatement) {
248
- const workspace = this.workspace;
249
-
250
- // Add new inputs.
251
- for (let i = 0; i < this.itemCount_; i++) {
252
- let input;
253
- try {
254
- input = this.getInput('ARG' + i);
255
- } catch (e) {
256
- input = null;
257
- }
258
-
259
- if (!input) {
260
- input = this.appendValueInput('ARG' + i).setAlign(Blockly.ALIGN_RIGHT);
261
- input.appendField(this.attributes_[i]);
262
- } else if (input.fieldRow.length >= 1) {
263
- input.fieldRow[0].setValue(this.attributes_[i]);
264
- }
265
-
266
- setTimeout(__input => {
267
- if (!__input.connection.isConnected()) {
268
- const _shadow = workspace.newBlock('text');
269
- _shadow.setShadow(true);
270
- _shadow.initSvg();
271
- _shadow.render();
272
- _shadow.outputConnection.connect(__input.connection);
273
- }
274
- }, 100, input);
275
- }
276
- // Remove deleted inputs.
277
- try {
278
- for (let i = this.itemCount_; this.getInput('ARG' + i); i++) {
279
- this.removeInput('ARG' + i);
280
- }
281
- } catch (e) {
282
- // if the input does not exist, it means that the block was deleted
283
- }
284
-
285
-
286
- if (withStatement === undefined) {
287
- withStatement = this.getFieldValue('WITH_STATEMENT');
288
- withStatement = withStatement === true || withStatement === 'true' || withStatement === 'TRUE';
289
- }
290
-
291
- try {
292
- if (this.getInput('STATEMENT')) {
293
- this.removeInput('STATEMENT');
294
- }
295
- } catch (e) {
296
- // if the input does not exist, it means that the block was deleted
297
- }
298
-
299
- // Add or remove a statement Input.
300
- if (withStatement) {
301
- this.appendStatementInput('STATEMENT');
302
- }
303
- },
304
- };
305
-
306
- Blockly.JavaScript.forBlock['sendto_custom'] = function (block) {
307
- const fInstance = block.getFieldValue('INSTANCE');
308
- const fLog = block.getFieldValue('LOG');
309
- const fCommand = block.getFieldValue('COMMAND');
310
- const fWithStatement = block.getFieldValue('WITH_STATEMENT');
311
-
312
- let logText = '';
313
-
314
- let statement;
315
- if (fWithStatement === true || fWithStatement === 'true' || fWithStatement === 'TRUE') {
316
- statement = Blockly.JavaScript.statementToCode(block, 'STATEMENT');
317
- }
318
-
319
- const args = [];
320
- for (let n = 0; n < block.itemCount_; n++) {
321
- const name = String(block.attributes_[n]);
322
- let vArgument = Blockly.JavaScript.valueToCode(block, `ARG${n}`, Blockly.JavaScript.ORDER_COMMA);
323
-
324
- // if JSON (or object), remove quotes '{ bla: true }' -> { bla: true }
325
- if (vArgument && vArgument.startsWith(`'{`) && vArgument.endsWith(`}'`)) {
326
- vArgument = vArgument.substring(1, vArgument.length - 1);
327
- }
328
-
329
- if (block.itemCount_ === 1 && !name) {
330
- if (fLog) {
331
- logText = `console.${fLog}('sendTo[custom] ${fInstance}: ' + ${vArgument});\n`;
332
- }
333
-
334
- if (statement) {
335
- return `sendTo('${fInstance}', ${Blockly.JavaScript.quote_(fCommand)}, ${vArgument}, async (result) => {\n` +
336
- statement +
337
- `});\n${logText}`;
338
- }
339
-
340
- return `sendTo('${fInstance}', ${Blockly.JavaScript.quote_(fCommand)}, ${vArgument});\n${logText}`;
341
- } else {
342
- args.push({
343
- attr: name.replaceAll(`'`, `\\'`),
344
- val: vArgument,
345
- });
346
- }
347
- }
348
-
349
- const argStr = (args.length ? args.map(a => Blockly.JavaScript.prefixLines(`'${a.attr}': ${a.val},`, Blockly.JavaScript.INDENT)).join('\n') : '');
350
-
351
- if (fLog) {
352
- logText = `console.${fLog}('sendTo[custom] ${fInstance}: ${args.length ? args.map(a => `${a.attr}: ' + ${a.val} + '`).join(', ') : '[no args]'}');\n`;
353
- }
354
-
355
- if (statement) {
356
- return `sendTo('${fInstance}', ${Blockly.JavaScript.quote_(fCommand)}, {\n${argStr}\n}, async (result) => {\n` +
357
- statement +
358
- `});\n${logText}`;
359
- }
360
-
361
- return `sendTo('${fInstance}', ${Blockly.JavaScript.quote_(fCommand)}, {\n${argStr}\n});\n${logText}`;
362
- };
363
-
364
- // --- sendTo JavaScript --------------------------------------------------
365
- Blockly.Sendto.blocks['sendto_otherscript'] =
366
- '<block type="sendto_otherscript">' +
367
- ' <field name="INSTANCE">0</field>' +
368
- ' <field name="TIMEOUT">1000</field>' +
369
- ' <field name="UNIT">ms</field>' +
370
- ' <field name="MESSAGE">customMessage</field>' +
371
- ' <field name="WITH_STATEMENT">FALSE</field>' +
372
- ' <value name="OID">' +
373
- ' <shadow type="field_oid_script">' +
374
- ' <field name="oid">Script Object ID</field>' +
375
- ' </shadow>' +
376
- ' </value>' +
377
- '</block>';
378
-
379
- Blockly.Blocks['sendto_otherscript'] = {
380
- init: function () {
381
- const options = [];
382
- if (typeof main !== 'undefined' && main.instances) {
383
- for (let i = 0; i < main.instances.length; i++) {
384
- const m = main.instances[i].match(/^system.adapter.javascript.(\d+)$/);
385
- if (m) {
386
- const n = parseInt(m[1], 10);
387
- options.push(['javascript.' + n, String(n)]);
388
- }
389
- }
390
- }
391
-
392
- if (!options.length) {
393
- for (let u = 0; u <= 4; u++) {
394
- options.push(['javascript.' + u, String(u)]);
395
- }
396
- }
397
-
398
- this.appendDummyInput('NAME')
399
- .appendField('✉️ ' + Blockly.Translate('sendto_otherscript_name'));
400
-
401
- this.appendDummyInput('INSTANCE')
402
- .appendField(Blockly.Translate('sendto_otherscript_instance'))
403
- .appendField(new Blockly.FieldDropdown(options), 'INSTANCE');
404
-
405
- this.appendValueInput('OID')
406
- .appendField(Blockly.Translate('sendto_otherscript_script'))
407
- .setCheck(null);
408
-
409
- this.appendDummyInput()
410
- .appendField(Blockly.Translate('sendto_otherscript_timeout'))
411
- .appendField(new Blockly.FieldTextInput(1000), 'TIMEOUT')
412
- .appendField(new Blockly.FieldDropdown([
413
- [Blockly.Translate('timeouts_settimeout_ms'), 'ms'],
414
- [Blockly.Translate('timeouts_settimeout_sec'), 'sec'],
415
- [Blockly.Translate('timeouts_settimeout_min'), 'min'],
416
- ]), 'UNIT');
417
-
418
- this.appendDummyInput('MESSAGE')
419
- .appendField(Blockly.Translate('sendto_otherscript_message'))
420
- .appendField(new Blockly.FieldTextInput('customMessage'), 'MESSAGE');
421
-
422
- this.appendValueInput('DATA')
423
- .appendField(Blockly.Translate('sendto_otherscript_data'));
424
-
425
- this.appendDummyInput('WITH_STATEMENT')
426
- .appendField(Blockly.Translate('with_results'))
427
- .appendField(new Blockly.FieldCheckbox('FALSE', function (option) {
428
- const withStatement = option === true || option === 'true' || option === 'TRUE';
429
- this.sourceBlock_.updateShape_(withStatement);
430
- }), 'WITH_STATEMENT');
431
-
432
- this.updateShape_();
433
-
434
- this.setInputsInline(false);
435
- this.setPreviousStatement(true, null);
436
- this.setNextStatement(true, null);
437
-
438
- this.setColour(Blockly.Sendto.HUE);
439
-
440
- this.setTooltip(Blockly.Translate('sendto_otherscript_tooltip'));
441
- this.setHelpUrl(getHelp('sendto_otherscript_help'));
442
- },
443
- /**
444
- * Modify this block to have the correct number of inputs.
445
- * @private
446
- * @this Blockly.Block
447
- */
448
- updateShape_: function (withStatement) {
449
- const workspace = this.workspace;
450
-
451
- // Add new inputs.
452
- for (let i = 0; i < this.itemCount_; i++) {
453
- let input;
454
- try {
455
- input = this.getInput('ARG' + i);
456
- } catch (e) {
457
- input = null;
458
- }
459
-
460
- if (!input) {
461
- input = this.appendValueInput('ARG' + i).setAlign(Blockly.ALIGN_RIGHT);
462
- input.appendField(this.attributes_[i]);
463
- } else {
464
- input.fieldRow[0].setValue(this.attributes_[i]);
465
- }
466
-
467
- setTimeout(__input => {
468
- if (!__input.connection.isConnected()) {
469
- const _shadow = workspace.newBlock('text');
470
- _shadow.setShadow(true);
471
- _shadow.initSvg();
472
- _shadow.render();
473
- _shadow.outputConnection.connect(__input.connection);
474
- }
475
- }, 100, input);
476
- }
477
- // Remove deleted inputs.
478
- try {
479
- for (let i = this.itemCount_; this.getInput('ARG' + i); i++) {
480
- this.removeInput('ARG' + i);
481
- }
482
- } catch (e) {
483
- // if the input does not exist, it means that the block was deleted
484
- }
485
-
486
-
487
- if (withStatement === undefined) {
488
- withStatement = this.getFieldValue('WITH_STATEMENT');
489
- withStatement = withStatement === true || withStatement === 'true' || withStatement === 'TRUE';
490
- }
491
-
492
- try {
493
- if (this.getInput('STATEMENT')) {
494
- this.removeInput('STATEMENT');
495
- }
496
- } catch (e) {
497
- // if the input does not exist, it means that the block was deleted
498
- }
499
-
500
- // Add or remove a statement Input.
501
- if (withStatement) {
502
- this.appendStatementInput('STATEMENT');
503
- }
504
- },
505
- };
506
-
507
- Blockly.JavaScript.forBlock['sendto_otherscript'] = function (block) {
508
- const fInstance = block.getFieldValue('INSTANCE');
509
- const vObjId = Blockly.JavaScript.valueToCode(block, 'OID', Blockly.JavaScript.ORDER_ATOMIC);
510
- const fMessage = block.getFieldValue('MESSAGE');
511
-
512
- const fUnit = block.getFieldValue('UNIT');
513
- let fTimeout = block.getFieldValue('TIMEOUT');
514
- if (fUnit === 'min') {
515
- fTimeout *= 60000;
516
- } else if (fUnit === 'sec') {
517
- fTimeout *= 1000;
518
- }
519
-
520
- const fWithStatement = block.getFieldValue('WITH_STATEMENT');
521
- let statement;
522
- if (fWithStatement === true || fWithStatement === 'true' || fWithStatement === 'TRUE') {
523
- statement = Blockly.JavaScript.statementToCode(block, 'STATEMENT');
524
- }
525
-
526
- let objectName = '';
527
- try {
528
- const objId = eval(vObjId); // Code to string
529
- objectName = main.objects[objId] && main.objects[objId].common && main.objects[objId].common.name ? main.objects[objId].common.name : '';
530
- if (typeof objectName === 'object') {
531
- objectName = objectName[systemLang] || objectName.en;
532
- }
533
- } catch (error) {
534
-
535
- }
536
-
537
- let vData = Blockly.JavaScript.valueToCode(block, 'DATA', Blockly.JavaScript.ORDER_ATOMIC);
538
- if (!vData) {
539
- vData = 'true';
540
- }
541
-
542
- if (statement) {
543
- return `messageTo({ instance: ${fInstance}, script: ${vObjId}${objectName ? ` /* ${objectName} */` : ''}, message: ${Blockly.JavaScript.quote_(fMessage)} }, ${vData}, { timeout: ${fTimeout} }, (result) => {\n` +
544
- statement +
545
- '})\n';
546
- }
547
-
548
- return `messageTo({ instance: ${fInstance}, script: ${vObjId}${objectName ? ` /* ${objectName} */` : ''}, message: ${Blockly.JavaScript.quote_(fMessage)} }, ${vData}, { timeout: ${fTimeout} });\n`;
549
- };
550
-
551
- // --- sendTo gethistory --------------------------------------------------
552
- Blockly.Sendto.blocks['sendto_gethistory'] =
553
- '<block type="sendto_gethistory">' +
554
- ' <field name="INSTANCE">default</field>' +
555
- ' <field name="AGGREGATE">none</field>' +
556
- ' <field name="STEP">0</field>' +
557
- ' <field name="COUNT">500</field>' +
558
- ' <field name="UNIT">min</field>' +
559
- ' <value name="OID">' +
560
- ' <shadow type="field_oid">' +
561
- ' </shadow>' +
562
- ' </value>' +
563
- ' <value name="START">' +
564
- ' <shadow type="time_get_special">' +
565
- ' <field name="TYPE">dayStart</field>' +
566
- ' </shadow>' +
567
- ' </value>' +
568
- ' <value name="END">' +
569
- ' <shadow type="time_get_special">' +
570
- ' <field name="TYPE">dayEnd</field>' +
571
- ' </shadow>' +
572
- ' </value>' +
573
- '</block>';
574
-
575
- Blockly.Blocks['sendto_gethistory'] = {
576
- init: function () {
577
- const options = [
578
- ['default', 'default'],
579
- ];
580
- if (typeof main !== 'undefined' && main.instances) {
581
- for (let i = 0; i < main.instances.length; i++) {
582
- const m = main.instances[i].match(/^system.adapter.(history|influxdb|sql).(\d+)$/);
583
- if (m) {
584
- const instance = `${m[1]}.${m[2]}`;
585
- options.push([instance, instance]);
586
- }
587
- }
588
- }
589
-
590
- if (!options.length) {
591
- options.push(['history.0', 'history.0']);
592
- options.push(['influxdb.0', 'influxdb.0']);
593
- options.push(['sql.0', 'sql.0']);
594
- }
595
-
596
- this.appendDummyInput('NAME')
597
- .appendField(Blockly.Translate('sendto_gethistory_name'));
598
-
599
- this.appendDummyInput('INSTANCE')
600
- .appendField(Blockly.Translate('sendto_gethistory_instance'))
601
- .appendField(new Blockly.FieldDropdown(options), 'INSTANCE');
602
-
603
- this.appendValueInput('OID')
604
- .appendField(Blockly.Translate('sendto_gethistory_oid'))
605
- .setCheck(null);
606
-
607
- this.appendValueInput('START')
608
- .appendField(Blockly.Translate('sendto_gethistory_start'))
609
- .setCheck(null);
610
-
611
- this.appendValueInput('END')
612
- .appendField(Blockly.Translate('sendto_gethistory_end'))
613
- .setCheck(null);
614
-
615
- this.appendDummyInput('AGGREGATE')
616
- .appendField(Blockly.Translate('sendto_gethistory_aggregate'))
617
- .appendField(new Blockly.FieldDropdown([
618
- [Blockly.Translate('sendto_gethistory_none'), 'none'],
619
- [Blockly.Translate('sendto_gethistory_minimum'), 'min'],
620
- [Blockly.Translate('sendto_gethistory_maximum'), 'max'],
621
- [Blockly.Translate('sendto_gethistory_avg'), 'average'],
622
- [Blockly.Translate('sendto_gethistory_cnt'), 'count'],
623
- ]), 'AGGREGATE');
624
-
625
- this.appendDummyInput('UNIT')
626
- .appendField(Blockly.Translate('sendto_gethistory_step'))
627
- .appendField(new Blockly.FieldTextInput(0), 'STEP')
628
- .appendField(new Blockly.FieldDropdown([
629
- [Blockly.Translate('sendto_gethistory_ms'), 'ms'],
630
- [Blockly.Translate('sendto_gethistory_sec'), 'sec'],
631
- [Blockly.Translate('sendto_gethistory_min'), 'min'],
632
- [Blockly.Translate('sendto_gethistory_hour'), 'hour'],
633
- [Blockly.Translate('sendto_gethistory_day'), 'day'],
634
- ]), 'UNIT');
635
-
636
- this.appendDummyInput('COUNT')
637
- .appendField(Blockly.Translate('sendto_gethistory_count'))
638
- .appendField(new Blockly.FieldTextInput(0), 'COUNT');
639
-
640
- this.appendStatementInput('STATEMENT')
641
- .setCheck(null);
642
-
643
- this.setInputsInline(false);
644
- this.setPreviousStatement(true, null);
645
- this.setNextStatement(true, null);
646
-
647
- this.setColour(Blockly.Sendto.HUE);
648
-
649
- this.setTooltip(Blockly.Translate('sendto_gethistory_tooltip'));
650
- this.setHelpUrl(getHelp('sendto_gethistory_help'));
651
- },
652
- };
653
-
654
- Blockly.JavaScript.forBlock['sendto_gethistory'] = function (block) {
655
- const fInstance = block.getFieldValue('INSTANCE');
656
- const vObjId = Blockly.JavaScript.valueToCode(block, 'OID', Blockly.JavaScript.ORDER_ATOMIC);
657
- const vStart = Blockly.JavaScript.valueToCode(block, 'START', Blockly.JavaScript.ORDER_ATOMIC);
658
- const vEnd = Blockly.JavaScript.valueToCode(block, 'END', Blockly.JavaScript.ORDER_ATOMIC);
659
- const fAggregate = block.getFieldValue('AGGREGATE');
660
- const fUnit = block.getFieldValue('UNIT');
661
- const fCount = parseInt(block.getFieldValue('COUNT'));
662
-
663
- let fStep = parseFloat(block.getFieldValue('STEP'));
664
- if (fUnit === 'day') {
665
- fStep *= 24 * 60 * 60 * 1000;
666
- } else if (fUnit === 'hour') {
667
- fStep *= 60 * 60 * 1000;
668
- } else if (fUnit === 'min') {
669
- fStep *= 60 * 1000;
670
- } else if (fUnit === 'sec') {
671
- fStep *= 1000;
672
- }
673
-
674
- const statement = Blockly.JavaScript.statementToCode(block, 'STATEMENT');
675
-
676
- let objectName = '';
677
- try {
678
- const objId = eval(vObjId); // Code to string
679
- objectName = main.objects[objId] && main.objects[objId].common && main.objects[objId].common.name ? main.objects[objId].common.name : '';
680
- if (typeof objectName === 'object') {
681
- objectName = objectName[systemLang] || objectName.en;
682
- }
683
- } catch (error) {
684
-
685
- }
686
-
687
- return `getHistory(${fInstance !== 'default' ? `${Blockly.JavaScript.quote_(fInstance)}, ` : ''}{\n` +
688
- ` id: ${vObjId}${objectName ? ` /* ${objectName} */` : ''},\n` +
689
- ` start: ${vStart},\n` +
690
- ` end: ${vEnd},\n`+
691
- (fStep > 0 && fAggregate !== 'none' ? ` step: ${fStep},\n` : '') +
692
- (fStep === 0 || fAggregate === 'none' ? ` count: ${fCount},\n` : '') +
693
- ` aggregate: '${fAggregate}',\n` +
694
- ` removeBorderValues: true,\n`+
695
- `}, async (err, result) => {\n` +
696
- ` if (err) {\n` +
697
- ` console.error(err);\n`+
698
- (statement ? ` } else {\n` : '') +
699
- (statement ? Blockly.JavaScript.prefixLines(statement, Blockly.JavaScript.INDENT) : '') +
700
- ` }\n` +
701
- '});\n'
702
- };