diff --git a/packages/node_modules/@node-red/editor-client/src/js/keymap.json b/packages/node_modules/@node-red/editor-client/src/js/keymap.json index 5a024a89f..b74256357 100644 --- a/packages/node_modules/@node-red/editor-client/src/js/keymap.json +++ b/packages/node_modules/@node-red/editor-client/src/js/keymap.json @@ -66,6 +66,8 @@ "shift-left": "core:step-selection-left", "ctrl-shift-j": "core:show-previous-tab", "ctrl-shift-k": "core:show-next-tab", + "ctrl-shift-left": "core:go-to-previous-location", + "ctrl-shift-right": "core:go-to-next-location", "ctrl-shift-g": "core:group-selection", "ctrl-shift-u": "core:ungroup-selection", "ctrl-shift-c": "core:copy-group-style", 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 9839c3e62..88c564afc 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,7 +249,7 @@ var RED = (function() { RED.nodes.dirty(false); RED.view.redraw(true); if (/^#flow\/.+$/.test(currentHash)) { - RED.workspaces.show(currentHash.substring(6)); + RED.workspaces.show(currentHash.substring(6),true); } } catch(err) { console.warn(err); @@ -532,7 +532,7 @@ var RED = (function() { RED.sidebar.show(":first"); - + setTimeout(function() { loader.end(); },100); 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 290083ea6..7ff15d2ee 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 @@ -20,6 +20,9 @@ RED.workspaces = (function() { var activeWorkspace = 0; var workspaceIndex = 0; + var viewStack = []; + var viewStackPos = 0; + function addWorkspace(ws,skipHistoryEntry,targetIndex) { if (ws) { workspace_tabs.addTab(ws,targetIndex); @@ -245,6 +248,11 @@ RED.workspaces = (function() { RED.view.focus(); }, onclick: function(tab) { + if (viewStackPos !== viewStack.length) { + viewStack.splice(viewStackPos); + } + viewStack.push(activeWorkspace); + viewStackPos = viewStack.length; RED.view.focus(); }, ondblclick: function(tab) { @@ -349,6 +357,21 @@ RED.workspaces = (function() { RED.actions.invoke("core:search","type:tab "); }) + RED.actions.add("core:go-to-previous-location", function() { + if (viewStackPos > 0) { + if (viewStackPos === viewStack.length) { + viewStack.push(activeWorkspace); + } + RED.workspaces.show(viewStack[--viewStackPos],true); + } + }) + RED.actions.add("core:go-to-next-location", function() { + if (viewStackPos < viewStack.length - 1) { + RED.workspaces.show(viewStack[++viewStackPos],true); + } + }) + + hideWorkspace(); } @@ -444,7 +467,7 @@ RED.workspaces = (function() { selection: function() { return workspace_tabs.selection(); }, - show: function(id) { + show: function(id,skipStack) { if (!workspace_tabs.contains(id)) { var sf = RED.nodes.subflow(id); if (sf) { @@ -453,6 +476,13 @@ RED.workspaces = (function() { return; } } + if (!skipStack) { + if (viewStackPos !== viewStack.length) { + viewStack.splice(viewStackPos); + } + viewStack.push(activeWorkspace); + viewStackPos = viewStack.length; + } workspace_tabs.activateTab(id); }, refresh: function() {