Ensure select-up/down-stream action follows branches in flows

This commit is contained in:
Nick O'Leary
2021-03-03 14:20:55 +00:00
parent b5751e5746
commit 15715a2968
4 changed files with 12 additions and 10 deletions

View File

@@ -31,7 +31,7 @@ RED.nodes = (function() {
var groups = {};
var groupsByZ = {};
RED.nl = nodeLinks;
var initialLoad;
var dirty = false;
@@ -618,25 +618,27 @@ RED.nl = nodeLinks;
}
function getAllDownstreamNodes(node) {
return getAllFlowNodes(node,'down');
return getAllFlowNodes(node,'down').filter(function(n) { return n !== node });
}
function getAllUpstreamNodes(node) {
return getAllFlowNodes(node,'up');
return getAllFlowNodes(node,'up').filter(function(n) { return n !== node });
}
function getAllFlowNodes(node, direction) {
var selection = RED.view.selection();
var visited = new Set();
var nodes = [node];
var initialNode = true;
while(nodes.length > 0) {
var n = nodes.shift();
visited.add(n);
var links = [];
if (!direction || direction === 'up') {
if (!initialNode || !direction || (initialNode && direction === 'up')) {
links = links.concat(nodeLinks[n.id].in);
}
if (!direction || direction === 'down') {
if (!initialNode || !direction || (initialNode && direction === 'down')) {
links = links.concat(nodeLinks[n.id].out);
}
initialNode = false;
links.forEach(function(l) {
if (!visited.has(l.source)) {
nodes.push(l.source);

View File

@@ -26,9 +26,9 @@ RED.view.tools = (function() {
if (type === 'all') {
connected = RED.nodes.getAllFlowNodes(n);
} else if (type === 'up') {
connected = RED.nodes.getAllUpstreamNodes(n);
connected = [n].concat(RED.nodes.getAllUpstreamNodes(n));
} else if (type === 'down') {
connected = RED.nodes.getAllDownstreamNodes(n);
connected = [n].concat(RED.nodes.getAllDownstreamNodes(n));
}
connected.forEach(function(nn) { visited.add(nn) })
}

View File

@@ -3087,9 +3087,9 @@ RED.view = (function() {
var targetEdgeDelta = mousedown_node.w > 30 ? 25 : 8;
if (edgeDelta < targetEdgeDelta) {
if (clickPosition < 0) {
cnodes = RED.nodes.getAllUpstreamNodes(mousedown_node);
cnodes = [mousedown_node].concat(RED.nodes.getAllUpstreamNodes(mousedown_node));
} else {
cnodes = RED.nodes.getAllDownstreamNodes(mousedown_node);
cnodes = [mousedown_node].concat(RED.nodes.getAllDownstreamNodes(mousedown_node));
}
} else {
cnodes = RED.nodes.getAllFlowNodes(mousedown_node);