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,480 +0,0 @@
1
- 'use strict';
2
-
3
- if (typeof goog !== 'undefined') {
4
- goog.provide('Blockly.JavaScript.Convert');
5
- goog.require('Blockly.JavaScript');
6
- }
7
-
8
- Blockly.CustomBlocks = Blockly.CustomBlocks || [];
9
- Blockly.CustomBlocks.push('Convert');
10
-
11
- Blockly.Convert = {
12
- HUE: 280,
13
- blocks: {},
14
- };
15
-
16
- Blockly.Blocks.Convert = {};
17
- Blockly.JavaScript.Convert = {};
18
-
19
- // --- to Number --------------------------------------------------
20
- Blockly.Convert.blocks['convert_tonumber'] =
21
- '<block type="convert_tonumber">' +
22
- '</block>';
23
-
24
- Blockly.Blocks.convert_tonumber = {
25
- init: function () {
26
- this.appendValueInput('VALUE')
27
- .appendField(Blockly.Translate('convert_tonumber'));
28
-
29
- this.setOutput(true, 'Number');
30
-
31
- this.setColour(Blockly.Convert.HUE);
32
-
33
- this.setTooltip(Blockly.Translate('convert_tonumber_tooltip'));
34
- },
35
- };
36
-
37
- Blockly.JavaScript.convert_tonumber = function (a) {
38
- return ['parseFloat(' + Blockly.JavaScript.valueToCode(a, 'VALUE', Blockly.JavaScript.ORDER_ATOMIC) + ')', Blockly.JavaScript.ORDER_ATOMIC];
39
- };
40
-
41
- // --- to Boolean --------------------------------------------------
42
- Blockly.Convert.blocks['convert_toboolean'] =
43
- '<block type="convert_toboolean">' +
44
- '</block>';
45
-
46
- Blockly.Blocks.convert_toboolean = {
47
- init: function () {
48
- this.appendValueInput('VALUE')
49
- .appendField(Blockly.Translate('convert_toboolean'));
50
-
51
- this.setOutput(true, 'Boolean');
52
-
53
- this.setColour(Blockly.Convert.HUE);
54
-
55
- this.setTooltip(Blockly.Translate('convert_toboolean_tooltip'));
56
- },
57
- };
58
-
59
- Blockly.JavaScript.forBlock['convert_toboolean'] = function (block) {
60
- const vValue = Blockly.JavaScript.valueToCode(block, 'VALUE', Blockly.JavaScript.ORDER_ATOMIC);
61
-
62
- return ['(() => {\n' +
63
- ` const val = ${vValue};\n` +
64
- ` if (val === 'true' || val === 'TRUE') return true;\n` +
65
- ` if (val === 'false' || val === 'FALSE') return false;\n` +
66
- ' return !!val;\n' +
67
- '})()', Blockly.JavaScript.ORDER_ATOMIC];
68
- };
69
-
70
- // --- to String --------------------------------------------------
71
- Blockly.Convert.blocks['convert_tostring'] =
72
- '<block type="convert_tostring">' +
73
- '</block>';
74
-
75
- Blockly.Blocks.convert_tostring = {
76
- init: function () {
77
- this.appendValueInput('VALUE')
78
- .appendField(Blockly.Translate('convert_tostring'));
79
-
80
- this.setOutput(true, 'String');
81
-
82
- this.setColour(Blockly.Convert.HUE);
83
-
84
- this.setTooltip(Blockly.Translate('convert_tostring_tooltip'));
85
- },
86
- };
87
-
88
- Blockly.JavaScript.forBlock['convert_tostring'] = function (block) {
89
- const vValue = Blockly.JavaScript.valueToCode(block, 'VALUE', Blockly.JavaScript.ORDER_ATOMIC);
90
-
91
- return [`('' + ${vValue})`, Blockly.JavaScript.ORDER_ATOMIC];
92
- };
93
-
94
- // --- get type --------------------------------------------------
95
- Blockly.Convert.blocks['convert_type'] =
96
- '<block type="convert_type">' +
97
- '</block>';
98
-
99
- Blockly.Blocks.convert_type = {
100
- init: function () {
101
- this.appendValueInput('ITEM')
102
- .appendField(Blockly.Translate('convert_type'));
103
-
104
- this.setOutput(true, 'String');
105
-
106
- this.setColour(Blockly.Convert.HUE);
107
-
108
- this.setTooltip(Blockly.Translate('convert_type_tooltip'));
109
- },
110
- };
111
-
112
- Blockly.JavaScript.forBlock['convert_type'] = function (block) {
113
- const vItem = Blockly.JavaScript.valueToCode(block, 'ITEM', Blockly.JavaScript.ORDER_ATOMIC);
114
-
115
- return [`typeof ${vItem}`, Blockly.JavaScript.ORDER_ATOMIC];
116
- };
117
-
118
- // --- to Date --------------------------------------------------
119
- Blockly.Convert.blocks['convert_to_date'] =
120
- '<block type="convert_to_date">' +
121
- '</block>';
122
-
123
- Blockly.Blocks.convert_to_date = {
124
- init: function () {
125
- this.appendValueInput('VALUE')
126
- .appendField(Blockly.Translate('convert_to_date'));
127
-
128
- this.setOutput(true, 'Date');
129
-
130
- this.setColour(Blockly.Convert.HUE);
131
-
132
- this.setTooltip(Blockly.Translate('convert_to_date_tooltip'));
133
- },
134
- };
135
-
136
- Blockly.JavaScript.forBlock['convert_to_date'] = function (block) {
137
- const vValue = Blockly.JavaScript.valueToCode(block, 'VALUE', Blockly.JavaScript.ORDER_ATOMIC);
138
-
139
- return [`getDateObject(${vValue}).getTime()`, Blockly.JavaScript.ORDER_ATOMIC];
140
- };
141
-
142
- // --- from Date --------------------------------------------------
143
- Blockly.Convert.blocks['convert_from_date'] =
144
- '<block type="convert_from_date">' +
145
- ' <mutation format="false" language="false"></mutation>' +
146
- ' <field name="OPTION">object</field>' +
147
- '</block>';
148
-
149
- Blockly.Blocks.convert_from_date = {
150
- init: function () {
151
- this.appendValueInput('VALUE')
152
- .appendField(Blockly.Translate('convert_from_date'));
153
-
154
- this.appendDummyInput('OPTION')
155
- .appendField(Blockly.Translate('convert_to'))
156
- .appendField(new Blockly.FieldDropdown([
157
- [Blockly.Translate('time_get_object') , 'object'],
158
- [Blockly.Translate('time_get_ms') , 'ms'],
159
- [Blockly.Translate('time_get_s') , 's'],
160
- [Blockly.Translate('time_get_sid') , 'sid'],
161
- [Blockly.Translate('time_get_m') , 'm'],
162
- [Blockly.Translate('time_get_mid') , 'mid'],
163
- [Blockly.Translate('time_get_h') , 'h'],
164
- [Blockly.Translate('time_get_d') , 'd'],
165
- [Blockly.Translate('time_get_M') , 'M'],
166
- [Blockly.Translate('time_get_Mt') , 'Mt'],
167
- [Blockly.Translate('time_get_Mts') , 'Mts'],
168
- [Blockly.Translate('time_get_y') , 'y'],
169
- [Blockly.Translate('time_get_fy') , 'fy'],
170
- [Blockly.Translate('time_get_wdt') , 'wdt'],
171
- [Blockly.Translate('time_get_wdts') , 'wdts'],
172
- [Blockly.Translate('time_get_wd') , 'wd'],
173
- [Blockly.Translate('time_get_cw') , 'cw'],
174
- [Blockly.Translate('time_get_custom') , 'custom'],
175
- [Blockly.Translate('time_get_yyyy.mm.dd') , Blockly.Words['time_get_yyyy.mm.dd'] .format],
176
- [Blockly.Translate('time_get_yyyy/mm/dd') , Blockly.Words['time_get_yyyy/mm/dd'] .format],
177
- [Blockly.Translate('time_get_yy.mm.dd') , Blockly.Words['time_get_yy.mm.dd'] .format],
178
- [Blockly.Translate('time_get_yy/mm/dd') , Blockly.Words['time_get_yy/mm/dd'] .format],
179
- [Blockly.Translate('time_get_dd.mm.yyyy') , Blockly.Words['time_get_dd.mm.yyyy'] .format],
180
- [Blockly.Translate('time_get_dd/mm/yyyy') , Blockly.Words['time_get_dd/mm/yyyy'] .format],
181
- [Blockly.Translate('time_get_dd.mm.yy') , Blockly.Words['time_get_dd.mm.yy'] .format],
182
- [Blockly.Translate('time_get_dd/mm/yy') , Blockly.Words['time_get_dd/mm/yy'] .format],
183
- [Blockly.Translate('time_get_mm/dd/yyyy') , Blockly.Words['time_get_mm/dd/yyyy'] .format],
184
- [Blockly.Translate('time_get_mm/dd/yy') , Blockly.Words['time_get_mm/dd/yy'] .format],
185
- [Blockly.Translate('time_get_dd.mm') , Blockly.Words['time_get_dd.mm'] .format],
186
- [Blockly.Translate('time_get_dd/mm') , Blockly.Words['time_get_dd/mm'] .format],
187
- [Blockly.Translate('time_get_mm.dd') , Blockly.Words['time_get_mm.dd'] .format],
188
- [Blockly.Translate('time_get_mm/dd') , Blockly.Words['time_get_mm/dd'] .format],
189
- [Blockly.Translate('time_get_hh_mm') , Blockly.Words['time_get_hh_mm'] .format],
190
- [Blockly.Translate('time_get_hh_mm_ss') , Blockly.Words['time_get_hh_mm_ss'] .format],
191
- [Blockly.Translate('time_get_hh_mm_ss.sss') , Blockly.Words['time_get_hh_mm_ss.sss'].format],
192
- ], function (option) {
193
- this.sourceBlock_.updateShape_(option === 'custom', option === 'wdts' || option === 'wdt' || option === 'Mt' || option === 'Mts');
194
- }), 'OPTION');
195
-
196
- this.setInputsInline(true);
197
- this.setOutput(true);
198
-
199
- this.setColour(Blockly.Convert.HUE);
200
-
201
- this.setTooltip(Blockly.Translate('convert_from_date_tooltip'));
202
- },
203
- mutationToDom: function () {
204
- const container = document.createElement('mutation');
205
- const option = this.getFieldValue('OPTION');
206
-
207
- container.setAttribute('format', option === 'custom' ? 'true' : 'false');
208
- container.setAttribute('language', option === 'wdt' || option === 'wdts' || option === 'Mt' || option === 'Mts' ? 'true' : 'false');
209
-
210
- return container;
211
- },
212
- domToMutation: function (xmlElement) {
213
- const format = xmlElement.getAttribute('format');
214
- const language = xmlElement.getAttribute('language');
215
-
216
- this.updateShape_(format === true || format === 'true' || format === 'TRUE', language === true || language === 'true' || language === 'TRUE');
217
- },
218
- updateShape_: function (isFormat, isLanguage) {
219
- // Add or remove a delay Input.
220
- let inputExists;
221
- try {
222
- inputExists = this.getInput('FORMAT');
223
- } catch (e) {
224
- inputExists = null;
225
- }
226
-
227
- if (isFormat) {
228
- if (!inputExists) {
229
- this.appendDummyInput('FORMAT')
230
- .appendField(' ')
231
- .appendField(new Blockly.FieldTextInput(Blockly.Translate('time_get_default_format')), 'FORMAT');
232
- }
233
- } else if (inputExists) {
234
- this.removeInput('FORMAT');
235
- }
236
-
237
- try {
238
- inputExists = this.getInput('LANGUAGE');
239
- } catch (e) {
240
- inputExists = null;
241
- }
242
-
243
- if (isLanguage) {
244
- if (!inputExists) {
245
- let languages;
246
- if (systemLang === 'en') {
247
- languages = [['in english', 'en'], ['auf deutsch', 'de'], ['на русском', 'ru']];
248
- } else if (systemLang === 'de') {
249
- languages = [['auf deutsch', 'de'], ['in english', 'en'], ['на русском', 'ru']];
250
- } else if (systemLang === 'ru') {
251
- languages = [['на русском', 'ru'], ['in english', 'en'], ['auf deutsch', 'de']];
252
- } else {
253
- languages = [['in english', 'en'], ['auf deutsch', 'de'], ['на русском', 'ru']];
254
- }
255
- this.appendDummyInput('LANGUAGE')
256
- .appendField(new Blockly.FieldDropdown(languages), 'LANGUAGE');
257
- }
258
- } else if (inputExists) {
259
- this.removeInput('LANGUAGE');
260
- }
261
- },
262
- };
263
-
264
- Blockly.JavaScript.forBlock['convert_from_date'] = function (block) {
265
- const fOption = block.getFieldValue('OPTION');
266
- const fFormat = block.getFieldValue('FORMAT');
267
- const fLang = block.getFieldValue('LANGUAGE');
268
- const vValue = Blockly.JavaScript.valueToCode(block, 'VALUE', Blockly.JavaScript.ORDER_ATOMIC);
269
-
270
- let code;
271
- if (fOption === 'object') {
272
- code = `getDateObject(${vValue}).getTime()`;
273
- } else if (fOption === 'ms') {
274
- code = `getDateObject(${vValue}).getMilliseconds()`;
275
- } else if (fOption === 's') {
276
- code = `getDateObject(${vValue}).getSeconds()`;
277
- } else if (fOption === 'sid') {
278
- code = `(() => { const v = getDateObject(${vValue}); return v.getHours() * 3600 + v.getMinutes() * 60 + v.getSeconds(); })()`;
279
- } else if (fOption === 'm') {
280
- code = `getDateObject(${vValue}).getMinutes()`;
281
- } else if (fOption === 'mid') {
282
- code = `(() => { const v = getDateObject(${vValue}); return v.getHours() * 60 + v.getMinutes(); })()`;
283
- } else if (fOption === 'h') {
284
- code = `getDateObject(${vValue}).getHours()`;
285
- } else if (fOption === 'd') {
286
- code = `getDateObject(${vValue}).getDate()`;
287
- } else if (fOption === 'M') {
288
- code = `(getDateObject(${vValue}).getMonth() + 1)`;
289
- } else if (fOption === 'Mt') {
290
- code = `formatDate(getDateObject(${vValue}), 'OO', '${fLang}')`;
291
- } else if (fOption === 'Mts') {
292
- code = `formatDate(getDateObject(${vValue}), 'O', '${fLang}')`;
293
- } else if (fOption === 'y') {
294
- code = `getDateObject(${vValue}).getYear()`;
295
- } else if (fOption === 'fy') {
296
- code = `getDateObject(${vValue}).getFullYear()`;
297
- } else if (fOption === 'wdt') {
298
- code = `formatDate(getDateObject(${vValue}), 'WW', '${fLang}')`;
299
- } else if (fOption === 'wdts') {
300
- code = `formatDate(getDateObject(${vValue}), 'W', '${fLang}')`;
301
- } else if (fOption === 'wd') {
302
- code = `(() => { const d = getDateObject(${vValue}).getDay(); return d === 0 ? 7 : d; })()`;
303
- } else if (fOption === 'cw') {
304
- code = `((date) => { const d = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate())); const dayNum = d.getUTCDay() || 7; d.setUTCDate(d.getUTCDate() + 4 - dayNum); const yearStart = new Date(Date.UTC(d.getUTCFullYear(), 0, 1)); return Math.ceil(((d.getTime() - yearStart.getTime()) / 86400000 + 1) / 7); })(getDateObject(${vValue}))`;
305
- } else if (fOption === 'custom') {
306
- code = `formatDate(getDateObject(${vValue}), ${Blockly.JavaScript.quote_(fFormat)})`;
307
- } else {
308
- code = `formatDate(getDateObject(${vValue}), ${Blockly.JavaScript.quote_(fOption)})`;
309
- }
310
-
311
- return [code, Blockly.JavaScript.ORDER_ATOMIC];
312
- };
313
-
314
- // --- time difference --------------------------------------------------
315
- Blockly.Convert.blocks['convert_time_difference'] =
316
- '<block type="convert_time_difference">' +
317
- ' <mutation format="false"></mutation> ' +
318
- ' <field name="OPTION">hh:mm:ss</field> ' +
319
- '</block>';
320
-
321
- Blockly.Blocks.convert_time_difference = {
322
- init: function () {
323
- this.appendValueInput('VALUE')
324
- .appendField(Blockly.Translate('convert_time_difference'));
325
-
326
- this.appendDummyInput('OPTION')
327
- .appendField(Blockly.Translate('convert_to'))
328
- .appendField(new Blockly.FieldDropdown([
329
- [Blockly.Translate('time_difference_hh:mm:ss'), 'hh:mm:ss'],
330
- [Blockly.Translate('time_difference_h:m:s'), 'h:m:s'],
331
- [Blockly.Translate('time_difference_hh:mm'), 'hh:mm'],
332
- [Blockly.Translate('time_difference_h:m'), 'h:m'],
333
- [Blockly.Translate('time_difference_mm:ss'), 'mm:ss'],
334
- [Blockly.Translate('time_difference_m:s'), 'm:s'],
335
- [Blockly.Translate('time_difference_custom'), 'custom'],
336
- ], function (option) {
337
- this.sourceBlock_.updateShape_(option === 'custom');
338
- }), 'OPTION');
339
-
340
- this.setInputsInline(true);
341
- this.setOutput(true, 'String');
342
-
343
- this.setColour(Blockly.Convert.HUE);
344
-
345
- this.setTooltip(Blockly.Translate('convert_time_difference_tooltip'));
346
- },
347
- mutationToDom: function () {
348
- const container = document.createElement('mutation');
349
- const option = this.getFieldValue('OPTION');
350
-
351
- container.setAttribute('format', option === 'custom' ? 'true' : 'false');
352
-
353
- return container;
354
- },
355
- domToMutation: function (xmlElement) {
356
- const format = xmlElement.getAttribute('format');
357
-
358
- this.updateShape_(format === true || format === 'true' || format === 'TRUE');
359
- },
360
- updateShape_: function (isFormat, isLanguage) {
361
- let inputExists;
362
- try {
363
- inputExists = this.getInput('FORMAT');
364
- } catch (e) {
365
- inputExists = null;
366
- }
367
-
368
- if (isFormat) {
369
- if (!inputExists) {
370
- this.appendDummyInput('FORMAT')
371
- .appendField(' ')
372
- .appendField(new Blockly.FieldTextInput(Blockly.Translate('time_difference_default_format')), 'FORMAT');
373
- }
374
- } else if (inputExists) {
375
- this.removeInput('FORMAT');
376
- }
377
- },
378
- };
379
-
380
- Blockly.JavaScript.forBlock['convert_time_difference'] = function (block) {
381
- const fOption = block.getFieldValue('OPTION');
382
- const fFormat = block.getFieldValue('FORMAT');
383
- const vValue = Blockly.JavaScript.valueToCode(block, 'VALUE', Blockly.JavaScript.ORDER_ATOMIC);
384
-
385
- return [`formatTimeDiff(${vValue ? vValue : '0'}, ${Blockly.JavaScript.quote_(fOption === 'custom' ? fFormat : fOption)})`, Blockly.JavaScript.ORDER_ATOMIC];
386
- };
387
-
388
- // --- json2object --------------------------------------------------
389
- Blockly.Convert.blocks['convert_json2object'] =
390
- '<block type="convert_json2object">' +
391
- '</block>';
392
-
393
- Blockly.Blocks.convert_json2object = {
394
- init: function () {
395
- this.appendValueInput('VALUE')
396
- .appendField(Blockly.Translate('convert_json2object'));
397
-
398
- this.setOutput(true);
399
-
400
- this.setColour(Blockly.Convert.HUE);
401
-
402
- this.setTooltip(Blockly.Translate('convert_json2object_tooltip'));
403
- },
404
- };
405
-
406
- Blockly.JavaScript.forBlock['convert_json2object'] = function (block) {
407
- const vValue = Blockly.JavaScript.valueToCode(block, 'VALUE', Blockly.JavaScript.ORDER_ATOMIC);
408
-
409
- return [`(() => { try { return JSON.parse(${vValue}); } catch (e) { return {}; }})()`, Blockly.JavaScript.ORDER_ATOMIC];
410
- };
411
-
412
- // --- object2json --------------------------------------------------
413
- Blockly.Convert.blocks['convert_object2json'] =
414
- '<block type="convert_object2json">' +
415
- ' <field name="PRETTIFY">FALSE</field>' +
416
- '</block>';
417
-
418
- Blockly.Blocks.convert_object2json = {
419
- init: function () {
420
- this.appendValueInput('VALUE')
421
- .appendField(Blockly.Translate('convert_object2json'));
422
-
423
- this.appendDummyInput('PRETTIFY')
424
- .appendField(Blockly.Translate('convert_object2json_prettify'))
425
- .appendField(new Blockly.FieldCheckbox('FALSE'), 'PRETTIFY');
426
-
427
- this.setOutput(true, 'String');
428
-
429
- this.setColour(Blockly.Convert.HUE);
430
-
431
- this.setTooltip(Blockly.Translate('convert_object2json_tooltip'));
432
- },
433
- };
434
-
435
- Blockly.JavaScript.forBlock['convert_object2json'] = function (block) {
436
- const vValue = Blockly.JavaScript.valueToCode(block, 'VALUE', Blockly.JavaScript.ORDER_ATOMIC);
437
-
438
- let fPrettify = block.getFieldValue('PRETTIFY');
439
- fPrettify = fPrettify === 'TRUE' || fPrettify === 'true' || fPrettify === true;
440
-
441
- return [`JSON.stringify(${vValue}${fPrettify ? ', null, 2' : ''})`, Blockly.JavaScript.ORDER_ATOMIC];
442
- };
443
-
444
- // --- to single value -------------------------------------------
445
- Blockly.Convert.blocks['convert_jsonata'] =
446
- '<block type="convert_jsonata">' +
447
- ' <value name="EXPRESSION">' +
448
- ' <shadow type="text">' +
449
- ' <field name="TEXT">*</field>' +
450
- ' </shadow>' +
451
- ' </value>' +
452
- '</block>';
453
-
454
- Blockly.Blocks.convert_jsonata = {
455
- init: function () {
456
- this.appendValueInput('EXPRESSION')
457
- .appendField(Blockly.Translate('convert_jsonata'));
458
-
459
- this.appendValueInput('TARGET')
460
- .appendField(Blockly.Translate('convert_jsonata_target'));
461
-
462
- this.setInputsInline(true);
463
- this.setOutput(true, 'String');
464
-
465
- this.setColour(Blockly.Convert.HUE);
466
-
467
- this.setTooltip(Blockly.Translate('convert_jsonata_tooltip'));
468
- },
469
- };
470
-
471
- Blockly.JavaScript.forBlock['convert_jsonata'] = function (block) {
472
- const vExpression = Blockly.JavaScript.valueToCode(block, 'EXPRESSION', Blockly.JavaScript.ORDER_ATOMIC);
473
-
474
- let vTarget = Blockly.JavaScript.valueToCode(block, 'TARGET', Blockly.JavaScript.ORDER_ATOMIC);
475
- if (!vTarget) {
476
- vTarget = '{}';
477
- }
478
-
479
- return [`(await jsonataExpression(${vTarget}, ${vExpression}))`, Blockly.JavaScript.ORDER_ATOMIC];
480
- };