mirror of
https://github.com/node-red/node-red.git
synced 2025-03-01 10:36:34 +00:00
Track dirty state in RED.nodes not RED.view
- add 'change' event on RED.nodes for tracking dirty state change
This commit is contained in:
@@ -124,7 +124,7 @@ RED.clipboard = (function() {
|
||||
$("#dropTarget").hide();
|
||||
RED.keyboard.remove(/* ESCAPE */ 27);
|
||||
}
|
||||
|
||||
|
||||
return {
|
||||
init: function() {
|
||||
RED.view.on("selection-changed",function(selection) {
|
||||
|
@@ -142,7 +142,7 @@ RED.editor = (function() {
|
||||
if (editing_node) {
|
||||
var changes = {};
|
||||
var changed = false;
|
||||
var wasDirty = RED.view.dirty();
|
||||
var wasDirty = RED.nodes.dirty();
|
||||
var d;
|
||||
|
||||
if (editing_node._def.oneditsave) {
|
||||
@@ -228,7 +228,7 @@ RED.editor = (function() {
|
||||
if (changed) {
|
||||
var wasChanged = editing_node.changed;
|
||||
editing_node.changed = true;
|
||||
RED.view.dirty(true);
|
||||
RED.nodes.dirty(true);
|
||||
RED.history.push({t:'edit',node:editing_node,changes:changes,links:removedLinks,dirty:wasDirty,changed:wasChanged});
|
||||
}
|
||||
editing_node.dirty = true;
|
||||
@@ -570,7 +570,7 @@ RED.editor = (function() {
|
||||
validateNode(user);
|
||||
}
|
||||
updateConfigNodeSelect(configProperty,configType,"");
|
||||
RED.view.dirty(true);
|
||||
RED.nodes.dirty(true);
|
||||
$( this ).dialog( "close" );
|
||||
RED.view.redraw();
|
||||
}
|
||||
@@ -662,7 +662,7 @@ RED.editor = (function() {
|
||||
}
|
||||
validateNode(configNode);
|
||||
|
||||
RED.view.dirty(true);
|
||||
RED.nodes.dirty(true);
|
||||
$(this).dialog("close");
|
||||
|
||||
}
|
||||
@@ -729,7 +729,7 @@ RED.editor = (function() {
|
||||
var i;
|
||||
var changes = {};
|
||||
var changed = false;
|
||||
var wasDirty = RED.view.dirty();
|
||||
var wasDirty = RED.nodes.dirty();
|
||||
|
||||
var newName = $("#subflow-input-name").val();
|
||||
|
||||
@@ -751,7 +751,7 @@ RED.editor = (function() {
|
||||
});
|
||||
var wasChanged = editing_node.changed;
|
||||
editing_node.changed = true;
|
||||
RED.view.dirty(true);
|
||||
RED.nodes.dirty(true);
|
||||
var historyEvent = {
|
||||
t:'edit',
|
||||
node:editing_node,
|
||||
|
@@ -53,7 +53,7 @@ RED.subflow = (function() {
|
||||
var oldInCount = subflow.in.length;
|
||||
subflow.in.push(newInput);
|
||||
subflow.dirty = true;
|
||||
var wasDirty = RED.view.dirty();
|
||||
var wasDirty = RED.nodes.dirty();
|
||||
var wasChanged = subflow.changed;
|
||||
subflow.changed = true;
|
||||
|
||||
@@ -94,7 +94,7 @@ RED.subflow = (function() {
|
||||
var oldOutCount = subflow.out.length;
|
||||
subflow.out.push(newOutput);
|
||||
subflow.dirty = true;
|
||||
var wasDirty = RED.view.dirty();
|
||||
var wasDirty = RED.nodes.dirty();
|
||||
var wasChanged = subflow.changed;
|
||||
subflow.changed = true;
|
||||
|
||||
@@ -142,7 +142,7 @@ RED.subflow = (function() {
|
||||
event.preventDefault();
|
||||
var removedNodes = [];
|
||||
var removedLinks = [];
|
||||
var startDirty = RED.view.dirty();
|
||||
var startDirty = RED.nodes.dirty();
|
||||
|
||||
RED.nodes.eachNode(function(n) {
|
||||
if (n.type == "subflow:"+getSubflow().id) {
|
||||
@@ -171,7 +171,7 @@ RED.subflow = (function() {
|
||||
});
|
||||
|
||||
RED.workspaces.remove(activeSubflow);
|
||||
RED.view.dirty(true);
|
||||
RED.nodes.dirty(true);
|
||||
RED.view.redraw();
|
||||
});
|
||||
|
||||
@@ -208,7 +208,7 @@ RED.subflow = (function() {
|
||||
RED.history.push({
|
||||
t:'createSubflow',
|
||||
subflow: subflow,
|
||||
dirty:RED.view.dirty()
|
||||
dirty:RED.nodes.dirty()
|
||||
});
|
||||
RED.workspaces.show(subflowId);
|
||||
}
|
||||
@@ -384,10 +384,10 @@ RED.subflow = (function() {
|
||||
activeWorkspace: RED.workspaces.active(),
|
||||
removedLinks: removedLinks,
|
||||
|
||||
dirty:RED.view.dirty()
|
||||
dirty:RED.nodes.dirty()
|
||||
});
|
||||
|
||||
RED.view.dirty(true);
|
||||
RED.nodes.dirty(true);
|
||||
RED.view.redraw(true);
|
||||
}
|
||||
|
||||
|
@@ -46,7 +46,6 @@ RED.view = (function() {
|
||||
mouse_position = null,
|
||||
mouse_mode = 0,
|
||||
moving_set = [],
|
||||
dirty = false,
|
||||
lasso = null,
|
||||
showStatus = false,
|
||||
lastClickNode = null,
|
||||
@@ -284,6 +283,14 @@ RED.view = (function() {
|
||||
redraw();
|
||||
});
|
||||
|
||||
RED.nodes.on('change',function(state) {
|
||||
if (state.dirty) {
|
||||
$("#btn-deploy").removeClass("disabled");
|
||||
} else {
|
||||
$("#btn-deploy").addClass("disabled");
|
||||
}
|
||||
});
|
||||
|
||||
$('#btn-zoom-out').click(function() {zoomOut();});
|
||||
$('#btn-zoom-zero').click(function() {zoomZero();});
|
||||
$('#btn-zoom-in').click(function() {zoomIn();});
|
||||
@@ -351,10 +358,10 @@ RED.view = (function() {
|
||||
}
|
||||
|
||||
nn.h = Math.max(node_height,(nn.outputs||0) * 15);
|
||||
RED.history.push({t:'add',nodes:[nn.id],dirty:dirty});
|
||||
RED.history.push({t:'add',nodes:[nn.id],dirty:RED.nodes.dirty()});
|
||||
RED.nodes.add(nn);
|
||||
RED.editor.validateNode(nn);
|
||||
setDirty(true);
|
||||
RED.nodes.dirty(true);
|
||||
// auto select dropped node - so info shows (if visible)
|
||||
clearSelection();
|
||||
nn.selected = true;
|
||||
@@ -591,7 +598,7 @@ RED.view = (function() {
|
||||
for (var j=0;j<moving_set.length;j++) {
|
||||
ns.push({n:moving_set[j].n,ox:moving_set[j].ox,oy:moving_set[j].oy});
|
||||
}
|
||||
RED.history.push({t:'move',nodes:ns,dirty:dirty});
|
||||
RED.history.push({t:'move',nodes:ns,dirty:RED.nodes.dirty()});
|
||||
}
|
||||
}
|
||||
if (mouse_mode == RED.state.MOVING || mouse_mode == RED.state.MOVING_ACTIVE) {
|
||||
@@ -603,7 +610,7 @@ RED.view = (function() {
|
||||
if (mouse_mode == RED.state.IMPORT_DRAGGING) {
|
||||
RED.keyboard.remove(/* ESCAPE */ 27);
|
||||
updateActiveNodes();
|
||||
setDirty(true);
|
||||
RED.nodes.dirty(true);
|
||||
}
|
||||
resetMouseVars();
|
||||
redraw();
|
||||
@@ -711,7 +718,7 @@ RED.view = (function() {
|
||||
delete moving_set[i].ox;
|
||||
delete moving_set[i].oy;
|
||||
}
|
||||
RED.history.push({t:'move',nodes:ns,dirty:dirty});
|
||||
RED.history.push({t:'move',nodes:ns,dirty:RED.nodes.dirty()});
|
||||
}
|
||||
function moveSelection(dx,dy) {
|
||||
var minX = 0;
|
||||
@@ -747,7 +754,7 @@ RED.view = (function() {
|
||||
var removedSubflowOutputs = [];
|
||||
var removedSubflowInputs = [];
|
||||
|
||||
var startDirty = dirty;
|
||||
var startDirty = RED.nodes.dirty();
|
||||
if (moving_set.length > 0) {
|
||||
for (var i=0;i<moving_set.length;i++) {
|
||||
var node = moving_set[i].n;
|
||||
@@ -830,14 +837,14 @@ RED.view = (function() {
|
||||
}
|
||||
|
||||
moving_set = [];
|
||||
if (removedNodes.length > 0) {
|
||||
setDirty(true);
|
||||
if (removedNodes.length > 0 || removedSubflowOutputs.length > 0 || removedSubflowInputs.length > 0) {
|
||||
RED.nodes.dirty(true);
|
||||
}
|
||||
}
|
||||
if (selected_link) {
|
||||
RED.nodes.removeLink(selected_link);
|
||||
removedLinks.push(selected_link);
|
||||
setDirty(true);
|
||||
RED.nodes.dirty(true);
|
||||
}
|
||||
RED.history.push({t:'delete',nodes:removedNodes,links:removedLinks,subflowOutputs:removedSubflowOutputs,subflowInputs:removedSubflowInputs,dirty:startDirty});
|
||||
|
||||
@@ -936,9 +943,9 @@ RED.view = (function() {
|
||||
if (!existingLink) {
|
||||
var link = {source: src, sourcePort:src_port, target: dst};
|
||||
RED.nodes.addLink(link);
|
||||
RED.history.push({t:'add',links:[link],dirty:dirty});
|
||||
RED.history.push({t:'add',links:[link],dirty:RED.nodes.dirty()});
|
||||
updateActiveNodes();
|
||||
setDirty(true);
|
||||
RED.nodes.dirty(true);
|
||||
} else {
|
||||
}
|
||||
selected_link = null;
|
||||
@@ -970,7 +977,7 @@ RED.view = (function() {
|
||||
if (mouse_mode == RED.state.IMPORT_DRAGGING) {
|
||||
RED.keyboard.remove(/* ESCAPE */ 27);
|
||||
updateSelection();
|
||||
setDirty(true);
|
||||
RED.nodes.dirty(true);
|
||||
redraw();
|
||||
resetMouseVars();
|
||||
d3.event.stopPropagation();
|
||||
@@ -1646,16 +1653,6 @@ RED.view = (function() {
|
||||
|
||||
}
|
||||
|
||||
// TODO: 'dirty' should be a property of RED.nodes - with an event callback for ui hooks
|
||||
function setDirty(d) {
|
||||
dirty = d;
|
||||
if (dirty) {
|
||||
$("#btn-deploy").removeClass("disabled");
|
||||
} else {
|
||||
$("#btn-deploy").addClass("disabled");
|
||||
}
|
||||
}
|
||||
|
||||
function focusView() {
|
||||
$("#chart svg").focus();
|
||||
}
|
||||
@@ -1731,7 +1728,7 @@ RED.view = (function() {
|
||||
links:new_links,
|
||||
workspaces:new_workspaces,
|
||||
subflows:new_subflows,
|
||||
dirty:RED.view.dirty()
|
||||
dirty:RED.nodes.dirty()
|
||||
});
|
||||
|
||||
updateActiveNodes();
|
||||
@@ -1785,13 +1782,6 @@ RED.view = (function() {
|
||||
RED.workspaces.refresh();
|
||||
redraw();
|
||||
},
|
||||
dirty: function(d) {
|
||||
if (d == null) {
|
||||
return dirty;
|
||||
} else {
|
||||
setDirty(d);
|
||||
}
|
||||
},
|
||||
focus: focusView,
|
||||
importNodes: importNodes,
|
||||
status: function(s) {
|
||||
|
@@ -34,8 +34,8 @@ RED.workspaces = (function() {
|
||||
RED.nodes.addWorkspace(ws);
|
||||
workspace_tabs.addTab(ws);
|
||||
workspace_tabs.activateTab(tabId);
|
||||
RED.history.push({t:'add',workspaces:[ws],dirty:RED.view.dirty()});
|
||||
RED.view.dirty(true);
|
||||
RED.history.push({t:'add',workspaces:[ws],dirty:RED.nodes.dirty()});
|
||||
RED.nodes.dirty(true);
|
||||
}
|
||||
}
|
||||
function deleteWorkspace(ws,force) {
|
||||
@@ -53,10 +53,10 @@ RED.workspaces = (function() {
|
||||
removeWorkspace(ws);
|
||||
var historyEvent = RED.nodes.removeWorkspace(ws.id);
|
||||
historyEvent.t = 'delete';
|
||||
historyEvent.dirty = RED.view.dirty();
|
||||
historyEvent.dirty = RED.nodes.dirty();
|
||||
historyEvent.workspaces = [ws];
|
||||
RED.history.push(historyEvent);
|
||||
RED.view.dirty(true);
|
||||
RED.nodes.dirty(true);
|
||||
} else {
|
||||
$( "#node-dialog-delete-workspace" ).dialog('option','workspace',ws);
|
||||
$( "#node-dialog-delete-workspace-name" ).text(ws.label);
|
||||
@@ -143,7 +143,7 @@ RED.workspaces = (function() {
|
||||
var label = $( "#node-input-workspace-name" ).val();
|
||||
if (workspace.label != label) {
|
||||
workspace_tabs.renameTab(workspace.id,label);
|
||||
RED.view.dirty(true);
|
||||
RED.nodes.dirty(true);
|
||||
$("#btn-workspace-menu-"+workspace.id.replace(".","-")).text(label);
|
||||
// TODO: update entry in menu
|
||||
}
|
||||
|
Reference in New Issue
Block a user