diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml
index cf871716a..70d36deb1 100644
--- a/.github/workflows/tests.yml
+++ b/.github/workflows/tests.yml
@@ -16,7 +16,7 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
- node-version: [18, 20, 22.4.x]
+ node-version: [18, 20, 22]
steps:
- uses: actions/checkout@v4
- name: Use Node.js ${{ matrix.node-version }}
diff --git a/CHANGELOG.md b/CHANGELOG.md
index e4ebd3087..6eaa3b7fa 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,38 @@
+#### 4.0.3: Maintenance Release
+
+Editor
+
+ - Refresh page title after changing tab name (#4850) @kazuhitoyokoi
+ - Add Japanese translations for v4.0.2 (again) (#4853) @kazuhitoyokoi
+ - Stay in quick-add mode following context menu insert (#4883) @knolleary
+ - Do not include Junction type in quick-add for virtual links (#4879) @knolleary
+ - Multiplayer cursor tracking (#4845) @knolleary
+ - Hide add-flow options when disabled via editorTheme (#4869) @knolleary
+ - Fix env-var config select when multiple defined (#4872) @knolleary
+ - Fix subflow outbound-link filter (#4857) @GogoVega
+ - Add French translations for v4.0.2 (#4856) @GogoVega
+ - Fix moving link wires (#4851) @knolleary
+ - Adjust type search dialog position to prevent x-overflow (#4844) @Steve-Mcl
+ - fix: modulesInUse might be undefined (#4838) @lorenz-maurer
+ - Add Japanese translations for v4.0.2 (#4849) @kazuhitoyokoi
+ - Fix menu to enable/disable selection when it's a group (#4828) @GogoVega
+
+Runtime
+
+ - Update dependencies (#4874) @knolleary
+ - GitHub: Add citation file to enable "Cite this repository" feature (#4861) @lobis
+ - Remove use of util.log (#4875) @knolleary
+
+Nodes
+
+ - Fix invalid property error in range node example (#4855)
+ - Fix typo in flow example name (#4854) @kazuhitoyokoi
+ - Move SNI, ALPN and Verify Server cert out of check (#4882) @hardillb
+ - Set status of mqtt nodes to "disconnected" when deregistered from broker (#4878) @Steve-Mcl
+ - MQTT: Ensure will payload is a string (#4873) @knolleary
+ - Let batch node terminate "early" if msg.parts set to end of sequence (#4829) @dceejay
+ - Fix unintentional Capitalisation in Split node name (#4835) @dceejay
+
#### 4.0.2: Maintenance Release
Editor
diff --git a/package.json b/package.json
index f705e0752..5c41a2999 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "node-red",
- "version": "4.0.2",
+ "version": "4.0.3",
"description": "Low-code programming for event-driven applications",
"homepage": "https://nodered.org",
"license": "Apache-2.0",
@@ -26,13 +26,13 @@
}
],
"dependencies": {
- "acorn": "8.11.3",
- "acorn-walk": "8.3.2",
- "ajv": "8.14.0",
+ "acorn": "8.12.1",
+ "acorn-walk": "8.3.4",
+ "ajv": "8.17.1",
"async-mutex": "0.5.0",
"basic-auth": "2.0.1",
"bcryptjs": "2.4.3",
- "body-parser": "1.20.2",
+ "body-parser": "1.20.3",
"cheerio": "1.0.0-rc.10",
"clone": "2.1.2",
"content-type": "1.0.5",
@@ -41,7 +41,7 @@
"cors": "2.8.5",
"cronosjs": "1.7.1",
"denque": "2.1.0",
- "express": "4.19.2",
+ "express": "4.21.0",
"express-session": "1.18.0",
"form-data": "4.0.0",
"fs-extra": "11.2.0",
@@ -64,7 +64,7 @@
"mqtt": "5.7.0",
"multer": "1.4.5-lts.1",
"mustache": "4.2.0",
- "node-red-admin": "^4.0.0",
+ "node-red-admin": "^4.0.1",
"node-watch": "0.7.4",
"nopt": "5.0.0",
"oauth2orize": "1.12.0",
@@ -76,7 +76,7 @@
"rfdc": "^1.3.1",
"semver": "7.5.4",
"tar": "7.2.0",
- "tough-cookie": "4.1.4",
+ "tough-cookie": "^5.0.0",
"uglify-js": "3.17.4",
"uuid": "9.0.1",
"ws": "7.5.10",
diff --git a/packages/node_modules/@node-red/editor-api/package.json b/packages/node_modules/@node-red/editor-api/package.json
index 792b5b67f..59a265ca4 100644
--- a/packages/node_modules/@node-red/editor-api/package.json
+++ b/packages/node_modules/@node-red/editor-api/package.json
@@ -1,6 +1,6 @@
{
"name": "@node-red/editor-api",
- "version": "4.0.2",
+ "version": "4.0.3",
"license": "Apache-2.0",
"main": "./lib/index.js",
"repository": {
@@ -16,14 +16,14 @@
}
],
"dependencies": {
- "@node-red/util": "4.0.2",
- "@node-red/editor-client": "4.0.2",
+ "@node-red/util": "4.0.3",
+ "@node-red/editor-client": "4.0.3",
"bcryptjs": "2.4.3",
- "body-parser": "1.20.2",
+ "body-parser": "1.20.3",
"clone": "2.1.2",
"cors": "2.8.5",
"express-session": "1.18.0",
- "express": "4.19.2",
+ "express": "4.21.0",
"memorystore": "1.6.7",
"mime": "3.0.0",
"multer": "1.4.5-lts.1",
diff --git a/packages/node_modules/@node-red/editor-client/locales/en-US/editor.json b/packages/node_modules/@node-red/editor-client/locales/en-US/editor.json
index 3f6617752..9bdd55155 100644
--- a/packages/node_modules/@node-red/editor-client/locales/en-US/editor.json
+++ b/packages/node_modules/@node-red/editor-client/locales/en-US/editor.json
@@ -562,7 +562,9 @@
"types": {
"local": "Local",
"examples": "Examples"
- }
+ },
+ "type": "Type",
+ "name": "Name"
},
"palette": {
"noInfo": "no information available",
diff --git a/packages/node_modules/@node-red/editor-client/locales/ja/editor.json b/packages/node_modules/@node-red/editor-client/locales/ja/editor.json
index 5b11e24c4..c0296f457 100644
--- a/packages/node_modules/@node-red/editor-client/locales/ja/editor.json
+++ b/packages/node_modules/@node-red/editor-client/locales/ja/editor.json
@@ -562,7 +562,9 @@
"types": {
"local": "ローカル",
"examples": "サンプル"
- }
+ },
+ "type": "型",
+ "name": "名前"
},
"palette": {
"noInfo": "情報がありません",
diff --git a/packages/node_modules/@node-red/editor-client/package.json b/packages/node_modules/@node-red/editor-client/package.json
index 932afb7ac..7e65dcc1a 100644
--- a/packages/node_modules/@node-red/editor-client/package.json
+++ b/packages/node_modules/@node-red/editor-client/package.json
@@ -1,6 +1,6 @@
{
"name": "@node-red/editor-client",
- "version": "4.0.2",
+ "version": "4.0.3",
"license": "Apache-2.0",
"repository": {
"type": "git",
diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/library.js b/packages/node_modules/@node-red/editor-client/src/js/ui/library.js
index d276b1572..0098bc947 100644
--- a/packages/node_modules/@node-red/editor-client/src/js/ui/library.js
+++ b/packages/node_modules/@node-red/editor-client/src/js/ui/library.js
@@ -839,10 +839,10 @@ RED.library = (function() {
if (file && file.label && !file.children) {
$.get("library/"+file.library+"/"+file.type+"/"+file.path, function(data) {
//TODO: nls + sanitize
- var propRow = $('
Type | |
').appendTo(table);
+ var propRow = $(''+RED._("library.type")+' | |
').appendTo(table);
$(propRow.children()[1]).text(activeLibrary.type);
if (file.props.hasOwnProperty('name')) {
- propRow = $('Name | '+file.props.name+' |
').appendTo(table);
+ propRow = $(''+RED._("library.name")+' | '+file.props.name+' |
').appendTo(table);
$(propRow.children()[1]).text(file.props.name);
}
for (var p in file.props) {
diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/tab-info.js b/packages/node_modules/@node-red/editor-client/src/js/ui/tab-info.js
index f72a7b3f2..fa9b98322 100644
--- a/packages/node_modules/@node-red/editor-client/src/js/ui/tab-info.js
+++ b/packages/node_modules/@node-red/editor-client/src/js/ui/tab-info.js
@@ -204,7 +204,7 @@ RED.sidebar.info = (function() {
propertiesPanelHeaderIcon.empty();
RED.utils.createNodeIcon({type:"_selection_"}).appendTo(propertiesPanelHeaderIcon);
- propertiesPanelHeaderLabel.text("Selection");
+ propertiesPanelHeaderLabel.text(RED._("sidebar.info.selection"));
propertiesPanelHeaderReveal.hide();
propertiesPanelHeaderHelp.hide();
propertiesPanelHeaderCopyLink.hide();
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 fd1205a30..ff0091e65 100644
--- 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
@@ -1209,7 +1209,10 @@ RED.view = (function() {
lasso = null;
}
if (d3.event.touches || d3.event.button === 0) {
- if ((mouse_mode === 0 || mouse_mode === RED.state.QUICK_JOINING) && isControlPressed(d3.event) && !(d3.event.altKey || d3.event.shiftKey)) {
+ if (
+ (mouse_mode === 0 && isControlPressed(d3.event) && !(d3.event.altKey || d3.event.shiftKey)) ||
+ mouse_mode === RED.state.QUICK_JOINING
+ ) {
// Trigger quick add dialog
d3.event.stopPropagation();
clearSelection();
@@ -1285,7 +1288,6 @@ RED.view = (function() {
}
var mainPos = $("#red-ui-main-container").position();
-
if (mouse_mode !== RED.state.QUICK_JOINING) {
mouse_mode = RED.state.QUICK_JOINING;
$(window).on('keyup',disableQuickJoinEventHandler);
@@ -3057,8 +3059,8 @@ RED.view = (function() {
}
function disableQuickJoinEventHandler(evt) {
- // Check for ctrl (all browsers), "Meta" (Chrome/FF), keyCode 91 (Safari)
- if (evt.keyCode === 17 || evt.key === "Meta" || evt.keyCode === 91) {
+ // Check for ctrl (all browsers), "Meta" (Chrome/FF), keyCode 91 (Safari), or Escape
+ if (evt.keyCode === 17 || evt.key === "Meta" || evt.keyCode === 91 || evt.keyCode === 27) {
resetMouseVars();
hideDragLines();
redraw();
diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/workspaces.js b/packages/node_modules/@node-red/editor-client/src/js/ui/workspaces.js
index 06a11f38b..c380f251a 100644
--- a/packages/node_modules/@node-red/editor-client/src/js/ui/workspaces.js
+++ b/packages/node_modules/@node-red/editor-client/src/js/ui/workspaces.js
@@ -920,6 +920,17 @@ RED.workspaces = (function() {
}
},
refresh: function() {
+ var workspace = RED.nodes.workspace(RED.workspaces.active());
+ if (workspace) {
+ document.title = `${documentTitle} : ${workspace.label}`;
+ } else {
+ var subflow = RED.nodes.subflow(RED.workspaces.active());
+ if (subflow) {
+ document.title = `${documentTitle} : ${subflow.name}`;
+ } else {
+ document.title = documentTitle
+ }
+ }
RED.nodes.eachWorkspace(function(ws) {
workspace_tabs.renameTab(ws.id,ws.label);
$("#red-ui-tab-"+(ws.id.replace(".","-"))).attr("flowname",ws.label)
diff --git a/packages/node_modules/@node-red/nodes/core/network/05-tls.js b/packages/node_modules/@node-red/nodes/core/network/05-tls.js
index 888d749fd..f47067729 100644
--- a/packages/node_modules/@node-red/nodes/core/network/05-tls.js
+++ b/packages/node_modules/@node-red/nodes/core/network/05-tls.js
@@ -104,14 +104,14 @@ module.exports = function(RED) {
if (this.credentials && this.credentials.passphrase) {
opts.passphrase = this.credentials.passphrase;
}
- if (this.servername) {
- opts.servername = this.servername;
- }
- if (this.alpnprotocol) {
- opts.ALPNProtocols = [this.alpnprotocol];
- }
- opts.rejectUnauthorized = this.verifyservercert;
}
+ if (this.servername) {
+ opts.servername = this.servername;
+ }
+ if (this.alpnprotocol) {
+ opts.ALPNProtocols = [this.alpnprotocol];
+ }
+ opts.rejectUnauthorized = this.verifyservercert;
return opts;
}
diff --git a/packages/node_modules/@node-red/nodes/examples/parser/html/04 - Join extracedt sequence of HTML element using join node.json b/packages/node_modules/@node-red/nodes/examples/parser/html/04 - Join extracted sequence of HTML element using join node.json
similarity index 100%
rename from packages/node_modules/@node-red/nodes/examples/parser/html/04 - Join extracedt sequence of HTML element using join node.json
rename to packages/node_modules/@node-red/nodes/examples/parser/html/04 - Join extracted sequence of HTML element using join node.json
diff --git a/packages/node_modules/@node-red/nodes/locales/en-US/messages.json b/packages/node_modules/@node-red/nodes/locales/en-US/messages.json
index bc89992e2..d26f0f56b 100644
--- a/packages/node_modules/@node-red/nodes/locales/en-US/messages.json
+++ b/packages/node_modules/@node-red/nodes/locales/en-US/messages.json
@@ -456,7 +456,7 @@
"staticTopic": "Subscribe to single topic",
"dynamicTopic": "Dynamic subscription",
"auto-connect": "Connect automatically",
- "auto-mode-depreciated": "This option is depreciated. Please use the new auto-detect mode.",
+ "auto-mode-depreciated": "This option is deprecated. Please use the new auto-detect mode.",
"none": "none",
"other": "other"
},
diff --git a/packages/node_modules/@node-red/nodes/package.json b/packages/node_modules/@node-red/nodes/package.json
index e8e384948..dcbb59b24 100644
--- a/packages/node_modules/@node-red/nodes/package.json
+++ b/packages/node_modules/@node-red/nodes/package.json
@@ -1,6 +1,6 @@
{
"name": "@node-red/nodes",
- "version": "4.0.2",
+ "version": "4.0.3",
"license": "Apache-2.0",
"repository": {
"type": "git",
@@ -15,10 +15,10 @@
}
],
"dependencies": {
- "acorn": "8.11.3",
- "acorn-walk": "8.3.2",
- "ajv": "8.14.0",
- "body-parser": "1.20.2",
+ "acorn": "8.12.1",
+ "acorn-walk": "8.3.4",
+ "ajv": "8.17.1",
+ "body-parser": "1.20.3",
"cheerio": "1.0.0-rc.10",
"content-type": "1.0.5",
"cookie-parser": "1.4.6",
@@ -41,7 +41,7 @@
"node-watch": "0.7.4",
"on-headers": "1.0.2",
"raw-body": "2.5.2",
- "tough-cookie": "4.1.4",
+ "tough-cookie": "^5.0.0",
"uuid": "9.0.1",
"ws": "7.5.10",
"xml2js": "0.6.2",
diff --git a/packages/node_modules/@node-red/registry/package.json b/packages/node_modules/@node-red/registry/package.json
index 1d54f76d8..2515b19b7 100644
--- a/packages/node_modules/@node-red/registry/package.json
+++ b/packages/node_modules/@node-red/registry/package.json
@@ -1,6 +1,6 @@
{
"name": "@node-red/registry",
- "version": "4.0.2",
+ "version": "4.0.3",
"license": "Apache-2.0",
"main": "./lib/index.js",
"repository": {
@@ -16,7 +16,7 @@
}
],
"dependencies": {
- "@node-red/util": "4.0.2",
+ "@node-red/util": "4.0.3",
"clone": "2.1.2",
"fs-extra": "11.2.0",
"semver": "7.5.4",
diff --git a/packages/node_modules/@node-red/runtime/package.json b/packages/node_modules/@node-red/runtime/package.json
index d6a7a0009..67464f496 100644
--- a/packages/node_modules/@node-red/runtime/package.json
+++ b/packages/node_modules/@node-red/runtime/package.json
@@ -1,6 +1,6 @@
{
"name": "@node-red/runtime",
- "version": "4.0.2",
+ "version": "4.0.3",
"license": "Apache-2.0",
"main": "./lib/index.js",
"repository": {
@@ -16,11 +16,11 @@
}
],
"dependencies": {
- "@node-red/registry": "4.0.2",
- "@node-red/util": "4.0.2",
+ "@node-red/registry": "4.0.3",
+ "@node-red/util": "4.0.3",
"async-mutex": "0.5.0",
"clone": "2.1.2",
- "express": "4.19.2",
+ "express": "4.21.0",
"fs-extra": "11.2.0",
"json-stringify-safe": "5.0.1",
"rfdc": "^1.3.1"
diff --git a/packages/node_modules/@node-red/util/package.json b/packages/node_modules/@node-red/util/package.json
index 1f25923bb..d747109dd 100644
--- a/packages/node_modules/@node-red/util/package.json
+++ b/packages/node_modules/@node-red/util/package.json
@@ -1,6 +1,6 @@
{
"name": "@node-red/util",
- "version": "4.0.2",
+ "version": "4.0.3",
"license": "Apache-2.0",
"repository": {
"type": "git",
diff --git a/packages/node_modules/node-red/package.json b/packages/node_modules/node-red/package.json
index 93c90f807..b6c767e9b 100644
--- a/packages/node_modules/node-red/package.json
+++ b/packages/node_modules/node-red/package.json
@@ -1,6 +1,6 @@
{
"name": "node-red",
- "version": "4.0.2",
+ "version": "4.0.3",
"description": "Low-code programming for event-driven applications",
"homepage": "https://nodered.org",
"license": "Apache-2.0",
@@ -31,16 +31,16 @@
"flow"
],
"dependencies": {
- "@node-red/editor-api": "4.0.2",
- "@node-red/runtime": "4.0.2",
- "@node-red/util": "4.0.2",
- "@node-red/nodes": "4.0.2",
+ "@node-red/editor-api": "4.0.3",
+ "@node-red/runtime": "4.0.3",
+ "@node-red/util": "4.0.3",
+ "@node-red/nodes": "4.0.3",
"basic-auth": "2.0.1",
"bcryptjs": "2.4.3",
"cors": "2.8.5",
- "express": "4.19.2",
+ "express": "4.21.0",
"fs-extra": "11.2.0",
- "node-red-admin": "^4.0.0",
+ "node-red-admin": "^4.0.1",
"nopt": "5.0.0",
"semver": "7.5.4"
},