From fce4f0c116c3077fee60899646ad36967bc2a545 Mon Sep 17 00:00:00 2001 From: Steve-Mcl Date: Sat, 5 Mar 2022 11:06:13 +0000 Subject: [PATCH] resolve PR issues... - change default keymap to `ALT-L L` - Move `RED.nodes.createNode` to `RED.view.createNode` - replace `selectedLinks` with `selection().links` --- .../editor-client/src/js/keymap.json | 2 +- .../editor-client/src/js/ui/view-tools.js | 8 +- .../@node-red/editor-client/src/js/ui/view.js | 95 ++++++++++++++++++- 3 files changed, 95 insertions(+), 10 deletions(-) diff --git a/packages/node_modules/@node-red/editor-client/src/js/keymap.json b/packages/node_modules/@node-red/editor-client/src/js/keymap.json index 2e121b112..87b559265 100644 --- a/packages/node_modules/@node-red/editor-client/src/js/keymap.json +++ b/packages/node_modules/@node-red/editor-client/src/js/keymap.json @@ -91,6 +91,6 @@ "alt-a c": "core:align-selection-to-center", "alt-a h": "core:distribute-selection-horizontally", "alt-a v": "core:distribute-selection-vertically", - "alt-l": "core:split-wire-with-link-nodes" + "alt-l l": "core:split-wire-with-link-nodes" } } diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/view-tools.js b/packages/node_modules/@node-red/editor-client/src/js/ui/view-tools.js index e0bb06915..3981892f4 100644 --- a/packages/node_modules/@node-red/editor-client/src/js/ui/view-tools.js +++ b/packages/node_modules/@node-red/editor-client/src/js/ui/view-tools.js @@ -814,7 +814,7 @@ RED.view.tools = (function() { * @param {Object || Object[]} wires The wire(s) to split and replace with link-out, link-in nodes. */ function splitWiresWithLinkNodes(wires) { - let wiresToSplit = wires || RED.view.selectedLinks.toArray(); + let wiresToSplit = wires || RED.view.selection().links; if (!Array.isArray(wiresToSplit)) { wiresToSplit = [wiresToSplit]; } @@ -863,7 +863,7 @@ RED.view.tools = (function() { let nnLinkOut = nodeSrcMap[linkOutMapId]; //Create a Link Out if one is not already present if(!nnLinkOut) { - const nLinkOut = RED.nodes.createNode("link out"); //create link node + const nLinkOut = RED.view.createNode("link out"); //create link node nnLinkOut = nLinkOut.node; nodeSrcMap[linkOutMapId] = nnLinkOut; let yOffset = 0; @@ -899,7 +899,7 @@ RED.view.tools = (function() { let nnLinkIn = nodeTrgMap[nTrg.id]; //Create a Link In if one is not already present if(!nnLinkIn) { - const nLinkIn = RED.nodes.createNode("link in"); //create link node + const nLinkIn = RED.view.createNode("link in"); //create link node nnLinkIn = nLinkIn.node; nodeTrgMap[nTrg.id] = nnLinkIn; updateNewNodePosXY(nTrg, nnLinkIn, true, RED.view.snapGrid, 0); @@ -1031,7 +1031,7 @@ RED.view.tools = (function() { RED.actions.add("core:wire-series-of-nodes", function() { wireSeriesOfNodes() }) RED.actions.add("core:wire-node-to-multiple", function() { wireNodeToMultiple() }) - RED.actions.add("core:split-wire-with-link-nodes",function(){splitWiresWithLinkNodes(RED.view.selectedLinks.length() ? RED.view.selectedLinks.toArray() : null);}); + RED.actions.add("core:split-wire-with-link-nodes", function () { splitWiresWithLinkNodes() }); // RED.actions.add("core:add-node", function() { addNode() }) }, diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/view.js b/packages/node_modules/@node-red/editor-client/src/js/ui/view.js index c20140376..2b05e19a7 100755 --- a/packages/node_modules/@node-red/editor-client/src/js/ui/view.js +++ b/packages/node_modules/@node-red/editor-client/src/js/ui/view.js @@ -449,7 +449,7 @@ RED.view = (function() { drop: function( event, ui ) { d3.event = event; var selected_tool = $(ui.draggable[0]).attr("data-palette-type"); - var result = RED.nodes.createNode(selected_tool); + var result = createNode(selected_tool); if (!result) { return; } @@ -1107,7 +1107,7 @@ RED.view = (function() { keepAdding = false; resetMouseVars(); } - var result = RED.nodes.createNode(type); + var result = createNode(type); if (!result) { return; } @@ -5411,6 +5411,93 @@ RED.view = (function() { return selection; } + /** + * Create a node from a type string. + * **NOTE:** Can throw on error - use `try` `catch` block when calling + * @param {string} type The node type to create + * @param {number} [x] (optional) The horizontal position on the workspace + * @param {number} [y] (optional)The vertical on the workspace + * @param {string} [z] (optional) The flow tab this node will belong to. Defaults to active workspace. + * @returns An object containing the `node` and a `historyEvent` + * @private + */ + function createNode(type, x, y, z) { + var m = /^subflow:(.+)$/.exec(type); + var activeSubflow = z ? RED.nodes.subflow(z) : null; + if (activeSubflow && m) { + var subflowId = m[1]; + if (subflowId === activeSubflow.id) { + throw new Error(RED._("notification.error", { message: RED._("notification.errors.cannotAddSubflowToItself") })) + } + if (RED.nodes.subflowContains(m[1], activeSubflow.id)) { + throw new Error(RED._("notification.error", { message: RED._("notification.errors.cannotAddCircularReference") })) + } + } + + var nn = { id: RED.nodes.id(), z: z || RED.workspaces.active() }; + + nn.type = type; + nn._def = RED.nodes.getType(nn.type); + + if (!m) { + nn.inputs = nn._def.inputs || 0; + nn.outputs = nn._def.outputs; + + for (var d in nn._def.defaults) { + if (nn._def.defaults.hasOwnProperty(d)) { + if (nn._def.defaults[d].value !== undefined) { + nn[d] = JSON.parse(JSON.stringify(nn._def.defaults[d].value)); + } + } + } + + if (nn._def.onadd) { + try { + nn._def.onadd.call(nn); + } catch (err) { + console.log("Definition error: " + nn.type + ".onadd:", err); + } + } + } else { + var subflow = RED.nodes.subflow(m[1]); + nn.name = ""; + nn.inputs = subflow.in.length; + nn.outputs = subflow.out.length; + } + + nn.changed = true; + nn.moved = true; + + nn.w = RED.view.node_width; + nn.h = Math.max(RED.view.node_height, (nn.outputs || 0) * 15); + nn.resize = true; + if (x != null && typeof x == "number" && x >= 0) { + nn.x = x; + } + if (y != null && typeof y == "number" && y >= 0) { + nn.y = y; + } + var historyEvent = { + t: "add", + nodes: [nn.id], + dirty: RED.nodes.dirty() + } + if (activeSubflow) { + var subflowRefresh = RED.subflow.refresh(true); + if (subflowRefresh) { + historyEvent.subflow = { + id: activeSubflow.id, + changed: activeSubflow.changed, + instances: subflowRefresh.instances + } + } + } + return { + node: nn, + historyEvent: historyEvent + } + } + function calculateNodeDimensions(node) { var result = [node_width,node_height]; try { @@ -5495,9 +5582,7 @@ RED.view = (function() { }, selection: getSelection, clearSelection: clearSelection, - get selectedLinks() { - return selectedLinks; - }, + createNode: createNode, /** default node width */ get node_width() { return node_width;