From 81a4fe59d9c738c79332af72e16b38ea3a99442a Mon Sep 17 00:00:00 2001 From: Nick O'Leary Date: Thu, 13 Jan 2022 15:16:16 +0000 Subject: [PATCH] Update changelog/welcome tour for 2.2 --- CHANGELOG.md | 2774 +---------------- .../editor-client/src/js/ui/tour/tourGuide.js | 4 + .../src/tours/images/delete-repair.gif | Bin 0 -> 29584 bytes .../src/tours/images/detach-repair.gif | Bin 0 -> 71182 bytes .../editor-client/src/tours/images/slice.gif | Bin 0 -> 83214 bytes .../editor-client/src/tours/welcome.js | 249 +- 6 files changed, 85 insertions(+), 2942 deletions(-) create mode 100644 packages/node_modules/@node-red/editor-client/src/tours/images/delete-repair.gif create mode 100644 packages/node_modules/@node-red/editor-client/src/tours/images/detach-repair.gif create mode 100644 packages/node_modules/@node-red/editor-client/src/tours/images/slice.gif diff --git a/CHANGELOG.md b/CHANGELOG.md index 8033a0a4d..3cfeba9c1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,23 @@ +#### 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 @@ -425,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/packages/node_modules/@node-red/editor-client/src/js/ui/tour/tourGuide.js b/packages/node_modules/@node-red/editor-client/src/js/ui/tour/tourGuide.js index 3f81f1d68..31612cfeb 100644 --- a/packages/node_modules/@node-red/editor-client/src/js/ui/tour/tourGuide.js +++ b/packages/node_modules/@node-red/editor-client/src/js/ui/tour/tourGuide.js @@ -256,6 +256,10 @@ RED.tourGuide = (function() { } $('
').css("text-align","left").html(getLocaleText(step.description)).appendTo(stepDescription); + if (step.image) { + $(``).appendTo(stepDescription) + } + var stepToolbar = $('
',{class:"red-ui-tourGuide-toolbar"}).appendTo(stepContent); // var breadcrumbs = $('
',{class:"red-ui-tourGuide-breadcrumbs"}).appendTo(stepToolbar); diff --git a/packages/node_modules/@node-red/editor-client/src/tours/images/delete-repair.gif b/packages/node_modules/@node-red/editor-client/src/tours/images/delete-repair.gif new file mode 100644 index 0000000000000000000000000000000000000000..c668dfdee52b73e9ae2f21e3d9969986d4b526a5 GIT binary patch literal 29584 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 JgF8Bf{{x*;*Yp4Y literal 0 HcmV?d00001 diff --git a/packages/node_modules/@node-red/editor-client/src/tours/images/detach-repair.gif b/packages/node_modules/@node-red/editor-client/src/tours/images/detach-repair.gif new file mode 100644 index 0000000000000000000000000000000000000000..14fe1a423b89eb8203701c9000472bcdaf4adbd1 GIT binary patch literal 71182 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�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

l}XbBr=h?=B;k=(_14>1vV37Z_y!yXo}Y^ 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 JzdyXn{{lcal#u`c literal 0 HcmV?d00001 diff --git a/packages/node_modules/@node-red/editor-client/src/tours/welcome.js b/packages/node_modules/@node-red/editor-client/src/tours/welcome.js index 8a4565bab..83837a216 100644 --- a/packages/node_modules/@node-red/editor-client/src/tours/welcome.js +++ b/packages/node_modules/@node-red/editor-client/src/tours/welcome.js @@ -1,12 +1,12 @@ export default { - version: "2.1.0", + version: "2.2.0", steps: [ { titleIcon: "fa fa-map-o", title: { - "en-US": "Welcome to Node-RED 2.1!", - "ja": "Node-RED 2.1へようこそ!" - }, + "en-US": "Welcome to Node-RED 2.2!", + "ja": "Node-RED 2.2へようこそ!" + }, description: { "en-US": "Let's take a moment to discover the new features in this release.", "ja": "本リリースの新機能を見つけてみましょう。" @@ -14,215 +14,84 @@ export default { }, { title: { - "en-US": "A new Tour Guide", - "ja": "新しいツアーガイド" + "en-US": "Search history", }, description: { - "en-US": "

First, as you've already found, we now have this tour of new features. We'll only show the tour the first time you open the editor for each new version of Node-RED.

" + - "

You can choose not to see this tour in the future by disabling it under the View tab of User Settings.

", - "ja": "

最初に、既に見つけている様に、新機能の本ツアーがあります。本ツアーは、新バージョンのNode-REDフローエディタを初めて開いた時のみ表示されます。

" + - "

ユーザ設定の表示タブの中で、この機能を無効化することで、本ツアーを表示しないようにすることもできます。

" - } - }, - { - title: { - "en-US": "New Edit menu", - "ja": "新しい編集メニュー" + "en-US": "

The Search dialog now keeps a history of your searches, making it easier to go back to a previous search.

" }, - prepare() { - $("#red-ui-header-button-sidemenu").trigger("click"); - $("#menu-item-edit-menu").parent().addClass("open"); + element: "#red-ui-search .red-ui-searchBox-form", + prepare(done) { + RED.search.show(); + setTimeout(done,400); }, complete() { - $("#menu-item-edit-menu").parent().removeClass("open"); - }, - element: "#menu-item-edit-menu-submenu", - interactive: false, - direction: "left", - description: { - "en-US": "

The main menu has been updated with a new 'Edit' section. This includes all of the familar options, like cut/paste and undo/redo.

" + - "

The menu now displays keyboard shortcuts for the options.

", - "ja": "

メインメニューに「編集」セクションが追加されました。本セクションには、切り取り/貼り付けや、変更操作を戻す/やり直しの様な使い慣れたオプションが含まれています。

" + - "

本メニューには、オプションのためのキーボードショートカットも表示されるようになりました。

" - } - }, - { - title: { - "en-US": "Arranging nodes", - "ja": "ノードの配置" - }, - prepare() { - $("#red-ui-header-button-sidemenu").trigger("click"); - $("#menu-item-arrange-menu").parent().addClass("open"); - }, - complete() { - $("#menu-item-arrange-menu").parent().removeClass("open"); - }, - element: "#menu-item-arrange-menu-submenu", - interactive: false, - direction: "left", - description: { - "en-US": "

The new 'Arrange' section of the menu provides new options to help arrange your nodes. You can align them to a common edge, spread them out evenly or change their order.

", - "ja": "

メニューの新しい「配置」セクションには、ノードの配置を助ける新しいオプションが提供されています。ノードの端を揃えたり、均等に配置したり、表示順序を変更したりできます。

" - } - }, - { - title: { - "en-US": "Hiding tabs", - "ja": "タブの非表示" - }, - element: "#red-ui-workspace-tabs > li.active", - description: { - "en-US": '

Tabs can now be hidden by clicking their icon.

The Info Sidebar will still list all of your tabs, and tell you which ones are currently hidden.', - "ja": '

アイコンをクリックすることで、タブを非表示にできます。

情報サイドバーには、全てのタブが一覧表示されており、現在非表示になっているタブを確認できます。' - }, - interactive: false, - prepare() { - $("#red-ui-workspace-tabs > li.active .red-ui-tab-close").css("display","block"); - }, - complete() { - $("#red-ui-workspace-tabs > li.active .red-ui-tab-close").css("display",""); - } - }, - { - title: { - "en-US": "Tab menu", - "ja": "タブメニュー" - }, - element: "#red-ui-workspace-tabs-menu", - description: { - "en-US": "

The new tab menu also provides lots of new options for your tabs.

", - "ja": "

新しいタブメニューには、タブに関する沢山の新しいオプションが提供されています。

" - }, - interactive: false, - direction: "left", - prepare() { - $("#red-ui-workspace > .red-ui-tabs > .red-ui-tabs-menu a").trigger("click"); - }, - complete() { - $(document).trigger("click"); - } - }, - { - title: { - "en-US": "Flow and Group level environment variables", - "ja": "フローとグループの環境変数" - }, - element: "#red-ui-workspace-tabs > li.active", - interactive: false, - description: { - "en-US": "

Flows and Groups can now have their own environment variables that can be referenced by nodes inside them.

", - "ja": "

フローとグループには、内部のノードから参照できる環境変数を設定できるようになりました。

" - } - }, - { - prepare(done) { - RED.editor.editFlow(RED.nodes.workspace(RED.workspaces.active()),"editor-tab-envProperties"); - setTimeout(done,700); - }, - element: "#red-ui-tab-editor-tab-envProperties-link-button", - description: { - "en-US": "

Their edit dialogs have a new Environment Variables section.

", - "ja": "

編集ダイアログに環境変数セクションが追加されました。

" - } - }, - { - element: ".node-input-env-container-row", - direction: "left", - description: { - "en-US": '

The environment variables are listed in this table and new ones can be added by clicking the button.

', - "ja": '

この表に環境変数が一覧表示されており、ボタンをクリックすることで新しい変数を追加できます。

' - }, - complete(done) { - $("#node-dialog-cancel").trigger("click"); - setTimeout(done,500); - } - }, - { - title: { - "en-US": "Link Call node added", - "ja": "Link Callノードを追加" - }, - prepare(done) { - this.paletteWasClosed = $("#red-ui-main-container").hasClass("red-ui-palette-closed"); - RED.actions.invoke("core:toggle-palette",true) - $('[data-palette-type="link call"]')[0].scrollIntoView({block:"center"}) - setTimeout(done,100); - }, - element: '[data-palette-type="link call"]', - direction: "right", - description: { - "en-US": "

The Link Call node lets you call another flow that begins with a Link In node and get the result back when the message reaches a Link Out node.

", - "ja": "

Link Callノードを用いることで、Link Inノードから始まるフローを呼び出し、Link Outノードに到達した時に、結果を取得できます。

" - } - }, - { - title: { - "en-US": "MQTT nodes support dynamic connections", - "ja": "MQTTノードが動的接続をサポート" - }, - prepare(done) { - $('[data-palette-type="mqtt out"]')[0].scrollIntoView({block:"center"}) - setTimeout(done,100); - }, - element: '[data-palette-type="mqtt out"]', - direction: "right", - description: { - "en-US": '

The MQTT nodes now support creating their connections and subscriptions dynamically.

', - "ja": '

MQTTノードは、動的な接続や購読ができるようになりました。

' + RED.search.hide(); }, }, { title: { - "en-US": "File nodes renamed", - "ja": "ファイルノードの名前変更" + "en-US": "New wiring actions", }, - prepare(done) { - $('[data-palette-type="file"]')[0].scrollIntoView({block:"center"}); - setTimeout(done,100); - }, - complete() { - if (this.paletteWasClosed) { - RED.actions.invoke("core:toggle-palette",false) - } - }, - element: '[data-palette-type="file"]', - direction: "right", + // image: "images/", description: { - "en-US": "

The file nodes have been renamed to make it clearer which node does what.

", - "ja": "

fileノードの名前が変更され、どのノードが何を行うかが明確になりました。

" + "en-US": `

A pair of new actions have been added to help with wiring nodes together:

+
    +
  • Wire Series Of Nodes - adds a wire (if necessary) between each pair of nodes in the order they were selected.
  • +
  • Wire Node To Multiple - wires the first node selected to all of the other selected nodes.
  • +
+

Actions can be accessed from the Action List in the main menu.

` + }, + }, + { + title: { + "en-US": "Deleting nodes and reconnecting wires", + }, + image: "images/delete-repair.gif", + description: { + "en-US": `

It is now possible to delete a selection of nodes and automatically repair the wiring behind them.

+

This is really useful if you want to remove a node from the middle of the flow.

+

Hold the Ctrl (or Cmd) key when you press Delete and the nodes will be gone and the wires repaired.

+ ` } }, { title: { - "en-US": "Deep copy option on Change node", - "ja": "Changeノードのディープコピーオプション" - }, - prepare(done) { - var def = RED.nodes.getType('change'); - RED.editor.edit({id:"test",type:"change",rules:[{t:"set",p:"payload",pt:"msg", tot:"msg",to:"anotherProperty"}],_def:def, _:def._}); - setTimeout(done,700); - }, - complete(done) { - $("#node-dialog-cancel").trigger("click"); - setTimeout(done,500); - }, - element: function() { - return $(".node-input-rule-property-deepCopy").next(); + "en-US": "Detaching nodes from a flow", }, + image: "images/detach-repair.gif", description: { - "en-US": "

The Set rule has a new option to create a deep copy of the value. This ensures a complete copy is made, rather than using a reference.

", - "ja": "

値を代入に、値のディープコピーを作成するオプションが追加されました。これによって参照ではなく、完全なコピーが作成されます。

" + "en-US": `

If you want to remove a node from a flow without deleting it, + you can use the Detach Selected Nodes action.

+

The nodes will be removed from their flow, the wiring repaired behind them, and then attached to the mouse + so you can drop them wherever you want in the workspace.

+

There isn't a default keyboard shortcut assigned for this new action, but + you can add your own via the Keyboard pane of the main Settings dialog.

` } }, { title: { - "en-US": "And that's not all...", - "ja": "これが全てではありません..." + "en-US": "More wiring tricks", }, + image: "images/slice.gif", description: { - "en-US": "

There are many more smaller changes, including:

  • Auto-complete suggestions in the msg TypedInput.
  • Support for msg.resetTimeout in the Join node.
  • Pushing messages to the front of the queue in the Delay node's rate limiting mode.
  • An optional second output on the Delay node for rate limited messages.
", - "ja": "

以下の様な小さな変更が沢山あります:

  • msg TypedInputの自動補完提案
  • Joinノードでmsg.resetTimeoutのサポート
  • Delayノードの流量制御モードにおいて先頭メッセージをキューに追加
  • Delayノードで流量制限されたメッセージ向けの任意の2つ目の出力
" + "en-US": `

A couple more wiring tricks to share.

+

You can now select multiple wires by holding the Ctrl (or Cmd) key + when clicking on a wire. This makes it easier to delete multiple wires in one go.

+

If you hold the Ctrl (or Cmd) key, then click and drag with the right-hand mouse button, + you can slice through wires to remove them.

` + } + }, + { + title: { + "en-US": "Node Updates", + }, + // image: "images/", + description: { + "en-US": `
    +
  • The JSON node will now handle parsing Buffer payloads
  • +
  • The TCP Client nodes support TLS connections
  • +
  • The WebSocket node allows you to specify a sub-protocol when connecting
  • +
` } } ]