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,402 +0,0 @@
1
- 'use strict';
2
-
3
- if (typeof goog !== 'undefined') {
4
- goog.provide('Blockly.JavaScript.Object');
5
- goog.require('Blockly.JavaScript');
6
- }
7
-
8
- Blockly.CustomBlocks = Blockly.CustomBlocks || [];
9
- Blockly.CustomBlocks.push('Object');
10
-
11
- Blockly.Object = {
12
- HUE: 40,
13
- blocks: {},
14
- };
15
-
16
- // --- object new --------------------------------------------------
17
- Blockly.Object.blocks['object_new'] =
18
- '<block type="object_new">' +
19
- '</block>';
20
-
21
- Blockly.Blocks['object_new_container'] = {
22
- /**
23
- * Mutator block for container.
24
- * @this Blockly.Block
25
- */
26
- init: function () {
27
- this.setColour(Blockly.Object.HUE);
28
-
29
- this.appendDummyInput()
30
- .appendField(Blockly.Translate('object_new_attributes'));
31
-
32
- this.appendStatementInput('STACK');
33
- this.setTooltip(Blockly.Translate('object_new_tooltip'));
34
-
35
- this.contextMenu = false;
36
- },
37
- };
38
-
39
- Blockly.Blocks['object_new_mutator'] = {
40
- /**
41
- * Mutator block for add items.
42
- * @this Blockly.Block
43
- */
44
- init: function () {
45
- this.setColour(Blockly.Object.HUE);
46
-
47
- this.appendDummyInput('ATTR')
48
- .appendField(Blockly.Translate('object_new_attribute'))
49
- .appendField(new Blockly.FieldTextInput('attribute1'), 'ATTR');
50
-
51
- this.setPreviousStatement(true);
52
- this.setNextStatement(true);
53
-
54
- this.setTooltip(Blockly.Translate('object_new_tooltip'));
55
-
56
- this.contextMenu = false;
57
- },
58
- };
59
-
60
- Blockly.Blocks['object_new'] = {
61
- init: function () {
62
- this.appendDummyInput('NAME')
63
- .appendField(Blockly.Translate('object_new'));
64
-
65
- this.attributes_ = [];
66
- this.itemCount_ = 0;
67
- this.setMutator(new Blockly.icons.MutatorIcon(['object_new_mutator'], this));
68
-
69
- this.setInputsInline(false);
70
- this.setOutput(true);
71
-
72
- this.setColour(Blockly.Object.HUE);
73
- this.setTooltip(Blockly.Translate('object_new_tooltip'));
74
- //this.setHelpUrl(getHelp('object_new_help'));
75
- },
76
- /**
77
- * Create XML to represent number of text inputs.
78
- * @return {!Element} XML storage element.
79
- * @this Blockly.Block
80
- */
81
- mutationToDom: function () {
82
- const container = document.createElement('mutation');
83
-
84
- for (let i = 0; i < this.attributes_.length; i++) {
85
- const parameter = document.createElement('attribute');
86
- parameter.setAttribute('id', 'ATTR_' + i);
87
- parameter.setAttribute('name', this.attributes_[i]);
88
- container.appendChild(parameter);
89
- }
90
-
91
- return container;
92
- },
93
- /**
94
- * Parse XML to restore the text inputs.
95
- * @param {!Element} xmlElement XML storage element.
96
- * @this Blockly.Block
97
- */
98
- domToMutation: function (xmlElement) {
99
- this.attributes_ = [];
100
-
101
- for (let i = 0, childNode; (childNode = xmlElement.childNodes[i]); i++) {
102
- if (childNode.nodeName.toLowerCase() === 'attribute') {
103
- // console.log('attribute -> ' + childNode.getAttribute('id') + ' -> ' + childNode.getAttribute('name'));
104
- this.attributes_.push(childNode.getAttribute('name'));
105
- }
106
- }
107
-
108
- this.itemCount_ = this.attributes_.length;
109
- this.updateShape_();
110
- },
111
- /**
112
- * Populate the mutator's dialog with this block's components.
113
- * @param {!Blockly.Workspace} workspace Mutator's workspace.
114
- * @return {!Blockly.Block} Root block in mutator.
115
- * @this Blockly.Block
116
- */
117
- decompose: function (workspace) {
118
- const containerBlock = workspace.newBlock('object_new_container');
119
- containerBlock.initSvg();
120
-
121
- let connection = containerBlock.getInput('STACK').connection;
122
- for (let i = 0; i < this.itemCount_; i++) {
123
- const itemBlock = workspace.newBlock('object_new_mutator');
124
- itemBlock.setFieldValue(this.attributes_[i], 'ATTR');
125
- itemBlock.initSvg();
126
- connection.connect(itemBlock.previousConnection);
127
- connection = itemBlock.nextConnection;
128
- }
129
-
130
- return containerBlock;
131
- },
132
- /**
133
- * Reconfigure this block based on the mutator dialog's components.
134
- * @param {!Blockly.Block} containerBlock Root block in mutator.
135
- * @this Blockly.Block
136
- */
137
- compose: function (containerBlock) {
138
- this.attributes_ = [];
139
-
140
- let itemBlock = containerBlock.getInputTargetBlock('STACK');
141
- // Count number of inputs.
142
- const connections = [];
143
- while (itemBlock) {
144
- const attrName = itemBlock.getFieldValue('ATTR');
145
- this.attributes_.push(attrName);
146
-
147
- connections.push(itemBlock.valueConnection_);
148
- itemBlock = itemBlock.nextConnection &&
149
- itemBlock.nextConnection.targetBlock();
150
- }
151
-
152
- // Disconnect any children that don't belong.
153
- for (let k = 0; k < this.itemCount_; k++) {
154
- const connection = this.getInput('ATTR_' + k).connection.targetConnection;
155
- if (connection && !connections.includes(connection)) {
156
- connection.disconnect();
157
- }
158
- }
159
-
160
- this.itemCount_ = connections.length;
161
- if (this.itemCount_ < 0) {
162
- this.itemCount_ = 0;
163
- }
164
- this.updateShape_();
165
-
166
- // Reconnect any child blocks.
167
- for (let i = 0; i < this.itemCount_; i++) {
168
- Blockly.icons.MutatorIcon.reconnect(connections[i], this, 'ATTR_' + i);
169
- }
170
- },
171
- /**
172
- * Store pointers to any connected child blocks.
173
- * @param {!Blockly.Block} containerBlock Root block in mutator.
174
- * @this Blockly.Block
175
- */
176
- saveConnections: function (containerBlock) {
177
- let itemBlock = containerBlock.getInputTargetBlock('STACK');
178
- let i = 0;
179
-
180
- while (itemBlock) {
181
- let input;
182
- try {
183
- input = this.getInput('ATTR_' + i);
184
- } catch (e) {
185
- input = null;
186
- }
187
- itemBlock.valueConnection_ = input?.connection.targetConnection;
188
- i++;
189
- itemBlock = itemBlock.nextConnection?.targetBlock();
190
- }
191
- },
192
- /**
193
- * Modify this block to have the correct number of inputs.
194
- * @private
195
- * @this Blockly.Block
196
- */
197
- updateShape_: function () {
198
- const workspace = this.workspace;
199
-
200
- // Add new inputs.
201
- for (let i = 0; i < this.itemCount_; i++) {
202
- let input;
203
- try {
204
- input = this.getInput(`ATTR_${i}`);
205
- } catch (e) {
206
- input = null;
207
- }
208
-
209
- if (!input) {
210
- input = this.appendValueInput('ATTR_' + i).setAlign(Blockly.ALIGN_RIGHT);
211
- input.appendField(this.attributes_[i]);
212
- } else {
213
- input.fieldRow[0].setValue(this.attributes_[i]);
214
- }
215
-
216
- setTimeout(__input => {
217
- if (!__input.connection.isConnected()) {
218
- const _shadow = workspace.newBlock('text');
219
- _shadow.setShadow(true);
220
- _shadow.initSvg();
221
- _shadow.render();
222
- _shadow.outputConnection.connect(__input.connection);
223
- }
224
- }, 100, input);
225
- }
226
- // Remove deleted inputs.
227
- try {
228
- for (let i = this.itemCount_; this.getInput('ATTR_' + i); i++) {
229
- this.removeInput('ATTR_' + i);
230
- }
231
- } catch (e) {
232
- // Ignore error if input does not exist
233
- }
234
- },
235
- };
236
-
237
- Blockly.JavaScript.forBlock['object_new'] = function (block) {
238
- const attributes = [];
239
- for (let n = 0; n < block.itemCount_; n++) {
240
- const vAttribute = Blockly.JavaScript.valueToCode(block, `ATTR_${n}`, Blockly.JavaScript.ORDER_COMMA);
241
- if (vAttribute) {
242
- attributes.push(`${Blockly.JavaScript.quote_(block.attributes_[n])}: ${vAttribute}`);
243
- }
244
- }
245
-
246
- return [`{ ${attributes.length ? attributes.join(', ') : ''} }`, Blockly.JavaScript.ORDER_ATOMIC];
247
- };
248
-
249
- // --- set attribute --------------------------------------------------
250
- Blockly.Object.blocks['object_set_attr'] =
251
- '<block type="object_set_attr">' +
252
- ' <field name="ATTR">attribute1</field>' +
253
- ' <value name="VALUE">' +
254
- ' <shadow type="text">' +
255
- ' <field name="TEXT">value</field>' +
256
- ' </shadow>' +
257
- ' </value>' +
258
- '</block>';
259
-
260
- Blockly.Blocks['object_set_attr'] = {
261
- init: function () {
262
- this.appendDummyInput('ATTR')
263
- .appendField(Blockly.Translate('object_set_attr'))
264
- .appendField(new Blockly.FieldTextInput('attribute1'), 'ATTR');
265
-
266
- this.appendValueInput('OBJECT')
267
- .appendField(Blockly.Translate('object_set_attr_object'));
268
-
269
- this.appendValueInput('VALUE')
270
- .setCheck(null)
271
- .appendField(Blockly.Translate('object_set_attr_value'));
272
-
273
- this.setInputsInline(false);
274
- this.setPreviousStatement(true, null);
275
- this.setNextStatement(true, null);
276
-
277
- this.setColour(Blockly.Object.HUE);
278
-
279
- this.setTooltip(Blockly.Translate('object_set_attr_tooltip'));
280
- //this.setHelpUrl(getHelp('object_set_attr_help'));
281
- },
282
- };
283
-
284
- Blockly.JavaScript.forBlock['object_set_attr'] = function (block) {
285
- const fAttr = block.getFieldValue('ATTR');
286
- const vValue = Blockly.JavaScript.valueToCode(block, 'VALUE', Blockly.JavaScript.ORDER_ATOMIC);
287
-
288
- let vObject = Blockly.JavaScript.valueToCode(block, 'OBJECT', Blockly.JavaScript.ORDER_ATOMIC);
289
- if (!vObject) {
290
- vObject = '{}';
291
- }
292
-
293
- return `((obj) => { if (typeof obj === 'object') { obj[${Blockly.JavaScript.quote_(fAttr)}] = ${vValue}; } })(${vObject});\n`;
294
- };
295
-
296
- // --- delete attribute --------------------------------------------------
297
- Blockly.Object.blocks['object_del_attr'] =
298
- '<block type="object_del_attr">' +
299
- ' <field name="ATTR">attribute1</field>' +
300
- '</block>';
301
-
302
- Blockly.Blocks['object_del_attr'] = {
303
- init: function () {
304
- this.appendDummyInput('ATTR')
305
- .appendField(Blockly.Translate('object_del_attr'))
306
- .appendField(new Blockly.FieldTextInput('attribute1'), 'ATTR');
307
-
308
- this.appendValueInput('OBJECT')
309
- .appendField(Blockly.Translate('object_del_attr_object'));
310
-
311
- this.setInputsInline(false);
312
- this.setPreviousStatement(true, null);
313
- this.setNextStatement(true, null);
314
-
315
- this.setColour(Blockly.Object.HUE);
316
-
317
- this.setTooltip(Blockly.Translate('object_del_attr_tooltip'));
318
- //this.setHelpUrl(getHelp('object_del_attr_help'));
319
- },
320
- };
321
-
322
- Blockly.JavaScript.forBlock['object_del_attr'] = function (block) {
323
- const fAttr = block.getFieldValue('ATTR');
324
-
325
- let vObject = Blockly.JavaScript.valueToCode(block, 'OBJECT', Blockly.JavaScript.ORDER_ATOMIC);
326
- if (!vObject) {
327
- vObject = '{}';
328
- }
329
-
330
- return `((obj) => { if (typeof obj === 'object') { delete obj[${Blockly.JavaScript.quote_(fAttr)}]; } })(${vObject});\n`;
331
- };
332
-
333
- // --- has attribute --------------------------------------------------
334
- Blockly.Object.blocks['object_has_attr'] =
335
- '<block type="object_has_attr">' +
336
- ' <field name="ATTR">attribute1</field>' +
337
- ' <value name="OBJECT">' +
338
- ' <shadow type="get_object">' +
339
- ' <field name="OID">Object ID</field>' +
340
- ' </shadow>' +
341
- ' </value>' +
342
- '</block>';
343
-
344
- Blockly.Blocks['object_has_attr'] = {
345
- init: function () {
346
- this.appendValueInput('OBJECT')
347
- .appendField(Blockly.Translate('object_has_attr'));
348
-
349
- this.appendDummyInput('ATTR')
350
- .appendField(Blockly.Translate('object_has_attr_attr'))
351
- .appendField(new Blockly.FieldTextInput('attribute1'), 'ATTR');
352
-
353
- this.setInputsInline(true);
354
- this.setOutput(true, 'Boolean');
355
-
356
- this.setColour(Blockly.Object.HUE);
357
-
358
- this.setTooltip(Blockly.Translate('object_has_attr_tooltip'));
359
- //this.setHelpUrl(getHelp('object_has_attr_help'));
360
- },
361
- };
362
-
363
- Blockly.JavaScript.forBlock['object_has_attr'] = function (block) {
364
- const vObject = Blockly.JavaScript.valueToCode(block, 'OBJECT', Blockly.JavaScript.ORDER_ATOMIC);
365
- const fAttr = block.getFieldValue('ATTR');
366
-
367
- return [`Object.prototype.hasOwnProperty.call(${vObject}, ${Blockly.JavaScript.quote_(fAttr)})`, Blockly.JavaScript.ORDER_ATOMIC];
368
- };
369
-
370
- // --- object keys --------------------------------------------------
371
- Blockly.Object.blocks['object_keys'] =
372
- '<block type="object_keys">' +
373
- ' <value name="OBJECT">' +
374
- ' <shadow type="get_object">' +
375
- ' <field name="OID">Object ID</field>' +
376
- ' </shadow>' +
377
- ' </value>' +
378
- '</block>';
379
-
380
- Blockly.Blocks['object_keys'] = {
381
- init: function () {
382
- this.appendValueInput('OBJECT')
383
- .appendField(Blockly.Translate('object_keys'));
384
-
385
- this.setInputsInline(true);
386
- this.setOutput(true, 'Array');
387
-
388
- this.setColour(Blockly.Object.HUE);
389
- this.setTooltip(Blockly.Translate('object_keys_tooltip'));
390
- //this.setHelpUrl(getHelp('object_keys_help'));
391
- },
392
- };
393
-
394
- Blockly.JavaScript.forBlock['object_keys'] = function (block) {
395
- let fObject = Blockly.JavaScript.valueToCode(block, 'OBJECT', Blockly.JavaScript.ORDER_ATOMIC);
396
-
397
- if (!fObject) {
398
- fObject = '{}';
399
- }
400
-
401
- return [`Object.keys(${fObject})`, Blockly.JavaScript.ORDER_ATOMIC];
402
- };