From 8395ef6e26e6fc5a80ad16add2690172768be691 Mon Sep 17 00:00:00 2001 From: GogoVega <92022724+GogoVega@users.noreply.github.com> Date: Sat, 9 Nov 2024 22:30:45 +0100 Subject: [PATCH] Add comments --- .../@node-red/editor-client/src/js/history.js | 64 ++++++++++++++++++- 1 file changed, 61 insertions(+), 3 deletions(-) diff --git a/packages/node_modules/@node-red/editor-client/src/js/history.js b/packages/node_modules/@node-red/editor-client/src/js/history.js index df29b354e..8b28ac1ae 100644 --- a/packages/node_modules/@node-red/editor-client/src/js/history.js +++ b/packages/node_modules/@node-red/editor-client/src/js/history.js @@ -72,6 +72,7 @@ RED.history = (function () { dirty: RED.nodes.dirty() }; + // Remove each node and if the node is in a group remove it from the group if (ev.nodes) { inverseEv.nodes = []; for (let i = 0; i < ev.nodes.length; i++) { @@ -87,11 +88,13 @@ RED.history = (function () { if (index !== -1) { group.nodes.splice(index, 1); RED.group.markDirty(group); + // TODO: no change event? } } } } + // Remove each links if (ev.links) { inverseEv.links = []; for (let i = 0; i < ev.links.length; i++) { @@ -100,6 +103,7 @@ RED.history = (function () { } } + // Remove each junction and if the junction is in a group remove it from the group if (ev.junctions) { inverseEv.junctions = []; for (let i = 0; i < ev.junctions.length; i++) { @@ -111,11 +115,13 @@ RED.history = (function () { if (index !== -1) { group.nodes.splice(index, 1); RED.group.markDirty(group); + // TODO: no change event? } } } } + // Remove each group if (ev.groups) { inverseEv.groups = []; for (let i = ev.groups.length - 1; i >= 0; i--) { @@ -128,10 +134,12 @@ RED.history = (function () { } } + // Remove each workspace if (ev.workspaces) { inverseEv.workspaces = []; for (let i = 0; i < ev.workspaces.length; i++) { const workspaceOrder = RED.nodes.getWorkspaceOrder(); + // Save the current index for the redo event ev.workspaces[i]._index = workspaceOrder.indexOf(ev.workspaces[i].id); inverseEv.workspaces.push(ev.workspaces[i]); RED.nodes.removeWorkspace(ev.workspaces[i].id); @@ -139,6 +147,7 @@ RED.history = (function () { } } + // Remove each subflow (tab) if (ev.subflows) { inverseEv.subflows = []; for (let i = 0; i < ev.subflows.length; i++) { @@ -148,6 +157,8 @@ RED.history = (function () { } } + // Mark each nodes which use this subflow has changed + // TODO: why? if (ev.subflow) { inverseEv.subflow = {}; if (ev.subflow.instances) { @@ -170,6 +181,7 @@ RED.history = (function () { } } + // Add links previously removed (in other delete event) if (ev.removedLinks) { inverseEv.createdLinks = []; for (let i = 0; i < ev.removedLinks.length; i++) { @@ -208,6 +220,7 @@ RED.history = (function () { dirty: RED.nodes.dirty() }; + // Add each workspace if (ev.workspaces) { inverseEv.workspaces = []; for (let i = 0; i < ev.workspaces.length; i++) { @@ -223,6 +236,7 @@ RED.history = (function () { for (let i = 0; i < ev.subflows.length; i++) { inverseEv.subflows.push(ev.subflows[i]); RED.nodes.addSubflow(ev.subflows[i]); + // TODO: add to workspace? } } @@ -281,6 +295,7 @@ RED.history = (function () { }); } + // For each group, create the group and add nodes to it if (ev.groups) { inverseEv.groups = []; const groupsToAdd = {}; @@ -306,6 +321,7 @@ RED.history = (function () { } } + // Add each nodes, if the node has a group add to it if (ev.nodes) { inverseEv.nodes = []; for (let i = 0; i < ev.nodes.length; i++) { @@ -321,6 +337,8 @@ RED.history = (function () { } } } + + // Add each junctions, if the junction has a group add to it if (ev.junctions) { inverseEv.junctions = []; for (let i = 0; i < ev.junctions.length; i++) { @@ -336,6 +354,7 @@ RED.history = (function () { } } + // Add each links if (ev.links) { inverseEv.links = []; for (let i = 0; i < ev.links.length; i++) { @@ -344,6 +363,7 @@ RED.history = (function () { } } + // Remove each links if (ev.createdLinks) { inverseEv.removedLinks = []; for (let i = 0; i < ev.createdLinks.length; i++) { @@ -352,6 +372,8 @@ RED.history = (function () { } } + // Apply chanes to each nodes + // { [nodeId]: object - changes to apply} if (ev.changes) { for (const i in ev.changes) { if (ev.changes.hasOwnProperty(i)) { @@ -394,6 +416,7 @@ RED.history = (function () { dirty: RED.nodes.dirty() }; + // Move each nodes for (let i = 0; i < ev.nodes.length; i++) { const n = ev.nodes[i]; const rn = { n: n.n, ox: n.n.x, oy: n.n.y, dirty: true, moved: n.n.moved }; @@ -405,6 +428,7 @@ RED.history = (function () { } // A move could have caused a link splice + // So remove each links then readd them if (ev.links) { inverseEv.removedLinks = []; for (let i = 0; i < ev.links.length; i++) { @@ -421,11 +445,13 @@ RED.history = (function () { } } + // Remove each nodes from the group if (ev.addToGroup) { RED.group.removeFromGroup(ev.addToGroup, ev.nodes.map(function (n) { return n.n }), false); inverseEv.removeFromGroup = ev.addToGroup; } + // Add each nodes to the group if (ev.removeFromGroup) { RED.group.addToGroup(ev.removeFromGroup, ev.nodes.map(function (n) { return n.n })); inverseEv.addToGroup = ev.removeFromGroup; @@ -452,9 +478,11 @@ RED.history = (function () { dirty: RED.nodes.dirty() }; + // Remove all nodes from the subflow if (ev.nodes) { inverseEv.movedNodes = []; const z = ev.activeWorkspace; + // Get all nodes from the subflow defiition let fullNodeList = RED.nodes.filterNodes({ z: ev.subflow.subflow.id }); fullNodeList = fullNodeList.concat(RED.nodes.groups(ev.subflow.subflow.id)); fullNodeList = fullNodeList.concat(RED.nodes.junctions(ev.subflow.subflow.id)); @@ -471,6 +499,8 @@ RED.history = (function () { RED.nodes.remove(ev.nodes[i]); } } + + // Remove each links if (ev.links) { inverseEv.links = []; for (let i = 0; i < ev.links.length; i++) { @@ -479,10 +509,12 @@ RED.history = (function () { } } + // Remove the subflow (tab) inverseEv.subflow = ev.subflow; RED.nodes.removeSubflow(ev.subflow.subflow); RED.workspaces.remove(ev.subflow.subflow); + // Add each links if (ev.removedLinks) { inverseEv.createdLinks = []; for (let i = 0; i < ev.removedLinks.length; i++) { @@ -513,14 +545,17 @@ RED.history = (function () { dirty: RED.nodes.dirty(), }; + // Add the subflow (tab) if (ev.subflow) { RED.nodes.addSubflow(ev.subflow.subflow); inverseEv.subflow = ev.subflow; if (ev.subflow.subflow.g) { + // TODO: why? RED.group.addToGroup(RED.nodes.group(ev.subflow.subflow.g), ev.subflow.subflow); } } + // Create all nodes of the subflow if (ev.subflows) { inverseEv.nodes = []; for (let i = 0; i < ev.subflows.length; i++) { @@ -542,6 +577,7 @@ RED.history = (function () { }); } + // Add each links if (ev.links) { inverseEv.links = []; for (let i = 0; i < ev.links.length; i++) { @@ -550,6 +586,7 @@ RED.history = (function () { } } + // Remove each links if (ev.createdLinks) { inverseEv.removedLinks = []; for (let i = 0; i < ev.createdLinks.length; i++) { @@ -609,6 +646,7 @@ RED.history = (function () { groups: [] }; + // For each group, remove each nodes from the group then delete the group if (ev.groups) { for (let i = 0; i < ev.groups.length; i++) { inverseEv.groups.push(ev.groups[i]); @@ -638,9 +676,12 @@ RED.history = (function () { inverseEv.groups.push(ev.groups[i]); const nodes = ev.groups[i].nodes.slice(); ev.groups[i].nodes = []; + // Create the group RED.nodes.addGroup(ev.groups[i]); + // Add each nodes to the created group RED.group.addToGroup(ev.groups[i], nodes); if (ev.groups[i].g) { + // If the created group has a parent group, add to it const parentGroup = RED.nodes.group(ev.groups[i].g); if (parentGroup) { RED.group.addToGroup(parentGroup, ev.groups[i]); @@ -670,6 +711,7 @@ RED.history = (function () { reparent: ev.reparent }; + // Remove each nodes from the group if (ev.nodes) { RED.group.removeFromGroup(ev.group, ev.nodes, (ev.hasOwnProperty("reparent") && ev.hasOwnProperty("reparent") !== undefined) ? ev.reparent : true); } @@ -695,6 +737,7 @@ RED.history = (function () { reparent: ev.reparent }; + // Add each nodes to the group if (ev.nodes) { RED.group.addToGroup(ev.group, ev.nodes); } @@ -706,12 +749,14 @@ RED.history = (function () { * Called on the `edit` history event * @param {object} ev The history event to undo * @param {"edit"} ev.t The history event type + * @param {boolean} ev.changed * @param {object} ev.changes * @param {Array} [ev.createdLinks] * @param {Array} [ev.links] * @param {Node} ev.node * @param {object} [ev.outputMap] - * @param {Subflow} [ev.subflow] + * @param {{ instances?: Array; inputCount?: number; + * outputCount?: number; status?: string; }} [ev.subflow] * @returns {HistoryEvent} The generated history event to redo */ function onEdit(ev) { @@ -719,10 +764,12 @@ RED.history = (function () { t: "edit", changes: {}, changed: ev.node.changed, - dirty: RED.nodes.dirty() + dirty: RED.nodes.dirty(), + node: ev.node }; - inverseEv.node = ev.node; + // Apply old values to the current node + // And saves values ​​changed by old values for (const i in ev.changes) { if (ev.changes.hasOwnProperty(i)) { inverseEv.changes[i] = ev.node[i]; @@ -757,6 +804,9 @@ RED.history = (function () { ev.node[i] = ev.changes[i]; } } + + // The value of ev.node.changed is true (setted before to add to the history) + // During the undo, need to set the value the property had before it was set to true ev.node.dirty = true; ev.node.changed = ev.changed; @@ -768,13 +818,16 @@ RED.history = (function () { default: eventType = "nodes"; break; } + // Trigger the event after modifying the node eventType += ":change"; RED.events.emit(eventType, ev.node); + // If it is a tab, show or hide the disabled icon if (ev.node.type === "tab" && ev.changes.hasOwnProperty("disabled")) { $("#red-ui-tab-" + (ev.node.id.replace(".", "-"))).toggleClass("red-ui-workspace-disabled", !!ev.node.disabled); } + // If it is a tab, show or hide the locked icon if (ev.node.type === "tab" && ev.changes.hasOwnProperty("locked")) { $("#red-ui-tab-" + (ev.node.id.replace(".", "-"))).toggleClass("red-ui-workspace-locked", !!ev.node.locked); } @@ -813,13 +866,16 @@ RED.history = (function () { }); } + // Delete the current subflow status if (ev.subflow.hasOwnProperty("status")) { if (ev.subflow.status) { delete ev.node.status; } } + // Validate the subflow (tab) RED.editor.validateNode(ev.node); + // Update each subflow node and validate it RED.nodes.filterNodes({ type: "subflow:" + ev.node.id }).forEach(function (n) { n.inputs = ev.node.in.length; n.outputs = ev.node.out.length; @@ -843,6 +899,7 @@ RED.history = (function () { RED.editor.validateNode(ev.node); } + // Add links previously removed (undo) if (ev.links) { inverseEv.createdLinks = []; for (let i = 0; i < ev.links.length; i++) { @@ -851,6 +908,7 @@ RED.history = (function () { } } + // Remove links previously created (undo) if (ev.createdLinks) { inverseEv.links = []; for (let i = 0; i < ev.createdLinks.length; i++) {