From 1fa8f30550e18d6ddb5fe95c9d03691329349c0e Mon Sep 17 00:00:00 2001 From: Nick O'Leary Date: Mon, 5 Sep 2022 21:08:36 +0100 Subject: [PATCH] Support uri fragments for nodes and groups including edit support --- .../@node-red/editor-client/src/js/red.js | 31 +++++++++++++++++-- .../@node-red/editor-client/src/js/ui/view.js | 4 ++- .../editor-client/src/js/ui/workspaces.js | 2 +- 3 files changed, 33 insertions(+), 4 deletions(-) diff --git a/packages/node_modules/@node-red/editor-client/src/js/red.js b/packages/node_modules/@node-red/editor-client/src/js/red.js index 55446418b..129c46799 100644 --- a/packages/node_modules/@node-red/editor-client/src/js/red.js +++ b/packages/node_modules/@node-red/editor-client/src/js/red.js @@ -249,8 +249,35 @@ var RED = (function() { RED.nodes.import(nodes.flows); RED.nodes.dirty(false); RED.view.redraw(true); - if (/^#flow\/.+$/.test(currentHash)) { - RED.workspaces.show(currentHash.substring(6),true); + if (/^#(flow|node|group)\/.+$/.test(currentHash)) { + const hashParts = currentHash.split('/') + const showEditDialog = hashParts.length > 2 && hashParts[2] === 'edit' + if (hashParts[0] === '#flow') { + RED.workspaces.show(hashParts[1], true); + if (showEditDialog) { + RED.workspaces.edit() + } + } else if (hashParts[0] === '#node') { + const nodeToShow = RED.nodes.node(hashParts[1]) + if (nodeToShow) { + setTimeout(() => { + RED.view.reveal(nodeToShow.id) + window.location.hash = currentHash + if (showEditDialog) { + RED.editor.edit(nodeToShow) + } + }, 50) + } + } else if (hashParts[0] === '#group') { + const nodeToShow = RED.nodes.group(hashParts[1]) + if (nodeToShow) { + RED.view.reveal(nodeToShow.id) + window.location.hash = currentHash + if (showEditDialog) { + RED.editor.editGroup(nodeToShow) + } + } + } } if (RED.workspaces.count() > 0) { const hiddenTabs = JSON.parse(RED.settings.getLocal("hiddenTabs")||"{}"); diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/view.js b/packages/node_modules/@node-red/editor-client/src/js/ui/view.js index 8c7ea22a3..c6c49c942 100755 --- a/packages/node_modules/@node-red/editor-client/src/js/ui/view.js +++ b/packages/node_modules/@node-red/editor-client/src/js/ui/view.js @@ -6137,7 +6137,9 @@ RED.view = (function() { if (node.z && (node.type === "group" || node._def.category !== 'config')) { node.dirty = true; RED.workspaces.show(node.z); - + if (node.type === "group" && !node.w && !node.h) { + _redraw(); + } var screenSize = [chart[0].clientWidth/scaleFactor,chart[0].clientHeight/scaleFactor]; var scrollPos = [chart.scrollLeft()/scaleFactor,chart.scrollTop()/scaleFactor]; var cx = node.x; diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/workspaces.js b/packages/node_modules/@node-red/editor-client/src/js/ui/workspaces.js index 1f5cdf0f1..ae38f2c4d 100644 --- a/packages/node_modules/@node-red/editor-client/src/js/ui/workspaces.js +++ b/packages/node_modules/@node-red/editor-client/src/js/ui/workspaces.js @@ -138,7 +138,7 @@ RED.workspaces = (function() { activeWorkspace = tab.id; window.location.hash = 'flow/'+tab.id; $("#red-ui-workspace").toggleClass("red-ui-workspace-disabled",!!tab.disabled); - } else { + } else { $("#red-ui-workspace-chart").hide(); activeWorkspace = 0; window.location.hash = '';