iobroker.javascript 7.11.0 → 7.11.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.
- package/README.md +6 -5
- package/admin/asset-manifest.json +5 -5
- package/admin/google-blockly/own/blocks_action.js +74 -9
- package/admin/google-blockly/own/blocks_object.js +3 -3
- package/admin/google-blockly/own/blocks_words.js +8 -8
- package/admin/static/js/{184.689231d0.chunk.js → 184.985be7e8.chunk.js} +2 -2
- package/admin/static/js/{184.689231d0.chunk.js.map → 184.985be7e8.chunk.js.map} +1 -1
- package/admin/static/js/{main.da00e584.js → main.f0e610b0.js} +2 -2
- package/admin/static/js/{main.da00e584.js.map → main.f0e610b0.js.map} +1 -1
- package/admin/tab.html +1 -1
- package/io-package.json +14 -14
- package/lib/javascript.d.ts +5 -0
- package/lib/protectFs.js +10 -8
- package/lib/sandbox.js +18 -8
- package/main.js +4 -2
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -42,6 +42,12 @@ Since v5.5.0 of the JavaScript adapter the following locations (relative to the
|
|
|
42
42
|
<!--
|
|
43
43
|
### **WORK IN PROGRESS**
|
|
44
44
|
-->
|
|
45
|
+
### 7.11.1 (2024-03-28)
|
|
46
|
+
|
|
47
|
+
* (klein0r) Added exec result blockly block
|
|
48
|
+
* (klein0r) Protect iobroker-data/files to avoid direct writes with node:fs
|
|
49
|
+
* (klein0r) Escape single quotes in blockly obj attributes
|
|
50
|
+
|
|
45
51
|
### 7.11.0 (2024-03-26)
|
|
46
52
|
|
|
47
53
|
* (klein0r) Added blockly block for read and write file
|
|
@@ -67,11 +73,6 @@ Since v5.5.0 of the JavaScript adapter the following locations (relative to the
|
|
|
67
73
|
* (klein0r) Copy date object in getAstroDate
|
|
68
74
|
* (klein0r) Added object id as tooltip
|
|
69
75
|
|
|
70
|
-
### 7.9.4 (2024-03-20)
|
|
71
|
-
|
|
72
|
-
* (klein0r) Fixed urlencoding for basic auth in url (user:pass)
|
|
73
|
-
* (klein0r) Added warning icon if trigger is positioned inside of another trigger or loop
|
|
74
|
-
|
|
75
76
|
## License
|
|
76
77
|
The MIT License (MIT)
|
|
77
78
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"files": {
|
|
3
|
-
"main.js": "/static/js/main.
|
|
3
|
+
"main.js": "/static/js/main.f0e610b0.js",
|
|
4
4
|
"static/css/184.7463f8b6.chunk.css": "/static/css/184.7463f8b6.chunk.css",
|
|
5
|
-
"static/js/184.
|
|
5
|
+
"static/js/184.985be7e8.chunk.js": "/static/js/184.985be7e8.chunk.js",
|
|
6
6
|
"static/js/966.088c1225.chunk.js": "/static/js/966.088c1225.chunk.js",
|
|
7
7
|
"static/js/30.8bf17a3b.chunk.js": "/static/js/30.8bf17a3b.chunk.js",
|
|
8
8
|
"static/js/704.4ede9892.chunk.js": "/static/js/704.4ede9892.chunk.js",
|
|
@@ -160,9 +160,9 @@
|
|
|
160
160
|
"static/media/Garage Doors.svg": "/static/media/Garage Doors.0c2a1cfca7ad1ea59625.svg",
|
|
161
161
|
"static/media/Outdoor Blinds.svg": "/static/media/Outdoor Blinds.37b85a9c060a4af48da9.svg",
|
|
162
162
|
"static/media/Upstairs.svg": "/static/media/Upstairs.441813e54e0daca0882d.svg",
|
|
163
|
-
"main.
|
|
163
|
+
"main.f0e610b0.js.map": "/static/js/main.f0e610b0.js.map",
|
|
164
164
|
"184.7463f8b6.chunk.css.map": "/static/css/184.7463f8b6.chunk.css.map",
|
|
165
|
-
"184.
|
|
165
|
+
"184.985be7e8.chunk.js.map": "/static/js/184.985be7e8.chunk.js.map",
|
|
166
166
|
"966.088c1225.chunk.js.map": "/static/js/966.088c1225.chunk.js.map",
|
|
167
167
|
"30.8bf17a3b.chunk.js.map": "/static/js/30.8bf17a3b.chunk.js.map",
|
|
168
168
|
"704.4ede9892.chunk.js.map": "/static/js/704.4ede9892.chunk.js.map",
|
|
@@ -195,6 +195,6 @@
|
|
|
195
195
|
"77.f4bb7c45.chunk.js.map": "/static/js/77.f4bb7c45.chunk.js.map"
|
|
196
196
|
},
|
|
197
197
|
"entrypoints": [
|
|
198
|
-
"static/js/main.
|
|
198
|
+
"static/js/main.f0e610b0.js"
|
|
199
199
|
]
|
|
200
200
|
}
|
|
@@ -20,7 +20,7 @@ Blockly.Action.blocks['exec'] =
|
|
|
20
20
|
'<block type="exec">'
|
|
21
21
|
+ ' <value name="COMMAND">'
|
|
22
22
|
+ ' <shadow type="text">'
|
|
23
|
-
+ ' <field name="TEXT">
|
|
23
|
+
+ ' <field name="TEXT">pwd</field>'
|
|
24
24
|
+ ' </shadow>'
|
|
25
25
|
+ ' </value>'
|
|
26
26
|
+ ' <value name="LOG">'
|
|
@@ -33,7 +33,7 @@ Blockly.Action.blocks['exec'] =
|
|
|
33
33
|
Blockly.Blocks['exec'] = {
|
|
34
34
|
init: function() {
|
|
35
35
|
this.appendDummyInput('TEXT')
|
|
36
|
-
.appendField(Blockly.Translate('exec'));
|
|
36
|
+
.appendField('» ' + Blockly.Translate('exec'));
|
|
37
37
|
|
|
38
38
|
this.appendValueInput('COMMAND')
|
|
39
39
|
.appendField(Blockly.Translate('exec_command'));
|
|
@@ -96,7 +96,7 @@ Blockly.JavaScript['exec'] = function(block) {
|
|
|
96
96
|
|
|
97
97
|
let logText;
|
|
98
98
|
if (logLevel) {
|
|
99
|
-
logText =
|
|
99
|
+
logText = `console.${logLevel}('exec: ' + ${value_command});\n`;
|
|
100
100
|
} else {
|
|
101
101
|
logText = '';
|
|
102
102
|
}
|
|
@@ -104,18 +104,83 @@ Blockly.JavaScript['exec'] = function(block) {
|
|
|
104
104
|
if (withStatement === 'TRUE' || withStatement === 'true' || withStatement === true) {
|
|
105
105
|
const statement = Blockly.JavaScript.statementToCode(block, 'STATEMENT');
|
|
106
106
|
if (statement) {
|
|
107
|
-
return
|
|
108
|
-
|
|
107
|
+
return `exec(${value_command}, async (error, result, stderr) => {\n` +
|
|
108
|
+
statement +
|
|
109
|
+
`});\n${logText}`;
|
|
109
110
|
} else {
|
|
110
|
-
return
|
|
111
|
-
logText;
|
|
111
|
+
return `exec(${value_command});\n${logText}`;
|
|
112
112
|
}
|
|
113
113
|
} else {
|
|
114
|
-
return
|
|
115
|
-
logText;
|
|
114
|
+
return `exec(${value_command});\n${logText}`;
|
|
116
115
|
}
|
|
117
116
|
};
|
|
118
117
|
|
|
118
|
+
// --- exec_result -----------------------------------------------------------
|
|
119
|
+
Blockly.Action.blocks['exec_result'] =
|
|
120
|
+
'<block type="exec_result">'
|
|
121
|
+
+ ' <value name="ATTR">'
|
|
122
|
+
+ ' </value>'
|
|
123
|
+
+ '</block>';
|
|
124
|
+
|
|
125
|
+
Blockly.Blocks['exec_result'] = {
|
|
126
|
+
/**
|
|
127
|
+
* Block for conditionally returning a value from a procedure.
|
|
128
|
+
* @this Blockly.Block
|
|
129
|
+
*/
|
|
130
|
+
init: function() {
|
|
131
|
+
this.appendDummyInput()
|
|
132
|
+
.appendField('»');
|
|
133
|
+
|
|
134
|
+
this.appendDummyInput('ATTR')
|
|
135
|
+
.appendField(new Blockly.FieldDropdown([
|
|
136
|
+
[Blockly.Translate('exec_result_result'), 'result'],
|
|
137
|
+
[Blockly.Translate('exec_result_stderr'), 'stderr'],
|
|
138
|
+
[Blockly.Translate('exec_result_error'), 'error'],
|
|
139
|
+
]), 'ATTR');
|
|
140
|
+
|
|
141
|
+
this.setInputsInline(true);
|
|
142
|
+
this.setOutput(true);
|
|
143
|
+
this.setColour(Blockly.Action.HUE);
|
|
144
|
+
this.setTooltip(Blockly.Translate('exec_result_tooltip'));
|
|
145
|
+
//this.setHelpUrl(getHelp('exec'));
|
|
146
|
+
},
|
|
147
|
+
/**
|
|
148
|
+
* Called whenever anything on the workspace changes.
|
|
149
|
+
* Add warning if this flow block is not nested inside a loop.
|
|
150
|
+
* @param {!Blockly.Events.Abstract} e Change event.
|
|
151
|
+
* @this Blockly.Block
|
|
152
|
+
*/
|
|
153
|
+
onchange: function(e) {
|
|
154
|
+
let legal = false;
|
|
155
|
+
// Is the block nested in an exec?
|
|
156
|
+
let block = this;
|
|
157
|
+
do {
|
|
158
|
+
if (this.FUNCTION_TYPES.includes(block.type)) {
|
|
159
|
+
legal = true;
|
|
160
|
+
break;
|
|
161
|
+
}
|
|
162
|
+
block = block.getSurroundParent();
|
|
163
|
+
} while (block);
|
|
164
|
+
|
|
165
|
+
if (legal) {
|
|
166
|
+
this.setWarningText(null, this.id);
|
|
167
|
+
} else {
|
|
168
|
+
this.setWarningText(Blockly.Translate('exec_result_warning'), this.id);
|
|
169
|
+
}
|
|
170
|
+
},
|
|
171
|
+
/**
|
|
172
|
+
* List of block types that are functions and thus do not need warnings.
|
|
173
|
+
* To add a new function type add this to your code:
|
|
174
|
+
* Blockly.Blocks['procedures_ifreturn'].FUNCTION_TYPES.push('custom_func');
|
|
175
|
+
*/
|
|
176
|
+
FUNCTION_TYPES: ['exec'],
|
|
177
|
+
};
|
|
178
|
+
Blockly.JavaScript['exec_result'] = function(block) {
|
|
179
|
+
const attr = block.getFieldValue('ATTR');
|
|
180
|
+
|
|
181
|
+
return [attr, Blockly.JavaScript.ORDER_ATOMIC];
|
|
182
|
+
};
|
|
183
|
+
|
|
119
184
|
// --- action http_get --------------------------------------------------
|
|
120
185
|
Blockly.Action.blocks['http_get'] =
|
|
121
186
|
'<block type="http_get">'
|
|
@@ -229,7 +229,7 @@ Blockly.JavaScript['object_new'] = function(block) {
|
|
|
229
229
|
for (let n = 0; n < block.itemCount_; n++) {
|
|
230
230
|
const val = Blockly.JavaScript.valueToCode(block, 'ATTR_' + n, Blockly.JavaScript.ORDER_COMMA);
|
|
231
231
|
if (val) {
|
|
232
|
-
attributes.push(`'${block.attributes_[n]}': ${val}`);
|
|
232
|
+
attributes.push(`'${String(block.attributes_[n]).replaceAll(`'`, `\\'`)}': ${val}`);
|
|
233
233
|
}
|
|
234
234
|
}
|
|
235
235
|
|
|
@@ -282,7 +282,7 @@ Blockly.JavaScript['object_set_attr'] = function(block) {
|
|
|
282
282
|
obj = '{}';
|
|
283
283
|
}
|
|
284
284
|
|
|
285
|
-
return `(() => {
|
|
285
|
+
return `((obj) => { if (typeof obj === 'object') { obj['${attr}'] = ${value}; } })(${obj});\n`;
|
|
286
286
|
};
|
|
287
287
|
|
|
288
288
|
// --- delete attribute --------------------------------------------------
|
|
@@ -321,7 +321,7 @@ Blockly.JavaScript['object_del_attr'] = function(block) {
|
|
|
321
321
|
obj = '{}';
|
|
322
322
|
}
|
|
323
323
|
|
|
324
|
-
return `(() => {
|
|
324
|
+
return `((obj) => { if (typeof obj === 'object') { delete obj['${attr}']; } })(${obj});\n`;
|
|
325
325
|
};
|
|
326
326
|
|
|
327
327
|
// --- has attribute --------------------------------------------------
|
|
@@ -37,7 +37,6 @@ Blockly.Words['selector'] = {'en': 'IDs from Selecto
|
|
|
37
37
|
Blockly.Words['exec'] = {'en': 'exec', 'de': 'exec', 'ru': 'exec', 'pt': 'exec', 'nl': 'exec', 'fr': 'exec', 'it': 'exec', 'es': 'ejecutivo', 'pl': 'exec', 'zh-cn': '执行指令', 'uk': 'викон'};
|
|
38
38
|
Blockly.Words['exec_statement'] = {'en': 'with results', 'de': 'mit Ergebnissen', 'ru': 'анализировать результаты', 'pt': 'com resultados', 'nl': 'met resultaten', 'fr': 'avec des résultats', 'it': 'con risultati', 'es': 'con resultados', 'pl': 'with results', 'zh-cn': '处理返回值', 'uk': 'з результатами'};
|
|
39
39
|
Blockly.Words['exec_command'] = {'en': 'command', 'de': 'Befehl', 'ru': 'команда', 'pt': 'comando', 'nl': 'opdracht', 'fr': 'commander', 'it': 'comando', 'es': 'mando', 'pl': 'command', 'zh-cn': '命令行指令', 'uk': 'команда'};
|
|
40
|
-
Blockly.Words['exec_tooltip'] = {'en': 'Execute some command', 'de': 'Einen System-Befehl ausführen', 'ru': 'Выполнить системную команду', 'pt': 'Executar um comando do sistema', 'nl': 'Voer een commando uit', 'fr': 'Exécuter une commande', 'it': 'Esegui un comando', 'es': 'Ejecuta algún comando', 'pl': 'Execute some command', 'zh-cn': '执行一些指令', 'uk': 'Виконати якусь команду'};
|
|
41
40
|
Blockly.Words['exec_help'] = {'en': 'exec---execute-some-os-command-like-cp-file1-file2', 'de': 'exec---execute-some-os-command-like-cp-file1-file2', 'ru': 'exec---execute-some-os-command-like-cp-file1-file2', 'pt': 'exec---execute-some-os-command-like-cp-file1-file2', 'nl': 'exec---execute-some-os-command-like-cp-file1-file2', 'fr': 'exec---execute-some-os-command-like-cp-file1-file2', 'it': 'exec---execute-some-os-command-like-cp-file1-file2', 'es': 'exec---execute-some-os-command-like-cp-file1-file2', 'pl': 'exec---execute-some-os-command-like-cp-file1-file2', 'zh-cn': 'exec---execute-some-os-command-like-cp-file1-file2', 'uk': 'exec---execute-some-os-command-like-cp-file1-file2'};
|
|
42
41
|
Blockly.Words['exec_log'] = {'en': 'log level', 'de': 'Loglevel', 'ru': 'Протокол', 'pt': 'nível de log', 'nl': 'Log niveau', 'fr': 'niveau de journalisation', 'it': 'livello di registro', 'es': 'nivel de registro', 'pl': 'log level', 'zh-cn': '日志级别', 'uk': 'рівень журналу'};
|
|
43
42
|
Blockly.Words['exec_log_none'] = {'en': 'none', 'de': 'keins', 'ru': 'нет', 'pt': 'nenhum', 'nl': 'geen', 'fr': 'aucun', 'it': 'nessuna', 'es': 'ninguna', 'pl': 'none', 'zh-cn': '不输出', 'uk': 'немає'};
|
|
@@ -45,9 +44,16 @@ Blockly.Words['exec_log_info'] = {'en': 'info',
|
|
|
45
44
|
Blockly.Words['exec_log_debug'] = {'en': 'debug', 'de': 'debug', 'ru': 'debug', 'pt': 'depurar', 'nl': 'debug', 'fr': 'déboguer', 'it': 'mettere a punto', 'es': 'depurar', 'pl': 'debug', 'zh-cn': '调试信息', 'uk': 'відлагоджувати'};
|
|
46
45
|
Blockly.Words['exec_log_warn'] = {'en': 'warning', 'de': 'warning', 'ru': 'warning', 'pt': 'atenção', 'nl': 'waarschuwing', 'fr': 'Attention', 'it': 'avvertimento', 'es': 'advertencia', 'pl': 'warning', 'zh-cn': '警告信息', 'uk': 'УВАГА'};
|
|
47
46
|
Blockly.Words['exec_log_error'] = {'en': 'error', 'de': 'error', 'ru': 'ошибка', 'pt': 'erro', 'nl': 'fout', 'fr': 'Erreur', 'it': 'errore', 'es': 'error', 'pl': 'error', 'zh-cn': '错误信息', 'uk': 'помилка'};
|
|
47
|
+
Blockly.Words['exec_tooltip'] = {'en': 'Execute some command', 'de': 'Einen System-Befehl ausführen', 'ru': 'Выполнить системную команду', 'pt': 'Executar um comando do sistema', 'nl': 'Voer een commando uit', 'fr': 'Exécuter une commande', 'it': 'Esegui un comando', 'es': 'Ejecuta algún comando', 'pl': 'Execute some command', 'zh-cn': '执行一些指令', 'uk': 'Виконати якусь команду'};
|
|
48
48
|
|
|
49
|
-
// --- action
|
|
49
|
+
// --- action exec_result --------------------------------------------------
|
|
50
|
+
Blockly.Words['exec_result_result'] = {'en': 'result (stdout)', 'de': 'result (stdout)', 'ru': 'result (stdout)', 'pt': 'result (stdout)', 'nl': 'result (stdout)', 'fr': 'result (stdout)', 'it': 'result (stdout)', 'es': 'result (stdout)', 'pl': 'result (stdout)', 'zh-cn': 'result (stdout)', 'uk': 'result (stdout)'};
|
|
51
|
+
Blockly.Words['exec_result_stderr'] = {'en': 'error (stderr)', 'de': 'error (stderr)', 'ru': 'error (stderr)', 'pt': 'error (stderr)', 'nl': 'error (stderr)', 'fr': 'error (stderr)', 'it': 'error (stderr)', 'es': 'error (stderr)', 'pl': 'error (stderr)', 'zh-cn': 'error (stderr)', 'uk': 'error (stderr)'};
|
|
52
|
+
Blockly.Words['exec_result_error'] = {'en': 'error', 'de': 'error', 'ru': 'ошибка', 'pt': 'erro', 'nl': 'fout', 'fr': 'Erreur', 'it': 'errore', 'es': 'error', 'pl': 'error', 'zh-cn': '错误信息', 'uk': 'помилка'};
|
|
53
|
+
Blockly.Words['exec_result_warning'] = {'en': 'This block must be used inside of exec blocks', 'de': 'Dieser Block muss innerhalb von Exec-Blöcken verwendet werden', 'ru': 'Этот блок должен быть использован внутри блоков exec', 'pt': 'Este bloco deve ser usado dentro de blocos exec', 'nl': 'Dit blok moet worden gebruikt binnen exec blokken', 'fr': 'Ce bloc doit être utilisé à l\'intérieur des blocs exec', 'it': 'Questo blocco deve essere utilizzato all\'interno di blocchi exec', 'es': 'Este bloque debe ser utilizado dentro de bloques de exec', 'pl': 'Ten blok musi być używany wewnątrz bloków exec', 'zh-cn': '此块必须在执行块内使用', 'uk': 'Цей блок повинен бути використаний всередині блоків екз'};
|
|
54
|
+
Blockly.Words['exec_result_tooltip'] = {'en': 'Results of command', 'de': 'Ergebnisse des Befehls', 'ru': 'Результаты команд', 'pt': 'Resultados do comando', 'nl': 'Resultaten van het commando', 'fr': 'Résultats de la commande', 'it': 'Risultati del comando', 'es': 'Resultados del comando', 'pl': 'Wyniki dowodzenia', 'zh-cn': '指挥结果', 'uk': 'Результати команди'};
|
|
50
55
|
|
|
56
|
+
// --- action http --------------------------------------------------
|
|
51
57
|
Blockly.Words['http_timeout'] = {'en': 'timeout', 'de': 'Timeout', 'ru': 'timeout', 'pt': 'timeout', 'nl': 'timeout', 'fr': 'timeout', 'it': 'timeout', 'es': 'timeout', 'pl': 'timeout', 'zh-cn': 'timeout', 'uk': 'timeout'};
|
|
52
58
|
Blockly.Words['http_timeout_ms'] = {'en': 'ms', 'de': 'ms', 'ru': 'мс', 'pt': 'ms', 'nl': 'Mevrouw', 'fr': 'Mme', 'it': 'Signorina', 'es': 'Sra', 'pl': 'ms', 'zh-cn': '毫秒', 'uk': 'РС'};
|
|
53
59
|
Blockly.Words['http_timeout_sec'] = {'en': 'sec', 'de': 'Sek', 'ru': 'сек.', 'pt': 'seg', 'nl': 'sec', 'fr': 'seconde', 'it': 'secondo', 'es': 'segundo', 'pl': 'sec', 'zh-cn': '秒', 'uk': 'сек'};
|
|
@@ -56,27 +62,23 @@ Blockly.Words['http_type_text'] = {'en': 'text',
|
|
|
56
62
|
Blockly.Words['http_type_arraybuffer'] = {'en': 'arraybuffer', 'de': 'Arraybuffer', 'ru': 'arraybuffer', 'pt': 'arraybuffer', 'nl': 'arraybuffer', 'fr': 'arraybuffer', 'it': 'arraybuffer', 'es': 'arraybuffer', 'pl': 'arraybuffer', 'zh-cn': 'arraybuffer', 'uk': 'arraybuffer'};
|
|
57
63
|
|
|
58
64
|
// --- action http_get --------------------------------------------------
|
|
59
|
-
|
|
60
65
|
Blockly.Words['http_get'] = {'en': 'http (GET)', 'de': 'http (GET)', 'ru': 'http (GET)', 'pt': 'http (GET)', 'nl': 'http (GET)', 'fr': 'http (GET)', 'it': 'http (GET)', 'es': 'http (GET)', 'pl': 'http (GET)', 'zh-cn': 'http (GET)', 'uk': 'http (GET)'};
|
|
61
66
|
Blockly.Words['http_get_tooltip'] = {'en': 'Request ressources via http', 'de': 'Ressourcen anfordern via http', 'ru': 'Запрос ресурсов через http', 'pt': 'Solicitar recursos via http', 'nl': 'Resources aanvragen via http', 'fr': 'Demander des ressources via http', 'it': 'Richiesta di risorse via http', 'es': 'Solicitar ressources via http', 'pl': 'Wniosek o ponowne źródła informacji za pośrednictwem http', 'zh-cn': '通过 http 请求资源源', 'uk': 'Запит ресурсів через HTTP'};
|
|
62
67
|
Blockly.Words['http_get_help'] = {'en': 'httpGet', 'de': 'httpGet', 'ru': 'httpGet', 'pt': 'httpGet', 'nl': 'httpGet', 'fr': 'httpGet', 'it': 'httpGet', 'es': 'httpGet', 'pl': 'httpGet', 'zh-cn': 'httpGet', 'uk': 'httpGet'};
|
|
63
68
|
|
|
64
69
|
// --- action http_post --------------------------------------------------
|
|
65
|
-
|
|
66
70
|
Blockly.Words['http_post'] = {'en': 'http (POST)', 'de': 'http (POST)', 'ru': 'http (POST)', 'pt': 'http (POST)', 'nl': 'http (POST)', 'fr': 'http (POST)', 'it': 'http (POST)', 'es': 'http (POST)', 'pl': 'http (POST)', 'zh-cn': 'http (POST)', 'uk': 'http (POST)'};
|
|
67
71
|
Blockly.Words['http_post_data'] = {'en': 'data', 'de': 'Daten', 'ru': 'данные', 'pt': 'dados', 'nl': 'data', 'fr': 'données', 'it': 'dati', 'es': 'datos', 'pl': 'dane', 'zh-cn': '数据', 'uk': 'даних'};
|
|
68
72
|
Blockly.Words['http_post_tooltip'] = {'en': 'Request ressources via http', 'de': 'Ressourcen anfordern via http', 'ru': 'Запрос ресурсов через http', 'pt': 'Solicitar recursos via http', 'nl': 'Resources aanvragen via http', 'fr': 'Demander des ressources via http', 'it': 'Richiesta di risorse via http', 'es': 'Solicitar ressources via http', 'pl': 'Wniosek o ponowne źródła informacji za pośrednictwem http', 'zh-cn': '通过 http 请求资源源', 'uk': 'Запит ресурсів через HTTP'};
|
|
69
73
|
Blockly.Words['http_post_help'] = {'en': 'httpPost', 'de': 'httpPost', 'ru': 'httpPost', 'pt': 'httpPost', 'nl': 'httpPost', 'fr': 'httpPost', 'it': 'httpPost', 'es': 'httpPost', 'pl': 'httpPost', 'zh-cn': 'httpPost', 'uk': 'httpPost'};
|
|
70
74
|
|
|
71
75
|
// --- action http_response --------------------------------------------------
|
|
72
|
-
|
|
73
76
|
Blockly.Words['http_response_data'] = {'en': 'data', 'de': 'Data', 'ru': 'data', 'pt': 'data', 'nl': 'data', 'fr': 'data', 'it': 'data', 'es': 'data', 'pl': 'data', 'zh-cn': 'data', 'uk': 'data'};
|
|
74
77
|
Blockly.Words['http_response_statuscode'] = {'en': 'status code', 'de': 'Status code', 'ru': 'status code', 'pt': 'status code', 'nl': 'status code', 'fr': 'status code', 'it': 'status code', 'es': 'status code', 'pl': 'status code', 'zh-cn': 'status code', 'uk': 'status code'};
|
|
75
78
|
Blockly.Words['http_response_warning'] = {'en': 'This block must be used inside of http blocks', 'de': 'Dieser Block muss innerhalb von http-Blöcken verwendet werden', 'ru': 'Этот блок должен быть использован внутри блоков http', 'pt': 'Este bloco deve ser usado dentro de blocos http', 'nl': 'Dit blok moet worden gebruikt binnen http-blokken', 'fr': 'Ce bloc doit être utilisé à l\'intérieur des blocs http', 'it': 'Questo blocco deve essere utilizzato all\'interno dei blocchi http', 'es': 'Este bloque debe ser utilizado dentro de bloques http', 'pl': 'Ten blok musi być używany wewnątrz bloków http', 'zh-cn': '此块必须在 http 块内使用', 'uk': 'Цей блок повинен використовуватися всередині блоків'};
|
|
76
79
|
Blockly.Words['http_response_tooltip'] = {'en': 'Response information', 'de': 'Information aus der Antwort', 'ru': 'Информация о мерах реагирования', 'pt': 'InformaçÃμes de resposta', 'nl': 'Responsinformatie', 'fr': 'Réponse', 'it': 'Informazioni sulla risposta', 'es': 'Información sobre la respuesta', 'pl': 'Informacje o odpowiedzi', 'zh-cn': '答复信息', 'uk': 'Інформація про відповідь'};
|
|
77
80
|
|
|
78
81
|
// --- action file_write --------------------------------------------------
|
|
79
|
-
|
|
80
82
|
Blockly.Words['file_write'] = {'en': 'file write', 'de': 'Datei schreiben', 'ru': 'Запись файла', 'pt': 'Escrever arquivo', 'nl': 'Bestand schrijven', 'fr': 'Écrire un fichier', 'it': 'Scrivere file', 'es': 'Libro', 'pl': 'Plik zapisu', 'zh-cn': '文件写入', 'uk': 'Ім\'я файла'};
|
|
81
83
|
Blockly.Words['file_write_filename'] = {'en': 'file name', 'de': 'Dateiname', 'ru': 'Имя файла', 'pt': 'Nome do arquivo', 'nl': 'Bestandnaam', 'fr': 'Nom du fichier', 'it': 'Nome del file', 'es': 'Nombre del archivo', 'pl': 'Nazwa pliku', 'zh-cn': '文件名', 'uk': 'Ім\'я файла'};
|
|
82
84
|
Blockly.Words['file_write_data'] = {'en': 'data', 'de': 'Daten', 'ru': 'данные', 'pt': 'dados', 'nl': 'data', 'fr': 'données', 'it': 'dati', 'es': 'datos', 'pl': 'dane', 'zh-cn': '数据', 'uk': 'даних'};
|
|
@@ -84,14 +86,12 @@ Blockly.Words['file_write_tooltip'] = {'en': 'Write data into
|
|
|
84
86
|
Blockly.Words['file_write_help'] = {'en': 'writefile', 'de': 'writefile', 'ru': 'writefile', 'pt': 'writefile', 'nl': 'writefile', 'fr': 'writefile', 'it': 'writefile', 'es': 'writefile', 'pl': 'writefile', 'zh-cn': 'writefile', 'uk': 'writefile'};
|
|
85
87
|
|
|
86
88
|
// --- action file_read --------------------------------------------------
|
|
87
|
-
|
|
88
89
|
Blockly.Words['file_read'] = {'en': 'file read', 'de': 'Datei lesen', 'ru': 'Файл:', 'pt': 'Leitura do arquivo', 'nl': 'Bestand gelezen', 'fr': 'Fichier lu', 'it': 'Informazioni sul file', 'es': 'Archivo leído', 'pl': 'Odczyt pliku', 'zh-cn': '文件已读取', 'uk': 'Файл читати'};
|
|
89
90
|
Blockly.Words['file_read_filename'] = {'en': 'file name', 'de': 'Dateiname', 'ru': 'Имя файла', 'pt': 'Nome do arquivo', 'nl': 'Bestandnaam', 'fr': 'Nom du fichier', 'it': 'Nome del file', 'es': 'Nombre del archivo', 'pl': 'Nazwa pliku', 'zh-cn': '文件名', 'uk': 'Ім\'я файла'};
|
|
90
91
|
Blockly.Words['file_read_tooltip'] = {'en': 'Read file from file system', 'de': 'Datei aus Dateisystem lesen', 'ru': 'Читать файл из файловой системы', 'pt': 'Leia o arquivo do sistema de arquivos', 'nl': 'Bestand uit bestandssysteem lezen', 'fr': 'Lire le fichier depuis le système de fichiers', 'it': 'Leggi file dal file system', 'es': 'Lea el archivo del sistema de archivos', 'pl': 'Odczyt pliku z systemu plików', 'zh-cn': '从文件系统读取文件', 'uk': 'Читати файл з файлової системи'};
|
|
91
92
|
Blockly.Words['file_read_help'] = {'en': 'readfile', 'de': 'readfile', 'ru': 'readfile', 'pt': 'readfile', 'nl': 'readfile', 'fr': 'readfile', 'it': 'readfile', 'es': 'readfile', 'pl': 'readfile', 'zh-cn': 'readfile', 'uk': 'readfile'};
|
|
92
93
|
|
|
93
94
|
// --- action file_data --------------------------------------------------
|
|
94
|
-
|
|
95
95
|
Blockly.Words['file_data_data'] = {'en': 'data', 'de': 'Data', 'ru': 'data', 'pt': 'data', 'nl': 'data', 'fr': 'data', 'it': 'data', 'es': 'data', 'pl': 'data', 'zh-cn': 'data', 'uk': 'data'};
|
|
96
96
|
Blockly.Words['file_data_mimeType'] = {'en': 'mimeType', 'de': 'mimeType', 'ru': 'mimeType', 'pt': 'mimeType', 'nl': 'mimeType', 'fr': 'mimeType', 'it': 'mimeType', 'es': 'mimeType', 'pl': 'mimeType', 'zh-cn': 'mimeType', 'uk': 'mimeType'};
|
|
97
97
|
Blockly.Words['file_data_warning'] = {'en': 'This block must be used inside of file blocks', 'de': 'Dieser Block muss innerhalb von Dateiblöcken verwendet werden', 'ru': 'Этот блок должен быть использован внутри файловых блоков', 'pt': 'Este bloco deve ser usado dentro de blocos de arquivos', 'nl': 'Dit blok moet gebruikt worden binnen bestandsblokken', 'fr': 'Ce bloc doit être utilisé dans les blocs de fichiers', 'it': 'Questo blocco deve essere utilizzato all\'interno dei blocchi di file', 'es': 'Este bloque debe ser utilizado dentro de bloques de archivos', 'pl': 'Ten blok musi być użyty wewnątrz bloków plików', 'zh-cn': '此块必须在文件块内使用', 'uk': 'Цей блок необхідно використовувати всередині файлових блоків'};
|