mirror of
https://github.com/node-red/node-red.git
synced 2023-10-10 13:36:53 +02:00
[groups] Fix up various delete/undo actions with groups
This commit is contained in:
parent
64af1f7e9b
commit
7bc3b662e4
@ -203,12 +203,35 @@ RED.history = (function() {
|
|||||||
n.dirty = true;
|
n.dirty = true;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
if (ev.groups) {
|
||||||
|
inverseEv.groups = [];
|
||||||
|
var groupsToAdd = new Set(ev.groups.map(function(g) { return g.id }));
|
||||||
|
for (i=0;i<ev.groups.length;i++) {
|
||||||
|
RED.nodes.addGroup(ev.groups[i])
|
||||||
|
modifiedTabs[ev.groups[i].z] = true;
|
||||||
|
inverseEv.groups.push(ev.groups[i].id);
|
||||||
|
if (!groupsToAdd.has(ev.groups[i].g)) {
|
||||||
|
group = RED.nodes.group(ev.groups[i].g);
|
||||||
|
if (group.nodes.indexOf(ev.groups[i]) === -1) {
|
||||||
|
group.nodes.push(ev.groups[i]);
|
||||||
|
}
|
||||||
|
RED.group.markDirty(ev.groups[i])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
if (ev.nodes) {
|
if (ev.nodes) {
|
||||||
inverseEv.nodes = [];
|
inverseEv.nodes = [];
|
||||||
for (i=0;i<ev.nodes.length;i++) {
|
for (i=0;i<ev.nodes.length;i++) {
|
||||||
RED.nodes.add(ev.nodes[i]);
|
RED.nodes.add(ev.nodes[i]);
|
||||||
modifiedTabs[ev.nodes[i].z] = true;
|
modifiedTabs[ev.nodes[i].z] = true;
|
||||||
inverseEv.nodes.push(ev.nodes[i].id);
|
inverseEv.nodes.push(ev.nodes[i].id);
|
||||||
|
if (ev.nodes[i].g) {
|
||||||
|
group = RED.nodes.group(ev.nodes[i].g);
|
||||||
|
if (group.nodes.indexOf(ev.nodes[i]) === -1) {
|
||||||
|
group.nodes.push(ev.nodes[i]);
|
||||||
|
}
|
||||||
|
RED.group.markDirty(group)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (ev.links) {
|
if (ev.links) {
|
||||||
@ -218,14 +241,6 @@ RED.history = (function() {
|
|||||||
inverseEv.links.push(ev.links[i]);
|
inverseEv.links.push(ev.links[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (ev.groups) {
|
|
||||||
inverseEv.groups = [];
|
|
||||||
for (i=0;i<ev.groups.length;i++) {
|
|
||||||
RED.nodes.addGroup(ev.groups[i])
|
|
||||||
modifiedTabs[ev.groups[i].z] = true;
|
|
||||||
inverseEv.groups.push(ev.groups[i].id);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (ev.createdLinks) {
|
if (ev.createdLinks) {
|
||||||
inverseEv.removedLinks = [];
|
inverseEv.removedLinks = [];
|
||||||
for (i=0;i<ev.createdLinks.length;i++) {
|
for (i=0;i<ev.createdLinks.length;i++) {
|
||||||
@ -542,8 +557,8 @@ RED.history = (function() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
RED.nodes.dirty(ev.dirty);
|
RED.nodes.dirty(ev.dirty);
|
||||||
|
RED.view.updateActive();
|
||||||
RED.view.select(null);
|
RED.view.select(null);
|
||||||
RED.view.redraw(true);
|
|
||||||
RED.palette.refresh();
|
RED.palette.refresh();
|
||||||
RED.workspaces.refresh();
|
RED.workspaces.refresh();
|
||||||
RED.sidebar.config.refresh();
|
RED.sidebar.config.refresh();
|
||||||
|
@ -1528,9 +1528,9 @@ RED.nodes = (function() {
|
|||||||
if (groups[group.g]) {
|
if (groups[group.g]) {
|
||||||
var index = groups[group.g].nodes.indexOf(group);
|
var index = groups[group.g].nodes.indexOf(group);
|
||||||
groups[group.g].nodes.splice(index,1);
|
groups[group.g].nodes.splice(index,1);
|
||||||
groups[group.g].dirty = true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
RED.group.markDirty(group);
|
||||||
|
|
||||||
delete groups[group.id];
|
delete groups[group.id];
|
||||||
}
|
}
|
||||||
|
@ -404,6 +404,9 @@ RED.group = (function() {
|
|||||||
throw new Error("Cannot create group using nodes from different groups")
|
throw new Error("Cannot create group using nodes from different groups")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// The nodes are already in a group. The assumption is they should be
|
||||||
|
// wrapped in the newly provided group, and that group added to in their
|
||||||
|
// place to the existing containing group.
|
||||||
if (g) {
|
if (g) {
|
||||||
g = RED.nodes.group(g);
|
g = RED.nodes.group(g);
|
||||||
g.nodes.push(group);
|
g.nodes.push(group);
|
||||||
@ -447,17 +450,14 @@ RED.group = (function() {
|
|||||||
n.dirty = true;
|
n.dirty = true;
|
||||||
var index = group.nodes.indexOf(n);
|
var index = group.nodes.indexOf(n);
|
||||||
group.nodes.splice(index,1);
|
group.nodes.splice(index,1);
|
||||||
group.dirty = true;
|
|
||||||
if (reparent && group.g) {
|
if (reparent && group.g) {
|
||||||
n.g = group.g
|
n.g = group.g
|
||||||
parentGroup.nodes.push(n);
|
parentGroup.nodes.push(n);
|
||||||
parentGroup.dirty = true;
|
|
||||||
} else {
|
} else {
|
||||||
delete n.g;
|
delete n.g;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
markDirty(group);
|
||||||
}
|
}
|
||||||
|
|
||||||
function getNodes(group,recursive) {
|
function getNodes(group,recursive) {
|
||||||
@ -549,6 +549,14 @@ RED.group = (function() {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function markDirty(group) {
|
||||||
|
group.dirty = true;
|
||||||
|
while(group) {
|
||||||
|
console.log("dirty",group.id)
|
||||||
|
group.dirty = true;
|
||||||
|
group = RED.nodes.group(group.g);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
@ -559,6 +567,7 @@ RED.group = (function() {
|
|||||||
addToGroup: addToGroup,
|
addToGroup: addToGroup,
|
||||||
removeFromGroup: removeFromGroup,
|
removeFromGroup: removeFromGroup,
|
||||||
getNodes: getNodes,
|
getNodes: getNodes,
|
||||||
contains: groupContains
|
contains: groupContains,
|
||||||
|
markDirty: markDirty
|
||||||
}
|
}
|
||||||
})();
|
})();
|
||||||
|
@ -580,9 +580,6 @@ RED.view = (function() {
|
|||||||
activeGroups.sort(function(a,b) {
|
activeGroups.sort(function(a,b) {
|
||||||
return a._depth - b._depth;
|
return a._depth - b._depth;
|
||||||
});
|
});
|
||||||
groupLayer.selectAll(".red-ui-flow-group").sort(function(a,b) {
|
|
||||||
return a._depth - b._depth;
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function generateLinkPath(origX,origY, destX, destY, sc) {
|
function generateLinkPath(origX,origY, destX, destY, sc) {
|
||||||
@ -1897,6 +1894,13 @@ if (DEBUG_EVENTS) { console.warn("clearSelection", mouse_mode); }
|
|||||||
removedNodes.push(node);
|
removedNodes.push(node);
|
||||||
removedNodes = removedNodes.concat(removedEntities.nodes);
|
removedNodes = removedNodes.concat(removedEntities.nodes);
|
||||||
removedLinks = removedLinks.concat(removedEntities.links);
|
removedLinks = removedLinks.concat(removedEntities.links);
|
||||||
|
if (node.g) {
|
||||||
|
var group = RED.nodes.group(node.g);
|
||||||
|
if (!group.selected || group.active) {
|
||||||
|
RED.group.removeFromGroup(group,node);
|
||||||
|
node.g = group.id;
|
||||||
|
}
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
if (node.direction === "out") {
|
if (node.direction === "out") {
|
||||||
removedSubflowOutputs.push(node);
|
removedSubflowOutputs.push(node);
|
||||||
@ -2861,6 +2865,13 @@ if (DEBUG_EVENTS) { console.warn("nodeMouseDown", mouse_mode,d); }
|
|||||||
if (!d3.event.ctrlKey && !d3.event.metaKey) {
|
if (!d3.event.ctrlKey && !d3.event.metaKey) {
|
||||||
clearSelection();
|
clearSelection();
|
||||||
}
|
}
|
||||||
|
if (activeGroup) {
|
||||||
|
if (!RED.group.contains(activeGroup,g)) {
|
||||||
|
// Clicked on a group that is outside the activeGroup
|
||||||
|
exitActiveGroup();
|
||||||
|
} else {
|
||||||
|
}
|
||||||
|
}
|
||||||
selectGroup(g,true);//!wasSelected);
|
selectGroup(g,true);//!wasSelected);
|
||||||
} else {
|
} else {
|
||||||
exitActiveGroup();
|
exitActiveGroup();
|
||||||
@ -4027,7 +4038,9 @@ if (DEBUG_EVENTS) { console.warn("nodeMouseDown", mouse_mode,d); }
|
|||||||
group.exit().remove();
|
group.exit().remove();
|
||||||
var groupEnter = group.enter().insert("svg:g")
|
var groupEnter = group.enter().insert("svg:g")
|
||||||
.attr("class", "red-ui-flow-group")
|
.attr("class", "red-ui-flow-group")
|
||||||
|
var addedGroups = false;
|
||||||
groupEnter.each(function(d,i) {
|
groupEnter.each(function(d,i) {
|
||||||
|
addedGroups = true;
|
||||||
var g = d3.select(this);
|
var g = d3.select(this);
|
||||||
g.attr("id",d.id);
|
g.attr("id",d.id);
|
||||||
|
|
||||||
@ -4047,7 +4060,11 @@ if (DEBUG_EVENTS) { console.warn("nodeMouseDown", mouse_mode,d); }
|
|||||||
g.append('svg:text').attr("class","red-ui-flow-group-label").text(d.name);
|
g.append('svg:text').attr("class","red-ui-flow-group-label").text(d.name);
|
||||||
d.dirty = true;
|
d.dirty = true;
|
||||||
});
|
});
|
||||||
|
if (addedGroups) {
|
||||||
|
group.sort(function(a,b) {
|
||||||
|
return a._depth - b._depth;
|
||||||
|
})
|
||||||
|
}
|
||||||
group[0].reverse();
|
group[0].reverse();
|
||||||
|
|
||||||
group.each(function(d,i) {
|
group.each(function(d,i) {
|
||||||
|
Loading…
Reference in New Issue
Block a user