From 4ce4d495fc61e52246cd61d7cd6b1fd53931222a Mon Sep 17 00:00:00 2001 From: stefan-hoehn Date: Tue, 23 Jul 2024 22:44:43 +0200 Subject: [PATCH] [blockly] Add new sophisticated notification blocks (#2672) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Note that the new blocks can completely replace the old ones (though they will not be automatically converted but it must be done manually). --------- Also-by: Florian Hotze Signed-off-by: Stefan Höhn --- .../blockly/blocks-notifications.js | 428 +++++++++++++++++- .../config/controls/blockly-editor.vue | 61 ++- 2 files changed, 467 insertions(+), 22 deletions(-) diff --git a/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-notifications.js b/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-notifications.js index b602da5f6f..62508a460b 100644 --- a/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-notifications.js +++ b/bundles/org.openhab.ui/web/src/assets/definitions/blockly/blocks-notifications.js @@ -5,9 +5,11 @@ import Blockly from 'blockly' import { javascriptGenerator } from 'blockly/javascript.js' +import { blockGetCheckedInputType } from './utils.js' -// TODO: Add options to set icon and level (argument order should be the same as for broadcast notification etc.) export default function defineOHBlocks_Notifications (f7, isGraalJs) { + const unavailMsg = 'Extended notification blocks aren\'t supported in "application/javascript;version=ECMAScript-5.1"' + Blockly.Blocks['oh_sendNotification'] = { init: function () { this.appendValueInput('message') @@ -18,7 +20,7 @@ export default function defineOHBlocks_Notifications (f7, isGraalJs) { this.setNextStatement(true, null) this.setInputsInline(false) this.setColour(0) - this.setTooltip('Send a notification message to a specific openhab user (requires openHAB Cloud Connector)') + this.setTooltip('Deprecated: send a notification message to a specific openhab user (requires openHAB Cloud Connector)') this.setHelpUrl('https://www.openhab.org/docs/configuration/blockly/rules-blockly-notifications.html#send-notification-to-specific-cloud-email-user') } } @@ -27,7 +29,7 @@ export default function defineOHBlocks_Notifications (f7, isGraalJs) { let email = javascriptGenerator.valueToCode(block, 'email', javascriptGenerator.ORDER_ATOMIC) let message = javascriptGenerator.valueToCode(block, 'message', javascriptGenerator.ORDER_ATOMIC) if (isGraalJs) { - return `actions.NotificationAction.sendNotification(${email}, ${message});\n` + return `actions.notificationBuilder(${message}).addUserId(${email}).send();\n` } else { const notifications = addNotificationAction() return `${notifications}.sendNotification(${email}, ${message});\n` @@ -48,7 +50,7 @@ export default function defineOHBlocks_Notifications (f7, isGraalJs) { this.setNextStatement(true, null) this.setInputsInline(false) this.setColour(0) - this.setTooltip('send a notification to all clients. Provide icon name without prefix. (requires openHAB Cloud Connector)') + this.setTooltip('Deprecated: send a notification to all clients. Provide icon name without prefix. (requires openHAB Cloud Connector)') this.setHelpUrl('https://www.openhab.org/docs/configuration/blockly/rules-blockly-notifications.html#send-notification-to-all-devices-and-users') } } @@ -58,7 +60,7 @@ export default function defineOHBlocks_Notifications (f7, isGraalJs) { let icon = javascriptGenerator.valueToCode(block, 'icon', javascriptGenerator.ORDER_ATOMIC) let severity = block.getFieldValue('severity') if (isGraalJs) { - return `actions.NotificationAction.sendBroadcastNotification(${message}, ${icon}, '${severity}');\n` + return `actions.notificationBuilder(${message}).withIcon(${icon}).withTag('${severity}').send();\n` } else { const notifications = addNotificationAction() return `${notifications}.sendBroadcastNotification(${message}, ${icon}, '${severity}');\n` @@ -79,7 +81,7 @@ export default function defineOHBlocks_Notifications (f7, isGraalJs) { this.setNextStatement(true, null) this.setInputsInline(false) this.setColour(0) - this.setTooltip('Sends a notification to the cloud log only, not to any device (requires openHAB Cloud Connector)') + this.setTooltip('Deprecated: sends a notification to the cloud log only, not to any device (requires openHAB Cloud Connector)') this.setHelpUrl('https://www.openhab.org/docs/configuration/blockly/rules-blockly-notifications.html#send-notification-to-log-only') } } @@ -89,12 +91,424 @@ export default function defineOHBlocks_Notifications (f7, isGraalJs) { let icon = javascriptGenerator.valueToCode(block, 'icon', javascriptGenerator.ORDER_ATOMIC) let severity = block.getFieldValue('severity') if (isGraalJs) { - return `actions.NotificationAction.sendLogNotification(${message}, ${icon}, '${severity}');\n` + return `actions.notificationBuilder(${message}).withIcon(${icon}).withTag('${severity}').send();\n` } else { const notifications = addNotificationAction() return `${notifications}.sendLogNotification(${message}, ${icon}, '${severity}');\n` } } + + const usersImage = 'data:image/png;base64,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' + const iconImage = 'data:image/png;base64,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' + const tagImage = 'data:image/png;base64,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' + const headerTitleImage = 'data:image/png;base64,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' + const referenceImage = 'data:image/png;base64,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' + const actionImage = 'data:image/png;base64,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' + const actionButtonImage = 'data:image/png;base64,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' + const actionButton1Image = 'data:image/png;base64,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' + const actionButton2Image = 'data:image/png;base64,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' + const actionButton3Image = 'data:image/png;base64,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' + const mediaImage = 'data:image/png;base64,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' + + Blockly.Blocks['oh_sendCloudNotification'] = { + init: function () { + const userImageField = new Blockly.FieldImage(usersImage, 15, 15, undefined, this.onClickUser) + userImageField.setTooltip('Comma separated users. If not provided it results into a broadcast') + const iconImageField = new Blockly.FieldImage(iconImage, 15, 15, undefined, this.onClickIcon) + iconImageField.setTooltip('Icon name') + const tagImageField = new Blockly.FieldImage(tagImage, 15, 15, undefined, this.onClickTag) + tagImageField.setTooltip('Tag') + const headerTitleImageField = new Blockly.FieldImage(headerTitleImage, 15, 15, undefined, this.onClickHeaderTitle) + headerTitleImageField.setTooltip('Header title of Notification') + const referenceImageField = new Blockly.FieldImage(referenceImage, 15, 15, undefined, this.onClickReference) + referenceImageField.setTooltip('Reference of the message') + const actionImageField = new Blockly.FieldImage(actionImage, 15, 15, undefined, this.onClickAction) + actionImageField.setTooltip('Action command to be sent') + const actionButton1ImageField = new Blockly.FieldImage(actionButton1Image, 15, 15, undefined, this.onClickActionButton1) + actionButton1ImageField.setTooltip('Action Button 1 command and action') + const actionButton2ImageField = new Blockly.FieldImage(actionButton2Image, 15, 15, undefined, this.onClickActionButton2) + actionButton2ImageField.setTooltip('Action Button 2 command and action') + const actionButton3ImageField = new Blockly.FieldImage(actionButton3Image, 15, 15, undefined, this.onClickActionButton3) + actionButton3ImageField.setTooltip('Action Button 3 command and action') + const mediaImageField = new Blockly.FieldImage(mediaImage, 15, 15, undefined, this.onClickMedia) + mediaImageField.setTooltip('A Media URL that can be clicked and can be accessed publicly to be shown with the notification') + + this.appendValueInput('message') + .setCheck('String') + .appendField(userImageField, 'imgUsers') + .appendField(headerTitleImageField, 'headerTitleIcon') + .appendField(iconImageField, 'imgIcon') + .appendField(tagImageField, 'tagIcon') + .appendField(referenceImageField, 'tagIcon') + .appendField(mediaImageField, 'mediaIcon') + .appendField(actionImageField, 'tagIcon') + .appendField(actionButton1ImageField, 'actionButton1Icon') + .appendField(actionButton2ImageField, 'actionButton2Icon') + .appendField(actionButton3ImageField, 'actionButton3Icon') + .appendField(new Blockly.FieldDropdown([['send notification', 'push'], ['send log', 'log']]), 'type') + + this.updateShape(this.hasUser, true, this.hasIconInfo, this.hasTag, this.hasHeaderTitle, this.hasReferenceId, this.hasAction, this.hasActionButton1, this.hasMedia) + + this.setPreviousStatement(true, null) + this.setNextStatement(true, null) + this.setInputsInline(false) + this.setColour(0) + this.setTooltip('Sends a notification to the cloud log only, not to any device (requires openHAB Cloud Connector)') + this.setHelpUrl('https://www.openhab.org/docs/configuration/blockly/rules-blockly-notifications.html#sendCloudNotification') + }, + updateShape: function (hasUser, addTextBlock, hasIconInfo, hasTag, hasHeaderTitle, hasReferenceId, hasAction, hasActionButton1, hasActionButton2, hasActionButton3, hasMedia) { + this.hasUser = hasUser + this.hasIconInfo = hasIconInfo + this.hasTag = hasTag + this.hasHeaderTitle = hasHeaderTitle + this.hasReferenceId = hasReferenceId + this.hasMedia = hasMedia + this.hasAction = hasAction + this.hasActionButton1 = hasActionButton1 + this.hasActionButton2 = hasActionButton2 + this.hasActionButton3 = hasActionButton3 + + const blockSequence = ['usersInput', 'headerTitle', 'icon', 'tag', 'reference', 'media', 'action', 'actionButton1', 'actionButton2', 'actionButton3'] + + /** + * Adds a "shadow" text input to the parent block + * + * @param {*} parentConnection + * @param {string} tooltip + * @param {String} [blockType=text| + */ + function addBlockInput (parentConnection, tooltip, blockType = 'text') { + const textUsersBlock = this.workspace.newBlock(blockType) + textUsersBlock.setTooltip(tooltip) + textUsersBlock.initSvg() + textUsersBlock.render() + parentConnection.connect(textUsersBlock.outputConnection) + } + + /** + * Removes the block "shadow" text input from the block + * + * @param {Input} parentConnection + */ + function removeTextInput (parentConnection) { + const targetBlock = parentConnection.targetBlock() + if (targetBlock) { + targetBlock.unplug(true) + targetBlock.dispose(true) + } + } + + /** + * Show or hide this particular block + * + * @param {boolean} toggleOn show (true) / hide (false) block + * @param {string} blockName name of the block to be toggled + * @param {string} label label for the preceding label block + * @param {string} tooltip tooltip for the input block + * @param {string} [blockTypeCheck=String] checks the input by this block type + * @param {string} [shadowBlock=text] shadow block + */ + function toogleBlock (toggleOn, blockName, label, tooltip, blockTypeCheck = 'String', shadowBlock = 'text') { + if (toggleOn) { + if (!this.getInput(blockName)) { + const usersInput = this.appendValueInput(blockName) + .setCheck(blockTypeCheck) + .appendField(label) + + let startIndex = blockSequence.indexOf(blockName) + 1 + let blockAfter + // start from our block, iterate through all possible blocks and insert before the first actually existing one + for (let blockIndex = startIndex; blockIndex < blockSequence.length; blockIndex++) { + if (this.getInput(blockSequence[blockIndex])) { + blockAfter = blockSequence[blockIndex] + break + } + } + + if (blockAfter) { + this.moveInputBefore(blockName, blockAfter) + } + if (addTextBlock) { + const parentConnection = usersInput.connection + addBlockInput.call(this, parentConnection, tooltip, shadowBlock) + } + } + } else { + if (this.getInput(blockName)) { + const parentConnection = this.getInput(blockName).connection + removeTextInput(parentConnection) + this.removeInput(blockName) + } + } + } + + toogleBlock.call(this, hasUser, 'usersInput', 'to Users ', 'Add comma separated users. If not provided it results into a broadcast to everyone registered in the cloud', 'String') + toogleBlock.call(this, hasHeaderTitle, 'headerTitle', 'with Header Title ', 'Provide title', 'String') + toogleBlock.call(this, hasIconInfo, 'icon', 'with Icon ', 'Provide icon name', 'String') + toogleBlock.call(this, hasTag, 'tag', 'with Tag ', 'Provide tag', 'String') + toogleBlock.call(this, hasReferenceId, 'reference', 'with Reference ID ', 'Provide message reference ID', 'String') + toogleBlock.call(this, hasMedia, 'media', 'with Media URL ', 'Provide a public Media URL that should be shown as part of the notification', 'String') + toogleBlock.call(this, hasAction, 'action', 'with On-Click Action ', 'Provide cloud-notification-action', ['oh_notificationAction', 'String'], 'oh_cloudNotification_commandAction') + toogleBlock.call(this, hasActionButton1, 'actionButton1', 'with Action Button 1', 'Action Button 1: Title = cloud-notification-action', ['oh_notificationActionButton', 'String'], 'oh_cloudNotificationButton') + toogleBlock.call(this, hasActionButton2, 'actionButton2', 'with Action Button 2', 'Action Button 2: Title = cloud-notification-action', ['oh_notificationActionButton', 'String'], 'oh_cloudNotificationButton') + toogleBlock.call(this, hasActionButton3, 'actionButton3', 'with Action Button 3', 'Action Button 3: Title = cloud-notification-action', ['oh_notificationActionButton', 'String'], 'oh_cloudNotificationButton') + }, + onClickUser () { + let block = this.getSourceBlock() + block.hasUser = !block.hasUser + block.updateShape(block.hasUser, true, block.hasIconInfo, block.hasTag, block.hasHeaderTitle, block.hasReferenceId, block.hasAction, block.hasActionButton1, block.hasActionButton2, block.hasActionButton3, block.hasMedia) + }, + onClickIcon () { + let block = this.getSourceBlock() + block.hasIconInfo = !block.hasIconInfo + block.updateShape(block.hasUser, true, block.hasIconInfo, block.hasTag, block.hasHeaderTitle, block.hasReferenceId, block.hasAction, block.hasActionButton1, block.hasActionButton2, block.hasActionButton3, block.hasMedia) + }, + onClickTag () { + let block = this.getSourceBlock() + block.hasTag = !block.hasTag + block.updateShape(block.hasUser, true, block.hasIconInfo, block.hasTag, block.hasHeaderTitle, block.hasReferenceId, block.hasAction, block.hasActionButton1, block.hasActionButton2, block.hasActionButton3, block.hasMedia) + }, + onClickHeaderTitle () { + let block = this.getSourceBlock() + block.hasHeaderTitle = !block.hasHeaderTitle + block.updateShape(block.hasUser, true, block.hasIconInfo, block.hasTag, block.hasHeaderTitle, block.hasReferenceId, block.hasAction, block.hasActionButton1, block.hasActionButton2, block.hasActionButton3, block.hasMedia) + }, + onClickReference () { + let block = this.getSourceBlock() + block.hasReferenceId = !block.hasReferenceId + block.updateShape(block.hasUser, true, block.hasIconInfo, block.hasTag, block.hasHeaderTitle, block.hasReferenceId, block.hasAction, block.hasActionButton1, block.hasActionButton2, block.hasActionButton3, block.hasMedia) + }, + onClickAction () { + let block = this.getSourceBlock() + block.hasAction = !block.hasAction + block.updateShape(block.hasUser, true, block.hasIconInfo, block.hasTag, block.hasHeaderTitle, block.hasReferenceId, block.hasAction, block.hasActionButton1, block.hasActionButton2, block.hasActionButton3, block.hasMedia) + }, + onClickActionButton1 () { + let block = this.getSourceBlock() + block.hasActionButton1 = !block.hasActionButton1 + block.updateShape(block.hasUser, true, block.hasIconInfo, block.hasTag, block.hasHeaderTitle, block.hasReferenceId, block.hasAction, block.hasActionButton1, block.hasActionButton2, block.hasActionButton3, block.hasMedia) + }, + onClickActionButton2 () { + let block = this.getSourceBlock() + block.hasActionButton2 = !block.hasActionButton2 + block.updateShape(block.hasUser, true, block.hasIconInfo, block.hasTag, block.hasHeaderTitle, block.hasReferenceId, block.hasAction, block.hasActionButton1, block.hasActionButton2, block.hasActionButton3, block.hasMedia) + }, + onClickActionButton3 () { + let block = this.getSourceBlock() + block.hasActionButton3 = !block.hasActionButton3 + block.updateShape(block.hasUser, true, block.hasIconInfo, block.hasTag, block.hasHeaderTitle, block.hasReferenceId, block.hasAction, block.hasActionButton1, block.hasActionButton2, block.hasActionButton3, block.hasMedia) + }, + onClickMedia () { + let block = this.getSourceBlock() + block.hasMedia = !block.hasMedia + block.updateShape(block.hasUser, true, block.hasIconInfo, block.hasTag, block.hasHeaderTitle, block.hasReferenceId, block.hasAction, block.hasActionButton1, block.hasActionButton2, block.hasActionButton3, block.hasMedia) + }, + mutationToDom: function () { + let container = Blockly.utils.xml.createElement('mutation') + container.setAttribute('hasUser', this.hasUser) + container.setAttribute('hasIconInfo', this.hasIconInfo) + container.setAttribute('hasTag', this.hasTag) + container.setAttribute('hasHeaderTitle', this.hasHeaderTitle) + container.setAttribute('hasReferenceId', this.hasReferenceId) + container.setAttribute('hasMedia', this.hasMedia) + container.setAttribute('hasAction', this.hasAction) + container.setAttribute('hasActionButton1', this.hasActionButton1) + container.setAttribute('hasActionButton2', this.hasActionButton2) + container.setAttribute('hasActionButton3', this.hasActionButton3) + return container + }, + domToMutation: function (xmlElement) { + let hasUser = xmlElement.getAttribute('hasUser') === 'true' + let hasIconInfo = xmlElement.getAttribute('hasIconInfo') === 'true' + let hasTag = xmlElement.getAttribute('hasTag') === 'true' + let hasHeaderTitle = xmlElement.getAttribute('hasHeaderTitle') === 'true' + let hasReferenceId = xmlElement.getAttribute('hasReferenceId') === 'true' + let hasMedia = xmlElement.getAttribute('hasMedia') === 'true' + let hasAction = xmlElement.getAttribute('hasAction') === 'true' + let hasActionButton1 = xmlElement.getAttribute('hasActionButton1') === 'true' + let hasActionButton2 = xmlElement.getAttribute('hasActionButton2') === 'true' + let hasActionButton3 = xmlElement.getAttribute('hasActionButton3') === 'true' + this.updateShape(hasUser, false, hasIconInfo, hasTag, hasHeaderTitle, hasReferenceId, hasAction, hasActionButton1, hasActionButton2, hasActionButton3, hasMedia) + } + } + + javascriptGenerator.forBlock['oh_sendCloudNotification'] = function (block) { + const message = javascriptGenerator.valueToCode(block, 'message', javascriptGenerator.ORDER_ATOMIC) + const type = block.getFieldValue('type') + const icon = javascriptGenerator.valueToCode(block, 'icon', javascriptGenerator.ORDER_ATOMIC) + const tag = javascriptGenerator.valueToCode(block, 'tag', javascriptGenerator.ORDER_ATOMIC) + const headerTitle = javascriptGenerator.valueToCode(block, 'headerTitle', javascriptGenerator.ORDER_ATOMIC) + const reference = javascriptGenerator.valueToCode(block, 'reference', javascriptGenerator.ORDER_ATOMIC) + const media = javascriptGenerator.valueToCode(block, 'media', javascriptGenerator.ORDER_ATOMIC) + const action = javascriptGenerator.valueToCode(block, 'action', javascriptGenerator.ORDER_ATOMIC) + const actionType = (action !== '') ? blockGetCheckedInputType(block, 'action') : undefined + const actionButton1 = javascriptGenerator.valueToCode(block, 'actionButton1', javascriptGenerator.ORDER_ATOMIC) + const actionButton1Type = (actionButton1 !== '') ? blockGetCheckedInputType(block, 'actionButton1') : undefined + const actionButton2 = javascriptGenerator.valueToCode(block, 'actionButton2', javascriptGenerator.ORDER_ATOMIC) + const actionButton2Type = (actionButton2 !== '') ? blockGetCheckedInputType(block, 'actionButton2') : undefined + const actionButton3 = javascriptGenerator.valueToCode(block, 'actionButton3', javascriptGenerator.ORDER_ATOMIC) + const actionButton3Type = (actionButton3 !== '') ? blockGetCheckedInputType(block, 'actionButton3') : undefined + const users = javascriptGenerator.valueToCode(block, 'usersInput', javascriptGenerator.ORDER_ATOMIC) + + function getActionButtonCode (titleAndAction, buttonActionType) { + let actionButtonCode + if (buttonActionType === 'String') { + titleAndAction = titleAndAction.replace(/'/g, '').split('=') + if (titleAndAction.length === 2) { + let title = titleAndAction[0] + let buttonAction = titleAndAction[1].replace(/ /g, '') + actionButtonCode = `.addActionButton('${title}','${buttonAction}')` + } + } else { + actionButtonCode = titleAndAction + } + return actionButtonCode + } + + const iconCode = (icon === '') ? '' : `.withIcon(${icon})` + const tagCode = (tag === '') ? '' : `.withTag(${tag})` + const headerTitleCode = (headerTitle === '') ? '' : `.withTitle(${headerTitle})` + const referenceCode = (reference === '') ? '' : `.withReferenceId(${reference})` + const mediaCode = (media === '') ? '' : `.withMediaAttachmentUrl(${media})` + const actionCode = (action === '') ? '' : (actionType === 'String') ? `.withOnClickAction(${action})` : `.withOnClickAction('${action}')` + const usersCode = (users === '') ? '' : `.addUserId(...${users}.split(','))` + + const actionButton1Code = getActionButtonCode(actionButton1, actionButton1Type) + const actionButton2Code = getActionButtonCode(actionButton2, actionButton2Type) + const actionButton3Code = getActionButtonCode(actionButton3, actionButton3Type) + const logOnlyCode = (type === 'push') ? '' : '.logOnly()' + + if (isGraalJs) { + return `actions.notificationBuilder(${message})${usersCode}${headerTitleCode}${iconCode}${tagCode}${referenceCode}${mediaCode}${actionCode}${actionButton1Code}${actionButton2Code}${actionButton3Code}${logOnlyCode}.send()\n` + } else { + throw new Error(unavailMsg) + } + } + + Blockly.Blocks['oh_cloudNotificationButton'] = { + init: function () { + const actionButtonImageField = new Blockly.FieldImage(actionButtonImage, 15, 15, undefined) + this.appendValueInput('label') + .appendField(actionButtonImageField, 'actionButtonHint') + .appendField('label') + .setCheck('String') + this.appendValueInput('action') + .appendField('action') + .setCheck(['String', 'oh_notificationAction']) + this.setInputsInline(false) + this.setColour(0) + this.setTooltip('Notification Button with label and action') + this.setOutput(true, 'oh_notificationActionButton') + + this.setHelpUrl('https://www.openhab.org/docs/configuration/blockly/rules-blockly-notifications.html#cloudNotificationButton') + } + } + + javascriptGenerator.forBlock['oh_cloudNotificationButton'] = function (block) { + let label = javascriptGenerator.valueToCode(block, 'label', javascriptGenerator.ORDER_ATOMIC).replace(/'/g, '') + let action = javascriptGenerator.valueToCode(block, 'action', javascriptGenerator.ORDER_ATOMIC).replace(/'/g, '') + if (isGraalJs) { + return [`.addActionButton('${label}','${action}')`, javascriptGenerator.ORDER_ATOMIC] + } else { + throw new Error(unavailMsg) + } + } + + Blockly.Blocks['oh_cloudNotification_commandAction'] = { + init: function () { + const actionImageField = new Blockly.FieldImage(actionImage, 15, 15, undefined) + this.appendValueInput('command') + .appendField(actionImageField, 'actionHint') + .appendField('send command ') + .setCheck('String') + this.appendValueInput('itemName') + .appendField('to item ') + .setCheck('oh_item') + this.setInputsInline(false) + this.setColour(0) + this.setTooltip('An action that sends a command to an item, like ON to KitchenLights') + this.setOutput(true, 'oh_notificationAction') + + this.setHelpUrl('https://www.openhab.org/docs/configuration/blockly/rules-blockly-notifications.html#command-action') + } + } + + javascriptGenerator.forBlock['oh_cloudNotification_commandAction'] = function (block) { + let command = javascriptGenerator.valueToCode(block, 'command', javascriptGenerator.ORDER_ATOMIC).replace(/'/g, '') + let itemName = javascriptGenerator.valueToCode(block, 'itemName', javascriptGenerator.ORDER_ATOMIC).replace(/'/g, '') + if (isGraalJs) { + return [`command:${itemName}:${command}`, javascriptGenerator.ORDER_ATOMIC] + } else { + throw new Error(unavailMsg) + } + } + + Blockly.Blocks['oh_cloudNotification_uiAction'] = { + init: function () { + const actionImageField = new Blockly.FieldImage(actionImage, 15, 15, undefined) + this.appendDummyInput() + .appendField(actionImageField, 'actionHint') + .appendField('Call ') + .appendField(new Blockly.FieldDropdown([['Basic UI', 'ui:/basicui/app?'], ['UI absolute Path', 'ui:'], ['Main UI path', 'ui:navigate:'], ['Main UI popup', 'ui:popup:'], ['URL', '']]), 'command') + this.appendValueInput('path') + .appendField('with ') + .setCheck('String') + this.setInputsInline(false) + this.setColour(0) + + this.setTooltip(() => { + const commandType = this.getFieldValue('command') + const TIP = { + 'ui:/basicui/app?': 'Provide valid sitemap parameters in the form w=nnnn&sitemap=mysitemap', + 'ui:': 'Provide the path that follows your openhab domain name, e.g /some/absolute/path like /page/rollershutter_firstfloor', + 'ui:navigate:': '', + 'ui:popup:': 'Provide the name of a page to be shown as a popup, e.g. page_phones', + '': 'Provide a valid absolute URL like https://openhab.org' + } + return TIP[commandType] + }) + this.setOutput(true, 'oh_notificationAction') + + this.setHelpUrl('https://www.openhab.org/docs/configuration/blockly/rules-blockly-notifications.html#ui-action') + } + } + + javascriptGenerator.forBlock['oh_cloudNotification_uiAction'] = function (block) { + const command = block.getFieldValue('command') + let path = javascriptGenerator.valueToCode(block, 'path', javascriptGenerator.ORDER_ATOMIC).replace(/'/g, '') + if (isGraalJs) { + return [`${command}${path}`, javascriptGenerator.ORDER_ATOMIC] + } else { + throw new Error(unavailMsg) + } + } + + Blockly.Blocks['oh_hideCloudNotification'] = { + init: function () { + this.appendValueInput('reference') + .appendField('hide notification by reference ID') + this.appendValueInput('tag') + .appendField('or tag ') + this.setPreviousStatement(true, null) + this.setNextStatement(true, null) + this.setInputsInline(false) + this.setColour(0) + this.setTooltip('Hides the notification with the given reference ID or tag') + this.setHelpUrl('https://www.openhab.org/docs/configuration/blockly/rules-blockly-notifications.html#hide-notification') + } + } + + javascriptGenerator.forBlock['oh_hideCloudNotification'] = function (block) { + const reference = javascriptGenerator.valueToCode(block, 'reference', javascriptGenerator.ORDER_ATOMIC) + const tag = javascriptGenerator.valueToCode(block, 'tag', javascriptGenerator.ORDER_ATOMIC) + const tagCode = (tag === '') ? '' : `.withTag(${tag})` + const referenceCode = (reference === '') ? '' : `.withReferenceId(${reference})` + if (isGraalJs) { + return `actions.notificationBuilder("hide notification")${referenceCode}${tagCode}.hide().send();\n` + } else { + throw new Error(unavailMsg) + } + } } function addNotificationAction () { diff --git a/bundles/org.openhab.ui/web/src/components/config/controls/blockly-editor.vue b/bundles/org.openhab.ui/web/src/components/config/controls/blockly-editor.vue index 6a2d0e84c5..a7da4b8f82 100644 --- a/bundles/org.openhab.ui/web/src/components/config/controls/blockly-editor.vue +++ b/bundles/org.openhab.ui/web/src/components/config/controls/blockly-editor.vue @@ -853,39 +853,70 @@ helpUrl="configuration/blockly/rules-blockly-notifications.html" text="Help" callbackKey="ohBlocklyHelp" /> - - + + - test@example.org + message - + + + - message + label + + + + + action - - + + - message + label - + + + + + command + + + + + + + + + + - temperature_cold + command + + + - - + + - message + path + + + + + + + reference id - + - temperature_hot + tag