diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/common/menu.js b/packages/node_modules/@node-red/editor-client/src/js/ui/common/menu.js index 8d1dcde18..e656cdf65 100644 --- a/packages/node_modules/@node-red/editor-client/src/js/ui/common/menu.js +++ b/packages/node_modules/@node-red/editor-client/src/js/ui/common/menu.js @@ -208,7 +208,7 @@ RED.menu = (function() { event.stopPropagation(); }) } - if (opt.options) { + if (opt.options && opt.options.length) { item.addClass("red-ui-menu-dropdown-submenu"+(opt.direction!=='right'?" pull-left":"")); var submenu = $('').appendTo(item); var hasIcons = false diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/contextMenu.js b/packages/node_modules/@node-red/editor-client/src/js/ui/contextMenu.js index 7369af721..6ed7ffe90 100644 --- a/packages/node_modules/@node-red/editor-client/src/js/ui/contextMenu.js +++ b/packages/node_modules/@node-red/editor-client/src/js/ui/contextMenu.js @@ -147,12 +147,6 @@ RED.contextMenu = (function () { if (hasSelection && canEdit) { const nodeOptions = [] - if (!hasMultipleSelection && !isGroup) { - nodeOptions.push( - { onselect: 'core:show-node-help', label: RED._('menu.label.showNodeHelp') }, - null - ) - } nodeOptions.push( { onselect: 'core:enable-selected-nodes', label: RED._('menu.label.enableSelectedNodes'), disabled: !hasDisabledNode }, { onselect: 'core:disable-selected-nodes', label: RED._('menu.label.disableSelectedNodes'), disabled: !hasEnabledNode }, @@ -160,6 +154,28 @@ RED.contextMenu = (function () { { onselect: 'core:show-selected-node-labels', label: RED._('menu.label.showSelectedNodeLabels'), disabled: !hasUnlabeledNode }, { onselect: 'core:hide-selected-node-labels', label: RED._('menu.label.hideSelectedNodeLabels'), disabled: !hasLabeledNode } ) + if (!hasMultipleSelection && !isGroup) { + nodeOptions.unshift( + { onselect: 'core:show-node-help', label: RED._('menu.label.showNodeHelp') }, + null + ) + + // Add node actions to the context menu + let nodeContextMenu = selection.nodes[0]._def?.contextMenu || []; + if (typeof nodeContextMenu === "function") { + nodeContextMenu = nodeContextMenu.call(selection.nodes[0]); + } + if (!Array.isArray(nodeContextMenu)) { + // Ensure the context menu is an array + nodeContextMenu = []; + } + if (nodeContextMenu.length) { + nodeOptions.push( + null, + ...nodeContextMenu + ); + } + } menuItems.push({ label: RED._('sidebar.info.node'), options: nodeOptions diff --git a/packages/node_modules/@node-red/editor-client/src/sass/dropdownMenu.scss b/packages/node_modules/@node-red/editor-client/src/sass/dropdownMenu.scss index 87ab5518d..d09345af2 100644 --- a/packages/node_modules/@node-red/editor-client/src/sass/dropdownMenu.scss +++ b/packages/node_modules/@node-red/editor-client/src/sass/dropdownMenu.scss @@ -63,7 +63,7 @@ } &.red-ui-menu-dropdown-noicons > li > a, &.red-ui-menu-dropdown-noicons > li > a:focus { - padding: 4px 12px 4px 12px; + padding: 4px 20px 4px 12px; } &.red-ui-menu-dropdown-submenus.red-ui-menu-dropdown-direction-right > li > a,