From 2334b34541cbcdae7931b37c137612d4ae6df1aa Mon Sep 17 00:00:00 2001 From: GogoVega <92022724+GogoVega@users.noreply.github.com> Date: Sat, 13 Dec 2025 14:28:51 +0100 Subject: [PATCH] Add several click-outside-edit-tray behaviours --- .../editor-client/locales/en-US/editor.json | 8 +++++++- .../editor-client/locales/fr/editor.json | 8 +++++++- .../@node-red/editor-client/src/js/ui/tray.js | 15 +++++++++++++++ .../editor-client/src/js/ui/userSettings.js | 3 ++- 4 files changed, 31 insertions(+), 3 deletions(-) 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 c1c9316d8..b939baa71 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 @@ -160,7 +160,13 @@ "moveToBack": "Move to back", "moveToFront": "Move to front", "moveBackwards": "Move backwards", - "moveForwards": "Move forwards" + "moveForwards": "Move forwards", + "clickOutsideEditTray": "Click behavior outside the edit tray", + "clickOptions": { + "nothing": "Do nothing", + "discard": "Discard changes and close", + "save": "Save changes and close" + } } }, "actions": { diff --git a/packages/node_modules/@node-red/editor-client/locales/fr/editor.json b/packages/node_modules/@node-red/editor-client/locales/fr/editor.json index a205002d9..0af85660c 100644 --- a/packages/node_modules/@node-red/editor-client/locales/fr/editor.json +++ b/packages/node_modules/@node-red/editor-client/locales/fr/editor.json @@ -160,7 +160,13 @@ "moveToBack": "Déplacer vers l'arrière", "moveToFront": "Déplacer vers l'avant", "moveBackwards": "Reculer", - "moveForwards": "Avancer" + "moveForwards": "Avancer", + "clickOutsideEditTray": "Comportement du clic en dehors de la zone d'édition", + "clickOptions": { + "nothing": "Ne rien faire", + "discard": "Annuler les modifications et fermer", + "save": "Enregistrer les modifications et fermer" + } } }, "actions": { diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/tray.js b/packages/node_modules/@node-red/editor-client/src/js/ui/tray.js index b0f188457..6d82cd457 100644 --- a/packages/node_modules/@node-red/editor-client/src/js/ui/tray.js +++ b/packages/node_modules/@node-red/editor-client/src/js/ui/tray.js @@ -230,6 +230,21 @@ editorStack = $("#red-ui-editor-stack"); $(window).on("resize", handleWindowResize); RED.events.on("sidebar:resize",handleWindowResize); + $("#red-ui-editor-shade").on("click", function () { + if (openingTray) { return; } + + const clickOutsideEditTray = RED.settings.get("editor.view.click-outside-edit-tray", "save"); + if (clickOutsideEditTray !== "nothing") { + const tray = stack[stack.length - 1]; + if (tray && clickOutsideEditTray === "discard") { + RED.actions.invoke("core:cancel-edit-tray"); + } else if (tray && clickOutsideEditTray === "save") { + if (tray.primaryButton) { + tray.primaryButton.click(); + } + } + } + }); }, show: function show(options) { lowerTrayZ(); diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/userSettings.js b/packages/node_modules/@node-red/editor-client/src/js/ui/userSettings.js index 3bc99e602..123a70c32 100644 --- a/packages/node_modules/@node-red/editor-client/src/js/ui/userSettings.js +++ b/packages/node_modules/@node-red/editor-client/src/js/ui/userSettings.js @@ -141,7 +141,8 @@ RED.userSettings = (function() { options: [ {setting:"view-node-status",oldSetting:"menu-menu-item-status",label:"menu.label.displayStatus",default: true, toggle:true,onchange:"core:toggle-status"}, {setting:"view-node-info-icon", label:"menu.label.displayInfoIcon", default: true, toggle:true,onchange:"core:toggle-node-info-icon"}, - {setting:"view-node-show-label",label:"menu.label.showNodeLabelDefault",default: true, toggle:true} + {setting:"view-node-show-label",label:"menu.label.showNodeLabelDefault",default: true, toggle:true}, + { setting: "click-outside-edit-tray", label: "menu.label.clickOutsideEditTray", default: "nothing", options: (done) => done(["nothing", "discard", "save"].map((option) => ({ val: option, text: RED._("menu.label.clickOptions." + option) }))) } ] }, {