iobroker.javascript 10.0.0 → 10.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (157) hide show
  1. package/README.md +41 -6
  2. package/admin/assets/AiChatPanel-C4kuqP2U.js +237 -0
  3. package/admin/assets/AiDiffView-zJTEnv05.js +1 -0
  4. package/admin/assets/BlocklyEditor-BB77aFJI.js +84 -0
  5. package/admin/assets/ContextWrapper-C2yvd2Tn.css +1 -0
  6. package/admin/assets/ContextWrapper-W2H0z6zD.js +136 -0
  7. package/admin/assets/Debugger-DCMWjeGm.js +15 -0
  8. package/admin/assets/Error-CBC2oZzb.js +1 -0
  9. package/admin/assets/Import-B-F9IhZ-.js +1 -0
  10. package/admin/assets/RulesEditor-ByjgEaVo.js +1 -0
  11. package/admin/assets/RulesEditor-k-DMHotH.css +1 -0
  12. package/admin/assets/{ScriptEditor-BGIuoNei.js → ScriptEditor-CMYUt5S4.js} +2 -2
  13. package/admin/assets/{ScriptEditorVanillaMonaco-DyMQtoTQ.js → ScriptEditorVanillaMonaco-v12-gORS.js} +3 -3
  14. package/admin/assets/Send-CChqR5Oy.js +1 -0
  15. package/admin/assets/_virtual_mf-localSharedImportMap___mfe_internal__iobroker_javascript__mf_owner__1-7EPUlgCk.js +1 -0
  16. package/admin/assets/_virtual_mf___mfe_internal__iobroker_javascript__mf_owner__1__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-DuplUOZN.js +1243 -0
  17. package/admin/assets/{_virtual_mf___mfe_internal__iobroker_javascript__mf_owner__1__loadShare__react_mf_2_dom_mf_1_client__loadShare__.js-BBAXJaqI.js → _virtual_mf___mfe_internal__iobroker_javascript__mf_owner__1__loadShare__react_mf_2_dom_mf_1_client__loadShare__.js-JkwfVf8d.js} +1 -1
  18. package/admin/assets/{aiCodeLensProvider-hyAmut0e.js → aiCodeLensProvider-BGvIu6hH.js} +1 -1
  19. package/admin/assets/blockly-C4zJerWL.js +1047 -0
  20. package/admin/assets/blocks_action-CvnOHXwt.js +1 -0
  21. package/admin/assets/blocks_convert-BZlKcd02.js +3 -0
  22. package/admin/assets/blocks_logic-B33Pypxr.js +1 -0
  23. package/admin/assets/blocks_number-k2IjE7OH.js +1 -0
  24. package/admin/assets/blocks_object-B64vSfel.js +1 -0
  25. package/admin/assets/blocks_procedures-BpvNI5dO.js +3 -0
  26. package/admin/assets/blocks_sendto-pwZchfe0.js +5 -0
  27. package/admin/assets/blocks_switch-DViYCmQd.js +2 -0
  28. package/admin/assets/blocks_system-BZZcGqTJ.js +1 -0
  29. package/admin/assets/blocks_text-BOvtHN2r.js +1 -0
  30. package/admin/assets/blocks_time-BH2F-ylT.js +1 -0
  31. package/admin/assets/blocks_timeout-C3BoW4XJ.js +1 -0
  32. package/admin/assets/blocks_trigger-gwXvuAHV.js +2 -0
  33. package/admin/assets/blocks_words-D8PL_nSE.js +1 -0
  34. package/admin/assets/{cronHoverProvider-pKJkSevo.js → cronHoverProvider-DjY3jLvQ.js} +1 -1
  35. package/admin/assets/dist-D6o4h8Pd.js +4 -0
  36. package/admin/assets/field_cron-BMQWPb61.js +1 -0
  37. package/admin/assets/field_oid-BGIMv9gw.js +1 -0
  38. package/admin/assets/field_script-CdzYBCe6.js +1 -0
  39. package/admin/assets/helpers-Crmcgphg.js +1 -0
  40. package/admin/assets/hostInit-DBlZi_Kt.js +1 -0
  41. package/admin/assets/index-BvPVHv3P.js +192 -0
  42. package/admin/assets/{inlineChatWidget-ZaisTOLh.js → inlineChatWidget-SDoyVtOR.js} +2 -2
  43. package/admin/assets/{inlineDiffController-hTwHHqcc.js → inlineDiffController-CnHE3Rwd.js} +2 -2
  44. package/admin/assets/javascript-DVIhlTDr.js +218 -0
  45. package/admin/assets/{mf-entry-bootstrap-0-d6052b31.js → mf-entry-bootstrap-0-a03ecebd.js} +6 -2
  46. package/admin/assets/{mjs-DWqivHEk.js → mjs-Bh7xFIpd.js} +2 -2
  47. package/admin/assets/{stateHoverProvider-C7DawIs-.js → stateHoverProvider-D0iXo6YF.js} +3 -3
  48. package/admin/assets/{virtualExposes-Ed0lGq7k.js → virtualExposes-DgGB-18P.js} +1 -1
  49. package/admin/assets/virtual_mf-REMOTE_ENTRY_ID___mfe_internal__iobroker_javascript__remoteEntry_js-DYEYnOkt.js +1 -0
  50. package/admin/assets/virtual_mf-exposes___mfe_internal__iobroker_javascript__remoteEntry_js-ChiJXsfH.js +1 -0
  51. package/admin/custom/assets/Components-CuFt9lAY.js +1 -0
  52. package/admin/custom/assets/_virtual_mf-localSharedImportMap___mfe_internal__ConfigCustomJavascriptSet__mf_owner__1-DljJyQQg.js +1 -0
  53. package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__1__loadShare___mf_0_emotion_mf_1_react__loadShare__.js-D0M1SjIE.js +1 -0
  54. package/admin/custom/assets/{_virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__1__loadShare___mf_0_emotion_mf_1_styled__loadShare__.js-CGb5Cofy.js → _virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__1__loadShare___mf_0_emotion_mf_1_styled__loadShare__.js-BD2OkSge.js} +1 -1
  55. package/admin/custom/assets/{_virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__1__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-BVCIAgbo.js → _virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__1__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-pM642JFd.js} +91 -91
  56. package/admin/custom/assets/{_virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__1__loadShare___mf_0_iobroker_mf_1_json_mf_2_config__loadShare__.js-BkB0anQX.js → _virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__1__loadShare___mf_0_iobroker_mf_1_json_mf_2_config__loadShare__.js-BLelmJ7Y.js} +74 -74
  57. package/admin/custom/assets/{_virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__1__loadShare__react_mf_2_dom_mf_1_client__loadShare__.js-BotqDuw-.js → _virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__1__loadShare__react_mf_2_dom_mf_1_client__loadShare__.js-BGiB1l5e.js} +1 -1
  58. package/admin/custom/assets/{_virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__1__prebuild__date_mf_2_fns__prebuild__-Cb5TR7FB.js → _virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__1__prebuild__date_mf_2_fns__prebuild__-D5hqXJXI.js} +1 -1
  59. package/admin/custom/assets/hostInit-0DGPuZTB.js +1 -0
  60. package/admin/custom/assets/{index-uEKAoVT7.js → index-DcFI5r-g.js} +1 -1
  61. package/admin/custom/assets/{lib-Yj8cfN0A.js → lib-BlUjuGH7.js} +1 -1
  62. package/admin/custom/assets/{mf-entry-bootstrap-0-77793feb.js → mf-entry-bootstrap-0-efd847a6.js} +6 -2
  63. package/admin/custom/assets/{setYear-DJ9FbdkO.js → setYear-BaCcPbbI.js} +1 -1
  64. package/admin/custom/assets/virtualExposes-DGxNcyb6.js +1 -0
  65. package/admin/custom/assets/virtual_mf-REMOTE_ENTRY_ID___mfe_internal__ConfigCustomJavascriptSet__customComponents_js-DVNwFcUr.js +1 -0
  66. package/admin/custom/assets/virtual_mf-exposes___mfe_internal__ConfigCustomJavascriptSet__customComponents_js-DPck7zEs.js +2 -0
  67. package/admin/custom/customComponents.js +1 -1
  68. package/admin/google-blockly/VERSION +1 -0
  69. package/admin/google-blockly/media/drop.mp3 +0 -0
  70. package/admin/google-blockly/msg/js/de.js +332 -56
  71. package/admin/google-blockly/msg/js/en.js +319 -43
  72. package/admin/google-blockly/msg/js/es.js +319 -42
  73. package/admin/google-blockly/msg/js/fr.js +315 -39
  74. package/admin/google-blockly/msg/js/it.js +327 -51
  75. package/admin/google-blockly/msg/js/nl.js +376 -100
  76. package/admin/google-blockly/msg/js/pl.js +318 -42
  77. package/admin/google-blockly/msg/js/pt.js +318 -42
  78. package/admin/google-blockly/msg/js/ru.js +320 -44
  79. package/admin/google-blockly/msg/js/uk.js +326 -50
  80. package/admin/google-blockly/msg/js/zh-cn.js +322 -46
  81. package/admin/i18n/de.json +48 -26
  82. package/admin/i18n/en.json +47 -25
  83. package/admin/i18n/es.json +48 -18
  84. package/admin/i18n/fr.json +47 -17
  85. package/admin/i18n/it.json +47 -17
  86. package/admin/i18n/nl.json +47 -17
  87. package/admin/i18n/pl.json +48 -18
  88. package/admin/i18n/pt.json +47 -17
  89. package/admin/i18n/ru.json +47 -17
  90. package/admin/i18n/uk.json +47 -17
  91. package/admin/i18n/zh-cn.json +47 -17
  92. package/admin/jsonConfig.json +367 -0
  93. package/admin/mf-manifest.json +1 -1
  94. package/admin/mf-stats.json +1 -1
  95. package/admin/remoteEntry.js +1 -1
  96. package/admin/tab.html +12 -95
  97. package/build/lib/mirror.js +9 -0
  98. package/build/lib/mirror.js.map +1 -1
  99. package/build/lib/sandbox.js +35 -0
  100. package/build/lib/sandbox.js.map +1 -1
  101. package/build/lib/typescriptSettings.js +112 -2
  102. package/build/lib/typescriptSettings.js.map +1 -1
  103. package/build/lib/typescriptTools.js +168 -43
  104. package/build/lib/typescriptTools.js.map +1 -1
  105. package/build/main.js +10 -5
  106. package/build/main.js.map +1 -1
  107. package/build/types.d.ts +41 -0
  108. package/docs/en/javascript.md +16 -0
  109. package/docs/en/upgrade-guide.md +3 -0
  110. package/io-package.json +45 -15
  111. package/package.json +8 -3
  112. package/admin/assets/AiChatPanel-p0KAg6Cs.js +0 -237
  113. package/admin/assets/AiDiffView-BPTLnNx1.js +0 -1
  114. package/admin/assets/BlocklyEditor-CAjVMhYT.js +0 -81
  115. package/admin/assets/ContextWrapper-BVc8wTK_.css +0 -1
  116. package/admin/assets/ContextWrapper-D9CrnNKs.js +0 -127
  117. package/admin/assets/Debugger-SjROokFI.js +0 -15
  118. package/admin/assets/Error-DDfrxAt2.js +0 -1
  119. package/admin/assets/Import-DpTg1Jow.js +0 -1
  120. package/admin/assets/RulesEditor-BSRFWpEm.css +0 -1
  121. package/admin/assets/RulesEditor-D0hgrcBc.js +0 -1
  122. package/admin/assets/_virtual_mf-localSharedImportMap___mfe_internal__iobroker_javascript__mf_owner__1-DWJotR1B.js +0 -1
  123. package/admin/assets/_virtual_mf___mfe_internal__iobroker_javascript__mf_owner__1__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-CxICLr5Z.js +0 -1243
  124. package/admin/assets/dist-uw5orDgd.js +0 -4
  125. package/admin/assets/hostInit-BFg5u9hY.js +0 -1
  126. package/admin/assets/index-B1gICjdq.js +0 -192
  127. package/admin/assets/virtual_mf-REMOTE_ENTRY_ID___mfe_internal__iobroker_javascript__remoteEntry_js-BYs71IQF.js +0 -1
  128. package/admin/assets/virtual_mf-exposes___mfe_internal__iobroker_javascript__remoteEntry_js-DnnXQRkG.js +0 -1
  129. package/admin/custom/assets/Components-BrDyDHXh.js +0 -1
  130. package/admin/custom/assets/_virtual_mf-localSharedImportMap___mfe_internal__ConfigCustomJavascriptSet__mf_owner__1-CyYJM2-v.js +0 -1
  131. package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__1__loadShare___mf_0_emotion_mf_1_react__loadShare__.js-BdzCssLn.js +0 -1
  132. package/admin/custom/assets/hostInit-DJx2uXXy.js +0 -1
  133. package/admin/custom/assets/virtualExposes-CxDjLoYu.js +0 -1
  134. package/admin/custom/assets/virtual_mf-REMOTE_ENTRY_ID___mfe_internal__ConfigCustomJavascriptSet__customComponents_js-BU-ugy_7.js +0 -1
  135. package/admin/custom/assets/virtual_mf-exposes-ssr___mfe_internal__ConfigCustomJavascriptSet__customComponents_js-BEfZbrf7.js +0 -2
  136. package/admin/custom/assets/virtual_mf-exposes___mfe_internal__ConfigCustomJavascriptSet__customComponents_js-CTeZ0Jpm.js +0 -2
  137. package/admin/google-blockly/blockly_compressed.js +0 -1679
  138. package/admin/google-blockly/blocks_compressed.js +0 -193
  139. package/admin/google-blockly/javascript_compressed.js +0 -264
  140. package/admin/google-blockly/msg/messages.js +0 -1630
  141. package/admin/google-blockly/own/blocks_action.js +0 -765
  142. package/admin/google-blockly/own/blocks_convert.js +0 -480
  143. package/admin/google-blockly/own/blocks_logic.js +0 -459
  144. package/admin/google-blockly/own/blocks_number.js +0 -30
  145. package/admin/google-blockly/own/blocks_object.js +0 -402
  146. package/admin/google-blockly/own/blocks_procedures.js +0 -688
  147. package/admin/google-blockly/own/blocks_sendto.js +0 -702
  148. package/admin/google-blockly/own/blocks_switch.js +0 -257
  149. package/admin/google-blockly/own/blocks_system.js +0 -1409
  150. package/admin/google-blockly/own/blocks_text.js +0 -104
  151. package/admin/google-blockly/own/blocks_time.js +0 -639
  152. package/admin/google-blockly/own/blocks_timeout.js +0 -551
  153. package/admin/google-blockly/own/blocks_trigger.js +0 -1791
  154. package/admin/google-blockly/own/blocks_words.js +0 -708
  155. package/admin/google-blockly/own/field_cron.js +0 -158
  156. package/admin/google-blockly/own/field_oid.js +0 -642
  157. package/admin/google-blockly/own/field_script.js +0 -159
@@ -1,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
- };