@node-red/editor-client 2.2.0 → 2.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@node-red/editor-client",
3
- "version": "2.2.0",
3
+ "version": "2.2.1",
4
4
  "license": "Apache-2.0",
5
5
  "repository": {
6
6
  "type": "git",
package/public/red/about CHANGED
@@ -1,3 +1,28 @@
1
+ #### 2.2.1: Maintenance Release
2
+
3
+ Editor
4
+
5
+ - Handle mixed-cased filter terms in keyboard shortcut dialog (#3444) @knolleary
6
+ - Prevent duplicate links being added between nodes (#3442) @knolleary
7
+ - Fix to hide tooltip after removing subflow tab (#3391) @HiroyasuNishiyama
8
+ - Fix node validation to be applied to config node (#3397) @HiroyasuNishiyama
9
+ - Fix: Dont add wires to undo buffer twice (#3437) @Steve-Mcl
10
+
11
+ Runtime
12
+
13
+ - Improve module location parsing (of stack info) when adding hook (#3447) @Steve-Mcl
14
+ - Fix substitution of NR_NODE_PATH (#3445) @HiroyasuNishiyama
15
+ - Remove console.log when ignoring disabled module (#3439) @knolleary
16
+ - Improve "Unexpected Node Error" logging (#3446) @Steve-Mcl
17
+
18
+ Nodes
19
+
20
+ - Debug: Fix no-prototype-builtins bug in debug node and utils (#3394) @Alkarex
21
+ - Delay: Fix Japanese message of delay node (#3434)
22
+ - Allow nbRateUnits to be undefined when validating (#3443) @knolleary
23
+ - Coding help for recently added node-red Predefined Environment Variables (#3440) @Steve-Mcl
24
+
25
+
1
26
  #### 2.2.0: Milestone Release
2
27
 
3
28
  Editor
package/public/red/red.js CHANGED
@@ -4190,6 +4190,14 @@ RED.nodes = (function() {
4190
4190
  RED.events.emit('nodes:add',n);
4191
4191
  }
4192
4192
  function addLink(l) {
4193
+ if (nodeLinks[l.source.id]) {
4194
+ const isUnique = nodeLinks[l.source.id].out.every(function(link) {
4195
+ return link.sourcePort !== l.sourcePort || link.target.id !== l.target.id
4196
+ })
4197
+ if (!isUnique) {
4198
+ return
4199
+ }
4200
+ }
4193
4201
  links.push(l);
4194
4202
  if (l.source) {
4195
4203
  // Possible the node hasn't been added yet
@@ -11654,6 +11662,15 @@ RED.popover = (function() {
11654
11662
  }
11655
11663
  }
11656
11664
 
11665
+ target.on("remove", function (ev) {
11666
+ if (timer) {
11667
+ clearTimeout(timer);
11668
+ }
11669
+ if (active) {
11670
+ active = false;
11671
+ setTimeout(closePopup,delay.hide);
11672
+ }
11673
+ });
11657
11674
  if (trigger === 'hover') {
11658
11675
  target.on('mouseenter',function(e) {
11659
11676
  clearTimeout(timer);
@@ -15238,6 +15255,9 @@ RED.deploy = (function() {
15238
15255
  var invalidNodes = [];
15239
15256
 
15240
15257
  RED.nodes.eachConfig(function(node) {
15258
+ if (node.valid === undefined) {
15259
+ RED.editor.validateNode(node);
15260
+ }
15241
15261
  if (!node.valid && !node.d) {
15242
15262
  invalidNodes.push(getNodeInfo(node));
15243
15263
  }
@@ -18292,7 +18312,7 @@ RED.keyboard = (function() {
18292
18312
  pane.find("#red-ui-settings-tab-keyboard-filter").searchBox({
18293
18313
  delay: 100,
18294
18314
  change: function() {
18295
- var filterValue = $(this).val().trim();
18315
+ var filterValue = $(this).val().trim().toLowerCase();
18296
18316
  if (filterValue === "") {
18297
18317
  shortcutList.editableList('filter', null);
18298
18318
  } else {
@@ -21352,14 +21372,21 @@ RED.view = (function() {
21352
21372
  var removedSubflowStatus;
21353
21373
  var subflowInstances = [];
21354
21374
  var historyEvents = [];
21355
-
21375
+ var addToRemovedLinks = function(links) {
21376
+ if(!links) { return; }
21377
+ var _links = Array.isArray(links) ? links : [links];
21378
+ _links.forEach(function(l) {
21379
+ removedLinks.push(l);
21380
+ selectedLinks.remove(l);
21381
+ })
21382
+ }
21356
21383
  if (reconnectWires) {
21357
21384
  var reconnectResult = RED.nodes.detachNodes(movingSet.nodes())
21358
21385
  var addedLinks = reconnectResult.newLinks;
21359
21386
  if (addedLinks.length > 0) {
21360
21387
  historyEvents.push({ t:'add', links: addedLinks })
21361
21388
  }
21362
- removedLinks = removedLinks.concat(reconnectResult.removedLinks)
21389
+ addToRemovedLinks(reconnectResult.removedLinks)
21363
21390
  }
21364
21391
 
21365
21392
  var startDirty = RED.nodes.dirty();
@@ -21391,7 +21418,7 @@ RED.view = (function() {
21391
21418
  var removedEntities = RED.nodes.remove(node.id);
21392
21419
  removedNodes.push(node);
21393
21420
  removedNodes = removedNodes.concat(removedEntities.nodes);
21394
- removedLinks = removedLinks.concat(removedEntities.links);
21421
+ addToRemovedLinks(removedNodes.removedLinks);
21395
21422
  if (node.g) {
21396
21423
  var group = RED.nodes.group(node.g);
21397
21424
  if (selectedGroups.indexOf(group) === -1) {
@@ -21424,20 +21451,20 @@ RED.view = (function() {
21424
21451
  if (removedSubflowOutputs.length > 0) {
21425
21452
  result = RED.subflow.removeOutput(removedSubflowOutputs);
21426
21453
  if (result) {
21427
- removedLinks = removedLinks.concat(result.links);
21454
+ addToRemovedLinks(result.links);
21428
21455
  }
21429
21456
  }
21430
21457
  // Assume 0/1 inputs
21431
21458
  if (removedSubflowInputs.length == 1) {
21432
21459
  result = RED.subflow.removeInput();
21433
21460
  if (result) {
21434
- removedLinks = removedLinks.concat(result.links);
21461
+ addToRemovedLinks(result.links);
21435
21462
  }
21436
21463
  }
21437
21464
  if (removedSubflowStatus) {
21438
21465
  result = RED.subflow.removeStatus();
21439
21466
  if (result) {
21440
- removedLinks = removedLinks.concat(result.links);
21467
+ addToRemovedLinks(result.links);
21441
21468
  }
21442
21469
  }
21443
21470
 
@@ -37058,7 +37085,7 @@ RED.editor.codeEditor.monaco = (function() {
37058
37085
  createMonacoCompletionItem("set (flow context)", 'flow.set("${1:name}", ${1:value});','Set a value in flow context',range),
37059
37086
  createMonacoCompletionItem("get (global context)", 'global.get("${1:name}");','Get a value from global context',range),
37060
37087
  createMonacoCompletionItem("set (global context)", 'global.set("${1:name}", ${1:value});','Set a value in global context',range),
37061
- createMonacoCompletionItem("get (env)", 'env.get("${1:name}");','Get env variable value',range),
37088
+ createMonacoCompletionItem("get (env)", 'env.get("${1|NR_NODE_ID,NR_NODE_NAME,NR_NODE_PATH,NR_GROUP_ID,NR_GROUP_NAME,NR_FLOW_ID,NR_FLOW_NAME|}");','Get env variable value',range),
37062
37089
  createMonacoCompletionItem("cloneMessage (RED.util)", 'RED.util.cloneMessage(${1:msg});',
37063
37090
  ["```typescript",
37064
37091
  "RED.util.cloneMessage<T extends registry.NodeMessage>(msg: T): T",