mirror of
https://github.com/node-red/node-red.git
synced 2025-03-01 10:36:34 +00:00
Merge pull request #2877 from node-red/select-tools
Add new select-* actions to editor
This commit is contained in:
@@ -16,6 +16,27 @@
|
||||
|
||||
RED.view.tools = (function() {
|
||||
|
||||
function selectConnected(type) {
|
||||
var selection = RED.view.selection();
|
||||
var visited = new Set();
|
||||
if (selection.nodes && selection.nodes.length > 0) {
|
||||
selection.nodes.forEach(function(n) {
|
||||
if (!visited.has(n)) {
|
||||
var connected;
|
||||
if (type === 'all') {
|
||||
connected = RED.nodes.getAllFlowNodes(n);
|
||||
} else if (type === 'up') {
|
||||
connected = RED.nodes.getAllUpstreamNodes(n);
|
||||
} else if (type === 'down') {
|
||||
connected = RED.nodes.getAllDownstreamNodes(n);
|
||||
}
|
||||
connected.forEach(function(nn) { visited.add(nn) })
|
||||
}
|
||||
});
|
||||
RED.view.select({nodes:Array.from(visited)});
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function alignToGrid() {
|
||||
var selection = RED.view.selection();
|
||||
@@ -206,6 +227,10 @@ RED.view.tools = (function() {
|
||||
RED.actions.add("core:step-selection-right", function() { moveSelection(RED.view.gridSize(),0);});
|
||||
RED.actions.add("core:step-selection-down", function() { moveSelection(0,RED.view.gridSize());});
|
||||
RED.actions.add("core:step-selection-left", function() { moveSelection(-RED.view.gridSize(),0);});
|
||||
|
||||
RED.actions.add("core:select-connected-nodes", function() { selectConnected("all") });
|
||||
RED.actions.add("core:select-downstream-nodes", function() { selectConnected("down") });
|
||||
RED.actions.add("core:select-upstream-nodes", function() { selectConnected("up") });
|
||||
},
|
||||
/**
|
||||
* Aligns all selected nodes to the current grid
|
||||
|
@@ -2992,6 +2992,7 @@ RED.view = (function() {
|
||||
enterActiveGroup(ag);
|
||||
activeGroup.selected = true;
|
||||
}
|
||||
console.log(d3.event);
|
||||
var cnodes = RED.nodes.getAllFlowNodes(mousedown_node);
|
||||
for (var n=0;n<cnodes.length;n++) {
|
||||
if (!cnodes[n].selected) {
|
||||
@@ -3080,7 +3081,19 @@ RED.view = (function() {
|
||||
// } else
|
||||
if (d3.event.shiftKey) {
|
||||
clearSelection();
|
||||
var cnodes = RED.nodes.getAllFlowNodes(mousedown_node);
|
||||
var clickPosition = (d3.event.offsetX - mousedown_node.x)
|
||||
var edgeDelta = (mousedown_node.w/2) - Math.abs(clickPosition);
|
||||
var cnodes;
|
||||
var targetEdgeDelta = mousedown_node.w > 30 ? 25 : 8;
|
||||
if (edgeDelta < targetEdgeDelta) {
|
||||
if (clickPosition < 0) {
|
||||
cnodes = RED.nodes.getAllUpstreamNodes(mousedown_node);
|
||||
} else {
|
||||
cnodes = RED.nodes.getAllDownstreamNodes(mousedown_node);
|
||||
}
|
||||
} else {
|
||||
cnodes = RED.nodes.getAllFlowNodes(mousedown_node);
|
||||
}
|
||||
for (var n=0;n<cnodes.length;n++) {
|
||||
cnodes[n].selected = true;
|
||||
cnodes[n].dirty = true;
|
||||
|
Reference in New Issue
Block a user