From 908f9562f6e2ffcdb10280a42c9912c08f108b83 Mon Sep 17 00:00:00 2001 From: Nick O'Leary Date: Tue, 19 Apr 2022 19:17:41 +0100 Subject: [PATCH] Fix name auto-generator to leave blank names alone on copy/paste --- .../editor-client/src/js/ui/view-tools.js | 25 ++++++++++++++----- .../@node-red/editor-client/src/js/ui/view.js | 19 ++++++++++---- .../@node-red/nodes/core/common/21-debug.html | 7 ++++-- .../@node-red/nodes/core/common/60-link.html | 22 ++++++++++------ 4 files changed, 52 insertions(+), 21 deletions(-) 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 0281ab94e..699e5f222 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 @@ -977,18 +977,31 @@ RED.view.tools = (function() { * doesn't clash with any existing nodes of that type * @param {Object} node The node to set the name of - if not provided, uses current selection */ - function generateNodeNames(node) { - const nodes = node?[node]:RED.view.selection().nodes; + function generateNodeNames(node, options) { + options = options || { + renameBlank: true, + renameClash: true, + generateHistory: true + } + let nodes = node; + if (node) { + if (!Array.isArray(node)) { + nodes = [ node ] + } + } else { + nodes = RED.view.selection().nodes; + } if (nodes && nodes.length > 0) { // Generate history event if using the workspace selection, // or if the provided node already exists - const generateHistory = !node || !!RED.nodes.node(node.id) + const generateHistory = options.generateHistory && (!node || !!RED.nodes.node(node.id)) const historyEvents = [] const typeIndex = {} let changed = false; nodes.forEach(n => { - if (n._def && n._def.defaults && n._def.defaults.name) { - const paletteLabel = RED.utils.getPaletteLabel(n.type, n._def) + const nodeDef = n._def || RED.nodes.getType(n.type) + if (nodeDef && nodeDef.defaults && nodeDef.defaults.name) { + const paletteLabel = RED.utils.getPaletteLabel(n.type, nodeDef) const defaultNodeNameRE = new RegExp('^'+paletteLabel+' (\\d+)$') if (!typeIndex.hasOwnProperty(n.type)) { const existingNodes = RED.nodes.filterNodes({type: n.type}) @@ -1004,7 +1017,7 @@ RED.view.tools = (function() { }) typeIndex[n.type] = maxNameNumber + 1 } - if (n.name === '') { + if ((options.renameBlank && n.name === '') || (options.renameClash && defaultNodeNameRE.test(n.name))) { if (generateHistory) { historyEvents.push({ t:'edit', 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 de000fd56..7ff302944 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 @@ -455,7 +455,7 @@ RED.view = (function() { } }); - //add search to status-toolbar + //add search to status-toolbar RED.statusBar.add({ id: "view-search-tools", align: "left", @@ -604,7 +604,7 @@ RED.view = (function() { RED.actions.add("core:copy-selection-to-internal-clipboard",copySelection); RED.actions.add("core:cut-selection-to-internal-clipboard",function(){copySelection();deleteSelection();}); - RED.actions.add("core:paste-from-internal-clipboard",function(){importNodes(clipboard,{generateIds: true});}); + RED.actions.add("core:paste-from-internal-clipboard",function(){importNodes(clipboard,{generateIds: true, generateDefaultNames: true});}); RED.actions.add("core:detach-selected-nodes", function() { detachSelectedNodes() }) @@ -3480,7 +3480,6 @@ RED.view = (function() { enterActiveGroup(ag); activeGroup.selected = true; } - console.log(d3.event); var cnodes = RED.nodes.getAllFlowNodes(mousedown_node); for (var n=0;n