diff --git a/src/public/google-blockly/own/blocks_action.js b/src/public/google-blockly/own/blocks_action.js index 55a0e63f..2c0fa37a 100644 --- a/src/public/google-blockly/own/blocks_action.js +++ b/src/public/google-blockly/own/blocks_action.js @@ -304,7 +304,7 @@ Blockly.Blocks['http_response'] = { this.setInputsInline(true); this.setOutput(true); - this.setColour(Blockly.Trigger.HUE); + this.setColour(Blockly.Action.HUE); this.setTooltip(Blockly.Translate('http_response_tooltip')); //this.setHelpUrl(getHelp('http_response')); }, @@ -494,7 +494,7 @@ Blockly.Blocks['file_data'] = { this.setInputsInline(true); this.setOutput(true); - this.setColour(Blockly.Trigger.HUE); + this.setColour(Blockly.Action.HUE); this.setTooltip(Blockly.Translate('file_data_tooltip')); //this.setHelpUrl(getHelp('file_data')); }, diff --git a/src/public/google-blockly/own/blocks_trigger.js b/src/public/google-blockly/own/blocks_trigger.js index d9264d73..db19937a 100644 --- a/src/public/google-blockly/own/blocks_trigger.js +++ b/src/public/google-blockly/own/blocks_trigger.js @@ -1274,6 +1274,74 @@ Blockly.JavaScript['onFile'] = function (block) { '});\n'; }; +// --- onFile_data ----------------------------------------------------------- +Blockly.Trigger.blocks['onFile_data'] = + '' + + ' ' + + ' ' + + ''; + +Blockly.Blocks['onFile_data'] = { + /** + * Block for conditionally returning a value from a procedure. + * @this Blockly.Block + */ + init: function() { + this.appendDummyInput() + .appendField('📁'); + + this.appendDummyInput('ATTR') + .appendField(new Blockly.FieldDropdown([ + [Blockly.Translate('onFile_data_data'), 'data'], + [Blockly.Translate('onFile_data_filename'), 'fileName'], + [Blockly.Translate('onFile_data_size'), 'size'], + [Blockly.Translate('onFile_data_mimeType'), 'mimeType'], + [Blockly.Translate('onFile_data_id'), 'id'], + ]), 'ATTR'); + + this.setInputsInline(true); + this.setOutput(true); + this.setColour(Blockly.Trigger.HUE); + this.setTooltip(Blockly.Translate('onFile_datatooltip')); + //this.setHelpUrl(getHelp('onFile_data')); + }, + /** + * Called whenever anything on the workspace changes. + * Add warning if this flow block is not nested inside a loop. + * @param {!Blockly.Events.Abstract} e Change event. + * @this Blockly.Block + */ + onchange: function(e) { + let legal = false; + // Is the block nested in a trigger? + let block = this; + do { + if (this.FUNCTION_TYPES.includes(block.type)) { + legal = true; + break; + } + block = block.getSurroundParent(); + } while (block); + + if (legal) { + this.setWarningText(null, this.id); + } else { + this.setWarningText(Blockly.Translate('onFile_data_warning'), this.id); + } + }, + /** + * List of block types that are functions and thus do not need warnings. + * To add a new function type add this to your code: + * Blockly.Blocks['procedures_ifreturn'].FUNCTION_TYPES.push('custom_func'); + */ + FUNCTION_TYPES: ['onFile'], +}; +Blockly.JavaScript['onFile_data'] = function(block) { + const attr = block.getFieldValue('ATTR'); + + return [attr, Blockly.JavaScript.ORDER_ATOMIC]; +}; + // --- onFile ----------------------------------------------------------- Blockly.Trigger.blocks['offFile'] = '' diff --git a/src/public/google-blockly/own/blocks_words.js b/src/public/google-blockly/own/blocks_words.js index 2cce1f1d..0fd2553f 100644 --- a/src/public/google-blockly/own/blocks_words.js +++ b/src/public/google-blockly/own/blocks_words.js @@ -569,6 +569,15 @@ Blockly.Words['onFile_withFile'] = {'en': 'With file data', Blockly.Words['onFile_tooltip'] = {'en': 'If some file changed or updated', 'de': 'Wenn sich eine Datei geändert oder aktualisiert hat', 'ru': 'Если какой-то файл изменился или обновился', 'pt': 'Se algum arquivo mudou ou atualizou', 'nl': 'Als een bestand is gewijzigd of bijgewerkt', 'fr': 'Si un fichier a été modifié ou mis à jour', 'it': 'Se qualche file è cambiato o aggiornato', 'es': 'Si algún archivo cambió o actualizó', 'pl': 'Jeśli jakiś plik został zmieniony lub zaktualizowany', 'zh-cn': '如果某些文件更改或更新', 'uk': 'Якщо якийсь файл змінено або оновлено'}; Blockly.Words['onFile_help'] = {'en': 'onFile', 'de': 'onFile', 'ru': 'onFile', 'pt': 'onFile', 'nl': 'onFile', 'fr': 'onFile', 'it': 'onFile', 'es': 'onFile', 'pl': 'onFile', 'zh-cn': 'onFile', 'uk': 'onFile'}; +// --- trigger onFile_data -------------------------------------------------- +Blockly.Words['onFile_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'}; +Blockly.Words['onFile_data_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': 'Ім\'я файла'}; +Blockly.Words['onFile_data_size'] = {'en': 'file size', 'de': 'Dateigröße', 'ru': 'Размер файла', 'pt': 'Tamanho do arquivo', 'nl': 'Bestandsgrootte', 'fr': 'Taille du fichier', 'it': 'Dimensione del file', 'es': 'Tamaño del archivo', 'pl': 'Rozmiar pliku', 'zh-cn': '文件大小', 'uk': 'Розмір файлу'}; +Blockly.Words['onFile_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'}; +Blockly.Words['onFile_data_id'] = {'en': 'id', 'de': 'id', 'ru': 'id', 'pt': 'id', 'nl': 'id', 'fr': 'id', 'it': 'id', 'es': 'id', 'pl': 'id', 'zh-cn': 'id', 'uk': 'id'}; +Blockly.Words['onFile_data_warning'] = {'en': 'This block must be used inside of file trigger blocks', 'de': 'Dieser Block muss innerhalb von Datei-Trigger-Blöcken verwendet werden', 'ru': 'Этот блок должен быть использован внутри файловых триггерных блоков', 'pt': 'Este bloco deve ser usado dentro de blocos de gatilho de arquivo', 'nl': 'Dit blok moet worden gebruikt binnen bestand trigger blokken', 'fr': 'Ce bloc doit être utilisé à l\'intérieur des blocs de déclenchement de fichier', 'it': 'Questo blocco deve essere utilizzato all\'interno dei blocchi di file trigger', 'es': 'Este bloque debe ser utilizado dentro de bloques de activación de archivos', 'pl': 'Ten blok musi być użyty wewnątrz bloków wyzwalających plik', 'zh-cn': '此块必须在文件触发块内使用', 'uk': 'Цей блок повинен бути використаний всередині блоків запуску файлів'}; +Blockly.Words['onFile_datatooltip'] = {'en': 'Information about updated file', 'de': 'Informationen über die aktualisierte Datei', 'ru': 'Информация об обновленном файле', 'pt': 'InformaçÃμes sobre o arquivo atualizado', 'nl': 'Informatie over bijgewerkt bestand', 'fr': 'Informations sur le fichier mis à jour', 'it': 'Informazioni sul file aggiornato', 'es': 'Información sobre el archivo actualizado', 'pl': 'Informacje o zaktualizowanym pliku', 'zh-cn': '关于更新文件的信息', 'uk': 'Інформація про оновлений файл'}; + // --- trigger offFile -------------------------------------------------- Blockly.Words['offFile'] = {'en': 'Cancel file event', 'de': 'Dateiereignis entfernen', 'ru': 'Отменить событие файла', 'pt': 'Cancelar evento de arquivo', 'nl': 'Bestandsgebeurtenis annuleren', 'fr': 'Annuler l\'événement de fichier', 'it': 'Annulla evento file', 'es': 'Cancelar evento de archivo', 'pl': 'Anuluj zdarzenie pliku', 'zh-cn': '取消文件事件', 'uk': 'Скасувати подію файлу'}; Blockly.Words['offFile_tooltip'] = {'en': 'Cancel subscription on file change', 'de': 'Abonnement bei Dateiänderung kündigen', 'ru': 'Отменить подписку на изменение файла', 'pt': 'Cancelar assinatura na alteração do arquivo', 'nl': 'Abonnement opzeggen bij bestandswijziging', 'fr': 'Annuler l\'abonnement en cas de changement de fichier', 'it': 'Annulla l\'abbonamento in caso di modifica del file', 'es': 'Cancelar suscripción en cambio de archivo', 'pl': 'Anuluj subskrypcję po zmianie pliku', 'zh-cn': '取消订阅文件更改', 'uk': 'Скасувати підписку на зміну файлу'};