diff --git a/CHANGELOG.md b/CHANGELOG.md index 9b8eff388..3cfeba9c1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,55 @@ #### 2.2.0-beta.1: Beta Release +Editor + - Add search history to main search box (#3262) @knolleary + - Check availability of type of config node on deploy (#3304) @k-toumura + - Add wire-slice mode to delete wires with Ctrl-RHClick-Drag (#3340) @knolleary + - Wiring keyboard shortcuts (#3288) @knolleary + - Snap nodes on grid using either edge as reference (#3289) @knolleary + - Detach node action (#3338) @knolleary + - Highlight links when selecting nodes (#3323) @knolleary + - Allow multiple links to be selected by ctrl-click (#3294) @knolleary + +Nodes + + - JSON: Let JSON node attempt to parse buffer if it contains a valid string (#3296) @dceejay + - Remove use of verbose flag in core nodes - and use node.debug level instead (#3300) @dceejay + - TCP: Add TLS option to tcp client nodes (#3307) @dceejay + - WebSocket: Implemented support for Websocket Subprotocols in WS Client Node. (#3333) @tobiasoort + +#### 2.1.5: Maintenance Release + +Runtime + + - Handle reporting error location when stack is truncated (#3346) @knolleary + - Initialize passport when only adminAuth.tokens is set (#3343) @knolleary + - Add log logging (#3342) @knolleary + +Editor + + - Fix copy buttons on the debug window (another method) (#3331) @kazuhitoyokoi + - Add Japanese translations for hidden flow (#3302) @kazuhitoyokoi + - Improve jsonata legacy mode detection regex (#3345) @knolleary + - Fix generating flow name with incrementing number (#3347) @knolleary + - resume focus after import/export dialog close (#3337) @HiroyasuNishiyama + - Fix findPreviousVisibleTab action (#3321) @knolleary + - Fix storing hidden tab state when not hidden via action (#3312) @knolleary + - Avoid adding empty env properties to tabs/groups (#3311) @knolleary + - Fix hide icon in tour guide (#3301) @kazuhitoyokoi + +Nodes + + - File: Update file node examples according to node name change (#3335) @HiroyasuNishiyama + - Filter (RBE): Fix for filter node narrrowbandEq mode start condition failure (#3339) @dceejay + - Function: Prevent function scrollbar from obscuring expand button (#3348) @knolleary + - Function: load extralibs when expanding monaco. fixes #3319 (#3334) @Steve-Mcl + - Function: Update Function to use correct api to access env vars (#3310) @knolleary + - HTTP Request: Fix basic auth with empty username or password (#3325) @hardillb + - Inject: Fix incorrect clearing of blank payload property in Inject node (#3322) @knolleary + - Link Call: add link call example (#3336) @HiroyasuNishiyama + - WebSocket: Only setup ws client heartbeat once it is connected (#3344) @knolleary + - Update Japanese translations in node help (#3332) @kazuhitoyokoi #### 2.1.4: Maintenance Release @@ -396,2758 +445,8 @@ Nodes - TLS: Add ALPN support to TLS node (#2988) @hardillb - Inject: add "Inject now" button to edit dialog (#2990) @Steve-Mcl -### 1.3.5 Maintenance Release -Editor - - Open subflow tab next to active tab rather than at the end - - Shrink default notification box - - Support mousewheel scroll in tab bar - - Revert some of #2967 to fix treeList gutter width calculation - - Prevent unknown node from breaking editor - - Stop module with missing types from preventing editor load - - Handle sidebar tab that no longer exists when setting first active - - Fix plugin loading when browser sends unrecognised lang - - Prevent error whilst drag/drop importing from leaving dropTarget visible Fixes #2982 - - Fix scaling issues when dragging nodes into scaled workspace - - Fix incorrect shortcut keys in info tips (#2980) @kazuhitoyokoi - - Reduce code duplication around node/label generation - - Fix theme handling when no editorTheme.page setting - - Fix jshint error in treeList +#### Older Releases -Runtime - - - Fix error handling in runtime/lib/api/nodes - - Add Node 16 with sass fixed - - Migrate from node-sass to sass (#2984) - - Fix "installRetry" was declared a constant and changed (#2974) @aheissenberger - -Nodes - - - Function: Fix 'SyntaxError' in Function node when last line of on-stop is a comment - - Function: Fix Function tab label names in the node help text Closes #2978 - - Function: Update Japanese info text of function node (#2985) @HiroyasuNishiyama - -### 1.3.4 Maintenance Release - -Editor - - Allow nodes to access resolved theme files Fixes #2968 - - Fix importing node to currently flow rather than match its old z value - - Don't let 'escape' whilst moving nodes interrupt things Fixes #2960 - - Sort context stores in TypedInput and ensure default first Fixes #2954 - - Fix margin between nodes on palette (#2947) @kazuhitoyokoi - - Ensure typedInput option is selected in dropdown menu Part of #2945 - - Ensure typedInput without value has focus class removed Closes #2945 - - TreeList: Fix remove item when depth=0 and wrong gutter calc (#2967) @hanc2006 - -Runtime - - Handle subflow modules that contain subflows - - Timeout http upgrade requests that are not otherwise handled Fixes #2956 - - Fix error on auto commit for no flow change (#2957) @HiroyasuNishiyama - -Nodes - - - CSV: Fix CSV handling of special chars as separators - - Delay: Give delay node random mina nd max more space so you can see complete value - - Exec: fix grunt fail on exec node test (#2964) @HiroyasuNishiyama - - Function: Ensure function expand button is above vertical scrollbar Fixes #2955 - - Inject: Fix inject node output tooltip extra property count - - -### 1.3.3: Maintenance Release - -Editor - - - Fix package semver comparison to allow >1 version increment - - Prevent TypedInput label overflowing element Fixes #2941 - - Remove TypedInput from tab focus when only one type available - - Make typedInput.disable more consistent in behaviour Fixes #2942 - - Fix project credential secret reset handling Part of #2868 - -Runtime - - - Export package version in Grunt file so docs template can access - -Nodes - - - CSV: ensure CSV node can send false as string - - HTTPIn: handle application/x-protobuf as Buffer type (#2935 #2938) @hardillb - - MQTT: Ensure mqtt-close message is published when closing mqtt nodes - - -### 1.3.2: Maintenance Release - -Runtime - - Handle package.json without dependencies section - -Editor - - - Fix variable reference error in editableList Fixes #2933 - - Fix handling of user-provided keymap Fixes #2926 - - Ensure theme login image is passed through to api response Fixes #2929 - - Add Japanese translations for Node-RED v1.3.1 (#2930) @kazuhitoyokoi - -Nodes - - - CSV: Fix CSV parsing with other than , separator - - File out: Fix timing of msg.send to be after close - - Function: describe `node.outputCount` in help text - - MQTT: Fix MQTT Broker TLS config row layout Fixes #2927 - - Split: add comment to info re $N being number of messages arriving - -### 1.3.1: Maintenance Release - -Nodes - - - Fix change node form validation - -### 1.3.0: Milestone Release - -Editor - - - Remember TypedInput selected sub option when switching types Fixes #2896 - - Show context store name on TypedInput flow/global types Fixes #2793 - - Add core:go-to-selected-subflow action - - Ctrl-dbclick on subflow node opens subflow tab - - Add go-to-previous/next-location actions - - Fix copy-to-clipboard action in FireFox - - Fix select up/down stream when zoomed in or out - - Use cursor keys to change selection in workspace - - Prevent accidental text selection of subflow toolbar text - - Update node-sass to 5.x Fixes #2907 - - Allow module to provide resources and automatically expose them (#2903) @knolleary - -Runtime - - - DE language updates (#2806 #2901 #2913) @heikokue - - Remove Node 8 from travis due to node-sass breakage - - Allow Flow.getNode to return subflowInstance nodes Related to #2898 - - Fix credential lookup for nested subflows Fixes #2910 - - Add externalModules config to settings.js - - Add Japanese translations for Node-RED v1.3.0 (#2900) - - Fix handling encrypted creds on /flows api - - Properly handle credentials passed to /flows api - - Fix line-number reporting in errors on node load (#2894) @HiroyasuNishiyama - -Nodes - - - Change: Add property validation to Change node rule set Closes #2911 - - Exec: Allow any property to be appended to command (#2908) @kazuhitoyokoi - - HTTP Request: set followAllRedirects to work with POSTs Fixes #2017 - - Inject: Flag validation errors in Inject node props config Fixes #2914 - - Function: add node.outputCount to sandbox (#2918) @kristianheljas - - Switch: Fix Switch node handling of hasKey rule when property is undefined - - Switch: Handle invalid regex set dynamically in Switch node Fixes #2905 - - -### 1.3.0-beta.1: Beta Release - -Editor - - - Add config node to refer to when exporting subflow - - Add confirm dialog when deleting subflow with instances in use (#2845) @knolleary - - Add easier ways to find subflow instances - - Add enable/disable toggle button for groups in info-outliner (#2844) @knolleary - - Add IE11 polyfill to support URI download scheme (#2871) @HiroyasuNishiyama - - Add Japanese translations for Node-RED v1.3.0 (#2874) @kazuhitoyokoi - - Add preview of exported nodes to Export dialog (#2820) @knolleary - - Add RED.plugins module to editor - - Add select-connected action (#2877) @knolleary - - Add select-up/downstream-nodes action to editor (#2877) @knolleary - - Add subflow edit button to palette tooltip - - Add subflow meta data edit pane - - Add support for library source plugins (#2785) @knolleary - - Adds shift-click support for selecting up/down stream nodes - - Allow default keymap to be overridden in settings file (#2843) @knolleary - - Allow EditableList to have custom buttons (#2881) @bartbutenaers - - Allow filtering of debug node output within subflow (#2870) @HiroyasuNishiyama - - Ensure the first sidebar tab is shown when editor loads (#2846) @knolleary - - Ensure TypedInput Change event is passed type/value properties Fixes #2883 - - Escape all user input - - Filter palette manager nodes based on allow/deny list - - Fix check for existing config nodes in subflow export set - - Fix handling of + in shortcuts - - fix jshint failure (#2850) @HiroyasuNishiyama - - Fix keymap entries with multiple keys for same action - - fix line break of exporting nodes to clipboard (#2849) @HiroyasuNishiyama - - Fix line break of subflow label on palette (#2828) - - Fix loading individual module catalog - - Fix removing links when deleting node - - Fix semver comparison for IE11 (#2888) @knolleary - - fixed #2790 swapped description of encodeUrl/encodeUrlComponent and d… (#2791) - - Handle timeouts when trying to load node credentials in editor Fixes #2840 (#2841) @knolleary - - Hide projects dialog when opening proj with invalid encrypt key - - hide unused input field (#2823) - - Implement node property typing (#2812) @knolleary - - Improve SemVer comparison in Palette Manager (#2821 #2879) @HaKr - - Library: properly handle symlinked folders (#2768) @natcl - - make flow download code separate utility instead of polyfill - - Prevent duplicate keyboard shortcut from being assigned - - Prevent rogue mouseup on tab from triggering tab change - - Rename paletteEditorEnabled to installerEnabled - - Tidy some subflow env props css - - Tidy up typedInput syntax - - Use subflow.info for help text and meta.type for node type - -Runtime - - - Deprecate autoInstallModules for externalModules.autoInstall - - Deprecate editorTheme.palette.editable for externalModules.palette.allowInstall - - Initial plugin runtime api implementation (#2779) @knolleary - - Add initial support for ThemePlugins (#2836) @knolleary - - Support npm subflow modules (#2690) @knolleary - - Ability to add projects path to the settings file (#2816) @tfmf - - Add i18n function to editor plugins when they are registered - - Add optional 'lang' to settings file (#2796) @fellinga - - Add SubflowModule class for running subflow modules - - Add support for settings.externalModules (#2797) @knolleary - - Allow default project workflow to be set via settings (#2763) @knolleary - - Allow for adding an array of middleware functions (#2788) @kevinGodell - - Better logging when deprecated editorTheme.palette.* settings used - - Detect externalModule dependencies inside subflow modules - - Fix global leak in lib/flows/index.js - - Fix numeric status not displaying by ensuring it's a string (#2859) @knolleary - - Fully remove when.js dependency (#2772) @knolleary - - make nodes with only group change not deployed by nodes deploy mode - - Move exec and events components to util module - - Nodes log via parent flow to allow flow-info to be added - - Restart node only if node's group changes (#2872) @HiroyasuNishiyama - - Stop config nodes after flow nodes Fixes #2876 (#2880) @knolleary - - Update marked dependency - - Use more async funcs in runtime/lib/api to reduce Promise creation - - Use npm info to check pending install version - -Nodes - - - Allow nested msg properties in msg/flow/global expressions (#2822) - - Batch: Messaging API support in Batch node (#2738) @k-toumura - - CSV: Handle commas in msg.columns if quoted. - - CSV: Fix csv node template reset when array complete (#2854) @dceejay - - CSV: Messaging API support in CSV node (#2734) @k-toumura - - Debug: Sanitize Debug node name when display enable/disable message - - Delay: Add support for Messaging API to delay node (#2733) - - Exec: Add settings.execMaxBufferSize to control buffer size of exec node (#2819) - - Exec: Don't append msg.payload to command by default (#2818) - - Function: Add 'node' object to close scope - - Function: allow to load external modules (#2873) @knolleary - - Function: Add functionExternalModules to settings and default to false - - Join: Fix join node in array mode with repeated messages, and allow reset all (#2869) @dceejay - - MQTT: Add MQTT v5 support (#2778 #2886) @Steve-Mcl - - Sort: Messaging API support in Sort node (#2744) @k-toumura - - Split/Join: Messaging API support in Split/Join nodes (#2750) @k-toumura - - Trigger: Messaging API support in Trigger node (#2751) @k-toumura - - Add example flows for storage nodes (#2784) @HiroyasuNishiyama - - Add example flows for network nodes (#2855) @HiroyasuNishiyama - - Add example flows for parser nodes (#2749) @HiroyasuNishiyama - - - -### 1.2.9: Maintenance Release - -Editor - - - Sanitize node type names when displaying in notifications - - Sanitize branch name before displaying in notification message - -Runtime - - - Handle more valid language codes when validating lang params Fixes #2856 - -### 1.2.8: Maintenance Release - -Editor - - - Ensure subflow help is picked up for palette tooltip Fixes #2834 - - Improve Ru locale (#2826) @alexk111 - - Fix scrollbars (#2825) @alexk111 - -Runtime - - - Restrict project file access to inside the project directory - - Validate user-provided language parameter before passing to i18n - - Fix grunt release mkdir issue on Node.js 14 (#2827) @alexk111 - - Prevent crash when coreNodesDir is empty (#2831) @hardillb - -Nodes - - - Batch node: Fixing minor typo in node's documentation (#2848) @matthiasradde - - Split node: Handle out of order messages as long as one of the messages has msg.parts.count set to the proper value (#2748) @s4ke - -### 1.2.7: Maintenance Release - -Editor - - - Ensure subflow-scoped config nodes do not get moved on import Fixes #2789 - - Allow TypedInput to be disabled (#2752) @bartbutenaers - - Allow userMenu to be explicitly enabled (#2805) @tfmf - - Improvements to DE translation (#2192) @ketzu - - -Runtime - - - Handle `undefined` error passed to node.error (#2781) @johnwang71 - - Disable nyc coverage reporting on older node versions - - Improve Editor API unit test coverage (#2777) @aaronmyatt - - -Nodes - - - Trigger: ensure timestamp option sends .now() at point of sending - - -### 1.2.6: Maintenance Release - - -Editor - - - Update Japanese translations for 1.2.5 (#2764) @kazuhitoyokoi - - Library: properly handle symlinked folders (#2768) @natcl - -Runtime - - - Support Windows paths when installing tarball by path name Fixes #2769 - - Fix unsecure command usage in GH Action - -Nodes - - - Update MQTT to latest to fix Node 8 URL breakage - - - - -### 1.2.5: Maintenance Release - -Editor - - - Fix import of config nodes with unknown z property - -Runtime - - - Set ACTIONS_ALLOW_UNSECURE_COMMANDS in GH Action - -### 1.2.4: Maintenance Release - -Editor - - - Support bigint types in Debug sidebar - - Clear retained status of deleted nodes - - Prevent needless retention of node status messages - - Update projects dialogs to use TypedInput-cred input - - Restore cursor position in TypedInput cred-mode - - Ensure config nodes with invalid z are imported somewhere - - Ensure user keyboard shortcuts override defaults Fixes #2753 - -Runtime - - - Disable projects when flowFile passed into grunt dev - - Add Russian Locale (#2761) (#2531) (@alexk111) - - Add Japanese translation for http-in node (#2758) (@kazuhitoyokoi) - -Nodes - - - CSV: Fix CSV node repeating array output - -### 1.2.3: Maintenance Release - -Editor - - - Disable 'use strict' checking in Function node Fixes #2743 - - Add gray/grey alternate options for status - - Handle import errors on initial load and report to user - - Only apply recovery tab on initial load Fixes #2731 - - Reinstate coveralls reporting to travis build - - Update Japanese message catalogue for 1.2.3 release #2747 (@HiroyasuNishiyama) - -Runtime - - - Modify default settings comment (#2739) - - Add mutex lock to saveSettings storage call Fixes #2736 (#2737) - - Migrate to nyc instead of istanbul for code coverage - - Move mosca to ui-test-dependencies - - Remove " from npm install prefix option - -### 1.2.2: Maintenance Release - -Editor - - - Prevent node z property getting set to 0 or "" - - Only apply z-recovery logic to flow nodes - - Fix api call to reload flows Fixes #2726 - - Remove bad z property from import config nodes - -### 1.2.1: Maintenance Release - -Runtime - - - Fix race condition in .config file migration Fixes #2724 - - -### 1.2.0: Milestone Release - -Editor - - - Fix selection of link node not existing within active workspace #2722 (@HiroyasuNishiyama) - - Fix import of merged flow - - Fix width of upload button in Safari #2718 (@HiroyasuNishiyama) - - Update Chinese translations #2719 (@JiyeYu) - - Update Japanese translations needed for 1.2 #2710 (@kazuhitoyokoi) - - Fix unexpected line break of sidebar tab name popover #2716 (@HiroyasuNishiyama) - - i18n module refresh tooltip #2717 (@HiroyasuNishiyama) - - Add better error message if context file gets corrupted - - Update info text of function node #2714 (@HiroyasuNishiyama) - - Use markdown editor if editText called with md mode - - Prevent group actions when in non-default mouse mode - -### 1.2.0-beta.1: Beta Release - -Editor - - - Detect importing duplicate nodes and help user resolve #2698 - - Allow sidebar tabs to be reordered #2655 - - Add tgz upload button to palette manager #2682 - - Add 'automatic' git workflow for projects #2035 - - Allow project version string to be edited - - Sanitize unknown node type when displaying - - Handle nodes with invalid z property Closes #2170 - - Outline: Ensure sf instance nodes update in outliner when import-replace sf - - Outline: Ensure recovered nodes tab is added to outliner properly - - Groups: Only recalculate group label offsets when needed - - Groups: Reuse first group name/style when merging elements Fixes #2680 - - Groups: Fix copy/paste of node into active group Fixes #2686 - - ACE: Update ACE to 1.4.12-src-min-noconflict Fixes #1988 - - ACE: Add comment highlighting to JSONata and fix regex handling Closes #2701 - - ACE: Ensure errors in ACE NRJavaScript mode are on valid lines - - Prevent Enter on search box from reloading page Fixes #2678 - - Allow toggleButton icons to be optional - - Allow treeList to have a header component - - Disable selection of FA icons when dbl clicking node - -Runtime - - - Add RED.hooks API for pluggable routing #2665 - - Add flows:* events and deprecate nodes-* events - - Split .config.json into separate files #2794 - - Add support for file upload in /nodes api #2682 - - Add 'done' metric log for message tracing #2685 (@k-toumura) - - Add mutex locking around /flow apis #2679 - - Default flowFilePretty to true if projects enabled - - Replace Math.random with crypto.getBytes for session tokens - - Fix `this` context when calling multiple event listeners Fixes #2692. #2693 (@mgroenhoff) - - Add --userDir=/tmp/foo support to grunt dev - - Skip loading node html if disableEditor set #2684 - - Update util.writeFile to write to tmp file before rename #2683 - - Fix getModuleFiles function to include path property #2705 (@t-kawamorita) - - Update nodemon to latest so grunt dev task behaves - - Improve jsdoc of util.getObjectProperty to clarify thrown error See #2703 - -Nodes - - - Trigger: allow msg.delay to be used to set delay/loop interval #2707 - - Function: allow to send & log in its initialize code #2644 (@cinhcet) - - MQTT: Update to MQTT 4.2.1 Closes #2694 - - Debug: Handle undefined value in Debug view of Array and Object Fixes #2696 - - Switch: Clarify empty rules in switch node documentation #2649 (@natcl) #2669 (@kazuhitoyokoi) - - Updated core nodes to use Done callback #2653 (@k-toumura) - - yaml, xml, json, html, http, template, range, link, status, catch, complete, inject - -### 1.1.3: Maintenance Release - -Editor - - Fix vertical align of fa node icons Fixes #2670 - - Allow lasso selection to be restricted to active group - - Make ctrl-click on nested group more intuitive - - Fix copy/paste of nested groups - - Add Set(iterable) polyfill for IE11 - - Support select-all inside active group - - Improve performance of moving groups - - Add additional check for git auth failure response Fixes #2656 - - german translation, wording (#2660) (#2666) - - Remove filtering of duplicate fa icons - - Show node help when switching node edit dialogs Fixes #2652 - - Ensure group theme picks up theme defaults properly Fixes #2651 - -Nodes - - Clarify Switch node isEmpty help - - HTTP In: handle application/cbor as binary - -Runtime - - Move runtime settings back to adminApi from editorApi Fixes #2662 - - Update Chinese message for debug node - -### 1.1.2: Maintenance Release - -Editor - - - Fix all the touch screen issues Fixes #2647 - - Add RED.view.redrawStatus to avoid full redraw on update - - Ensure node/group xrefs are consistent on import - - Disable keyboard handler when dialogs are open - - Ensure unknown nodes removed from outliner when node registers Fixes #2646 - -Runtime - - - Allow Comms websocket auth to be done via token header Fixes #2642 - -### 1.1.1: Maintenance Release - -Editor - - - Set apiRootUrl for debug pop-out to load locales properly Fixes #2629, #2630 - - Update build-custom-theme to handle keyframes properly Fixes #2636 - - Remove hardcoded css and allow group to default from theme Fixes #2633 - - Add RED.view.DEBUG_SYNC_REDRAW to disable requestAnimationFrame References #2631 - - Fix up subflow port wiring - - Ensure groups are removed when deleting subflows - - Get group order right in history events to ensure proper handling - - Prevent wiring to node with no corresponding port Fixes #2641 - - Avoid copying duplicate nodes to internal clipboard - - Fix connecting wires to subflow status or io ports on touchscreen Fixes #2637 - -Runtime - - - Authenticate websocket comms using user-provided token if present Fixes #2642 - -Nodes - - - Delay: add words about independence of messages being delayed. - - Debug: fix debug status to not loop, make migration more seamless, detect status type objects #2638 - - Debug: Update Japanese message for debug node #2645 (@kazuhitoyokoi) - -### 1.1.0: Milestone Release - -Editor - - - Align node labels on FF - - Fix node toggle button initial opacity - - Make color/icon/label-pos pickers keyboard navigable - - Default group label to be shown and improve toggle button - - Fix clearing group label - - Remove hardcoded css Fixes #2603 - - Fix node button mouse pointer css - - Change node linebreak handling to use "\n " - - Handle import of node with non-default number of outputs - - Improve display of focussed form element - - Fix typedInput error on empty subflow input types #2624 (@HiroyasuNishiyama) - - Update JP message catalogue for subflow input type #2471 (@HiroyasuNishiyama) - - Outliner - add empty item when last config node moved - - Update zh-CN/zh-TW translations #2626 (@JiyeYu) - - Add default shortcut for `core:show-help-tab` - - Clear outline focus on config node sidebar panel - - Tweak group margin to fit node status and look better - - Fix reparenting nodes in outliner when they change - -Runtime - - - Add developer options - permits npm run build-dev #2628 (@Steve-Mcl) - -Nodes - - Add example flows for lots of core nodes #2585 #2550 #2549 (@HiroyasuNishiyama) - - TCP: Fix tcp in node finishing packets when in streaming base64 receive mode. - - Join: Clear timeout when msg.reset received Fixes #2471 - - Switch: JSONata expr does not require msg.parts.count - - Inject: fix backwards migration of inject without topic - -#### 1.1.0-beta.3: Beta Release - -Editor - - - Fix wiring nodes from input back to output - - Fix sometimes unable to keyboard-move group to left/up - - Fix group position in outliner - - Handle unknown nodes with no icon - - Prevent node creep when switching tabs - -#### 1.1.0-beta.2: Beta Release - -Editor - - - Add UI tests to travis build #2593 #2616 #2617 #2619 (@kazuhitoyokoi) - - Add Japanese translations for outliner, jsonata and runtime #2618 (@kazuhitoyokoi) - - Fix deleting node in group after changing selection - - Fixup padding of quick-add search box - - Move config nodes under type-level hierarchy in outline - - Emit nodes:change event for config node users list modified - - Increase group margin to avoid clash with status text - - Fix event order when quick-adding node to group - - Switch RED.events.DEBUG messages to warn to get stacktraces - - Fix empty item handling for subflows/config in outliner - - Fix search indexing of group nodes - - Avoid regenerating every node label on redraw - - Fix handling of multi-line node label - - Disable merge group menu for single item or non-group item #2611 (@HiroyasuNishiyama) - - Merge pull request #2609 from node-red-hitachi/fix-remove-from-group - - Fix position of empty group with multi-line label #2612 (@HiroyasuNishiyama) - - Make treelist of subflow/config nodes initially have empty placeholder - - Fix empty placeholder not shown on remove from group #2609 (@HiroyasuNishiyama) - - Prevent conversion of circular structure #2607 (@HiroyasuNishiyama) - - Handle null status text in the editor Fixes #2606 - - Massively reduce our dependency on d3 to render the view - - EditableList/TreeList - defer adding elements to DOM - - Prevent RED.stop being called multiple times if >1 signal received - - Flag a node as removed when it is disabled - - Some performance improvements for TreeList - - Resize info/help sidebars whenever sidebar is opened - - Add search defaults to outliner searchBox - - Add search presets option to searchBox widget - - Add RED.popover.menu as a new type of menu widget - - Add support for is:XYZ search flags - - Track subflow instances on the subflow node itself - - Refresh outline filter whenever something changes Fixes #2601 - - Fix Help tab search box appearance - - Rename Node Information to Information in sidebar - - Do a sync-redraw after clearing to ensure clean state - - Make catch/status/complete/link filter case-insensitive - - Add 'add' option to touch radialMenu for quick-add dialog - - Merge branch 'dev' of https://github.com/node-red/node-red into dev - - ensure trigger node detects changes to number of outputs - - Ignore whitespace when checking function setup/close code - - Preserve event handlers when moving outliner items - - Add tooltips to outliner buttons - - Only validate nodes once they have all been imported - - Ensure configNode.users is updated properly on import - -Runtime - - - Bump node-red-admin 0.2.6 - -Nodes - - - WebSocket: Prevent charAt call on websocket listener #2610 () - - Debug: fix status to migrate old nodes to correct default mode. - - Link: Fix Link node filter Fixes #2600 - - -#### 1.1.0-beta.1: Beta Release - -Runtime - - - Allow HTTPS settings to be refreshed #2551 (@bartbutenaers) - - Add support for moment in JSONata expressions #2583 (@dxdc) - - Add httpAdminMiddleware for admin routes #2555 - - Add admin api authentication function #2479 (@KazuhiroItoh) - - Add option support for overwriting settings.js #2463 (@HiroyasuNishiyama) - - Add support for credential-stored env var in subflow #2368 - - Add node installation from other than public site #2378 (@KazuhiroItoh) - - Catch more signals to allow clean context flush on shutdown #2447 - - Add `node-red admin` command #2592 - - Move to `lodash.clonedeep` #2396 (@amodelbello) - - Tidy up unhandledRejection warning from context unit tests - - Add test cases for setMessageProperty with non-object properties - - Fix for settings.set subsequent updates #2584 (@sammachin) - - Turn off installer funding messages - - Remove unused \_info/\_type subflow env var magic values - - Add #! lines to project shell scripts #2548 - - Add nodejs14 to Travis test matrix - - Remove duplicate NLS message #2516 (@alexk111) - - Let setMessageProperty return success flag #2439 - -Editor - - - Add ability to group nodes #2493 - - Add loading progress bar #2558 - - Add Outliner to Info sidebar and add help sidebar #2556 - - Add action to toggle node label visibility #2569 - - Add show-examples-import-dialog action - - Add more consistent events in the editor #2543 - - Save the node description property to the library #2490 (@kazuhitoyokoi) - - Add credential type to TypedInput #2367 - - Scroll the view with WASD/Cursor keys when nothing selected #2381 - - Bump jquery/migrate to latest versions - - Fix editor underscore visibility on Linux systems #2579 (@ristomatti) - - Support setting title on typedInput multi-option #2586 (@Steve-Mcl) - - Projects: Allow remote branch dialog to create non-default remote branches - - Ensure auth failure on project fetch identifies the remote #2545 - - Make all dialogs handle smaller height screens better - - Add basic Array.from polyfill for IE11 - - Add some more trap form elements to workaround Chrome autofill - - [info-sidebar] Handle node/group/flows with \n in their name - - [popover] Allow hover-type popovers to contain buttons - - Modify RED.panels to use flexbox position - - Allow node edit dialog to be opened on a non-default tab - - Add createNodeIcon and getDarkerColor to RED.utils - - [search] Refactor search to use editor events to generate index - - Allow RED.notify.popover to have a position offset - - Make selected list item more distinct - - Allow node button to be clicked via api call - - Reorder initial load so projects:load event emits before any nodes:add - - Add polyfills for IE11 - - Activate project menu after initial clone #2547 (@HiroyasuNishiyama) - - Fix replacement of unknown node in workspace when module installed #2524 (@HiroyasuNishiyama) - - Fix appearance of subflow template panel #2506 (@HiroyasuNishiyama) - - Fix workspace CSS properties syntax #2487 (@bonanitech) - - Consolidate duplicate selectors #2488 (@bonanitech) - - Update message catalogue for subflow UI #2466 (@HiroyasuNishiyama) - -Nodes - - - Batch: Add reset feature to batch node #2553 (@HiroyasuNishiyama) - - Catch/Complete/Link/Status: #2588 Add compact searchBox to filter node lists - - Catch/Complete/Link/Status: Allow searchBox filter to filter on node type #2595 (@jeancarl) - - CSV: Add warn when unpaired quotes detected on input. - - CSV: allow node to only send headers once - - CSV: Allow CR and LF control chars to be a part of the value #2526 (@tmdoit) - - CSV: Add support for parsing empty strings and null values #2510 (@tmdoit) - - CSV: Update Japanese translations for CSV node #2562 (@kazuhitoyokoi) - - Debug: Add bulk-activate/deactive actions for debug node #2570 (@cinhcet) - - Debug: Show status independently of main output #2564 - - Delay: Ensure delay node rate limit timer is cleared on reset - - Function: Make the function node top-level async - - Function: Add support of initialization & finalization to function node #2498 (@HiroyasuNishiyama) - - HTTP In: Remove nodejs deprecation warning #2540 (@vladimir-kazan) - - HTTP Request: Support sending body in GET requests #2478 (@hardillb) - - Inject: Adding user definable properties to inject node #2435 (@PaulWieland) - - TCP: Allow to know particular session from status node #2413 (@dvv) - - Trigger: Add optional second output - - Trigger: Ensure trigger sends complete 2nd msg if set to send latest msg - - Trigger: Allow trigger node to use other than msg.topic to separate streams - - XML: Moved XML options documentation property from Outputs to Inputs section #2572 (@jeancarl) - - Add some core node example flows #2455 (@HiroyasuNishiyama) - - Change types from text/x-red to text/html in node html files #2425 (@kazuhitoyokoi) - - -#### 1.0.6: Maintenance Release - -Runtime - - - Update to JSONata 1.8.3 - - #2536 Handle clone of null in utils - -Editor - - - Prevent button label wrapping in typedInput - - Handle error objects when reporting in palette manager - -Nodes - - - Inject: Revert to cron 1.7.2 - - UDP: when reusing input socket honour the broadcast mode. - -#### 1.0.5: Maintenance Release - -Runtime - - - #2500 Support for context stores using JSONata and evaluateNodeProperty() - - Add better handling of host-key-verify error with projects - - #2517 Handle false values in $env() properly - - #2514 Ensure complete node scope is remapped in subflows - - #2513 Flows/subflows must preinitialise their context objects - - Clear node.close timeout to avoid unnecessary work on restart - - #2532 Set flow.disabled when disabled property is false - - #2522 Ensure file context does not write 'undefined' to store - -Editor - - - #2489 Fix XPath in UI tests - - #2504 Fix paletteCategories order - - #2501 Add page objects for UI testing - - #2494 Check node props when deciding if pasted node can splice links - - #2521 Don't double-sanitize node name in debug sidebar - - #2519 German i18n updates - - #2523 Update nodeTabMap when replacing unknown nodes - - Update TypedInput to use flexbox and remove resizing code - - Handle nodes with no wires array - - Do not collapse whitespace in Debug string messages - -Nodes - - - File: Remove old legacy wording from file node info to stop confusing users. - - Join: Ensure join node handles missing buffer joiner when not in string mode - - Exec: make exec node logging consistent with itself. (only be verbose when in verbose mode) - - Trigger: reset default timeout value when switching away from wait for reset - - Join: Fix join to not crash on appending invalid types to buffer. - - MQTT out: Add warning if topic contains + or # - - #2502 WebSocket i18n update - - #2508 Add Japanese translation for join node - - TCP out: tidy up select of which rows to display - - -#### 1.0.4: Maintenance Release - -Runtime - - - Update all dependencies to latest fix versions - - Update JSONata to 1.8.1 - - #2473 Handle httpAdminRoot missing ending slash with login strategy Fixes - - #2470 Update https-proxy-agent - - #2461 Allow credentials to be provided as part of /flows api - - #2444 Move receive metric position to better reflect async changes Fixes - - #2406 Improve file store error when cache disabled and sync api used Closes - - #2399 cloneMessage should handle undefined without throwing err Fixes - - #2418 Fix the library api routes to prevent too broad matching of regex URLs - - #2417 Remove undefined loadFlowLibrary call - -Editor - - - #2465 Add better regex highlighting in jsonata edit mode Fixes - - Add regex awareness to jsonata formatter - - #2472 Avoid adding extra newlines when formating jsonata Fixes - - #2475 Add UI test case for error handling - - Avoid adding extra divs to edit form to avoid size miscalculation - - Upgrade to latest marked and dompurify libs - - Ensure catalog load errors are logged to the console - - #2460 Track context sidebar element paths to track formatting changes Fixes - - Battling Chrome Autocomplete, part 31: Wrap search input with form - - #2445 Trick chrome into autofilling dummy username/password inputs Fixes - - #2457 Fix garbled characters in library - - #2409 Filter palette using raw label not html formatted label Fixes - - #2400 Wrap long context values when displaying in sidebar Fixes - - Fix duplicating array item in visual json editor - - #2338 Modify history sidebar button positioning to handle long labels Fixes - - #2438 Add some auto-complete snippets to the nrjavascript mode Close - - #2430 Ignore disabled nodes when checking for invalid configs on deploy Closes - - #2442 #2458 #2453 Update zh-CN translations - - #2235 Add initial zh-TW translation - - Re-enable jshint on editor and fixup issues - - #2431 Remove unnecessary namespaces for i18n - - #2440 Support BrowserStack in UI testing - - #2358 Add path property to debug messages Fixes - - Fix false change detection when no config node selected - - Fix IME bug in text editor - - Make node highlighting a bit more obvious for busy flows - - #2392 Add icons and support i18n in typedInput of JSON editor - -Nodes - - #2462 MQTT: Ensure IPv6 broker names are wrapped in brackets Fixes - - Join node - check existance before clearing timeout - - Trigger: Complete 2nd msg when set to send latest - - TCP: clarify text regarding blank parameters. - - #2449 HTTP Request: Add HEAD as Method - - Make min-height for change, switch, batch and mqtt consistent - - -#### 1.0.3: Maintenance Release - -Runtime - - Increase timeouts in Subflow tests to minimise false positives - - Update grunt-sass and add node-sass for node12 support - - Fix timings of Delay node tests - - #2340 Update JSONata to 1.7.0 - - Bump https-proxy-agent version - - #2332 Fix error handling of nodes with multiple input handlers - - Add script to generate npm publish script - - #2371 Ensure folder is present before write (e.g. flows file not in user folder) - - #2371 Handle windows UNC '\' paths - - #2366 Handle logging of non-JSON encodable objects - -Editor - - #2328 Fix language handling in subflow node - - Use default language if lng param not set in i18n req - - #2326 Fix palette editor search visualization - - #2375 Subflow status not showing i18n version of contained core nodes status - - Fix inverse of 'replace' editor event - - #2376 Fallback to base language files if present - - #2373 Support UI testing on the latest Google Chrome - - #2364 Add tooltip to expand button in markdown editor - - #2363 Support ctrl key to select tabs for Windows - - #2356 Make JSONata help initially shown in expression editor - - #2355 Prohibit line break in type menu of typedInput - -Nodes - - Delay: Fix delay to not pass through .reset and .flush props consistently - - #2352 File: Using the ‘a msg per line’ the last line does not get msg.topic passed - - #2339 HTTP Request: Check auth type on opening - - HTTP Request: add units info - - #2372 MQTT/WS: Improved proxy support for MQTT and WebSocket nodes - - #2370 MQTT: Add clarification that MQTT Out requires payload to send msg - - -#### 1.0.2: Maintenance Release - -Runtime - - Allow node.status() to be passed number/bool types - - Allow node emitted events to have multiple arguments - - #2323 Fixed docstrings to have them match the function signature (name of parameters). - - #2318 NLS: Unify translations of "boolean" - -Editor - - Ensure node status is refreshed whenever node is edited - - #2316 Ensure z property included in full message debug payload #2315 - - #2321 Fixed editor.json (JA nls) - - #2313 Fix element to collapse items in visual JSON editor - - #2314 Insert divider in menu by calling RED.menu.addItem('id', null); - -Nodes - - Change: Fixup use of node.done - - #2322 Template: Fix invalid JSON data in template node docs - - #2320 File: Fixed a typo in 10-file.html (JA nls) - - #2312 Template: Remove unnecessary comma in help text - - #2319 Inject: Interval of inject node should be 596 hours or less. - -#### 1.0.1: Maintenance Release - -Runtime - - #2301 Add env vars to enable safe mode and projects - - `NODE_RED_ENABLE_SAFE_MODE` - - `NODE_RED_ENABLE_PROJECTS` - -Editor - - #2308 Fix grid setting - - #2306 i18n support in tooltips - - Fix error when setting typedInput to boolean true/false - - #2299 Fix SVG icons in IE11 - - #2303 Fix issue where subflow color did not update when not on a flow - -Nodes - - #2297 TLS: Allow TLS config node to provide just CA cert - - #2307 Inject: Fix width on inject node property - - #2305 Switch: Let switch node between rule work both ways round - - Range: Add example to range node info and make use of target consistent - - Join: node must clone group message before sending - - -#### 1.0.0: Milestone Release - -Editor - - Add click-on-tooltip to close - - Fix node draggable handling - - Ensure complete node scope property is remapped on import - - Update i18n for project feature - - Fix menu hiding function for flow editor - - Normalise default subflow color references - - Hide header text of very small screens to deploy is visible - - Fix tab access on touch screens - - Update radialMenu to use standard theme colours - - Fix undefined reference loading on mobile - - Allow word breaking of node name with long word - - Enable wrap mode in Markdown editor - - Maximize the size of markdown editor - -Nodes - - remove legacy error option from file in mode - - Change MQTT node default 3.1 compatibility mode to false - - Show clear debug shortcut in tooltip - - Fix file-in port labels for all 4 options - - Add extra comment re Mustache escapes to Template info - - Fix typo in complete node - - Allow Function node output input to go to 0 - -#### 1.0.0-beta.4: Beta Release - -Runtime - - Clone the first message passed to node.send in Function node - -Editor - - Move flow-status button to footer for consistency - - Fix node hover effect to prevent jumping position - - Filter quick-add properly when splicing a wire - - #2274 Mark workspace dirty when deleting link node link Fixes - - Add red-ui-button class to strategy login button - - #2276 Fix padding of subflow locale select Closes - - Update info text of complete node & add JP text - - Add class red-ui-button to cancel button - - Add css class to login submit button (#2275) - - Realign subflow output port labels - - Move context sidebar auto-refresh option to individual sections - - Update Japanese message catalogue - - Fix subflow UI for select - - remove padding before label text for SUBFLOW UI row - - Allow SUBFLOW UI label row without variable name - -Nodes - - Remove old rc option from exec node for 1.0 - - Add python and SQL to template language options - - Fix Switch node display of jsonata_exp type - - Remove sentiment from core nodes - -#### 1.0.0-beta.3: Beta Release - -Runtime - - [FEATURE] Add Node Done API - make message passing async - - Ensure the subflow stop promise is waiting for before restarting - - Limit the regex for the /nodes/ api end points - - #2255 Add error event handler to ssh-keygen child_process Fixes - - #2252 Fix default value handling on context array access Fixes - - Remove all ui test dependencies from package.json - - Add req back to audit log events and extend to Projects api - - #2228 Ensure 2nd arg to node.error is an object Fixes - - #2271 Use a more atomic process for writing context files Fixes - - -Editor - - [FEATURE] Change core node categories - - [FEATURE] Subflow Instance property UI (#2236) - - [FEATURE] Add visual JSON editor - - [FEATURE] Add Action List dialog - - [FEATURE] Add new shortcut to clear debug message list - ctrl-alt-l - - [FEATURE] Add show-library dialog actions - - [FEATURE] Add shift-cursor handling for moving quick-add dialog - - [FEATURE] Add enable/disable-flow actions - - [FEATURE] Add actions to change deploy type - - [FEATURE] Allow config nodes to be disabled, tidy css and add actions - - [FEATURE] Add default shortcut (ctrl-d) for deploy - - [FEATURE] Initial implementation of redo (un-undo) - ctrl-y - - [FEATURE] add support for specifying subflow template color - - [FEATURE] Use ctrl-click on wire to splice node in place - - [FEATURE] Allow search results to show more than 25 results - - #2268 [FEATURE] Allow a node to change if it has an input port Closes - - #2172 Revealing node position needs to account for zoom level Fixes - - #2174 Fix typedInput option selection Fixes - - #2173 Fix palette node id handling so search works Fixes - - Add popover tooltips to debug sidebar,function and template - - Add popovers to context sidebar mini buttons - - Ensure node status icon is shown when value set - - Revert treeList children function signature change - - Restore tray component css for compatibility. Mark as deprecated - - fix function name & string compare function - - #2171 Handle empty list of example flows Fixes - - Ensure library list has an item selected when opened - - Ensure tooltip popover doesn't replace normal popover - - Fix clipboard export download button - - Ensure input box has focus on repeated quick add - - Fix width calculation of typedInput - - Remove some hardcoded css colors - - #2194 Fix display of node help when clicking in palette Fixes - - #2195 Ensure node help is loaded in the right language Fixes - - Do not allow tab focus on clipboard hidden element - - Fix undefined error on typedInput due to valueLabel used before being added - - Fix undo of flow disable state change - - Fix select-all action in main view - - Fix delete-all action on config node sidebar - - Update UI tests for new editor css - - Add insertItemAt doc to editableList - - Ensure focus returns to the right element after dialogs shown - - Set autocomplete to disabled in form input elements - - Update all node icons to SVG - - Handle png/svg fallback for def.icon values. Remove old pngs - - Ignore empty examples directories (don't add to import menu) - - #2222 better handle example file at any depth - - - Properly escape node types in palette - - Ensure session expiry timeout doesn't exceed limit - - Use node/tab map to make filterNodes more efficient - - Rearrange contents of subflow template settings tab - - Handle undefined node.\_def in edit stack title. - - fix converting selection to subflow - - Fix inserting new subflow node to existing wire between nodes - - #2246 Support displaying falsey node status values Fixes - - Remove tab menu from node property UI for subflow and config nodes - - #2260 Mark workspace dirty when shift-click-drag detaches wires Fixes - - Fix subflow category change on palette - - -Nodes - - Remove pi gpi, twitter, email and feedparser nodes from core - - #2182 Fix error handling in Websocket broadcast function Fixes - - Handle websocket item being parseable but not an object better - - stop join tripping up if last message of buffer is blank. - - Add support for env var propety in switch node - - Improve handling of file upload in request node - - Add "has key" rule to switch node + tests - - Optimise generation of switch node edit dialog - - #2261 Add keep-alive option to HTTP Request - - -#### 1.0.0-beta.2: Beta Release - -Runtime - - Fix length calculation when loading library file - -#### 1.0.0-beta.1: Beta Release - -Runtime - - Update runtime apis to support multiple libraries - - Add Node 12 to travis (allow_failures) - - #2152 Bump all dependencies Fixes - -Editor - - [BREAKING] complete overhaul of editor DOM/CSS structure - - [BREAKING] Get rid of Bootstrap - - Simplify index.mst to a single div to insert the editor - - Append node configs to div rather than body - - Only redraw node status when it has changed - - Minimise work done to calculate node label widths - - Allow script tags with src to reference esm modules - - Upgrade to jq 3.4.1 / jq-ui 1.12.1 - - Allow editor language to be chosen in editor settings - - #2128 Only NLS status text that starts with a letter Fixes - - #2140 Fix display of link node list within subflow Fixes - - #2097 Blur the active element when closing edit dialog via action Fixes - - #2160 Trigger change evnt on typedInput when type changes and options present Fixes - - Move library import/export to single dialog - - Move type-library dialogs to new style dialog - - Fix node drag and drop animation - - let status be simple text if wanted - - Add workspace statusBar - - Complete refresh of German translations - - #2163 Fix memory leak in Debug sidebar - - Introduce toggleButton and move flow-disabled to use it - - Allow RED.settings.get/set to use full property desc - - Add auto-refresh toggle to context sidebar - - Add build-custom-theme script - - Add RED.view.selectNodes api for node selection whilst editing - - Add node-select to typedInput - -Nodes - - http request node: warn user if msg.requestTimeout == 0 - - hide delay node reset label on deploy - - Fix CSV regex to treat strings starting e as text - - Add "don't parse numbers" option to csv node - - Add expand editor button to Template node - - Update catch/status nodes to use selectNodes api and treeList - -#### 0.20.8: Maintenance Release - - - Sanitize tab name in edit dialog - - #2272 Pass httpServer to runtime even when httpAdmin disabled Fixes - -#### 0.20.7: Maintenance Release - - - #2183 Update jsonata to 1.6.5 which should fix - - Ensure the subflow stop promise is waiting for before restarting - - Properly escape node types in palette - -#### 0.20.6: Maintenance Release - - - #2172 Revealing node position needs to account for zoom level Fixes - - stop join tripping up if last message of buffer is blank. - - Improve handling of file upload in request node - - #2202 Handle subflow internal node wired to a non-existant node Fixes - - Do not save subflow env vars with blank names - - Don't allow a link node virtual wire to connect to normal port - - #2215 Clear HTTP Request node authType when auth disabled Fixes - - #2216 Fix parsing of content-type header Fixes - - Fix join node reset issue with merging objects - - #2211 Copy data-i18n attribute on TypedInput Fixes - -#### 0.20.5: Maintenance Release - - - Revert error handling in palette manager - -#### 0.20.4: Maintenance Release - -- Switch media-typer to content-type module Fixes #2122 #2123 -- Use userObj.username and not .name for ssh key lookup Closes #2109 -- Ensure mqtt message handlers are tidied up properly on partial deploy -- Update package dependencies -- Fix encoding menu in file node #2125 -- Update ACE to 1.4.3-src-min-noconflict Fixes #2106 -- Fix creating missing package.json when existing project imported Fixes #2115 -- Allow subflow instance to override env var with falsey values Fixes #2113 -- Prevent wire from normal node to link virtual port Fixes #2114 -- Add explanation to the help text on the new feature to build query string from msg.payload #2116 -- Bump bcrypt to latest -- Add Korean locales files for nodes #2100 -- Add error message if catalog is invalid json -- Reduce udp out timeout to be less than default inject at start #2127 - -#### 0.20.3: Maintenance Release - -- Do not dynamically add/remove upgrade listener in ws nodes -- Avoid env var reference loops and support $parent. prefix Fixes #2099 -- Ensure config.\_flow is non-enumerable so is ignored by JSON.stringify -- Block loading ACE from cdn - -#### 0.20.2: Maintenance Release - - - Filter out duplicate nodes when importing a flow - - Handle node configs with multiple external scripts properly - -#### 0.20.1: Maintenance Release - - - #2095 Ensure all subflow instances are stopped when flow stopping Fixes - - #2091 modify name of korean locale forders - - Ensure node names are sanitized before being presented - - #2087 Subflow status node must pass status to parent flow Fixes - - #2090 fix problem on displaying option label on Firefox - -#### 0.20.0: Milestone Release - -Runtime - - Pass complete status to Status node and filter to editor - - #2067 Ensure flows wait for all nodes to close before restarting Fixes - - Fix git clone with password protected key - - Allow a project to be located below the root of repo - - Detect the cloning of an empty git repo properly - - Fix use of custom auth strategy plugins - - #2057 Remove remnants of when library in git/index Fixes - - Clear subflow status on close - - Add exportGlobalContextKeys to prevent exposing functionGlobalContext keys - - Add --no-audit and --no-update-notifier flags to npm commands to reduce workload - - Add envVarExcludes setting to block named env vars - - #2082 Update settings.js docs on userDir to match reality Fixes - - Add Korean Language - - -Editor - - Automatic placing of node icon according to input/output counts - - Transfer placeholder and type to generated TypedInput field - - Hitting enter in Comment node name field clicks markdown button - - Shift status text left if no shape specified - - Better align node status text to status dot - - Handle treeList labels as text not html - - Change subflow edit dialog titles - - Resize subflow edit dialog properly - - Add flow list button to tab bar - - Handle node name as unsanitized text in debug sidebar - -Nodes - - - HTTP Request: Add Digest and Bearer Auth modes to http request node (#2061) - - HTTP Request: Add multipart/form-data support to http request node (#2076) - - TCP: include session/event info in status events - - WebSocket: include session/event info in status events - - Add i18n support for port label of inject/exec/httprequest/file nodes - - Join node: handle merged objects with repeated properties and honour parts - - JSON node: handle single booleans and numbers - - File node: add encoding support to file in/out node (#2066) - -#### 0.20.0-beta.5: Beta Release - -Runtime - - - Bump dependencies - - Allow `$parent` access of flow context - - Make Node.\_flow a writeable property - - Do not propagate Flow.getNode to parent when called from outside flow - - Add support of subflow env var - -Editor - - - Properly sanitize node names in deploy warning dialogs - - Fix XSS issues in library ui code - - Add env type to subflow env var types - - Display parent subflow properties in edit dialog - - Fix direction value of subflow output - - #597 Add Status Node to Subflow to allow subflow-specific status Closes - - #2039 Better handling of multiple flow merges Fixes - -Nodes - - - Various translation updates - - #1747 Catch: Add 'catch uncaught only' mode. Closes - - Link: scroll to current flow in node list - - HTTPRequest: add option to urlencode cookies - - #1981 HTTPRequest: option to use msg.payload as query params on GET. - - Debug: Add local time display option to numerics in debug window - - MQTT: Add parsed JSON output option - -#### 0.20.0-beta.4: Beta Release - -Runtime - - - Bump JSONata to 1.6.4 - - Add Flow.getSetting for resolving env-var properties - - Refactor Subflow logic into own class - - Restore RED.auth to node-red module api - - Tidy up when usage in Flow and Node - -Editor - - - German translation - - Change default dropdown appearance and sidebar tab menu handling - - #2021 Handle multiple-select box when nothing selected Fixes - - #2028 Handle i18n properly when key is a valid sub-identifier Fixes - - #2032 Avoid duplicate links when missing node type installed Fixes - - Add View Tools - - Don't collapse version control header when clicking refresh - - Add fast entry via keyboard for string of nodes - - Check for undeployed change before showing open project dialog - - Add placeholder node when in quick-add mode - - Move nodes to top-left corner when converting to subflow - -Nodes - - - Debug: Allow debug edit expression to be sent to status - - WebSocket: Fix missing translated help - - -#### 0.20.0-beta.3: Beta Release - -Editor - - - Update palette manager view properly when module updated - - Add TreeList common widget - - #2008 Fix visual jump when opening Comment editor on Safari Part of - - #2008 Fix vertical align of markdown editor in Safari Fixes - - #2009 Avoid marking node as changed if label state is default Fixes - - Highlight port on node hover while joining - - Support drag-wiring of link nodes - - Allow TypeSearch to include a filter option - - Improve diff colouring - - Allow sections to toggle in 2-element stack - - #1980 Add support for ${} env var syntax when skipping validation Closes - - i18 support for markdown editor tooltip - - Add RED.editor.registerTypeEditor for custom type editors - - Tidy up markdown toolbar handling across all editors - - Added validation while export into library - - Reuse notification boxes rather than stack multiple of the same type - - Make ssh key dialog accessible when opened from new proj dialog - -Runtime - - - #2023 Bump JSONata to 1.6.4 Fixes - - Add audit logging to admin api - - #2010 Fix failure of RED.require - - #1998 Allow oauth strategy callback method to be customised Closes - - #2001 Ensure fs context cache is flushed on close Fixes - - Fix library Buffer( to Buffer.alloc( for node 10 - - Catch file-not-found on startup when non-existant flow file specified - - Actively expire login sesssions and notify user - - #1976 Add quotation marks for basic auth challenge - -Nodes - - - Change: remove promises to improve performance - - Debug: add ability to apply JSONata expression to message - - Join: remove promises to improve performance - - JSON: delete msg.schema before sending msg to avoid conflicts - - Link: update UI to use common TreeList widget - - Switch: remove promises to improve performance - -#### 0.20.0-beta.2: Beta Release - - - Split Node-RED internals into multiple sub-modules - -Editor - - - Allow the editor to use a custom admin api url root - - #1989 Improve performance of Flow Diff dialog - @TothiViseo - - Add 'open project' option to Projects Welcome dialog - - Add 'type already registered' check in palette editor - - Handle missing tab.disabled property - - Handle missing wires prop and string x/y props on import - - Add RED.notifications.hide flag - for UI testing - - Improve alignment of node label edit inputs - - Show arrow-in node when invalid font-awesome icon name was specified for default icon - - Add ability to delete context values from sidebar - - Allow copy-to-clipboard copy whole tabs - - Make disabled flows more obvious in editor - - Allow import/export from file in editor - - Allow config nodes to be selected in sidebar and deleted - - Show port label of subflow with input port - - Support ctrl-click selection of flow tabs - - Allow left-hand node button to act as toggle - - Support dbl-click in tab bar to add new flow in position - - Fix duplicate subflow detection on import - - #1862 Add import notification with info on what has been imported Closes - - Show error details when trying to import invalid json - - Show default icon when non-existent font-awesome icon was specified - - Add configurable option for showing node label - - #1903 Avoid http redirects as Safari doesn't reuse Auth header Fixes - - Tidy up ace tooltip styling - - Add event log to editor - - Add tooltips to multiple editor elements - - Allow palette to be hidden - - Add node module into to sidebar and palette popover - - Mark all newly imported nodes as changed - - Allow a node label to be hidden - - Add markdown formatting toolbar - - Add markdown toolbar to various editors - - Fix i18n handling for ja-JP locale on Safari/MacOS - - Add node body tooltip - - Decrease opacity of flow-navigator - - Update tooltip style - - Update ACE to 1.4.1-src-min-noconflict - - Cache node locales by language - - Show icon element with either icon image or fa-icon - - Added font-awesome icons to user defined icon - - Update info side bar with node description section - - One-click search of config node users - - Redesign node edit dialog to tabbed style - - Add 'restart flows' option to deploy menu - - Add node description property UI - - -Runtime - - - Allow a project to be loaded from cmdline - - #1978 Handle lookup of undefined property in Global context Fixes - - Refuse to enable Manage Palette if npm too old - - Remove restriction on upgrading non-local modules - - #1709 Remove deprecated Buffer constructor usage Fixes - - Update httpServerOptions doc in settings.js - - Exclude non-testable .js files from the unit tests - - Add --safe mode flag to allow starting without flows running - - #1789 Add setting-defined accessToken for automated access to the adminAPI - - -Nodes - - - #1990 Move all core node EN help to their own locale files - - - CSV: better regex for number detection - - Debug: hide button if not configured to send to sidebar - - Delay: report queue activity when in by-topic mode - - Delay: add msg.flush mode - - Exec: Preserve existing properties on msg object - - File: remove CR/LF from incoming filename - - #1911 Function: create custom ace javascript mode to handle ES6 Fixes - - Function: add env.get - - #1913 HTTP Request: Add http-proxy config - - HTTP Request: add msg.redirectList to output - - #1959 HTTP Request: add msg.requestTimeout option for per-message setting - @natcl - - #1912 - @DurandA MQTT: add auto-detect and base64 output to mqtt node Fixes - - MQTT: only unsubscribe node that is being removed - - Sentiment: move to node-red-node-sentiment - - Switch: add missing edit dialog icon - - Tail: move to node-red-node-tail - - TCPGet: clear status if user changes target per message - - Template: tidy up edit dialog - - UDP: more resilient binding to correct port for udp, give input side priority - - Split/Join: add msg.reset to info panel - - Split/Join: reset join without sending part array - - Watch: add msg.filename so can feed direct to file in node - - WebSocket: preserve \_session on msg but don't send as part of wholemsg - -#### 0.19.6: Maintenance Release - - - #2051 Fix encoding of file node from binary to utf8 - - -#### 0.19.5: Maintenance Release - - - Recognize pip installs of RPi.GPIO (#1934) - - #1941 from node-red-hitachi/master-batch Merge pull request - - #1931 from node-red-hitachi/master-typedinput Merge pull request - - Set min value of properties and spinners for batch - - Fix that unnecessary optionMenu remains - - #1894 from node-red-hitachi/fix-overlapping-file-node-execution Merge pull request - - #1924 from imZack/patch-1 Merge pull request - - Add missing comma - - #1921 Do not disable context sidebar during node edit Fixes - - #1920 Don't allow virtual links to be spliced Fixes - - Merge project package changes to avoid overwritten changes - - #1908 Handle manually added project deps that are unused Fixes - - update close & input handling of File node - - make close handler argument only one - - #1907 from amilajack/patch-2 Merge pull request - - Change repo badge to point to master branch - - invoke callbacks if async handler is specified - - #1891 from camlow325/resolve-example-path-for-windows-support Merge pull request - - #1900 from kazuhitoyokoi/master-addtestcases4settings.js Merge pull request - - wait closing while pending messages exist - - Add test cases for red/api/editor/settings.js - - #1893 Ensure all palette categories are opened properly Closes - - Resolve path when sending example file for Windows support - - fix multiple input message processing of file node - -#### 0.19.4: Maintenance Release - - - #1888 Fix race condition in non-cache lfs context Fixes - - LocalFileSystem Context: Remove extra flush code - - Prevent race condition in caching mode of lfs context (#1889) - - Allow context store name to be provided in the key - - Switch node: only use promises when absolutely necessary - - Fix dbl-click handling on webkit-based browsers - - Ensure context.flow/global cannot be deleted or enumerated - - #1883 Handle context.get with multiple levels of unknown key Fixes - - Fix global.get("foo.bar") for functionGlobalContext set values - - Fix node color bug (#1877) - - #1857 from cclauss/patch-1 Merge pull request - - Define raw_input() in Python 3 & fix time.sleep() - -#### 0.19.3: Maintenance Release - - - Split node - fix complete to send msg for k/v object - - Remove unused Join node merged object key typed input - - Set the JavaScript editor to full-screen - - Filter global modules installed locally - - Add svg to permitted icon extension list - - Debug node - indicate status all the time if selected to do so - - pi nodes - increase test coverage slightly - - TCP-request node - only write payload - - JSON schema: perform validation when obj -> obj or str -> str - - JSON schema: add draft-06 support (via $schema keyword) - - #1651. Mqtt proxy configuration for websocket connection, - - Allows MQTT Shared Subscriptions for MQTT-In core node - - Fix use of HTML tag or CSS class specification as icon of typedInput - -#### 0.19.2: Maintenance Release - - - Ensure node default colour is used if palette.theme has no match - - #1863 (#1864) fix lost messages / properties in TCPRequest Node; closes - - Fix typo in template.html - - Improve error reporting from context plugin loading - - Prevent no-op edit of node marking as changed due to icon - - Change node must handle empty rule set - -#### 0.19.1: Maintenance Release - - - Pull in latest twitter node - - Handle windows paths for context storage - - Handle persisting objects with circular refs in context - - Ensure js editor can expand to fill available space - - Add example localfilesystem contextStorage to settings - - Fix template node handling of nested context tags - -#### 0.19: Milestone Release - -Editor - - - Add editorTheme.palette.theme to allow overriding colours - - #1446 Index all node properties when searching Fixes - - #1779 Handle NaN and Infinity properly in debug sidebar Fixes #1778 - - Prevent horizontal scroll when palette name cannot wrap - - Ignore middle-click on node/ports to enable panning - - Better wire layout when looping back - - fix appearence of retry button of remote branch management dialog - - Handle releasing ctrl when using quick-add node dialog - - Add $env function to JSONata expressions - - Widen support for env var to use ${} or $() syntax - - Add env-var support to TypedInput - - Show unknown node properties in info tab - - Add node icon picker widget - - Only edit nodes on dbl click on primary button with no modifiers - - Allow subflows to be put in any palette category - - Add flow navigator widget - - #1753 Cache flow library result to improve response time Fixes - - Add middle-button-drag to pan the workspace - - allow multi-line category name in editor - - Redesign sidebar tabs - - Do not disable the export-clipboard menu option with empty selection - -Nodes - - - #1769 Change: Ensure runtime errors in Change node can be caught Fixes - - File: Add output to File Out node - - Function: add expandable JavaScript editor pane - - Function: allow id and name reference in function node code (#1731) - - HTTP Request: Move to request module - - #1278 HTTP: Ensure apiMaxLength applies to HTTP Nodes Fixes - - Join: accumulate top level properties - - Join: allow environment variable as reduce init value - - JSON: add JSON schema validation via msg.schema - - Pi: Let nrgpio code work with python 3 - - Pi: let Pi nodes be visible/editable on all platforms - - Switch: add isEmpty rule - - #1414 TCP: queue messages while connecting; closes - - #1805 TLS: Add servername option to TLS config node for SNI Fixes - - UDP: Don't accidentally re-use udp port when set to not do so - -Persistent Context - - - Add Context data sidebar - - Add persistable context option - - Add default memory store - - Add file-based context store - - Add async mode to evaluateJSONataExpression - - Update RED.util.evaluateNodeProperty to support context stores - -Runtime - - - Support flow.disabled and .info in /flow API - - #1781 Node errors should be Strings not Errors Fixes - - #1770 Add detection of connection timeout in git communication Fixes - - Handle loading empty nodesDir - - Add 'private' property to userDir generated package.json - - Add RED.require to allow nodes to access other modules - - Ensure add/remove modules are run sequentially - -#### 0.18.7: Maintenance Release - -Editor Fixes - - - #1737 Do not trim wires if node declares outputs in defaults but misses value Fixes - -Node Fixes - - - Relax twitter node version ready for major version bump - - Pass Date into the Function node sandbox to fix instanceof tests - - let TCP in node report remote ip and port when in single packet mode - - typo fix in node help (#1735) - -Other Fixes - - #1738 Tidy up default grunt task and fixup test break due to reorder Fixes - - Bump jsonata version - -#### 0.18.6: Maintenance Release - -Editor Fixes - - - #1724 Handle a node having wires in the editor on ports it no longer has Fixes - - Add missing ACE snippet files - - #1726 Fix wireClippedNodes is not defined Fixes - - Split node html to isolate bad nodes when loading - - Avoid unnecessary use of .html() where .text() will do - - - Add editorTheme.projects.enabled to default settings.js" - -#### 0.18.5: Maintenance Release - -Projects - - - Add clone project to welcome screen - - Handle cloning a project without package.json - - Keep remote branch state in sync between editor and runtime - -New Features - - - Add type checks to switch node options (#1714) - - add output property select to HTML parse node (#1701) - - Add Prevent Following Redirect to HTTP Request node (#615) (#1684) - - Add debug and trace functions to function node (#1654) - - Enable user defined icon for subflow - - Add MQTT disconnect message and rework broker node UI (#1719) - - Japanese message catalogue updates (#1723) - - Show node load errors in the Palette Manager view - -Editor Fixes - - - #1698 Highlight subflow node when log msg comes from inside Fixes - - #1678 Ensure node wires array is not longer than outputs value Fixes - - #1681 Allow importing an unknown config node to be undone Fixes - - #1696 Ensure keyboard shortcuts get saved in runtime settings Fixes - - Don't mark a subflow changed when actually modified nothing (#1665) - -Node Fixes - - - bind to correct port when doing udp broadcast/multicast (#1686) - - Provide full error stack in Function node log message (#1700) - - #1690 Fix http request doc type Fixes - - Make debug slightly larger to pass WCAG AA rating - - #1673 Make core nodes labels more consistent, to close - - #1671 Allow template node to be updated more than once Fixes - - Fix the problem that output labels of switch node sometimes disappear (#1664) - - Chinese translations for core nodes (#1607) - -Runtime Fixes - - - #1689 (#1694) Handle and display for invalid flow credentials when project is disabled - - node-red-pi: fix behavior with old bash version (#1713) - - Fix ENOENT error on first start when no user dir (#1711) - - #1721 Handle null error object in Flow.handleError Fixes - - update settings comments to describe how to setup for ipv6 (#1675) - - #1359 Remove credential props after diffing flow to prevent future false positives Fixes - - #1645 Log error if settings unavailable when saving user settings Fixes - - Keep backup of .config.json - - Add warning if using \_credentialSecret from .config.json - - Filter req.user in /settings to prevent potentially leaking info - -#### 0.18.4: Maintenance Release - -Projects - - - Ensure sshkey file path is properly escaped on Windows - - Normalize ssh key paths for Windows file names - - Ensure userDir is an absolute path when used with sshkeygen - - Detect if there are no existing flows to migrate into a project - - Use relative urls when retriving flow history - - Add credentialSecret to clone pane - - Delay clearing inflight when changing credentials key - - Mark deploy inflight when reverting a file change - - Handle missing_flow_file error on clone properly - - Remote project from cached list on delete so it can be reused - - Fix tests for existing file flag in settings - -Editor Fixes - - - Fix merging a remote diff - - Fixed the problems when using a node without defaults - - Disable user defined icon for subflow - - #1635 getDefaultNodeIcon should handle subflow instance nodes Fixes - - Add Japanese info text for core nodes - - Fix message lookup for core nodes in case of i18 locales directory exists - - Prevent the last tab from being deleted - -Node Fixes - - - Ensure trigger gets reset when 2nd output is null - - -#### 0.18.3: Maintenance Release - -Projects - - - Fix permissions on git/ssh scripts - - Add support for GIT_SSH on older levels of git - - Handle host key verification as auth error - - Ensure commit list has a refs object even if empty - - Make git error detection case-insensitive - - Fix up merge conflict handling - - Use flow-diff when looking at flow file changes - -Node Fixes - - - Ensure debug tools show for 'complete msg object' - - Fix msg.parts handling in concat mode of Batch node - -Editor Fixes - - - Fix offset calculation when dragging node from palette - - Allow a library entry to use non-default node-input- prefixes - - #1628 Change remote-diff shortcut and add it to keymap Fixes - -#### 0.18.2: Maintenance Release - -Projects - - - Filter out %D from git log command for older git versions - - Ensure projects are created as logged in user - - Better error handling/reporting in project creation - - Add Project Settings menu option - - Refresh vc sidebar on remote add/remove - - Fix auth prompt for ssh repos - - Prevent http git urls from including username/pword - - Fix fetch auth handling on non-default remote - - Avoid exception if git not installed - - Check version of git client on startup - - Fix pull/push when no tracked branch - - Add git_pull_unrelated_history handling - - Handle delete of last remote in project settings - -Node Fixes - - - Fix and Add some Chinese translations - - Update sort/batch docs - - Don't assume node has defaults when exporting icon property - - Ensure send is last thing trigger does - - Ensure trigger doesn't set two simultaneous timeouts - - Add missing property select var to HTML node - - Add a default keepalive to tcp client mode - - Move node.send in exec and httprequest nodes - - -#### 0.18.1: Maintenance Release - -Projects - - - Handle more repo clone error cases - - Relax validation of git urls - - Revalidate project name on return to project-details view - - #1597 Avoid unnecessary project refresh on branch-switch Fixes - - Add support for file:// git urls - - Handle project first-run without existing flow file - - Handle delete of last remote in project settings - - Add git_pull_unrelated_history handling - - Fix pull/push when no tracked branch - - Remember to disable projects in editor when git not found - -Node Fixes - - - Trigger node migration - ensure bytopic not blank - - #1598 Add HEAD to list of methods with no body in http req node - - #1598 Do not include payload in GET requests Fixes - - #1601 Update sort/batch docs Fixes - - Don't assume node has defaults when exporting icon property - - -#### 0.18: Milestone Release - -Runtime - - - Beta: Projects - must be enabled in settings file - - Allow port zero for Express (#1363) - - Better error reporting when module provides duplicate type - - Update jsonata to 1.5.0 - - add express-session memorystore without leaks (#1435) - - #1461 Allow adminAuth.user to be a Function Fixes - - Ensure RED.server is set even if admin api disabled - - #1481 Ensure strategy login button uses relative URL Fixes - - ignore `_msgid` when merging full objects - - #1488 Move node install to spawn to allow for big stdout Fixes - - SIGINT handler should wait for stop to complete before exit - -Editor - - - allow a node's icon to be set dynamically (#1490) - - Batch messages sent over comms to increase throughput - - Migrate deploy confirmations to notifications - - #1346 `oneditdelete` should be available to all node types Closes - - Sort typeSearch results based on position of match - - Update ACE to test and add python highlighter (#1373) - - #1517 Clear mouse state when typeSearch cancelled Fixes - - Handle scoped modules via palette editor - - #1549 TypedInput: handle user defined value/labels options Fixes - -Nodes - - - add msg. select to range and yaml nodes - - add property choice to xml, sentiment nodes - - mqtt: Add 'name' to mqtt-broker node, and label it by this if it is set. (#1364) - - Add option to JSON node to ensure particular encoding - - add parts support for HTML node (#1495) - - Add passphrase to TLS node - - Add rc property to exec node outputs 1 and 2 (#1401) - - Add skip first n lines capability to csv node (#1535) - - Add support for rejectUnauthorized msg property - - Add TLS options to WebSocket client - - Added parsed YAML support for template node (#1443) - - #1360 Allow delay node in rate-limit mode to be reset Fixes - - Allow setTimeout in Function node to be promisified in node 8 - - Debug to status option (#1499) - - enable template config via msg.template for stored or generated templates (#1503) - - HTTP REQUEST: Adding PROPPATCH and PROPFIND http methods (#1531) - - Initial support of merge & reduce mode for JOIN node (#1546) - - Initial support of new BATCH node (#1548) - - Initial support of sequence rules for SWITCH node (#1545) - - initial support of SORT node (#1500) - - Inject node - let once delay be editable (#1541) - - Introduce `nodeMessageBufferMaxLength` setting for msg sequence nodes - - Let CSV correct parts if we remove header row. - - let default apply if msg.delay not set in override mode. (#1397) - - let trigger node be reset by boolean message (#1554) - - Let trigger node support per topic mode (#1398) - - let HTML node return empty array for no matching input (#1582) - - MQTT node - if Server/URL config contains '//' use it as a complete url; enabled ws:// and wss:// - - clone messages before delayed send (#1474) - - Decrement connected client count rather than show disconnected - - #1566 Don't end mqtt client on first error Fixes - - #1489 File out - create dirs synchronously to ensure they exist Fixes - - Fix debug message format for Buffer (#1444) - - Fix global.keys() bug in function node (#1417) - - Handle escape characters in template node which uses Mustache format and JSON output mode (#1377) - - #1527) (#1539) Move all node.send to end of timer functions in trigger node (issue - - #1521 Publish null/undefined to mqtt as blank not toString Fixes - - remove inject node at specific time spinner - - restrict inject interval to less that 2^31 millisecs - - tag UDP ports in use properly so they get closed correctly (#1508) - -#### 0.17.5: Maintenance Release - - - Add express-session missing dependency for oauth - - Fix improper type tests is core test cases - - #1351 File node: recreate write stream when file deleted Fixes - - Add flow stopping trace messages - - Fix userDir test case when .config.json exists (#1350) - - #1344 Do not try to send msg after http request error handled Fixes - - Fix boundary problem in range node (#1338) - - Modify messages in node properties to refer messages.json (#1339) - - Fix settings.js replacing webSocketVerifyClient by webSocketNodeVerifyClient (#1343) - - -#### 0.17.4: Maintenance Release - - - Add request node test case for POSTing 0 - - Allow false and 0 in payload for httprequest (#1334) - - Add file extension into flow name of library automatically (#1331) - - #1335 Fix accessing global context from jsonata expressions Fixes - - #1332 Disable editor whilst a deploy is inflight Fixes - - Replace Unknown nodes with their real versions when node loaded - - Retry auto-install of modules that fail - - Fix column name in link nodes to refer language file (#1330) - - #1329 Use namespaces with link node title attributes i18n name Fixes - - #1328 Tidy up GPIO pin table presentation Fixes - - Join: count of 0 should not send on every msg - - Handle importing only one end of a link node pair - - #1323 Make sending to Debug synchronous again Fixes - - Make send-error behaviour optional in file node - - Restore File In node behaviour of sending msg on error - - Expose context.keys within Function node - - JSON parser default should be not formatting output - - -#### 0.17.3: Maintenance Release - - - Fix flow library in menu to support period characters as flow name (#1320) - - editorTheme not setting custom css/scripts properly - - Fix missing icons for some nodes (#1321) - - Add reformat button to JSONata test data editor - - Update delay node status without spawning unnecessary intervals - - #1311 Avoid stringify ServerResponse and Socket in Debug node Fixes - - Fix creating userDir other than system drive on Windows (#1317) - - #1316 Trigger node not handling a duration of 0 as block mode Fixes - - #1314 Unable to config GPIO Pin 13 Fixes - -#### 0.17.2: Maintenance Release - - - Fix GPIO node labels - -#### 0.17.1: Maintenance Release - - - Fix PI gpio to use BCM - - #1311 Prevent event thread contention when sending to Debug node Closes - - Fix Bug: Can not display node icon when npm package has scope (#1305) (#1309) - - Clear moved flag when nodes are deployed - -#### 0.17: Milestone Release - -Runtime - - - #1273 Return flow rev on reload api when api v2 enabled Closes - - Provide single endpoint to load all node message catalogs - - Add .trace and .debug to Node prototype - - Rename oauth auth scheme to strategy as it works for openid - - Allow oauth schemes provide a custom verify function - - Add support for oauth adminAuth configs - - Cache auth details to save needlessly recalculating hashes - - Add context.keys function to list top-level keys - - #1239 Strip BOM character from JSON files if present Fixes - - Version check no meta (#1243) - - #1230 Ensure all nodes have access to global context Fixes - - #851 Don't process subscription for unauthenticated comms link Fixes - - #1198 Clone credentials when passing to node Fixes - - Resolve dir argument of getLocalNodeFiles function (#1216) - - Add wait for writing a library entry into a file. (#1186) - - Use correct Buffer.from method rather than constructor - - update core nodes to use newer Buffer syntax - - #1167 Treat missing msg properties as undefined rather than throw error Fixes - - Allows flows to be enabled/disabled in the runtime - - add off option to logging settings comment - - Log error stack traces if verbose flag is set - - Extract line number if available from node load errors - - Add node 8 to travis (with allow failure) - - Shuffle promises for creating default package.json - - Create a package.json file in userDir if one doesn't exist - - autoInstallModules option must honour version/pending_version - - Refuse to update a non-local node module - - Finalise nodeSettings and update tlsConfigDisableLocalFiles - - Allow a node to declare what settings should be made available to the editor. (#1185) - - Add node whitelist function (#1184) - - Allow a node to declare settings that should be exported - - Add test coverage for deleting a flow - - Update tests for oauth -> strategy rename - - Fix the test cases which sometimes fails due to timing. (#1228) - - Extend timeout for the test case of installing non-existant path. (#1191) - - Fix loader test to expect line numbers in load errors - - Update ui_spec for icon module path - - let node installer try to save with ~ version prefix to allow minor updates - - Log error when non-msg-object is returned from a Function - - Timeout a node that fails to close - default 15s timeout - - Pass a 'removed' parameter to node close handler - - Remove event passing for icons/examples from the api layer - - Update general dependencies - -Nodes - - - Do not log node errors if handled by a Catch node - - Fix wrong number of double quotes in CSV parsing - - let csv node handle ip addresses without trying to parse - - Update debug node to register the settings it uses - - #1202 Handle IncomingMessage/ServerResponse object types in debug Fixes - - #1203 Toggling debug node enabled/disabled state should set state dirty Fixes - - redo delay node status messages to be interval based - - Update delay node ui - - Add new msg.delay option to delay node - - stop delay node spamming web socket (when in fast rate limit mode) - - Delay/Range node help tidy up - - Bug fix in exec node. White spaces in arguments now works (#1285) - - Make exec node explicitly call SIGTERM for default - - Fix exec node error tests on Windows (#1234) - - update messages for updated exec node - - Make exec node spawn and exec outputs more consistent - - Exec node for windows environment (#1200) - - remove requirement for cmd in exec node config + new style info - - retry exec node tests - - let exec node take msg.kill SIG... param and pid param - - Third output from Exec node must be consistent for success/failure conditions - - exec node returns 0 on the third output if command ended without error. (#1160) - - exec node can be killed on demand - - add "split/stream" ability to file in node - - add port label to file node and update info - - Allow nodes to have translations not in core (#1183) - - fix tcp node new Buffer alloc size 0 - - change pin selection table for pi gpis nodes - - stop using sudo for Pi gpio access - - adding frequency configuration to pwm output (#1206) - - Fix Pi GPIO debounce - - let Hypriot on Pi detect gpio correctly - - More core node info help tidy up - - Tidy up more core node help text - - Tidy up parser node edit dialogs and help text - - yet more core node info updates - - more core node info updates to newer style - - Update some core nodes info - - First pass of new node-info style - - MQTT new style info - - Fix empty extra node help content issue - - #1218 Handle HTTP In url that is missing its leading / Fixes - - Add file upload support to HTTP In node - - HTTP Request node: add info on how to do form encoding - - #1015 Prevent unmodified msg.headers from breaking HTTP Request flows Closed - - Add cookie handling to HTTP Request node - - Add guard against the http-request buffer fix being reverted - - Multipart streaming - - Add http-request node unit tests - - http request node add transport validity check and warn. - - #1172 Update follow_redirects to fix http_proxy handling Fixes - - Allow statusCode/headers to be set directly within HTTP Response node - - let inject "between time" also fire at start - Plus new info - - remove repeat symbol from inject if repeat is 0 - - Add port labels to inject node (to show types) - - Add buffer joiner mode to Join node - - Let join node auto re-assemble buffers - - let join also accumulate strings (and not fail) - - Add Pretty print option to JSON node and - - Fix selection of link nodes - - Add link label value as portLabels - - Add sentence about clearing retained topic on mqtt - - make sure MQTT client closes if redeploy during reconnect - - make sure MQTT client closes if redeploy during reconnect - - slight filed size adjust for mqtt broker port field - allow 5 digits - - Add help info for split node - - split node - in object mode allow msg.complete on its own - - let split of objects use key to set another property (e.g. topic) - - adding streaming modes into split node - - let split node reassemble based on a final packet. (as well as the first) - - Add buffer support to split node - - updated split/join node (split still needs work before release) - - Added a name icon and a description label on edit subflow window. - - Don't display port labels for subflow pseudo-port nodes - - Added a name icon and a description label on edit subflow window. - - tcp request - remove confusing timeout wording from info - - Final TCP node nits - let 0 do it's thing as per every other timeout - - fix tcp port not waiting as per info/previous behaviour - - TCP In: Fix error in timout callback (#1249) - - Make tcp send msg more consistent - - Update 31-tcpin.js (#1235) - - really close tcp node connection right away (if told to) - - clone message before send in stay connected mode - - Better template node help example - - Add option to parse Template result as JSON before sending - - nail trigger test for windows AND linux - - give up on SIGQUIT for widows test - - better tests for windows nodes - - comment out 2nd exec node kill tests - - fixes for grunt files tests on Windows - - Add events to test helper - - Change default value of tlsConfigDisableLocalFiles to false - - Add the node setting tlsConfigDisableLocalFiles for tls node. (#1190) - - UI to upload certificates and keys for TLS node - - Update trigger help - - let trigger node set repeated outputs - - Move udp sock error listener to only be instantiated once. - - Let watch node recurse into subdirectories - - Misconfigured WebSocket nodes should not register msg handlers - - #1127 Add websocketVerifyClient option to enable custom websocket auth Fixes - -Editor - - - Bump ACE editor to v1.2.7 - - Add RED.utils.getNodeLabel utility function - - Include module name in requests for node icons - - Change debug message menu icon - - Handle empty array/objects in debug view - - Add per-node filter option to Debug pane - - Ensure debug node marked changed when button pressed - - Fix pop-out debug window for all the recent updates - - Add debug message menu - - Don't include msg. in debug message copied paths - - Format Buffer numbers as hex by default - - Remember formatting choices for dbg msg elements - - Allow debug msg elements to be pinned - - Only show debug tools under the debug tab - - Fix test for valid js identifiers in debug path construction - - Remove unused modified flag on debug messages - - Add copy path/value buttons to debug messages - - dont match only part of the node type (#1242) - - #1213 Add editorTheme.logout.redirect to allow redirect on logout Closes - - #1288 Handle logging out and already logged-out editor Fixes - - Fix bug: Export Subflows (#1282) - - destroy editor to ensure fully removed on close (function, template, comment) - - #1258 Don't try to nls status text starting with '.' Fixes - - Add note of removed flows in diffConfig (#1253) - - Add description to flow same as subflow - - Allow tabs to be enabled/disabled in the editor - - Make H3 sections in node help collapsible - - Add JSON Expression editor - - Expression editor - clear legacy flag for blank expressions - - Ensure node labels are reordered properly to match outputs - - Add 'none' placeholder for empty port label form - - Don't mark a node changed when going from none to blank labels - - Leave a node to nls its own port labels - - Allow a node to override default labels - - Add placeholder text on label inputs and clear buttons - - Add port labels to Subflow nodes - - Keep port label form in sync with output reordering - - Basic node label editor - - Port label editor starting point - - Allow port labels be i18n identifiers - - Add inputLabels and outputLabels to node defn + Update Change node - - Resize port labels based on content - - Initial port label behaviour - - Allow a node to decide for itself if its button should be enabled or not - - Provide feedback when enable/disable node fails - - Add node module update api and expose in palette editor - - Reset palette-manager tabs when settings dialog reopened - - Move palette editor to settings panel - - Move palette editor to userSettings dialog - - Move view and keyboard into user settings dialog - - Add basic user settings panel - - Node status should be on by default - - Make theme able to load custom javascript (#1211) - - Allow tips to be hidden and cycled through - - Add info tips back to the sidebar - - Add buffer mode to typedInput - - Add typedInput binary mode icon - - Ensure all ace editors are destroyed in the expression editors - - Refresh sidebar info when tab is changed - - better spacing for library widget - - Fix gridSize for node width calculation to avoid odd resizing - - Redraw grid properly if gridSize changes - - Scroll sidebar info tab to top when changing content - - Ensure info tab sections are collapsible when set from palette - - Only show tab info if there is an active tab - - Only check for reordered outputs if outputMap defiend - - Avoid circular references when stingifying node objects - - Fix padding of config node edit dialog - - Add force-deploy option when conflict detected - - Hide tip box on startup if disabled - - Track node moves separately to node config changes - - Ensure ace editor instances are freed if edit cancelled - - Clip overly long notification messages - - Use queryCommandSupported not queryCommandEnabled to check for copy support - - Add tip to tab description editor - - Make tab info edit box resizable - - Shrink config node appearance in info table - - Display config nodes in Info sidebar table - - Ensure flow info box updates after editing flow - - Hide Node info section when displaying changelog - - Restructure info tab - - Provide notification when new flows deployed in the background - - Stop some ui elements from clearing url anchor when clicked - - clipboard export text stay highlighted even when button deselected - - ensure export clipboard keeps text selected and formatted - - Defer resizing tray components until they have finished building - - Use pre-calculated values for connection path - - Use textContent to avoid manual escaping - - Add RED.stack as a common ui component - - Numeric validator that accepts blank should accept undefined - - Add visual cue as to whether the workspace is focused - - Allow RED.validators.number to allow blank values as valid - - Support dropping json files into the editor - - NLS Expression/JSON editor and fix their height calculation - - #1275 Update JSONata to 1.2.4 Closes - - Remember test expression data on a per-node basis - - NLS jsonata test messages - - Add JSONata expr tester and improved feedback - - Add $context/$flow/$global functions to jsonata - - Update jsonata - -Other - - - add allow es6 to .jshintrc - - travis - don't allow node 8 fails, (and re-add 7) - - ask istanbul for more reports as default - - Add istanbul to Gruntfile.js (#1189) - - -#### 0.16.2: Maintenance Release - - - #1126 Ensure custom mustache context parent set in Template node fixes - - Display debug node name in debug panel if its known - - Ensure auth-tokens are removed when no user is specified in settings - - Ensure all a tags have blank target in info sidebar - - Ensure links do not span tabs in the editor - - Avoid creating multiple reconnect timers in websocket node - - #1120 Fix inner reference in install fail message catalog entry Fixes - - Display buffer data properly for truncated buffers under Object property - -#### 0.16.1: Maintenance Release - - - Add colour swatches to debug when hex colour matched - - Nodes with hasUsers set to false should not appear unused - - Change hard error to verbose warning if using old node.js level - - #1117 Don't filter debug properties starting with _ Fixes - - #1116 Node logged errors not displayed properly in debug pane Fixes - - #1114 Do not look for existing nodes when checking for wires on paste Fixes - - -v option not enabling verbose mode properly - - Add node.js version check on startup - -#### 0.16.0: Milestone Release - -Runtime - - - Drop support for node 0.10 and 0.12 - -Nodes - - - #1103 Add option to colourise debug console output Closes - - Add property validation to nodes using typedInput - - #1104 Add common validator for typedInput fields Closes - - #1094 Update debug node console logging indicator icon Closes - - Let exec node (spawn) handle commands with spaces in path - - Add symbol to debug node to indicate debugging also to console.log - - Change file node to use node 4 syntax (drops support for 0.8) - - add info for httprequest responseUrl property - - Add res.responseUrl to httprequest node response - - Add support for flow and global context in Template node (#1048) - - Added YAML parser node (#1034) - - node-red-node-serialport removed as a default node - -Editor - - - #1109 Add install/remove dialog to increase friction Closes - - #1009 Report node catalogue load errors Closes - - #1043 Properly report module remove errors in palette editor Fixes - - Update rather than hide install button after success install - - Tweak search box styling - - Display info tips slightly longer - - Allow tips to be enabled/disabled via menu option - - Info-tips update - - Make typedInput keyboard navigable - - update Font Awesome to 4.7.0 - - Add expression editor for jsonata - - Overhaul keyboard handling and introduce editor actions - - Add Japanese translation file(editor.json) (#1084) - - Add quick-add node mode with cmd/ctrl-click - - Add cmd/ctrl-click to quick add wires - - Use json-stringify-safe to detect circular references in debug msgs - - debug - format if time if correct length/range - - Make Debug object explorable - - Initial debug pop-out window - - Add proper three-way diff view - - Focus tray body when edit dialog opened - - Hit enter to edit first node in selection - - Add node delete button to edit dialog - - #832 Add notification when runtime stopped due to missing types Part of - -Fixes - - - #1111 Do not tie debug src loading to needsPermission Fixes - - #1095 Initialise nodeApp regardless of httpAdmin setting Closes #1096 - - Speed up reveal of search dialogs - - #1069 Ensure flows exist before delegating status/error events Fixes - - Update package dependencies - - Update MQTT to latest 2.2.1 - - Node status not being refreshed properly in the editor - - #1081 Try to prevent auto-fill of password fields in node edit tray Fixes - - Fix whitespace in localfilesystem - - fix bug where savesettings did not honor local settings variables (#1073) - - #922 Tidy up unused/duplicate editor messages Closes - - Property expressions must not be blank - - Tidy up merge commit of validatePropertyExpression - - add port if wires array > number of ports declared. - - #1101 Allow quoted property expressions Fixes - - Index all node properties for node search - - Remove node 0.10 from travis config - - update welcome message to use logger so it can be turned off/on if required (#1083) - - Fix dynamically loading multiple node-sets from palette editor - - #1031 Allow a node to reorder its outputs and maintain links Fixes - -#### 0.15.3: Maintenance Release - - - Tcpgetfix: Another small check (#1070) - - TCPGet: Ensure done() is called only once (#1068) - - #1063 Allow $ and _ at start of property identifiers Fixes - - TCPGet: Separated the node.connected property for each instance (#1062) - - Corrected 'overide' typo in XML node help (#1061) - - TCPGet: Last property check (hopefully) (#1059) - - Add additional safety checks to avoid acting on non-existent objects (#1057) - - add --title for process name to command line options - - add indicator for fire once on inject node - - reimplement $(env var) replace to share common code. - - Fix error message for missing node html file, and add test. - - Let credentials also use $(...) substitutions from ENV - - Rename insecureRedirect to requireHttps - - Add setting to cause insecure redirect (#1054) - - Palette editor fixes (#1033) - - Close comms on stopServer in test helper (#1020) - - Tcpgetfix (#1050) - - TCPget: Store incoming messages alongside the client object to keep reference - - Merge remote-tracking branch 'upstream/master' into tcpgetfix - - TCPget can now handle concurrent sessions (#1042) - - Better scope handling - - Add security checks - - small change to udp httpadmin - - Fix comparison to "" in tcpin - - Change scope of clients object - - Works when connection is left open - - First release of multi connection tcpget - - Fix node.error() not printing when passed false (#1037) - - fix test for CSV array input - - different test for Pi (rather than use serial port name) - - Fix missing 0 handling for css node with array input - - -#### 0.15.2: Maintenance Release - - - #1024 Revert bidi changes to nodes and hide menu option until fixed Fixes - - Let xml node set options both ways - - Bump serialport to use version 4 - - gpio node handle multiple bits of data returned in one go - - #1023 HTTP In should pass application/octet-stream as buffer not string Fixes - - Handle missing httpNodeRoot setting properly - - Config sidebar not handling node definition error properly - - Add minimum show time to deploy spinner to avoid flicker - - Add work-in-progress update button to palette-editor - - Add log.removeHandler function - - Add Crtl/Shift/p shortcut for manage palette - - Add spinner to deploy button - - #1016 Status messages from nodes in subflows not delegated properly Fixes - - fix spelling in join node info - - Speed up tab scrolling - - #1013 Update delay burst test to be more tolerant of timing Fixes - -#### 0.15.1: Maintenance Release - - - Update default palette catalogue to use https - - Disable palette editor if npm not found - and fix for Windows - - #1010 Searching package catalogue should be case-insensitive Fixes - - #1011 contenteditable fields not handled in config nodes Fixes - - Change html link refs from `_new` to `_blank` to be standards compliant - -#### 0.15.0: Milestone Release - -Runtime - - - #1001 Increase default apiMaxLength to 5mb and add to default settings Closes - - Add v2 /flows api and deploy-overwrite protection - - Encrypt credentials by default - - Ensure errors thrown by RED.events handlers don't percolate up - -Editor - - - Mark nodes as changed when they are moved - - Added parent containment option for draggable. (#1006) - - #999 Ignore bidi event handling on non-existent and non-Input elements Closes - - Remove list of flows from menu - - Allow nodes to be imported with their credentials - - Add workspace search option - - Add scrollOnAdd option to editableList - - Add swift markup to editor for open whisk node - - Scrollable tabs 👍 - - Allow linking to individual flow via url hash - - Avoid duplicating existing subflows on import - - Add import-to-new-tab option - - Add new options to export-nodes dialog - - Stop nodes being added beyond the outer bounds of the workspace - - #972 Default config nodes to global scope unless in a subflow Closes - - Bidi support for Text Direction and Structured Text (#961) - - Fix jQuery selector, selecting more than one help pane/popover and displaying incorrectly. (#970) - - Fixes removeItem not passing row data to callback. (#965) - - Move common components and add searchBox - - Add initial palette sidebar - -Nodes - - - Inject node label - show topic for timestamp mode if short - - Let change node set type if total match - - Clean up status on close for several core nodes. - - Change node: re-parse JSON set value each time to avoid pass-by-ref - - Better handle HTTP Request header capitalisation - - #985 Enable ES6 parsing in Function editor by default Fixes - - Update debug sidebar to use RED.view.reveal to show debug nodes - - Add full path tip to file node, And tidy up Pi node tips - - Remove WebSocket node maxlistener warning - - Update mqtt-broker node to use fully name-space qualified status messages - - Let UDP node better share same port instance if required - - Add number of units to the delay node (rate) (#994) - - Allow http middleware to skip rawBodyParser - - Let change node move property to sub-property. - - Add info to exec warning about buffered output if using python - - TCP node: pass on latest input msg properties - - Make sure MQTT broker is really set - - Fix escape character catch in TCPGet + support 0x?? sequences - - Fix split character in TCP Request node - - Add CSS highlighting to the template node (#950) - - Only update switch previous value after all rules are run - -Other - - - #660 Add npm build/test scripts Closes #946 - - Move travis to node 6 and 7 - drop 5 and 0.12 - - -#### 0.14.6: Maintenance Release - -Fixes - - - #927 Tell ace about Function node globals. Closes - - #935 Tidy up mqtt nodes - linting and done handling. Closes - - Fix invalid html in TCP and HTML node edit templates - - Add proper help text to link nodes - - Handle importing old mqtt-broker configs that lack properties - - Update ace to 1.2.4 - - Allow config nodes to provide a sort function for their select list - - Add log warning if node module required version cannot be satisfied - - #937 Handle empty credentials file. Closes - - Add RPi.GPIO lib test for ArchLinux - -#### 0.14.5: Maintenance Release - -Fixes - - - Cannot clear cookies with http nodes - - let HTML parse node allow msg.select set select - - Validate nodes on import after any references have been remapped - - #933 Debug node handles objects without constructor property Fixes - - #940 Ensure 'false' property values are displayed in info panel Fixes - - Fix node enable/disable over restart - load configs after settings init - -#### 0.14.4: Maintenance Release - -Nodes - - - Update trigger node ui to use typedInputs - - Better handling of quotes in CSV node - - #929 Clarify the MQTT node sends msg.payload - closes - - #914 Inject node should reuse the message it is triggered with Closes - - Stop trigger node re-using old message - - Allow node.status text to be 'falsey' values - -Fixes - - - #932 Handle DOMException when embedded in an iframe of different origin Fixes - - Fix double firing of menu actions - - #928 Fix select box handling in Safari - fixes - - #858 Clear context in node test helper Fixes - - #880 Allow node properties to be same as existing object functions Fixes - - Handle comms link closing whilst completing the initial connect - - #917 Protect against node type names that clash with Object property names Fixes - - Clone default node properties to avoid reference leakage - - Strip tab node definition when exporting - - Check for null config properties in editor before over-writing them - - Add hasUsers flag to config nodes - -Editor - - - Add sql mode to ace editor - - Keyboard shortcuts dialog update (#923) - - #921 Ensure importing link nodes to a subflow doesn't add outbound links Fixes - - Add updateConfigNodeUsers function to editor - - Scroll to bottom when item added to editableList - - #920 Form input widths behave more consistently when resizing Fixes #919 - -#### 0.14.3: Maintenance Release - -Fixes - - - #908 Create default setting.js in user-specified directory. Fixes - - MQTT In subscription qos not defaulting properly - - Let exec node handle 0 as well as "0" - -#### 0.14.2: Maintenance Release - -Fixes - - - #913 Cannot add new twitter credentials. Fixes - - Support array references in Debug property field - -#### 0.14.1: Maintenance Release - -Fixes - - - Handle undefined property that led to missing wires in the editor - - #911 Remove duplicate 'Delete' entry in keyboard shortcut window. Closes - - #910 Add 'exec' to node-red-pi launch script. Closes - -#### 0.14.0: Milestone Release - -Editor - - - Replace edit dialog with edit tray - - Enable shift-drag detach of just the selected link - - Allow workspace tabs to be re-ordered - - Scope keyboard shortcuts to dom elements - - Ensure parent nodes marked as changed due to child config node changes - - Validate all edit dialog inputs when one changes - - Add editableList widget and update Switch/Change nodes to use it - - Add option to filter Debug sidebar by flow and highlight subflow-emitting nodes - - Back off comms reconnect attempts after prolonged failures - - Prompt for login if comms reconnect fails authentication - - Change style of nodes in subflow template view - - Add CHANGELOG.md and make it accessible from menu - -Runtime - - - Always log node warnings on start without requiring -v - - #885 Add support for loading scoped node modules. Closes - - Add process.env.PORT to settings.js - - #870 Clear node context on deploy. Closes - - Enable finer grained permissions in adminAuth - -Nodes - - - Enable config nodes to reference other config nodes - - Add Split/Join nodes - - Add Link nodes - - #904 Add support to HTTP In node for PATCH requests. Closes - - Add cookie handling to HTTP In and HTTP Response nodes - - #887 Add repeat indicator to inject node label. Closes - - Add javascript highlighter to template node - - Add optional timeout to exec node - - Add TLS node and update MQTT/HTTP nodes to use it - - Let trigger node also send last payload to arrive - - Add timestamp as a default typedInput and update Inject and change nodes to match, - - Add QoS option to MQTT In node - - Add status to exec spawn mode - - Add Move capability to Change node - - Update Serial node to support custom baud rates - - Add support for array-syntax in typedInput msg properties - - Add RED.util to Function node sandbox - - #879 Capture error stack on node.error. Closes - - -Fixes - - - Add error handling to all node definition api calls - - Handle null return from Function node in array of messages - - #895 Defer loading of token sessions until they are accessed. Fixes - - set pi gpio pin status correctly if set on start - - #635 Prevent parent window scrolling when view is focused. Fixes - - Handle missing tab nodes in a loaded flow config - - Ensure typedInput dropdown doesn't fall off the page - - #880 Protect against node types with reserved names such as toString. Fixes - - Do not rely on the HTML file to identify where nodes are registered from - - Preserve node properties on import - - Fix regression in delay node. topic based queue was emptying all the time instead of spreading out messages. - - Throw an error if a Function node adds an input event listener - - Fix hang on partial deploy with disconnected mqtt node - - TypedInput: preload type icons to ensure width calc correct - - Ensure tcp node creates a buffer of size 1 at least - - Return editorTheme default if value is undefined - - Fix RED.util.compareObjects for Function created objects and Buffers - - Ensure default settings copied to command-line specified userDir - - -#### 0.13.4: Maintenance Release - - - Add timed release mode to delay node - - #811 Enable link splicing for when import_dragging nodes. Closes - - Fix uncaught exception on deploy whilst node sending messages - - Deprecate old mqtt client and connection pool modules - - #835 Change node: add bool/num types to change mode Closes - - #825 Validate fields that are `$(env-vars)` Closes - - Handle missing config nodes when validating node properties - - Pi node - don't try to send data if closing - - Load node message catalog when added dynamically - - Split palette labels on spaces and hyphens when laying out - - #816 Warn if editor routes are accessed but runtime not started Closes - - #819 Better handling of zero-length flow files Closes - - Allow runtime calls to RED._ to specify other namespace - - Better right alignment of numerics in delay and trigger nodes - - Allow node modules to include example flows - - Create node_modules in userDir - - #815 Ensure errors in node def functions don't break view rendering Fixes - - Updated Inject node info with instructions for flow and global options - - - -#### 0.13.3: Maintenance Release - - - Fix crash on repeated inject of invalid json payload - - Add binary mode to tail node - - Revert Cheerio to somewhat smaller version - - Add os/platform info to default debug - - - -#### 0.13.2: Maintenance Release - - - Don't force reconnect mqtt client if message arrives (fixes the MQTT connect/disconnect endless cycle) - - Add -p/--port option to override listening port - - Invert config node filter toggle button colours so state is more obvious - - Add timeout to httprequest node - - Tidy up of all node info content - make style consistent - - Make jquery spinner element css consistent with other inputs - - tcp node add reply (to all) capability - - Allow the template node to be treated as plain text - - #792 Validate MQTT In topics Fixes - - #793 httpNodeAuth should not block http options requests Fixes - - Disable perMessageDeflate on WS servers - fixes 'zlib binding closed' error - - Clear trigger status icon on re-deploy - - Don't default inject payload to blank string - - Trigger node, add configurable reset - - #790 - fixes use of httpNodeMiddleware Allow function properties in settings Fixes - - Fix order of config dialog calls to save/creds/validate - - Add debounce to Pi GPIO node - - - -#### 0.13.1: Maintenance Release - - - Revert wrapping of http request object - - - -#### 0.13.0: Milestone Release - - - Add 'previous value' option to Switch node - - Allow existing nodes to splice into links on drag - - #783 CORS not properly configured on multiple http routes Fixes - - Restore shift-drag to snap/unsnap to grid - - Moving nodes with keyboard should flag workspace dirty - - Notifications flagged as fixed should not be click-closable - - Rework config sidebar and deploy warning - - Wrap http request object to match http response object - - Add 'view' menu and reorganise a few things - - Allow shift-click to detach existing wires - - Splice nodes dragged from palette into links - - try to trim imported/dragged flows to [ ] - - Move version number as title of NR logo - - Moving nodes mark workspace as dirty - - Ok/Cancel edit dialogs with Ctrl-Enter/Escape - - Handle OSX Meta key when selecting nodes - - Add grid-alignment options - - Add oneditresize function definition - - Rename propertySelect to typedInput and add boolean opt - - Add propertySelect to switch node - - Add propertySelect support to Change node - - Add context/flow/global support to Function node - - Add node context/flow/global - - Add propertySelect jquery widget - - Add add/update/delete flow apis - - Allow core nodes dir to be provided to runtime via settings - - Tidy up API passed to node modules - - Move locale files under api/runtime components - - Add flow reload admin api - - - -#### 0.12.5: Maintenance Release - - - Add attribute capability to HTML parser node - - Add Pi Keyboard code node - - Fix for MQTT client connection cycling on partial deploy - - Fix for tcp node properly closing connections - - Update sentiment node dependencies - - Fix for file node handling of UTF8 extended characters - - - -#### 0.12.4: Maintenance Release - - - Add readOnly setting to prevent file writes in localfilesystem storage - - Support bcrypt for httpNodeAuth - - Pi no longer needs root workaround to access gpio - - Fix: Input File node will not retain the file name - - - -#### 0.12.3: Maintenance Release - - - Fixes for TCP Get node reconnect handling - - Clear delay node status on re-deploy - - Update Font-Awesome to v4.5 - - Fix trigger to block properly until reset - - Update example auth properties in settings.js - - Ensure httpNodeAuth doesn't get applied to admin routes - - TCP Get node not passing on existing msg properties - - - -#### 0.12.2: Maintenance Release - - - Enable touch-menu for links so they can be deleted - - Allow nodes to be installed by path name - - Fix basic authentication on httpNode/Admin/Static - - Handle errors thrown in Function node setTimeout/Interval - - Fix mqtt node lifecycle with partial deployments - - Update tcp node status on reconnect after timeout - - Debug node not handling null messages - - Kill processes run with exec node when flows redeployed - - Inject time spinner incrementing value incorrectly - - - -#### 0.12.1: Maintenance Release - - - Enable touch-menu for links so they can be deleted - - Allow nodes to be installed by path name - - Fix basic authentication on httpNode/Admin/Static - - - -#### 0.12.0: Milestone Release - - - Change/Switch rules now resize with dialog width - - Support for node 4.x - - Move to Express 4.x - - Copy default settings file to user dir on start up - - Config nodes can be scoped to a particular subflow/tab - - Comms link tolerates <5 second breaks in connection before notifying user - - MQTT node overhaul - add will/tls/birth message support - - Status node - to report status events from other nodes - - Error node can be targeted to specific other nodes - - JSON node can encode Array types - - Switch node regular expression rule can now be set to be case-insensitive - - HTTP In node can accept non-UTF8 payloads - will return a Buffer when appropriate - - Exec node configuration consistent regardless of the spawn option - - Function node can now display status icon/text - - CSV node can now handle arrays - - setInterval/clearInterval add to Function node - - Function node automatically clears all timers (setInterval/setTimeout) when the node is stopped - - - -#### 0.11.2: Maintenance Release - - - Allow XML parser options be set on the message - - Add 'mobile' category to the palette (no core nodes included) - - Allow a message catalog provide a partial translation - - Fix HTTP Node nls message id - - Remove delay spinner upper limit - - Update debug node output to include length of payload - - - - -#### 0.11.1: Maintenance Release - - - Fix exclusive config node check when type not registered (prevented HTTP In node from being editable unless the swagger node was also installed) - - - -#### 0.11.0: Milestone Release - - - Add Node 0.12 support - - Internationalization support - - Editor UI refresh - - Add RBE node - - File node optionally creates path to file - - Function node can access `clearTimeout` - - Fix: Unable to login with 'read' permission - - - -#### 0.10.10: Maintenance Release - - - Fix permissions issue with packaged nrgpio script - - Add better help message if deprecated node missing - - - -#### 0.10.9: Maintenance Release - -Fix packaging of bin scripts - - - -#### 0.10.8: Maintenance Release - - - Nodes moved out of core - - still included as a dependency: twitter, serial, email, feedparser - - no longer included: mongo, arduino, irc, redis - - node icon defn can be a function - - http_proxy support - - httpNodeMiddleware setting - - Trigger node ui refresh - - editorTheme setting - - Warn on deploy of unused config nodes - - catch node prevents error loops - - - -#### 0.10.6: Maintenance Release - -Changes: - - Performance improvements in editor - - Palette appearance update - - Warn on navigation with undeployed changes - - Disable undeployed node action buttons - - Disable subflow node action buttons - - Add Catch node - - Add logging functions to Function node - - Add send function to Function node - - Update Change node to support multiple rules - - - -#### 0.10.4: Maintenance Release - -Changes: - - - http request node passes on request url as msg.url - - handle config nodes appearing out of order in flow file - don't assume they are always at the start - - move subflow palette category to the top, to make it more obvious - - fix labelling of Raspberry Pi pins - - allow email node to mark mail as read - - fix saving library content - - add node-red and node-red-pi start scripts - - use $HOME/.node-red for user data unless specified otherwise (or existing data is found in install dir) - - - -#### 0.10.3: Maintenance Release - -Fixes: - - - httpAdminAuth was too aggressively deprecated (ie removed); restoring with a console warning when used - - adds reporting of node.js version on start-up - - mongo node skip/limit options can be strings or numbers - - CSV parser passes through provided message object - - - -#### 0.10.2: Maintenance Release - -Fixes: - - subflow info sidebar more useful - - adds missing font-awesome file - - inject node day selection defaulted to invalid selection - - loading a flow with no tabs failed to add nodes to default tab +Change logs for older releases are available on GitHub: https://github.com/node-red/node-red/releases diff --git a/package.json b/package.json index 15ce9148c..c07d17a98 100644 --- a/package.json +++ b/package.json @@ -26,13 +26,13 @@ } ], "dependencies": { - "acorn": "8.6.0", + "acorn": "8.7.0", "acorn-walk": "8.2.0", "ajv": "8.8.2", "async-mutex": "0.3.2", "basic-auth": "2.0.1", "bcryptjs": "2.4.3", - "body-parser": "1.19.0", + "body-parser": "1.19.1", "cheerio": "1.0.0-rc.10", "clone": "2.1.2", "content-type": "1.0.4", @@ -41,7 +41,7 @@ "cors": "2.8.5", "cronosjs": "1.7.1", "denque": "2.0.1", - "express": "4.17.1", + "express": "4.17.2", "express-session": "1.17.2", "form-data": "4.0.0", "fs-extra": "10.0.0", @@ -50,7 +50,7 @@ "hash-sum": "2.0.0", "hpagent": "0.1.2", "https-proxy-agent": "5.0.0", - "i18next": "21.5.4", + "i18next": "21.6.6", "iconv-lite": "0.6.3", "is-utf8": "0.2.1", "js-yaml": "3.14.1", @@ -61,21 +61,21 @@ "memorystore": "1.6.6", "mime": "2.5.2", "moment-timezone": "0.5.34", - "mqtt": "4.2.8", + "mqtt": "4.3.4", "multer": "1.4.3", "mustache": "4.2.0", "node-red-admin": "^2.2.1", "nopt": "5.0.0", "oauth2orize": "1.11.1", "on-headers": "1.0.2", - "passport": "0.5.0", + "passport": "0.5.2", "passport-http-bearer": "1.0.1", "passport-oauth2-client-password": "0.1.2", "raw-body": "2.4.2", "semver": "7.3.5", "tar": "6.1.11", "tough-cookie": "4.0.0", - "uglify-js": "3.14.4", + "uglify-js": "3.14.5", "uuid": "8.3.2", "ws": "7.5.1", "xml2js": "0.4.23" @@ -84,7 +84,7 @@ "bcrypt": "5.0.1" }, "devDependencies": { - "dompurify": "2.3.3", + "dompurify": "2.3.4", "grunt": "1.4.1", "grunt-chmod": "~1.1.1", "grunt-cli": "~1.4.3", @@ -113,11 +113,11 @@ "node-red-node-test-helper": "^0.2.7", "nodemon": "2.0.15", "proxy": "^1.0.2", - "sass": "1.44.0", + "sass": "1.48.0", "should": "13.2.3", "sinon": "11.1.2", "stoppable": "^1.1.0", - "supertest": "6.1.6" + "supertest": "6.2.1" }, "engines": { "node": ">=12" diff --git a/packages/node_modules/@node-red/editor-api/lib/auth/strategies.js b/packages/node_modules/@node-red/editor-api/lib/auth/strategies.js index 7a77354fa..879b3f55b 100644 --- a/packages/node_modules/@node-red/editor-api/lib/auth/strategies.js +++ b/packages/node_modules/@node-red/editor-api/lib/auth/strategies.js @@ -146,7 +146,7 @@ function authenticateUserToken(req) { } else { reject(); } - }); + }).catch(reject); } else { reject(); } @@ -163,6 +163,9 @@ TokensStrategy.prototype.authenticate = function(req) { authenticateUserToken(req).then(user => { this.success(user,{scope:user.permissions}); }).catch(err => { + if (err) { + log.trace("token authentication failure: "+err.stack?err.stack:err) + } this.fail(401); }); } diff --git a/packages/node_modules/@node-red/editor-api/lib/index.js b/packages/node_modules/@node-red/editor-api/lib/index.js index 258e6e514..56f52a222 100644 --- a/packages/node_modules/@node-red/editor-api/lib/index.js +++ b/packages/node_modules/@node-red/editor-api/lib/index.js @@ -90,6 +90,8 @@ function init(settings,_server,storage,runtimeAPI) { auth.getToken, auth.errorHandler ); + } else if (settings.adminAuth.tokens) { + adminApp.use(passport.initialize()); } adminApp.post("/auth/revoke",auth.needsPermission(""),auth.revoke,apiUtil.errorHandler); } diff --git a/packages/node_modules/@node-red/editor-api/package.json b/packages/node_modules/@node-red/editor-api/package.json index aebb7454e..69743e400 100644 --- a/packages/node_modules/@node-red/editor-api/package.json +++ b/packages/node_modules/@node-red/editor-api/package.json @@ -19,11 +19,11 @@ "@node-red/util": "2.2.0-beta.1", "@node-red/editor-client": "2.2.0-beta.1", "bcryptjs": "2.4.3", - "body-parser": "1.19.0", + "body-parser": "1.19.1", "clone": "2.1.2", "cors": "2.8.5", "express-session": "1.17.2", - "express": "4.17.1", + "express": "4.17.2", "memorystore": "1.6.6", "mime": "2.5.2", "multer": "1.4.3", @@ -31,7 +31,7 @@ "oauth2orize": "1.11.1", "passport-http-bearer": "1.0.1", "passport-oauth2-client-password": "0.1.2", - "passport": "0.5.0", + "passport": "0.5.2", "ws": "7.5.1" }, "optionalDependencies": { 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 cac66dd7a..cbc29185d 100755 --- 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 @@ -894,6 +894,8 @@ "addTitle": "add an item" }, "search": { + "history": "Search history", + "clear": "clear all", "empty": "No matches found", "addNode": "add a node..." }, 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 6436c0518..17054c0d3 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 @@ -59,6 +59,8 @@ "hideOtherFlows": "他のフローを非表示", "showAllFlows": "全てのフローを表示", "hideAllFlows": "全てのフローを非表示", + "hiddenFlows": "__count__ 個の非表示のフロー一覧", + "hiddenFlows_plural": "__count__ 個の非表示のフロー一覧", "showLastHiddenFlow": "最後に非表示にしたフローを表示", "listFlows": "フロー一覧", "listSubflows": "サブフロー一覧", @@ -669,7 +671,8 @@ "unusedConfigNodes": "未使用の設定ノード", "invalidNodes": "不正なノード", "uknownNodes": "未知のノード", - "unusedSubflows": "未使用のサブフロー" + "unusedSubflows": "未使用のサブフロー", + "hiddenFlows": "非表示のフロー" } }, "help": { diff --git a/packages/node_modules/@node-red/editor-client/src/js/history.js b/packages/node_modules/@node-red/editor-client/src/js/history.js index 256500200..a8ffe581b 100644 --- a/packages/node_modules/@node-red/editor-client/src/js/history.js +++ b/packages/node_modules/@node-red/editor-client/src/js/history.js @@ -684,6 +684,13 @@ RED.history = (function() { peek: function() { return undoHistory[undoHistory.length-1]; }, + replace: function(ev) { + if (undoHistory.length === 0) { + RED.history.push(ev); + } else { + undoHistory[undoHistory.length-1] = ev; + } + }, clear: function() { undoHistory = []; redoHistory = []; diff --git a/packages/node_modules/@node-red/editor-client/src/js/keymap.json b/packages/node_modules/@node-red/editor-client/src/js/keymap.json index 766f6bd9f..f1f3f46e7 100644 --- a/packages/node_modules/@node-red/editor-client/src/js/keymap.json +++ b/packages/node_modules/@node-red/editor-client/src/js/keymap.json @@ -38,7 +38,9 @@ }, "red-ui-workspace": { "backspace": "core:delete-selection", + "ctrl-backspace": "core:delete-selection-and-reconnect", "delete": "core:delete-selection", + "ctrl-delete": "core:delete-selection-and-reconnect", "enter": "core:edit-selected-node", "ctrl-enter": "core:go-to-selection", "ctrl-c": "core:copy-selection-to-internal-clipboard", diff --git a/packages/node_modules/@node-red/editor-client/src/js/nodes.js b/packages/node_modules/@node-red/editor-client/src/js/nodes.js index b17387a52..78b9deae6 100644 --- a/packages/node_modules/@node-red/editor-client/src/js/nodes.js +++ b/packages/node_modules/@node-red/editor-client/src/js/nodes.js @@ -15,6 +15,9 @@ **/ RED.nodes = (function() { + var PORT_TYPE_INPUT = 1; + var PORT_TYPE_OUTPUT = 0; + var node_defs = {}; var linkTabMap = {}; @@ -2458,6 +2461,144 @@ RED.nodes = (function() { return helpContent; } + function getNodeIslands(nodes) { + var selectedNodes = new Set(nodes); + // Maps node => island index + var nodeToIslandIndex = new Map(); + // Maps island index => [nodes in island] + var islandIndexToNodes = new Map(); + var internalLinks = new Set(); + nodes.forEach((node, index) => { + nodeToIslandIndex.set(node,index); + islandIndexToNodes.set(index, [node]); + var inboundLinks = RED.nodes.getNodeLinks(node, PORT_TYPE_INPUT); + var outboundLinks = RED.nodes.getNodeLinks(node, PORT_TYPE_OUTPUT); + inboundLinks.forEach(l => { + if (selectedNodes.has(l.source)) { + internalLinks.add(l) + } + }) + outboundLinks.forEach(l => { + if (selectedNodes.has(l.target)) { + internalLinks.add(l) + } + }) + }) + + internalLinks.forEach(l => { + let source = l.source; + let target = l.target; + if (nodeToIslandIndex.get(source) !== nodeToIslandIndex.get(target)) { + let sourceIsland = nodeToIslandIndex.get(source); + let islandToMove = nodeToIslandIndex.get(target); + let nodesToMove = islandIndexToNodes.get(islandToMove); + nodesToMove.forEach(n => { + nodeToIslandIndex.set(n,sourceIsland); + islandIndexToNodes.get(sourceIsland).push(n); + }) + islandIndexToNodes.delete(islandToMove); + } + }) + const result = []; + islandIndexToNodes.forEach((nodes,index) => { + result.push(nodes); + }) + return result; + } + + function detachNodes(nodes) { + let allSelectedNodes = []; + nodes.forEach(node => { + if (node.type === 'group') { + let groupNodes = RED.group.getNodes(node,true,true); + allSelectedNodes = allSelectedNodes.concat(groupNodes); + } else { + allSelectedNodes.push(node); + } + }) + if (allSelectedNodes.length > 0 ) { + const nodeIslands = RED.nodes.getNodeIslands(allSelectedNodes); + let removedLinks = []; + let newLinks = []; + let createdLinkIds = new Set(); + + nodeIslands.forEach(nodes => { + let selectedNodes = new Set(nodes); + let allInboundLinks = []; + let allOutboundLinks = []; + // Identify links that enter or exit this island of nodes + nodes.forEach(node => { + var inboundLinks = RED.nodes.getNodeLinks(node, PORT_TYPE_INPUT); + var outboundLinks = RED.nodes.getNodeLinks(node, PORT_TYPE_OUTPUT); + inboundLinks.forEach(l => { + if (!selectedNodes.has(l.source)) { + allInboundLinks.push(l) + } + }) + outboundLinks.forEach(l => { + if (!selectedNodes.has(l.target)) { + allOutboundLinks.push(l) + } + }) + }); + + + // Identify the links to restore + allInboundLinks.forEach(inLink => { + // For Each inbound link, + // - get source node. + // - trace through to all outbound links + let sourceNode = inLink.source; + let targetNodes = new Set(); + let visited = new Set(); + let stack = [inLink.target]; + while (stack.length > 0) { + let node = stack.pop(stack); + visited.add(node) + let links = RED.nodes.getNodeLinks(node, PORT_TYPE_OUTPUT); + links.forEach(l => { + if (visited.has(l.target)) { + return + } + visited.add(l.target); + if (selectedNodes.has(l.target)) { + // internal link + stack.push(l.target) + } else { + targetNodes.add(l.target) + } + }) + } + targetNodes.forEach(target => { + let linkId = `${sourceNode.id}[${inLink.sourcePort}] -> ${target.id}` + if (!createdLinkIds.has(linkId)) { + createdLinkIds.add(linkId); + let link = { + source: sourceNode, + sourcePort: inLink.sourcePort, + target: target + } + let existingLinks = RED.nodes.filterLinks(link) + if (existingLinks.length === 0) { + newLinks.push(link); + } + } + }) + }) + + // 2. delete all those links + allInboundLinks.forEach(l => { RED.nodes.removeLink(l); removedLinks.push(l)}) + allOutboundLinks.forEach(l => { RED.nodes.removeLink(l); removedLinks.push(l)}) + }) + + newLinks.forEach(l => RED.nodes.addLink(l)); + return { + newLinks, + removedLinks + } + } + } + return { init: function() { RED.events.on("registry:node-type-added",function(type) { @@ -2539,7 +2680,7 @@ RED.nodes = (function() { add: addNode, remove: removeNode, clear: clear, - + detachNodes: detachNodes, moveNodesForwards: moveNodesForwards, moveNodesBackwards: moveNodesBackwards, moveNodesToFront: moveNodesToFront, @@ -2551,7 +2692,20 @@ RED.nodes = (function() { addLink: addLink, removeLink: removeLink, - + getNodeLinks: function(id, portType) { + if (typeof id !== 'string') { + id = id.id; + } + if (nodeLinks[id]) { + if (portType === 1) { + // Return cloned arrays so they can be safely modified by caller + return [].concat(nodeLinks[id].in) + } else { + return [].concat(nodeLinks[id].out) + } + } + return []; + }, addWorkspace: addWorkspace, removeWorkspace: removeWorkspace, getWorkspaceOrder: function() { return workspacesOrder }, @@ -2625,6 +2779,7 @@ RED.nodes = (function() { getAllFlowNodes: getAllFlowNodes, getAllUpstreamNodes: getAllUpstreamNodes, getAllDownstreamNodes: getAllDownstreamNodes, + getNodeIslands: getNodeIslands, createExportableNodeSet: createExportableNodeSet, createCompleteNodeSet: createCompleteNodeSet, updateConfigNodeUsers: updateConfigNodeUsers, diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/clipboard.js b/packages/node_modules/@node-red/editor-client/src/js/ui/clipboard.js index b38017c60..f6a613f5f 100644 --- a/packages/node_modules/@node-red/editor-client/src/js/ui/clipboard.js +++ b/packages/node_modules/@node-red/editor-client/src/js/ui/clipboard.js @@ -71,6 +71,7 @@ RED.clipboard = (function() { text: RED._("common.label.cancel"), click: function() { $( this ).dialog( "close" ); + RED.view.focus(); } }, { // red-ui-clipboard-dialog-download @@ -81,6 +82,7 @@ RED.clipboard = (function() { var data = $("#red-ui-clipboard-dialog-export-text").val(); downloadData("flows.json", data); $( this ).dialog( "close" ); + RED.view.focus(); } }, { // red-ui-clipboard-dialog-export @@ -95,6 +97,7 @@ RED.clipboard = (function() { $( this ).dialog( "close" ); copyText(flowData); RED.notify(RED._("clipboard.nodesExported"),{id:"clipboard"}); + RED.view.focus(); } else { var flowToExport = $("#red-ui-clipboard-dialog-export-text").val(); var selectedPath = activeLibraries[activeTab].getSelected(); @@ -110,6 +113,7 @@ RED.clipboard = (function() { contentType: "application/json; charset=utf-8" }).done(function() { $(dialog).dialog( "close" ); + RED.view.focus(); RED.notify(RED._("library.exportedToLibrary"),"success"); }).fail(function(xhr,textStatus,err) { if (xhr.status === 401) { @@ -171,6 +175,7 @@ RED.clipboard = (function() { } } $( this ).dialog( "close" ); + RED.view.focus(); } }, { // red-ui-clipboard-dialog-import-conflict @@ -203,6 +208,7 @@ RED.clipboard = (function() { // console.table(pendingImportConfig.importNodes.map(function(n) { return {id:n.id,type:n.type,result:importMap[n.id]}})) RED.view.importNodes(newNodes, pendingImportConfig.importOptions); $( this ).dialog( "close" ); + RED.view.focus(); } } ], @@ -940,28 +946,25 @@ RED.clipboard = (function() { if (truncated) { msg += "_truncated"; } - $("#red-ui-clipboard-hidden").val(value).focus().select(); - var result = document.execCommand("copy"); - if (result && element) { - var popover = RED.popover.create({ - target: element, - direction: 'left', - size: 'small', - content: RED._(msg) - }); - setTimeout(function() { - popover.close(); - },1000); - popover.open(); - } - $("#red-ui-clipboard-hidden").val(""); - if (currentFocus) { - $(currentFocus).focus(); - } - return result; + navigator.clipboard.writeText(value).then(function () { + if (element) { + var popover = RED.popover.create({ + target: element, + direction: 'left', + size: 'small', + content: RED._(msg) + }); + setTimeout(function() { + popover.close(); + },1000); + popover.open(); + } + if (currentFocus) { + $(currentFocus).focus(); + } + }).catch(err => { console.error("Failed to copy:",err) }); } - function importNodes(nodesStr,addFlow) { var newNodes = nodesStr; if (typeof nodesStr === 'string') { @@ -1236,8 +1239,6 @@ RED.clipboard = (function() { init: function() { setupDialogs(); - $('