@node-red/editor-client 3.1.8 → 3.1.10

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.
@@ -719,6 +719,7 @@
719
719
  "nodeHelp": "Node Help",
720
720
  "showHelp": "Show help",
721
721
  "showInOutline": "Show in outline",
722
+ "hideTopics": "Hide topics",
722
723
  "showTopics": "Show topics",
723
724
  "noHelp": "No help topic selected",
724
725
  "changeLog": "Change Log"
@@ -914,6 +915,8 @@
914
915
  }
915
916
  },
916
917
  "typedInput": {
918
+ "selected": "__count__ selected",
919
+ "selected_plural": "__count__ selected",
917
920
  "type": {
918
921
  "str": "string",
919
922
  "num": "number",
@@ -719,6 +719,7 @@
719
719
  "nodeHelp": "Aide sur les noeuds",
720
720
  "showHelp": "Afficher l'aide",
721
721
  "showInOutline": "Afficher dans les grandes lignes",
722
+ "hideTopics": "Masquer les sujets",
722
723
  "showTopics": "Afficher les sujets",
723
724
  "noHelp": "Aucune rubrique d'aide sélectionnée",
724
725
  "changeLog": "Journal des modifications"
@@ -914,6 +915,8 @@
914
915
  }
915
916
  },
916
917
  "typedInput": {
918
+ "selected": "__count__ sélectionnée",
919
+ "selected_plural": "__count__ sélectionnées",
917
920
  "type": {
918
921
  "str": "chaîne de caractères",
919
922
  "num": "nombre",
@@ -719,6 +719,7 @@
719
719
  "nodeHelp": "ノードヘルプ",
720
720
  "showHelp": "ヘルプを表示",
721
721
  "showInOutline": "アウトラインに表示",
722
+ "hideTopics": "トピックを非表示",
722
723
  "showTopics": "トピックを表示",
723
724
  "noHelp": "ヘルプのトピックが未選択",
724
725
  "changeLog": "更新履歴"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@node-red/editor-client",
3
- "version": "3.1.8",
3
+ "version": "3.1.10",
4
4
  "license": "Apache-2.0",
5
5
  "repository": {
6
6
  "type": "git",
package/public/red/about CHANGED
@@ -1,3 +1,33 @@
1
+ #### 3.1.10: Maintenance Release
2
+
3
+ - Include rewired nodes when calculating Modified Flows stop list (#4754) @knolleary
4
+ - Fix clone of group env var properties (#4753) @knolleary
5
+ - Fix losing links when importing a copy of links into a subflow (#4750) @GogoVega
6
+ - Ensure all CSS variables are in the output file (#3743) @bonanitech
7
+ - Fix the Sidebar Config is not refreshed after a deploy (#4734) @GogoVega
8
+ - Fix checkboxes are not updated when calling `typedInput("value", "")` (#4729) @GogoVega
9
+ - Fix panning with middle mouse button on windows 10/11 (#4716) @corentin-sodebo-voile
10
+ - Add Japanese translation for sidebar tooltip (#4727) @kazuhitoyokoi
11
+ - Translate the number of items selected in the options list (#4730) @GogoVega
12
+ - Fix a checkbox should return a Boolean value and not the string `on` (#4715) @GogoVega
13
+ - Deleting a grouped node should update the group (#4714) @GogoVega
14
+ - Change the Config Node cursor to `pointer` (#4711) @GogoVega
15
+ - Add missing tooltips to Sidebar (#4713) @GogoVega
16
+ - Allow nodes to return additional history entries in onEditSave (#4710) @knolleary
17
+ - Pass full error object in Function node and copy over cause property (#4685) @knolleary
18
+ - Replacing vm.createScript in favour of vm.Script (#4534) @patlux
19
+ - Avoid login loops when autoLogin enabled but login fails (#4684) @knolleary
20
+ - Fix undo of subflow env property edits (#4667) @knolleary
21
+ - Fix three error typos in monaco.js (#4660) @JoshuaCWebDeveloper
22
+ - docs: Add closing paragraph tag (#4664) @ZJvandeWeg
23
+
24
+ #### 3.1.9: Maintenance Release
25
+
26
+ - Prevent subflow being added to itself (#4654) @knolleary
27
+ - Fix use of spawn on windows with cmd files (#4652) @knolleary
28
+ - Guard refresh of unknown subflow (#4640) @knolleary
29
+ - Fix subflow module sending messages to debug sidebar (#4642) @knolleary
30
+
1
31
  #### 3.1.8: Maintenance Release
2
32
 
3
33
  - Add validation and error handling on subflow instance properties (#4632) @knolleary
package/public/red/red.js CHANGED
@@ -6096,6 +6096,13 @@ RED.nodes = (function() {
6096
6096
  } else {
6097
6097
  delete n.g
6098
6098
  }
6099
+ // If importing into a subflow, ensure an outbound-link doesn't get added
6100
+ if (activeSubflow && /^link /.test(n.type) && n.links) {
6101
+ n.links = n.links.filter(function(id) {
6102
+ const otherNode = node_map[id] || RED.nodes.node(id);
6103
+ return (otherNode && otherNode.z === activeWorkspace);
6104
+ });
6105
+ }
6099
6106
  for (var d3 in n._def.defaults) {
6100
6107
  if (n._def.defaults.hasOwnProperty(d3)) {
6101
6108
  if (n._def.defaults[d3].type) {
@@ -6119,14 +6126,6 @@ RED.nodes = (function() {
6119
6126
  }
6120
6127
  }
6121
6128
  }
6122
- // If importing into a subflow, ensure an outbound-link doesn't
6123
- // get added
6124
- if (activeSubflow && /^link /.test(n.type) && n.links) {
6125
- n.links = n.links.filter(function(id) {
6126
- const otherNode = node_map[id] || RED.nodes.node(id);
6127
- return (otherNode && otherNode.z === activeWorkspace)
6128
- });
6129
- }
6130
6129
  }
6131
6130
  for (i=0;i<new_subflows.length;i++) {
6132
6131
  n = new_subflows[i];
@@ -14851,12 +14850,12 @@ RED.stack = (function() {
14851
14850
  }
14852
14851
  if (menu.opts.multiple) {
14853
14852
  var selected = {};
14854
- this.value().split(",").forEach(function(f) {
14855
- selected[f] = true;
14856
- })
14853
+ this.value().split(",").forEach(function(f) {
14854
+ selected[f] = true;
14855
+ });
14857
14856
  menu.find('input[type="checkbox"]').each(function() {
14858
- $(this).prop("checked",selected[$(this).data('value')])
14859
- })
14857
+ $(this).prop("checked", selected[$(this).data('value')] || false);
14858
+ });
14860
14859
  }
14861
14860
 
14862
14861
 
@@ -14947,7 +14946,7 @@ RED.stack = (function() {
14947
14946
  this.input.trigger('change',[this.propertyType,this.value()]);
14948
14947
  }
14949
14948
  } else {
14950
- this.optionSelectLabel.text(o.length+" selected");
14949
+ this.optionSelectLabel.text(RED._("typedInput.selected", { count: o.length }));
14951
14950
  }
14952
14951
  }
14953
14952
  },
@@ -16355,7 +16354,10 @@ RED.deploy = (function() {
16355
16354
  }
16356
16355
  });
16357
16356
  RED.nodes.eachSubflow(function (subflow) {
16358
- subflow.changed = false;
16357
+ if (subflow.changed) {
16358
+ subflow.changed = false;
16359
+ RED.events.emit("subflows:change", subflow);
16360
+ }
16359
16361
  });
16360
16362
  RED.nodes.eachWorkspace(function (ws) {
16361
16363
  if (ws.changed || ws.added) {
@@ -16371,6 +16373,7 @@ RED.deploy = (function() {
16371
16373
  // Once deployed, cannot undo back to a clean state
16372
16374
  RED.history.markAllDirty();
16373
16375
  RED.view.redraw();
16376
+ RED.sidebar.config.refresh();
16374
16377
  RED.events.emit("deploy");
16375
16378
  }).fail(function (xhr, textStatus, err) {
16376
16379
  RED.nodes.dirty(true);
@@ -21212,120 +21215,128 @@ RED.view = (function() {
21212
21215
  }
21213
21216
  d3.event = event;
21214
21217
  var selected_tool = $(ui.draggable[0]).attr("data-palette-type");
21215
- var result = createNode(selected_tool);
21216
- if (!result) {
21217
- return;
21218
- }
21219
- var historyEvent = result.historyEvent;
21220
- var nn = RED.nodes.add(result.node);
21218
+ try {
21219
+ var result = createNode(selected_tool);
21220
+ if (!result) {
21221
+ return;
21222
+ }
21223
+ var historyEvent = result.historyEvent;
21224
+ var nn = RED.nodes.add(result.node);
21221
21225
 
21222
- var showLabel = RED.utils.getMessageProperty(RED.settings.get('editor'),"view.view-node-show-label");
21223
- if (showLabel !== undefined && (nn._def.hasOwnProperty("showLabel")?nn._def.showLabel:true) && !nn._def.defaults.hasOwnProperty("l")) {
21224
- nn.l = showLabel;
21225
- }
21226
+ var showLabel = RED.utils.getMessageProperty(RED.settings.get('editor'),"view.view-node-show-label");
21227
+ if (showLabel !== undefined && (nn._def.hasOwnProperty("showLabel")?nn._def.showLabel:true) && !nn._def.defaults.hasOwnProperty("l")) {
21228
+ nn.l = showLabel;
21229
+ }
21226
21230
 
21227
- var helperOffset = d3.touches(ui.helper.get(0))[0]||d3.mouse(ui.helper.get(0));
21228
- var helperWidth = ui.helper.width();
21229
- var helperHeight = ui.helper.height();
21230
- var mousePos = d3.touches(this)[0]||d3.mouse(this);
21231
+ var helperOffset = d3.touches(ui.helper.get(0))[0]||d3.mouse(ui.helper.get(0));
21232
+ var helperWidth = ui.helper.width();
21233
+ var helperHeight = ui.helper.height();
21234
+ var mousePos = d3.touches(this)[0]||d3.mouse(this);
21231
21235
 
21232
- try {
21233
- var isLink = (nn.type === "link in" || nn.type === "link out")
21234
- var hideLabel = nn.hasOwnProperty('l')?!nn.l : isLink;
21235
-
21236
- var label = RED.utils.getNodeLabel(nn, nn.type);
21237
- var labelParts = getLabelParts(label, "red-ui-flow-node-label");
21238
- if (hideLabel) {
21239
- nn.w = node_height;
21240
- nn.h = Math.max(node_height,(nn.outputs || 0) * 15);
21241
- } else {
21242
- nn.w = Math.max(node_width,20*(Math.ceil((labelParts.width+50+(nn._def.inputs>0?7:0))/20)) );
21243
- nn.h = Math.max(6+24*labelParts.lines.length,(nn.outputs || 0) * 15, 30);
21244
- }
21245
- } catch(err) {
21246
- }
21236
+ try {
21237
+ var isLink = (nn.type === "link in" || nn.type === "link out")
21238
+ var hideLabel = nn.hasOwnProperty('l')?!nn.l : isLink;
21247
21239
 
21248
- mousePos[1] += this.scrollTop + ((helperHeight/2)-helperOffset[1]);
21249
- mousePos[0] += this.scrollLeft + ((helperWidth/2)-helperOffset[0]);
21250
- mousePos[1] /= scaleFactor;
21251
- mousePos[0] /= scaleFactor;
21240
+ var label = RED.utils.getNodeLabel(nn, nn.type);
21241
+ var labelParts = getLabelParts(label, "red-ui-flow-node-label");
21242
+ if (hideLabel) {
21243
+ nn.w = node_height;
21244
+ nn.h = Math.max(node_height,(nn.outputs || 0) * 15);
21245
+ } else {
21246
+ nn.w = Math.max(node_width,20*(Math.ceil((labelParts.width+50+(nn._def.inputs>0?7:0))/20)) );
21247
+ nn.h = Math.max(6+24*labelParts.lines.length,(nn.outputs || 0) * 15, 30);
21248
+ }
21249
+ } catch(err) {
21250
+ }
21252
21251
 
21253
- nn.x = mousePos[0];
21254
- nn.y = mousePos[1];
21252
+ mousePos[1] += this.scrollTop + ((helperHeight/2)-helperOffset[1]);
21253
+ mousePos[0] += this.scrollLeft + ((helperWidth/2)-helperOffset[0]);
21254
+ mousePos[1] /= scaleFactor;
21255
+ mousePos[0] /= scaleFactor;
21255
21256
 
21256
- var minX = nn.w/2 -5;
21257
- if (nn.x < minX) {
21258
- nn.x = minX;
21259
- }
21260
- var minY = nn.h/2 -5;
21261
- if (nn.y < minY) {
21262
- nn.y = minY;
21263
- }
21264
- var maxX = space_width -nn.w/2 +5;
21265
- if (nn.x > maxX) {
21266
- nn.x = maxX;
21267
- }
21268
- var maxY = space_height -nn.h +5;
21269
- if (nn.y > maxY) {
21270
- nn.y = maxY;
21271
- }
21257
+ nn.x = mousePos[0];
21258
+ nn.y = mousePos[1];
21272
21259
 
21273
- if (snapGrid) {
21274
- var gridOffset = RED.view.tools.calculateGridSnapOffsets(nn);
21275
- nn.x -= gridOffset.x;
21276
- nn.y -= gridOffset.y;
21277
- }
21260
+ var minX = nn.w/2 -5;
21261
+ if (nn.x < minX) {
21262
+ nn.x = minX;
21263
+ }
21264
+ var minY = nn.h/2 -5;
21265
+ if (nn.y < minY) {
21266
+ nn.y = minY;
21267
+ }
21268
+ var maxX = space_width -nn.w/2 +5;
21269
+ if (nn.x > maxX) {
21270
+ nn.x = maxX;
21271
+ }
21272
+ var maxY = space_height -nn.h +5;
21273
+ if (nn.y > maxY) {
21274
+ nn.y = maxY;
21275
+ }
21278
21276
 
21279
- var linkToSplice = $(ui.helper).data("splice");
21280
- if (linkToSplice) {
21281
- spliceLink(linkToSplice, nn, historyEvent)
21282
- }
21277
+ if (snapGrid) {
21278
+ var gridOffset = RED.view.tools.calculateGridSnapOffsets(nn);
21279
+ nn.x -= gridOffset.x;
21280
+ nn.y -= gridOffset.y;
21281
+ }
21283
21282
 
21284
- var group = $(ui.helper).data("group");
21285
- if (group) {
21286
- var oldX = group.x;
21287
- var oldY = group.y;
21288
- RED.group.addToGroup(group, nn);
21289
- var moveEvent = null;
21290
- if ((group.x !== oldX) ||
21291
- (group.y !== oldY)) {
21292
- moveEvent = {
21293
- t: "move",
21294
- nodes: [{n: group,
21295
- ox: oldX, oy: oldY,
21296
- dx: group.x -oldX,
21297
- dy: group.y -oldY}],
21298
- dirty: true
21299
- };
21283
+ var linkToSplice = $(ui.helper).data("splice");
21284
+ if (linkToSplice) {
21285
+ spliceLink(linkToSplice, nn, historyEvent)
21300
21286
  }
21301
- historyEvent = {
21302
- t: 'multi',
21303
- events: [historyEvent],
21304
21287
 
21305
- };
21306
- if (moveEvent) {
21307
- historyEvent.events.push(moveEvent)
21288
+ var group = $(ui.helper).data("group");
21289
+ if (group) {
21290
+ var oldX = group.x;
21291
+ var oldY = group.y;
21292
+ RED.group.addToGroup(group, nn);
21293
+ var moveEvent = null;
21294
+ if ((group.x !== oldX) ||
21295
+ (group.y !== oldY)) {
21296
+ moveEvent = {
21297
+ t: "move",
21298
+ nodes: [{n: group,
21299
+ ox: oldX, oy: oldY,
21300
+ dx: group.x -oldX,
21301
+ dy: group.y -oldY}],
21302
+ dirty: true
21303
+ };
21304
+ }
21305
+ historyEvent = {
21306
+ t: 'multi',
21307
+ events: [historyEvent],
21308
+
21309
+ };
21310
+ if (moveEvent) {
21311
+ historyEvent.events.push(moveEvent)
21312
+ }
21313
+ historyEvent.events.push({
21314
+ t: "addToGroup",
21315
+ group: group,
21316
+ nodes: nn
21317
+ })
21308
21318
  }
21309
- historyEvent.events.push({
21310
- t: "addToGroup",
21311
- group: group,
21312
- nodes: nn
21313
- })
21314
- }
21315
21319
 
21316
- RED.history.push(historyEvent);
21317
- RED.editor.validateNode(nn);
21318
- RED.nodes.dirty(true);
21319
- // auto select dropped node - so info shows (if visible)
21320
- clearSelection();
21321
- nn.selected = true;
21322
- movingSet.add(nn);
21323
- updateActiveNodes();
21324
- updateSelection();
21325
- redraw();
21320
+ RED.history.push(historyEvent);
21321
+ RED.editor.validateNode(nn);
21322
+ RED.nodes.dirty(true);
21323
+ // auto select dropped node - so info shows (if visible)
21324
+ clearSelection();
21325
+ nn.selected = true;
21326
+ movingSet.add(nn);
21327
+ updateActiveNodes();
21328
+ updateSelection();
21329
+ redraw();
21326
21330
 
21327
- if (nn._def.autoedit) {
21328
- RED.editor.edit(nn);
21331
+ if (nn._def.autoedit) {
21332
+ RED.editor.edit(nn);
21333
+ }
21334
+ } catch (error) {
21335
+ if (error.code != "NODE_RED") {
21336
+ RED.notify(RED._("notification.error",{message:error.toString()}),"error");
21337
+ } else {
21338
+ RED.notify(RED._("notification.error",{message:error.message}),"error");
21339
+ }
21329
21340
  }
21330
21341
  }
21331
21342
  });
@@ -21748,6 +21759,7 @@ RED.view = (function() {
21748
21759
 
21749
21760
  if (d3.event.button === 1) {
21750
21761
  // Middle Click pan
21762
+ d3.event.preventDefault();
21751
21763
  mouse_mode = RED.state.PANNING;
21752
21764
  mouse_position = [d3.event.pageX,d3.event.pageY]
21753
21765
  scroll_position = [chart.scrollLeft(),chart.scrollTop()];
@@ -26629,14 +26641,19 @@ RED.view = (function() {
26629
26641
  function createNode(type, x, y, z) {
26630
26642
  const wasDirty = RED.nodes.dirty()
26631
26643
  var m = /^subflow:(.+)$/.exec(type);
26632
- var activeSubflow = z ? RED.nodes.subflow(z) : null;
26644
+ var activeSubflow = (z || RED.workspaces.active()) ? RED.nodes.subflow(z || RED.workspaces.active()) : null;
26645
+
26633
26646
  if (activeSubflow && m) {
26634
26647
  var subflowId = m[1];
26648
+ let err
26635
26649
  if (subflowId === activeSubflow.id) {
26636
- throw new Error(RED._("notification.error", { message: RED._("notification.errors.cannotAddSubflowToItself") }))
26650
+ err = new Error(RED._("notification.errors.cannotAddSubflowToItself"))
26651
+ } else if (RED.nodes.subflowContains(m[1], activeSubflow.id)) {
26652
+ err = new Error(RED._("notification.errors.cannotAddCircularReference"))
26637
26653
  }
26638
- if (RED.nodes.subflowContains(m[1], activeSubflow.id)) {
26639
- throw new Error(RED._("notification.error", { message: RED._("notification.errors.cannotAddCircularReference") }))
26654
+ if (err) {
26655
+ err.code = 'NODE_RED'
26656
+ throw err
26640
26657
  }
26641
26658
  }
26642
26659
 
@@ -31092,7 +31109,13 @@ RED.sidebar.help = (function() {
31092
31109
  toolbar = $("<div>", {class:"red-ui-sidebar-header red-ui-info-toolbar"}).appendTo(content);
31093
31110
  $('<span class="button-group"><a id="red-ui-sidebar-help-show-toc" class="red-ui-button red-ui-button-small selected" href="#"><i class="fa fa-list-ul"></i></a></span>').appendTo(toolbar)
31094
31111
  var showTOCButton = toolbar.find('#red-ui-sidebar-help-show-toc')
31095
- RED.popover.tooltip(showTOCButton,RED._("sidebar.help.showTopics"));
31112
+ RED.popover.tooltip(showTOCButton, function () {
31113
+ if ($(showTOCButton).hasClass('selected')) {
31114
+ return RED._("sidebar.help.hideTopics");
31115
+ } else {
31116
+ return RED._("sidebar.help.showTopics");
31117
+ }
31118
+ });
31096
31119
  showTOCButton.on("click",function(e) {
31097
31120
  e.preventDefault();
31098
31121
  if ($(this).hasClass('selected')) {
@@ -31214,8 +31237,10 @@ RED.sidebar.help = (function() {
31214
31237
 
31215
31238
  function refreshSubflow(sf) {
31216
31239
  var item = treeList.treeList('get',"node-type:subflow:"+sf.id);
31217
- item.subflowLabel = sf._def.label().toLowerCase();
31218
- item.treeList.replaceElement(getNodeLabel({_def:sf._def,type:sf._def.label()}));
31240
+ if (item) {
31241
+ item.subflowLabel = sf._def.label().toLowerCase();
31242
+ item.treeList.replaceElement(getNodeLabel({_def:sf._def,type:sf._def.label()}));
31243
+ }
31219
31244
  }
31220
31245
 
31221
31246
  function hideTOC() {
@@ -31934,9 +31959,11 @@ RED.sidebar.config = (function() {
31934
31959
  refreshConfigNodeList();
31935
31960
  }
31936
31961
  });
31962
+
31937
31963
  RED.popover.tooltip($('#red-ui-sidebar-config-filter-all'), RED._("sidebar.config.showAllConfigNodes"));
31938
31964
  RED.popover.tooltip($('#red-ui-sidebar-config-filter-unused'), RED._("sidebar.config.showAllUnusedConfigNodes"));
31939
-
31965
+ RED.popover.tooltip($('#red-ui-sidebar-config-collapse-all'), RED._("palette.actions.collapse-all"));
31966
+ RED.popover.tooltip($('#red-ui-sidebar-config-expand-all'), RED._("palette.actions.expand-all"));
31940
31967
  }
31941
31968
 
31942
31969
  function flashConfigNode(el) {
@@ -33897,6 +33924,8 @@ RED.editor = (function() {
33897
33924
  var value = input.val();
33898
33925
  if (defaults[property].hasOwnProperty("format") && defaults[property].format !== "" && input[0].nodeName === "DIV") {
33899
33926
  value = input.text();
33927
+ } else if (input.attr("type") === "checkbox") {
33928
+ value = input.prop("checked");
33900
33929
  }
33901
33930
  var valid = validateNodeProperty(node, defaults, property,value);
33902
33931
  if (((typeof valid) === "string") || !valid) {
@@ -34390,9 +34419,16 @@ RED.editor = (function() {
34390
34419
  }
34391
34420
 
34392
34421
  try {
34393
- var rc = editing_node._def.oneditsave.call(editing_node);
34422
+ const rc = editing_node._def.oneditsave.call(editing_node);
34394
34423
  if (rc === true) {
34395
34424
  editState.changed = true;
34425
+ } else if (typeof rc === 'object' && rc !== null ) {
34426
+ if (rc.changed === true) {
34427
+ editState.changed = true
34428
+ }
34429
+ if (Array.isArray(rc.history) && rc.history.length > 0) {
34430
+ editState.history = rc.history
34431
+ }
34396
34432
  }
34397
34433
  } catch(err) {
34398
34434
  console.warn("oneditsave",editing_node.id,editing_node.type,err.toString());
@@ -34563,6 +34599,17 @@ RED.editor = (function() {
34563
34599
  dirty: startDirty
34564
34600
  }
34565
34601
 
34602
+ if (editing_node.g) {
34603
+ const group = RED.nodes.group(editing_node.g);
34604
+ // Don't use RED.group.removeFromGroup as that emits
34605
+ // a change event on the node - but we're deleting it
34606
+ const index = group?.nodes.indexOf(editing_node) ?? -1;
34607
+ if (index > -1) {
34608
+ group.nodes.splice(index, 1);
34609
+ RED.group.markDirty(group);
34610
+ }
34611
+ }
34612
+
34566
34613
  RED.nodes.dirty(true);
34567
34614
  RED.view.redraw(true);
34568
34615
  RED.history.push(historyEvent);
@@ -34664,7 +34711,7 @@ RED.editor = (function() {
34664
34711
  }
34665
34712
  });
34666
34713
  }
34667
- var historyEvent = {
34714
+ let historyEvent = {
34668
34715
  t:'edit',
34669
34716
  node:editing_node,
34670
34717
  changes:editState.changes,
@@ -34680,6 +34727,15 @@ RED.editor = (function() {
34680
34727
  instances:subflowInstances
34681
34728
  }
34682
34729
  }
34730
+
34731
+ if (editState.history) {
34732
+ historyEvent = {
34733
+ t: 'multi',
34734
+ events: [ historyEvent, ...editState.history ],
34735
+ dirty: wasDirty
34736
+ }
34737
+ }
34738
+
34683
34739
  RED.history.push(historyEvent);
34684
34740
  }
34685
34741
  editing_node.dirty = true;
@@ -35272,8 +35328,8 @@ RED.editor = (function() {
35272
35328
  }
35273
35329
 
35274
35330
  if (!isSameObj(old_env, new_env)) {
35275
- editing_node.env = new_env;
35276
35331
  editState.changes.env = editing_node.env;
35332
+ editing_node.env = new_env;
35277
35333
  editState.changed = true;
35278
35334
  }
35279
35335
 
@@ -40458,7 +40514,7 @@ RED.editor.codeEditor.monaco = (function() {
40458
40514
  _monaco.languages.json.jsonDefaults.setDiagnosticsOptions(diagnosticOptions);
40459
40515
  if(modeConfiguration) { _monaco.languages.json.jsonDefaults.setModeConfiguration(modeConfiguration); }
40460
40516
  } catch (error) {
40461
- console.warn("monaco - Error setting up json options", err)
40517
+ console.warn("monaco - Error setting up json options", error)
40462
40518
  }
40463
40519
  }
40464
40520
 
@@ -40470,7 +40526,7 @@ RED.editor.codeEditor.monaco = (function() {
40470
40526
  if(htmlDefaults) { _monaco.languages.html.htmlDefaults.setOptions(htmlDefaults); }
40471
40527
  if(handlebarDefaults) { _monaco.languages.html.handlebarDefaults.setOptions(handlebarDefaults); }
40472
40528
  } catch (error) {
40473
- console.warn("monaco - Error setting up html options", err)
40529
+ console.warn("monaco - Error setting up html options", error)
40474
40530
  }
40475
40531
  }
40476
40532
 
@@ -40490,7 +40546,7 @@ RED.editor.codeEditor.monaco = (function() {
40490
40546
  if(lessDefaults_modeConfiguration) { _monaco.languages.css.cssDefaults.setDiagnosticsOptions(lessDefaults_modeConfiguration); }
40491
40547
  if(scssDefaults_modeConfiguration) { _monaco.languages.css.cssDefaults.setDiagnosticsOptions(scssDefaults_modeConfiguration); }
40492
40548
  } catch (error) {
40493
- console.warn("monaco - Error setting up CSS/SCSS/LESS options", err)
40549
+ console.warn("monaco - Error setting up CSS/SCSS/LESS options", error)
40494
40550
  }
40495
40551
  }
40496
40552