From 12543d2c2a381b12fc6aa1cce122e44e0fd22eb6 Mon Sep 17 00:00:00 2001 From: Mauricio Bonani Date: Wed, 6 Jul 2022 19:06:11 -0400 Subject: [PATCH 01/16] Ensure all CSS variables are in the output file --- scripts/build-custom-theme.js | 20 +------------------- 1 file changed, 1 insertion(+), 19 deletions(-) diff --git a/scripts/build-custom-theme.js b/scripts/build-custom-theme.js index 3a904fea8..3239e1514 100644 --- a/scripts/build-custom-theme.js +++ b/scripts/build-custom-theme.js @@ -89,27 +89,9 @@ while((match = ruleRegex.exec(colorsFile)) !== null) { const css = result.css.toString() const lines = css.split("\n"); const colorCSS = [] - const nonColorCSS = []; - - let inKeyFrameBlock = false; lines.forEach(l => { - if (inKeyFrameBlock) { - nonColorCSS.push(l); - if (/^}/.test(l)) { - inKeyFrameBlock = false; - } - } else if (/^@keyframes/.test(l)) { - nonColorCSS.push(l); - inKeyFrameBlock = true; - } else if (!/^ /.test(l)) { - colorCSS.push(l); - nonColorCSS.push(l); - } else if (/color|border|background|fill|stroke|outline|box-shadow/.test(l)) { - colorCSS.push(l); - } else { - nonColorCSS.push(l); - } + colorCSS.push(l); }); const nrPkg = require("../package.json"); From 3e6f0acf79543b0bd2d0be1b897a0b31da602c01 Mon Sep 17 00:00:00 2001 From: Mauricio Bonani Date: Tue, 3 Oct 2023 15:42:33 -0400 Subject: [PATCH 02/16] Refactor code --- scripts/build-custom-theme.js | 99 ++++++++++++++--------------------- 1 file changed, 38 insertions(+), 61 deletions(-) diff --git a/scripts/build-custom-theme.js b/scripts/build-custom-theme.js index 3239e1514..bb8451d57 100644 --- a/scripts/build-custom-theme.js +++ b/scripts/build-custom-theme.js @@ -13,7 +13,7 @@ // 4. Edit your settings file to set the theme: // editorTheme: { // page: { -// css: "/path/to/file/generated/by/this/script" +// css: '/path/to/file/generated/by/this/script' // } // } // @@ -22,92 +22,69 @@ -const os = require("os"); -const nopt = require("nopt"); -const path = require("path"); -const fs = require("fs-extra"); -const sass = require("sass"); +const os = require('os'); +const nopt = require('nopt'); +const path = require('path'); +const fs = require('fs-extra'); +const sass = require('sass'); const knownOpts = { - "help": Boolean, - "long": Boolean, - "in": [path], - "out": [path] + 'help': Boolean, + 'long': Boolean, + 'in': [path], + 'out': [path] }; const shortHands = { - "?":["--help"] + '?':['--help'] }; nopt.invalidHandler = function(k,v,t) {} const parsedArgs = nopt(knownOpts,shortHands,process.argv,2) if (parsedArgs.help) { - console.log("Usage: build-custom-theme [-?] [--in FILE] [--out FILE]"); - console.log(""); - console.log("Options:"); - console.log(" --in FILE Custom colors sass file"); - console.log(" --out FILE Where you write the result"); - console.log(" --long Do not compress the output"); - console.log(" -?, --help Show this help"); - console.log(""); - process.exit(); + showUsageAndExit(0) } - -const ruleRegex = /(\$.*?) *: *(\S[\S\s]*?);/g; -var match; - -const customColors = {}; - -if (parsedArgs.in && fs.existsSync(parsedArgs.in)) { - let customColorsFile = fs.readFileSync(parsedArgs.in,"utf-8"); - while((match = ruleRegex.exec(customColorsFile)) !== null) { - customColors[match[1]] = match[2]; - } +if (!parsedArgs.in) { + console.warn('Missing argument: in') + showUsageAndExit(1) } -// Load base colours -let colorsFile = fs.readFileSync(path.join(__dirname,"../packages/node_modules/@node-red/editor-client/src/sass/colors.scss"),"utf-8") -let updatedColors = []; - -while((match = ruleRegex.exec(colorsFile)) !== null) { - updatedColors.push(match[1]+": "+(customColors[match[1]]||match[2])+";") -} - - (async function() { const tmpDir = os.tmpdir(); const workingDir = await fs.mkdtemp(`${tmpDir}${path.sep}`); - await fs.copy(path.join(__dirname,"../packages/node_modules/@node-red/editor-client/src/sass/"),workingDir) - await fs.writeFile(path.join(workingDir,"colors.scss"),updatedColors.join("\n")) - const result = sass.renderSync({ - outputStyle: "expanded", - file: path.join(workingDir,"style-custom-theme.scss"), - }); + await fs.copy(path.join(__dirname, '../packages/node_modules/@node-red/editor-client/src/sass/'), workingDir); + await fs.copyFile(parsedArgs.in, path.join(workingDir,'colors.scss')); - const css = result.css.toString() - const lines = css.split("\n"); - const colorCSS = [] + const output = sass.compile( + path.join(workingDir, 'style-custom-theme.scss'), + {style: parsedArgs.long === true ? 'expanded' : 'compressed'} + ); - lines.forEach(l => { - colorCSS.push(l); - }); - - const nrPkg = require("../package.json"); + const nrPkg = require('../package.json'); const now = new Date().toISOString(); + const header = `/*\n* Theme generated with Node-RED ${nrPkg.version} on ${now}\n*/`; - const header = `/* - * Theme generated with Node-RED ${nrPkg.version} on ${now} - */`; - - var output = sass.renderSync({outputStyle: parsedArgs.long?"expanded":"compressed",data:colorCSS.join("\n")}); if (parsedArgs.out) { - - await fs.writeFile(parsedArgs.out,header+"\n"+output.css); + await fs.writeFile(parsedArgs.out, header+'\n'+output.css); } else { console.log(header); console.log(output.css.toString()); } + await fs.remove(workingDir); })() + +function showUsageAndExit (exitCode) { + console.log(''); + console.log('Usage: build-custom-theme [-?] [--in FILE] [--out FILE]'); + console.log(''); + console.log('Options:'); + console.log(' --in FILE Custom colors sass file'); + console.log(' --out FILE Where you write the result'); + console.log(' --long Do not compress the output'); + console.log(' -?, --help Show this help'); + console.log(''); + process.exit(exitCode); +} \ No newline at end of file From 46fdf56c7932a23085105a460edff74b3e9aeed3 Mon Sep 17 00:00:00 2001 From: Nick O'Leary Date: Mon, 20 May 2024 16:41:44 +0100 Subject: [PATCH 03/16] Allow nodes to return additional history entries in onEditSave --- .../editor-client/src/js/ui/editor.js | 20 +++++++++++-- .../@node-red/nodes/core/common/60-link.html | 30 +++++++++++++++---- 2 files changed, 43 insertions(+), 7 deletions(-) diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/editor.js b/packages/node_modules/@node-red/editor-client/src/js/ui/editor.js index 705743b34..a7c797c17 100644 --- a/packages/node_modules/@node-red/editor-client/src/js/ui/editor.js +++ b/packages/node_modules/@node-red/editor-client/src/js/ui/editor.js @@ -741,9 +741,16 @@ RED.editor = (function() { } try { - var rc = editing_node._def.oneditsave.call(editing_node); + const rc = editing_node._def.oneditsave.call(editing_node); if (rc === true) { editState.changed = true; + } else if (typeof rc === 'object' && rc !== null ) { + if (rc.changed === true) { + editState.changed = true + } + if (Array.isArray(rc.history) && rc.history.length > 0) { + editState.history = rc.history + } } } catch(err) { console.warn("oneditsave",editing_node.id,editing_node.type,err.toString()); @@ -1015,7 +1022,7 @@ RED.editor = (function() { } }); } - var historyEvent = { + let historyEvent = { t:'edit', node:editing_node, changes:editState.changes, @@ -1031,6 +1038,15 @@ RED.editor = (function() { instances:subflowInstances } } + + if (editState.history) { + historyEvent = { + t: 'multi', + events: [ historyEvent, ...editState.history ], + dirty: wasDirty + } + } + RED.history.push(historyEvent); } editing_node.dirty = true; diff --git a/packages/node_modules/@node-red/nodes/core/common/60-link.html b/packages/node_modules/@node-red/nodes/core/common/60-link.html index 73ce86ccf..748ccb42b 100644 --- a/packages/node_modules/@node-red/nodes/core/common/60-link.html +++ b/packages/node_modules/@node-red/nodes/core/common/60-link.html @@ -194,27 +194,46 @@ nodeMap[node.links[i]].new = true; } } - var n; - for (var id in nodeMap) { + + let editHistories = [] + let n; + for (let id in nodeMap) { if (nodeMap.hasOwnProperty(id)) { n = RED.nodes.node(id); if (n) { + editHistories.push({ + t:'edit', + node: n, + changes: { + links: [...n.links] + }, + changed: n.changed + }) if (nodeMap[id].old && !nodeMap[id].new) { // Removed id i = n.links.indexOf(node.id); if (i > -1) { n.links.splice(i,1); + n.changed = true + n.dirty = true } } else if (!nodeMap[id].old && nodeMap[id].new) { // Added id i = n.links.indexOf(id); if (i === -1) { n.links.push(node.id); + n.changed = true + n.dirty = true } } } } } + if (editHistories.length > 0) { + return { + history: editHistories + } + } } function onAdd() { @@ -254,13 +273,14 @@ onEditPrepare(this,"link out"); }, oneditsave: function() { - onEditSave(this); + const result = onEditSave(this); // In case the name has changed, ensure any link call nodes on this // tab are redrawn with the updated name var localCallNodes = RED.nodes.filterNodes({z:RED.workspaces.active(), type:"link call"}); localCallNodes.forEach(function(node) { node.dirty = true; }); + return result }, onadd: onAdd, oneditresize: resizeNodeList @@ -329,7 +349,7 @@ onEditPrepare(this,"link in"); }, oneditsave: function() { - onEditSave(this); + return onEditSave(this); }, oneditresize: resizeNodeList }); @@ -373,7 +393,7 @@ }, oneditsave: function() { - onEditSave(this); + return onEditSave(this); }, onadd: onAdd, oneditresize: resizeNodeList From d601e2caa4cbd9bf56f1685728d8df26002aba32 Mon Sep 17 00:00:00 2001 From: GogoVega <92022724+GogoVega@users.noreply.github.com> Date: Tue, 21 May 2024 11:37:01 +0200 Subject: [PATCH 04/16] Change the config node cursor to pointer --- .../@node-red/editor-client/src/sass/tab-config.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/node_modules/@node-red/editor-client/src/sass/tab-config.scss b/packages/node_modules/@node-red/editor-client/src/sass/tab-config.scss index 9d678daa1..9acafacb0 100644 --- a/packages/node_modules/@node-red/editor-client/src/sass/tab-config.scss +++ b/packages/node_modules/@node-red/editor-client/src/sass/tab-config.scss @@ -37,7 +37,7 @@ ul.red-ui-sidebar-node-config-list { } .red-ui-palette-node { // overflow: hidden; - cursor: default; + cursor: pointer; &.selected { border-color: transparent; box-shadow: 0 0 0 2px var(--red-ui-node-selected-color); From 5538f6dd8afa0d83ca61df3ac97a3b984189a28f Mon Sep 17 00:00:00 2001 From: GogoVega <92022724+GogoVega@users.noreply.github.com> Date: Tue, 21 May 2024 12:58:29 +0200 Subject: [PATCH 05/16] Add missing tooltips to Sidebar --- .../@node-red/editor-client/locales/en-US/editor.json | 1 + .../@node-red/editor-client/locales/fr/editor.json | 1 + .../@node-red/editor-client/src/js/ui/tab-config.js | 4 +++- .../@node-red/editor-client/src/js/ui/tab-help.js | 8 +++++++- 4 files changed, 12 insertions(+), 2 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 34ed30cef..1c4c66240 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 @@ -719,6 +719,7 @@ "nodeHelp": "Node Help", "showHelp": "Show help", "showInOutline": "Show in outline", + "hideTopics": "Hide topics", "showTopics": "Show topics", "noHelp": "No help topic selected", "changeLog": "Change Log" 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 6faa1ed24..bf077b3f7 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 @@ -719,6 +719,7 @@ "nodeHelp": "Aide sur les noeuds", "showHelp": "Afficher l'aide", "showInOutline": "Afficher dans les grandes lignes", + "hideTopics": "Masquer les sujets", "showTopics": "Afficher les sujets", "noHelp": "Aucune rubrique d'aide sélectionnée", "changeLog": "Journal des modifications" diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/tab-config.js b/packages/node_modules/@node-red/editor-client/src/js/ui/tab-config.js index e2c8185cb..b8e3aa0ba 100644 --- a/packages/node_modules/@node-red/editor-client/src/js/ui/tab-config.js +++ b/packages/node_modules/@node-red/editor-client/src/js/ui/tab-config.js @@ -382,9 +382,11 @@ RED.sidebar.config = (function() { refreshConfigNodeList(); } }); + RED.popover.tooltip($('#red-ui-sidebar-config-filter-all'), RED._("sidebar.config.showAllConfigNodes")); RED.popover.tooltip($('#red-ui-sidebar-config-filter-unused'), RED._("sidebar.config.showAllUnusedConfigNodes")); - + RED.popover.tooltip($('#red-ui-sidebar-config-collapse-all'), RED._("palette.actions.collapse-all")); + RED.popover.tooltip($('#red-ui-sidebar-config-expand-all'), RED._("palette.actions.expand-all")); } function flashConfigNode(el) { diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/tab-help.js b/packages/node_modules/@node-red/editor-client/src/js/ui/tab-help.js index 8bfc5526e..b3d06f701 100644 --- a/packages/node_modules/@node-red/editor-client/src/js/ui/tab-help.js +++ b/packages/node_modules/@node-red/editor-client/src/js/ui/tab-help.js @@ -36,7 +36,13 @@ RED.sidebar.help = (function() { toolbar = $("
", {class:"red-ui-sidebar-header red-ui-info-toolbar"}).appendTo(content); $('').appendTo(toolbar) var showTOCButton = toolbar.find('#red-ui-sidebar-help-show-toc') - RED.popover.tooltip(showTOCButton,RED._("sidebar.help.showTopics")); + RED.popover.tooltip(showTOCButton, function () { + if ($(showTOCButton).hasClass('selected')) { + return RED._("sidebar.help.hideTopics"); + } else { + return RED._("sidebar.help.showTopics"); + } + }); showTOCButton.on("click",function(e) { e.preventDefault(); if ($(this).hasClass('selected')) { From 707152d82f6b4516306e4b5d9d8a5df7bc0122bb Mon Sep 17 00:00:00 2001 From: GogoVega <92022724+GogoVega@users.noreply.github.com> Date: Tue, 21 May 2024 15:07:26 +0200 Subject: [PATCH 06/16] Deleting a grouped node should update the group --- .../node_modules/@node-red/editor-client/src/js/ui/editor.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/editor.js b/packages/node_modules/@node-red/editor-client/src/js/ui/editor.js index 705743b34..c7df0f860 100644 --- a/packages/node_modules/@node-red/editor-client/src/js/ui/editor.js +++ b/packages/node_modules/@node-red/editor-client/src/js/ui/editor.js @@ -901,6 +901,11 @@ RED.editor = (function() { var startDirty = RED.nodes.dirty(); var removedNodes = []; var removedLinks = []; + + if (editing_node.g) { + RED.group.removeFromGroup(RED.nodes.group(editing_node.g), [{...editing_node}]); + } + var removedEntities = RED.nodes.remove(editing_node.id); removedNodes.push(editing_node); removedNodes = removedNodes.concat(removedEntities.nodes); From 51208fcd0c96bb4106dbd635d7b5ec59af078bae Mon Sep 17 00:00:00 2001 From: GogoVega <92022724+GogoVega@users.noreply.github.com> Date: Tue, 21 May 2024 16:06:15 +0200 Subject: [PATCH 07/16] Fix indexOf returns -1 --- .../node_modules/@node-red/editor-client/src/js/ui/group.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/group.js b/packages/node_modules/@node-red/editor-client/src/js/ui/group.js index 13056f09b..b29428754 100644 --- a/packages/node_modules/@node-red/editor-client/src/js/ui/group.js +++ b/packages/node_modules/@node-red/editor-client/src/js/ui/group.js @@ -606,7 +606,8 @@ RED.group = (function() { for (var i=0; i Date: Tue, 21 May 2024 19:01:57 +0200 Subject: [PATCH 08/16] Apply suggestions from code review Co-authored-by: Nick O'Leary --- .../@node-red/editor-client/src/sass/tab-config.scss | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/node_modules/@node-red/editor-client/src/sass/tab-config.scss b/packages/node_modules/@node-red/editor-client/src/sass/tab-config.scss index 9acafacb0..aed01240a 100644 --- a/packages/node_modules/@node-red/editor-client/src/sass/tab-config.scss +++ b/packages/node_modules/@node-red/editor-client/src/sass/tab-config.scss @@ -37,7 +37,6 @@ ul.red-ui-sidebar-node-config-list { } .red-ui-palette-node { // overflow: hidden; - cursor: pointer; &.selected { border-color: transparent; box-shadow: 0 0 0 2px var(--red-ui-node-selected-color); From abf2eacf18eb0653a990fe6d8e67f4b08a266a27 Mon Sep 17 00:00:00 2001 From: GogoVega <92022724+GogoVega@users.noreply.github.com> Date: Tue, 21 May 2024 19:48:21 +0200 Subject: [PATCH 09/16] Revert and fix without using `RED.group.removeFromGroup` --- .../@node-red/editor-client/src/js/ui/editor.js | 16 +++++++++++----- .../@node-red/editor-client/src/js/ui/group.js | 3 +-- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/editor.js b/packages/node_modules/@node-red/editor-client/src/js/ui/editor.js index c7df0f860..ba9d54e28 100644 --- a/packages/node_modules/@node-red/editor-client/src/js/ui/editor.js +++ b/packages/node_modules/@node-red/editor-client/src/js/ui/editor.js @@ -901,11 +901,6 @@ RED.editor = (function() { var startDirty = RED.nodes.dirty(); var removedNodes = []; var removedLinks = []; - - if (editing_node.g) { - RED.group.removeFromGroup(RED.nodes.group(editing_node.g), [{...editing_node}]); - } - var removedEntities = RED.nodes.remove(editing_node.id); removedNodes.push(editing_node); removedNodes = removedNodes.concat(removedEntities.nodes); @@ -919,6 +914,17 @@ RED.editor = (function() { dirty: startDirty } + if (editing_node.g) { + const group = RED.nodes.group(editing_node.g); + // Don't use RED.group.removeFromGroup as that emits + // a change event on the node - but we're deleting it + const index = group?.nodes.indexOf(editing_node) ?? -1; + if (index > -1) { + group.nodes.splice(index, 1); + RED.group.markDirty(group); + } + } + RED.nodes.dirty(true); RED.view.redraw(true); RED.history.push(historyEvent); diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/group.js b/packages/node_modules/@node-red/editor-client/src/js/ui/group.js index b29428754..13056f09b 100644 --- a/packages/node_modules/@node-red/editor-client/src/js/ui/group.js +++ b/packages/node_modules/@node-red/editor-client/src/js/ui/group.js @@ -606,8 +606,7 @@ RED.group = (function() { for (var i=0; i Date: Thu, 23 May 2024 10:57:51 +0200 Subject: [PATCH 10/16] Fix a checkbox must return a boolean value and not `on` --- .../node_modules/@node-red/editor-client/src/js/ui/editor.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/editor.js b/packages/node_modules/@node-red/editor-client/src/js/ui/editor.js index a7c797c17..5ec70357f 100644 --- a/packages/node_modules/@node-red/editor-client/src/js/ui/editor.js +++ b/packages/node_modules/@node-red/editor-client/src/js/ui/editor.js @@ -248,6 +248,8 @@ RED.editor = (function() { var value = input.val(); if (defaults[property].hasOwnProperty("format") && defaults[property].format !== "" && input[0].nodeName === "DIV") { value = input.text(); + } else if (input.attr("type") === "checkbox") { + value = input.prop("checked"); } var valid = validateNodeProperty(node, defaults, property,value); if (((typeof valid) === "string") || !valid) { From fac79fd0689d946e8b4d8b455a68b8c83987eeae Mon Sep 17 00:00:00 2001 From: corentin-sodebo-voile <93916863+corentin-sodebo-voile@users.noreply.github.com> Date: Thu, 23 May 2024 15:30:13 +0200 Subject: [PATCH 11/16] Fix panning with middle mouse button on windows 10/11 Without preventDefault, when you try to drag the canvas with middle mouse button on Windows (e.g. in Chrome), the cursor change to a "scroll cursor" and the canvas scrolls endlessly instead of being dragged accurately. --- packages/node_modules/@node-red/editor-client/src/js/ui/view.js | 1 + 1 file changed, 1 insertion(+) 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 a2571dc28..e71478457 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 @@ -1190,6 +1190,7 @@ RED.view = (function() { if (d3.event.button === 1) { // Middle Click pan + d3.event.preventDefault(); mouse_mode = RED.state.PANNING; mouse_position = [d3.event.pageX,d3.event.pageY] scroll_position = [chart.scrollLeft(),chart.scrollTop()]; From cd98f448e98591959a9d9eaca7e103f399fcda28 Mon Sep 17 00:00:00 2001 From: Kazuhito Yokoi Date: Sun, 26 May 2024 23:34:32 +0900 Subject: [PATCH 12/16] Add Japanese translation for sidebar tooltip --- .../node_modules/@node-red/editor-client/locales/ja/editor.json | 1 + 1 file changed, 1 insertion(+) 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 53c8616fd..b9a835ab9 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 @@ -719,6 +719,7 @@ "nodeHelp": "ノードヘルプ", "showHelp": "ヘルプを表示", "showInOutline": "アウトラインに表示", + "hideTopics": "トピックを非表示", "showTopics": "トピックを表示", "noHelp": "ヘルプのトピックが未選択", "changeLog": "更新履歴" From 67cdf3ef96c1aa15e1c327211797f9f0ce0ae477 Mon Sep 17 00:00:00 2001 From: GogoVega <92022724+GogoVega@users.noreply.github.com> Date: Mon, 27 May 2024 18:59:25 +0200 Subject: [PATCH 13/16] Fix checkboxes are not updated when calling `typedInput("value", "")` --- .../editor-client/src/js/ui/common/typedInput.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/common/typedInput.js b/packages/node_modules/@node-red/editor-client/src/js/ui/common/typedInput.js index 9aa27c710..ce8b3841d 100644 --- a/packages/node_modules/@node-red/editor-client/src/js/ui/common/typedInput.js +++ b/packages/node_modules/@node-red/editor-client/src/js/ui/common/typedInput.js @@ -830,7 +830,13 @@ this.input.trigger('change',[this.propertyType,this.value()]); } } else { - this.optionSelectLabel.text(o.length+" selected"); + this.optionSelectLabel.text(o.length + " selected"); + if (this.optionMenu) { + this.optionMenu.find('input[type="checkbox"]').prop("checked", false); + for (const selectedOption of (this.value()?.split(",") || [])) { + this.optionMenu.find("[value='" + selectedOption + "']").find("input").prop("checked", true); + } + } } } }, From 341f43610a2df879342be4273f0588650ae5b512 Mon Sep 17 00:00:00 2001 From: GogoVega <92022724+GogoVega@users.noreply.github.com> Date: Mon, 27 May 2024 19:56:51 +0200 Subject: [PATCH 14/16] Translate the number of items selected in the options list --- .../@node-red/editor-client/locales/en-US/editor.json | 2 ++ .../node_modules/@node-red/editor-client/locales/fr/editor.json | 2 ++ .../@node-red/editor-client/src/js/ui/common/typedInput.js | 2 +- 3 files changed, 5 insertions(+), 1 deletion(-) 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 1c4c66240..0b091146a 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 @@ -915,6 +915,8 @@ } }, "typedInput": { + "selected": "__count__ selected", + "selected_plural": "__count__ selected", "type": { "str": "string", "num": "number", 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 bf077b3f7..f0c801455 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 @@ -915,6 +915,8 @@ } }, "typedInput": { + "selected": "__count__ sélectionnée", + "selected_plural": "__count__ sélectionnées", "type": { "str": "chaîne de caractères", "num": "nombre", diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/common/typedInput.js b/packages/node_modules/@node-red/editor-client/src/js/ui/common/typedInput.js index 9aa27c710..7739702eb 100644 --- a/packages/node_modules/@node-red/editor-client/src/js/ui/common/typedInput.js +++ b/packages/node_modules/@node-red/editor-client/src/js/ui/common/typedInput.js @@ -830,7 +830,7 @@ this.input.trigger('change',[this.propertyType,this.value()]); } } else { - this.optionSelectLabel.text(o.length+" selected"); + this.optionSelectLabel.text(RED._("typedInput.selected", { count: o.length })); } } }, From 6c14ed0ef5d47779029440c11e8f6a9add391810 Mon Sep 17 00:00:00 2001 From: GogoVega <92022724+GogoVega@users.noreply.github.com> Date: Tue, 28 May 2024 22:08:42 +0200 Subject: [PATCH 15/16] Revert and fix an undefined value returned instead of a false value --- .../src/js/ui/common/typedInput.js | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/common/typedInput.js b/packages/node_modules/@node-red/editor-client/src/js/ui/common/typedInput.js index ce8b3841d..750c1066b 100644 --- a/packages/node_modules/@node-red/editor-client/src/js/ui/common/typedInput.js +++ b/packages/node_modules/@node-red/editor-client/src/js/ui/common/typedInput.js @@ -734,12 +734,12 @@ } if (menu.opts.multiple) { var selected = {}; - this.value().split(",").forEach(function(f) { - selected[f] = true; - }) + this.value().split(",").forEach(function(f) { + selected[f] = true; + }); menu.find('input[type="checkbox"]').each(function() { - $(this).prop("checked",selected[$(this).data('value')]) - }) + $(this).prop("checked", selected[$(this).data('value')] || false); + }); } @@ -830,13 +830,7 @@ this.input.trigger('change',[this.propertyType,this.value()]); } } else { - this.optionSelectLabel.text(o.length + " selected"); - if (this.optionMenu) { - this.optionMenu.find('input[type="checkbox"]').prop("checked", false); - for (const selectedOption of (this.value()?.split(",") || [])) { - this.optionMenu.find("[value='" + selectedOption + "']").find("input").prop("checked", true); - } - } + this.optionSelectLabel.text(o.length+" selected"); } } }, From bf30c24e8e0a536971a5f9876a7838196640998c Mon Sep 17 00:00:00 2001 From: GogoVega <92022724+GogoVega@users.noreply.github.com> Date: Wed, 29 May 2024 20:44:49 +0200 Subject: [PATCH 16/16] Fix the Sidebar Config is not refreshed after a deploy --- .../node_modules/@node-red/editor-client/src/js/ui/deploy.js | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/deploy.js b/packages/node_modules/@node-red/editor-client/src/js/ui/deploy.js index 1e6cf954b..6bc4d7f48 100644 --- a/packages/node_modules/@node-red/editor-client/src/js/ui/deploy.js +++ b/packages/node_modules/@node-red/editor-client/src/js/ui/deploy.js @@ -631,6 +631,7 @@ RED.deploy = (function() { // Once deployed, cannot undo back to a clean state RED.history.markAllDirty(); RED.view.redraw(); + RED.sidebar.config.refresh(); RED.events.emit("deploy"); }).fail(function (xhr, textStatus, err) { RED.nodes.dirty(true);