Compare commits

..

1565 Commits

Author SHA1 Message Date
Nick O'Leary
63657c18e2 Bump 0.17.1 2017-07-02 10:57:45 +01:00
Dave Conway-Jones
817f92a50e refix GPIO - more correctly - backwards compatible
existing installations now keep working
2017-07-02 09:59:37 +01:00
Dave Conway-Jones
304be96dd6 stop gpis node reporting bad status message on slow Pi 2017-07-02 00:50:55 +01:00
Dave Conway-Jones
9639081e7e re-sort package dev dips 2017-07-01 22:42:48 +01:00
Dave Conway-Jones
dca553048a Fix PI gpio to use BCM 2017-07-01 22:42:13 +01:00
Nick O'Leary
6201ed4d55 Prevent event thread contention when sending to Debug node
Closes #1311
2017-07-01 22:01:56 +01:00
Nguyen Thai Vinh
6db2c04585 Fix Bug: Can not display node icon when npm package has scope (#1305) (#1309) 2017-06-30 21:49:35 +01:00
Nick O'Leary
f3840512ba Clear moved flag when nodes are deployed 2017-06-30 21:48:38 +01:00
Nick O'Leary
9a6cf58565 Bump version for 0.17.0 2017-06-30 11:32:56 +01:00
Nick O'Leary
78076122ba Remove console.log 2017-06-30 10:39:28 +01:00
Nick O'Leary
7429f66d6b Mark nodes that have really moved as changed 2017-06-29 23:23:16 +01:00
Nick O'Leary
e59eff83b9 Ensure default switch node config matches what a no-op edit gives 2017-06-29 23:22:31 +01:00
Nick O'Leary
2083d85afa Update jsonata to latest 2017-06-29 15:55:55 +01:00
timolehto
4c9f1369c8 Set Proxy-Authorization when needed (#1146)
fixes #1145
2017-06-29 15:55:12 +01:00
Dave Conway-Jones
adca1d7855 File node - don't hose status web socket on multiple file writes
and add close behaviour to info
2017-06-29 11:40:50 +01:00
Kazuhito Yokoi
dfc4e99560 Add Chinese translation file (editor.json) (#1303) 2017-06-29 11:38:21 +01:00
Nick O'Leary
344076c943 Fix settings tests to remove nodeSettings reference 2017-06-29 11:36:16 +01:00
Nick O'Leary
710f1e2ca0 Be consistent in how node settings are addressed 2017-06-29 11:17:39 +01:00
Nick O'Leary
74ea85d19c Ensure existing grid settings are migrated to new keys 2017-06-28 22:16:11 +01:00
Dave Conway-Jones
dded98e30c tidied up implementation of file node close fix 2017-06-28 17:50:09 +01:00
Dave Conway-Jones
160c27c15a file node - close files when required 2017-06-28 17:36:04 +01:00
Nick O'Leary
a6a9025bab Typo in http node help 2017-06-28 17:15:42 +01:00
Chaya Stern
a780d4463c Support category with more than one word (#1301) 2017-06-28 14:27:54 +01:00
Nick O'Leary
23539ee907 Merge branch 'master' of github.com:node-red/node-red 2017-06-28 14:20:03 +01:00
Dave Conway-Jones
b515df611d fix file node to overwrite multiple files 2017-06-28 13:28:04 +01:00
Nick O'Leary
0d896fef0b Update Changelog for 0.17 2017-06-28 11:11:40 +01:00
Kazuhito Yokoi
283d5c64cb Update Japanese translation files (jsonata.json and messages.json) (#1300)
* Update Japanese translation file(jsonata.json)

* Update Japanese translation file(messages.json)
2017-06-28 09:26:07 +01:00
Kazuhito Yokoi
3134bc432b Improve editor messages (jsonata.json and messages.json) (#1299)
* Modify typo and improve messages in jsonata.json

* Change csv to CSV(messages.json)
2017-06-28 09:25:35 +01:00
Nick O'Leary
fd93fef73e Better template node help example 2017-06-27 21:53:12 +01:00
Dave Conway-Jones
8939a9c786 tiny bit of ; lint in switch node
#ocd
2017-06-27 17:16:18 +01:00
Nick O'Leary
52c0d360b2 Add buffer joiner mode to Join node 2017-06-27 17:11:11 +01:00
Dave Conway-Jones
d99432bff1 Use correct Buffer.from method rather than constructor
exec, tcp, ump and file nodes
2017-06-27 17:11:36 +01:00
Dave Conway-Jones
4dd2d3ac7d fix tcp node new Buffer alloc size 0 2017-06-27 16:58:17 +01:00
Nick O'Leary
aa7fe3668c HTTP Request node: add info on how to do form encoding 2017-06-27 14:58:13 +01:00
Nick O'Leary
83ebcf1dae Reset palette-manager tabs when settings dialog reopened 2017-06-27 14:17:26 +01:00
Nick O'Leary
c9317659c5 Prevent unmodified msg.headers from breaking HTTP Request flows
Closed #1015
2017-06-27 11:24:20 +01:00
Nick O'Leary
6562c558de Add help info for split node 2017-06-27 11:24:20 +01:00
Dave Conway-Jones
303f67c036 let node installer try to save with ~ version prefix to allow minor updates 2017-06-27 10:17:09 +01:00
Dave Conway-Jones
2482d122b8 Let join node auto re-assemble buffers
and add test
2017-06-26 23:10:08 +01:00
Nick O'Leary
1733c38b5c Update general dependencies 2017-06-26 15:03:32 +01:00
Nick O'Leary
7a1e4e9e99 Ensure all ace editors are destroyed in the expression editors 2017-06-26 14:23:48 +01:00
Nick O'Leary
e590313297 Expression editor - clear legacy flag for blank expressions 2017-06-26 14:12:20 +01:00
Nick O'Leary
b63d243e33 Update JSONata to 1.2.4
Closes #1275
2017-06-26 13:55:22 +01:00
Nick O'Leary
e9c1216d5c Handle logging out and already logged-out editor
Fixes #1288
2017-06-26 10:49:06 +01:00
Nick O'Leary
df9e50445e Merge branch 'master' into 0.17 2017-06-26 10:18:42 +01:00
Kazuhito Yokoi
61339face6 Add and improve Japanese translation file(editor.json, infotips.json and messages.json) (#1284)
* Update Japanese translation(editor.json)

* Add Japanese translation file(infotips.json)

* Add Japanese translation file(messages.json)
2017-06-26 10:08:05 +01:00
Chaya Stern
9cd751e977 Fix bug: Export Subflows (#1282)
* fix bug with export subflows

* fix bug with export config-nodes
2017-06-26 10:07:44 +01:00
Kazuhito Yokoi
7aa08ff885 Add Japanese translation file(jsonata.json) (#1271) 2017-06-26 09:41:16 +01:00
Dave Conway-Jones
a824caf712 update core nodes to use newer Buffer syntax 2017-06-24 13:53:45 +01:00
Dave Conway-Jones
395210e4f0 destroy editor to ensure fully removed on close (function, template, comment)
to close #1279
2017-06-24 12:15:03 +01:00
Dave Conway-Jones
e23354b2bb tidy up split node to remove todo comments 2017-06-24 12:09:52 +01:00
Dave Conway-Jones
bc472eb0b3 Bump ACE editor to v1.2.7 2017-06-23 22:08:03 +01:00
Dave Conway-Jones
256f8e7226 add allow es6 to .jshintrc 2017-06-23 21:49:35 +01:00
Dave Conway-Jones
f41959537b travis - don't allow node 8 fails, (and re-add 7) 2017-06-23 21:49:10 +01:00
Dave Conway-Jones
c9e05cf9f6 split node - in object mode allow msg.complete on its own 2017-06-23 21:48:13 +01:00
Dave Conway-Jones
82d9a02d92 Move udp sock error listener to only be instantiated once. 2017-06-23 16:20:28 +01:00
Dave Conway-Jones
dc9fa81346 let split of objects use key to set another property (e.g. topic)
and add tests
and update messages
2017-06-22 18:42:54 +01:00
Dave Conway-Jones
b91c178200 add "split/stream" ability to file in node
and add teste
2017-06-22 18:41:49 +01:00
Simon Asp
adebdf36a5 Bug fix in exec node. White spaces in arguments now works (#1285) 2017-06-18 11:55:39 +01:00
Dave Conway-Jones
4f34980c9f adding streaming modes into split node
and add tests
2017-06-16 22:26:14 +01:00
Dave Conway-Jones
e70766a535 fix split to pass tests... 2017-06-16 09:21:53 +01:00
Dave Conway-Jones
55110dfbac let split node reassemble based on a final packet. (as well as the first) 2017-06-16 09:16:23 +01:00
Dave Conway-Jones
56405ac903 let join also accumulate strings (and not fail) 2017-06-15 00:11:35 +01:00
Nick O'Leary
2b2136c468 Add typedInput binary mode icon 2017-06-14 22:29:38 +01:00
Dave Conway-Jones
f12031ee9e redo delay node status messages to be interval based 2017-06-14 22:25:44 +01:00
Nick O'Leary
c26852da77 Add buffer support to split node 2017-06-13 21:01:27 +01:00
Nick O'Leary
d9dc171c28 Add buffer mode to typedInput 2017-06-13 21:01:27 +01:00
Dave Conway-Jones
d407f31ae5 stop delay node spamming web socket (when in fast rate limit mode) 2017-06-09 19:42:12 +01:00
Nick O'Leary
f688b8d299 Refresh sidebar info when tab is changed 2017-06-06 10:27:03 +01:00
Dave Conway-Jones
d8e6a7b687 better spacing for library widget 2017-06-05 17:04:31 +01:00
Dave Conway-Jones
7c42b04eff updated split/join node (split still needs work before release) 2017-06-05 17:04:17 +01:00
Nick O'Leary
f527841c29 Fix gridSize for node width calculation to avoid odd resizing 2017-06-05 16:10:47 +01:00
Nick O'Leary
48a8dc0989 Redraw grid properly if gridSize changes 2017-06-05 16:07:21 +01:00
Nick O'Leary
7e35c9c754 Return flow rev on reload api when api v2 enabled
Closes #1273
2017-06-05 15:16:26 +01:00
Nick O'Leary
7502a2b1ff Update trigger help 2017-06-05 14:01:24 +01:00
Nick O'Leary
6c2de40dba Add cookie handling to HTTP Request node 2017-06-05 11:33:37 +01:00
Dave Conway-Jones
ef90f19eaa Make exec node explicitly call SIGTERM for default 2017-06-05 09:47:42 +01:00
Dave Conway-Jones
90ab34591a Add node 8 to travis (with allow failure) 2017-06-05 08:50:37 +01:00
Kazuhito Yokoi
21d3a3dd1e Modify typo in jsonata.json (#1270) 2017-05-31 08:44:44 +01:00
Nick O'Leary
b44e70115b Delay/Range node help tidy up 2017-05-26 14:27:53 +01:00
Nick O'Leary
ac31957707 Update delay node ui 2017-05-26 13:51:58 +01:00
Nick O'Leary
65e27a268d Scroll sidebar info tab to top when changing content 2017-05-24 21:41:18 +01:00
Nick O'Leary
6bd59b10c7 Ensure info tab sections are collapsible when set from palette 2017-05-24 21:11:23 +01:00
Nick O'Leary
6a6a692891 Only show tab info if there is an active tab 2017-05-24 20:58:16 +01:00
Nick O'Leary
479b18354d More core node info help tidy up 2017-05-24 16:55:53 +01:00
Nick O'Leary
9c6452544b Don't try to nls status text starting with '.'
Fixes #1258
2017-05-24 12:21:35 +01:00
Nick O'Leary
0a6ff900da Add guard against the http-request buffer fix being reverted 2017-05-24 11:18:52 +01:00
bartbutenaers
f54f863611 Revert "Multipart streaming"
This reverts commit bd671e75e6.
2017-05-24 11:08:08 +01:00
bartbutenaers
9cc04da7b2 Multipart streaming 2017-05-24 11:07:09 +01:00
bartbutenaers
d7f5b0c9d7 Always request buffer 2017-05-24 11:05:57 +01:00
bartbutenaers
9bd4598c6a Buffer fix 2017-05-24 11:04:33 +01:00
bartbutenaers
e3b052bc38 initial commit 2017-05-24 11:04:33 +01:00
Nick O'Leary
f215970649 Add http-request node unit tests 2017-05-24 10:36:47 +01:00
Nick O'Leary
dfe1cd4f90 Tidy up more core node help text 2017-05-23 17:26:23 +01:00
Nick O'Leary
3d2e6aea7b Remember test expression data on a per-node basis 2017-05-23 15:54:09 +01:00
Nick O'Leary
749b0d7019 Tidy up parser node edit dialogs and help text 2017-05-23 14:18:09 +01:00
Dave Conway-Jones
7978f85f7a Add Pretty print option to JSON node and
make XML and CSV nodes more consistent look and feel
2017-05-23 09:35:37 +01:00
Nick O'Leary
bd14acb68a Change debug message menu icon 2017-05-22 22:21:52 +01:00
Nick O'Leary
1e9ce550db Handle empty array/objects in debug view 2017-05-22 20:13:39 +01:00
Nick O'Leary
6278dfa77e Only check for reordered outputs if outputMap defiend 2017-05-22 13:45:56 +01:00
Nick O'Leary
2a3e355437 Add per-node filter option to Debug pane 2017-05-22 11:35:55 +01:00
Dave Conway-Jones
f6b0459d27 change pin selection table for pi gpis nodes 2017-05-20 02:36:03 +01:00
Dave Conway-Jones
790d6912fd re-add return to http request (removed in error) 2017-05-20 02:35:41 +01:00
Nick O'Leary
e69e5b4f50 Ensure node labels are reordered properly to match outputs 2017-05-19 22:56:29 +01:00
Nick O'Leary
483306e73c Avoid circular references when stingifying node objects 2017-05-19 20:36:22 +01:00
Dave Conway-Jones
1148a0b637 tcp request - remove confusing timeout wording from info 2017-05-15 22:05:33 +01:00
Dave Conway-Jones
524021f0fa http request node add transport validity check and warn. 2017-05-15 22:04:47 +01:00
Nick O'Leary
5b5f9aa01d Add 'none' placeholder for empty port label form 2017-05-15 16:26:42 +01:00
Nick O'Leary
f97f92c297 Strip BOM character from JSON files if present
Fixes #1239
2017-05-15 14:21:12 +01:00
Nick O'Leary
9d4139085b Handle HTTP In url that is missing its leading /
Fixes #1218
2017-05-15 14:10:06 +01:00
mw75
0ee7ffb5e5 Version check no meta (#1243)
* Version check on module loading - remove all metadata information bevor comparing the versions.

* refined regex
2017-05-15 13:57:35 +01:00
Nick O'Leary
8a7bb1be9f Log error when non-msg-object is returned from a Function 2017-05-15 13:54:05 +01:00
Nick O'Leary
d4135e80a6 Timeout a node that fails to close - default 15s timeout 2017-05-15 13:05:33 +01:00
Nick O'Leary
a5ade39d7c Fix selection of link nodes 2017-05-13 22:39:06 +01:00
Nick O'Leary
f39b4e7d22 Node status should be on by default 2017-05-12 22:47:59 +01:00
Nick O'Leary
080469cdf5 Ensure debug node marked changed when button pressed 2017-05-12 22:35:29 +01:00
Nick O'Leary
835ad29417 Fix pop-out debug window for all the recent updates 2017-05-12 22:22:47 +01:00
Nick O'Leary
c09bea4710 Add debug message menu 2017-05-12 22:12:55 +01:00
Nick O'Leary
879c0f4114 Don't mark a node changed when going from none to blank labels 2017-05-12 19:55:36 +01:00
Nick O'Leary
5feb07583b Don't include msg. in debug message copied paths 2017-05-12 10:19:50 +01:00
Nick O'Leary
5388002f54 Format Buffer numbers as hex by default 2017-05-11 21:15:16 +01:00
Nick O'Leary
c80fa9914b Merge branch '0.17' of github.com:node-red/node-red into 0.17 2017-05-11 21:00:40 +01:00
Dave Conway-Jones
b43d566968 Final TCP node nits - let 0 do it's thing as per every other timeout 2017-05-11 19:11:51 +01:00
Dave Conway-Jones
6b4e15dd0f fix tcp port not waiting as per info/previous behaviour
add separate return immediate mode rather than conflate ideas
2017-05-11 17:24:20 +01:00
Nick O'Leary
d9ef32d7e8 Remember formatting choices for dbg msg elements 2017-05-11 17:00:49 +01:00
Dave Conway-Jones
49389d6f06 Add new msg.delay option to delay node
and msg.reset to clear/fluch existing delays
2017-05-11 16:13:40 +01:00
Nick O'Leary
c75dc3cc36 Add test coverage for deleting a flow 2017-05-11 15:39:55 +01:00
btsimonh
c0eabf0438 Add note of removed flows in diffConfig (#1253) 2017-05-11 15:39:41 +01:00
Nick O'Leary
7730d0a4f8 Merge branch 'master' into 0.17 2017-05-11 15:10:12 +01:00
Nick O'Leary
e79da408a8 Allow debug msg elements to be pinned 2017-05-11 15:08:10 +01:00
Nick O'Leary
7381784d0f Only show debug tools under the debug tab 2017-05-10 16:56:03 +01:00
Nick O'Leary
085fb283e5 Fix test for valid js identifiers in debug path construction 2017-05-10 16:25:46 +01:00
Nick O'Leary
61e0e50e7b Remove unused modified flag on debug messages 2017-05-10 16:11:26 +01:00
Nick O'Leary
00460d856b Add copy path/value buttons to debug messages 2017-05-10 15:49:56 +01:00
Nathanaël Lécaudé
48958f392f TCP In: Fix error in timout callback (#1249)
Thanks @natcl
2017-05-09 22:09:21 +01:00
Dave Conway-Jones
a84efeb5d5 stop using sudo for Pi gpio access
(as PI user doesn’t need it) - other users must be in gpio group
2017-05-08 09:04:26 +01:00
Nick O'Leary
1c8c05ae04 Fix padding of config node edit dialog 2017-05-05 16:01:52 +01:00
Nick O'Leary
401d386812 Add force-deploy option when conflict detected 2017-05-05 15:52:37 +01:00
Nick O'Leary
6b07f58e8e NLS jsonata test messages 2017-05-05 13:43:39 +01:00
Dave Conway-Jones
6e8c978d12 Add sentence about clearing retained topic on mqtt
and use of administrator for ump on windows…
2017-05-05 12:31:18 +01:00
Nick O'Leary
5b2296b056 Add missing copyright header 2017-05-05 11:24:53 +01:00
Nick O'Leary
dbf0486acb Add JSONata expr tester and improved feedback 2017-05-05 11:23:24 +01:00
Nick O'Leary
b030e935ce Hide tip box on startup if disabled 2017-05-03 21:27:08 +01:00
Nick O'Leary
29bd43413a Add context.keys function to list top-level keys 2017-05-03 20:51:33 +01:00
Nick O'Leary
2249b9449c NLS Expression/JSON editor and fix their height calculation 2017-05-03 17:17:36 +01:00
Nick O'Leary
30920b1b78 Add $context/$flow/$global functions to jsonata 2017-05-03 15:48:30 +01:00
Nick O'Leary
8f92a3e875 Do not log node errors if handled by a Catch node 2017-05-03 13:42:38 +01:00
Nick O'Leary
ed1a55d9cd Provide feedback when enable/disable node fails 2017-05-03 13:29:35 +01:00
Nick O'Leary
93ef84f495 Move palette editor to settings panel 2017-05-03 11:38:16 +01:00
Nick O'Leary
ccfcbe8526 Move palette editor to userSettings dialog 2017-05-03 11:38:16 +01:00
Nick O'Leary
5938143002 Move view and keyboard into user settings dialog 2017-05-03 11:38:16 +01:00
Nick O'Leary
8135da71bd Add basic user settings panel 2017-05-03 11:38:16 +01:00
Dave Conway-Jones
a3c73a04c2 yet more core node info updates
sentiment, gpio, change and range
2017-04-26 21:52:33 +01:00
Dave Conway-Jones
7f90d31846 more core node info updates to newer style 2017-04-25 21:47:58 +01:00
Dave Conway-Jones
45fbd22e28 Update some core nodes info 2017-04-24 20:37:06 +01:00
Nick O'Leary
4689d56955 Allow a node to decide for itself if its button should be enabled or not
This means:

  1. an Inject node that has only been moved can still inject
  2. the Debug node is now marked as changed when its button is clicked
     which, without this fix, then prevented the button from being
     clicked to toggle its state again
2017-04-23 23:20:50 +01:00
Nick O'Leary
aa1b2808e7 Track node moves separately to node config changes 2017-04-23 23:20:36 +01:00
Cor Bosman
40ad4bdbd8 dont match only part of the node type (#1242) 2017-04-22 22:08:09 +01:00
Nick O'Leary
b6510d66e0 Update debug node to register the settings it uses 2017-04-22 09:03:52 +01:00
Nick O'Leary
4ea33ea482 Pass a 'removed' parameter to node close handler 2017-04-21 23:36:21 +01:00
Nick O'Leary
e13d410b4a Update tests for oauth -> strategy rename 2017-04-21 22:06:12 +01:00
Nick O'Leary
72da7e6c54 Rename oauth auth scheme to strategy as it works for openid 2017-04-21 21:54:48 +01:00
Nick O'Leary
fb05960d79 Allow oauth schemes provide a custom verify function 2017-04-21 21:17:18 +01:00
Nick O'Leary
7bd0943412 Provide single endpoint to load all node message catalogs
Replaces potentially dozens of http requests with one or two.
2017-04-21 11:49:35 +01:00
Nick O'Leary
bb2649d063 Ensure ace editor instances are freed if edit cancelled 2017-04-21 09:05:03 +01:00
Nick O'Leary
d743bdbf5a Clip overly long notification messages 2017-04-21 09:05:03 +01:00
Nick O'Leary
61890f19bc Use queryCommandSupported not queryCommandEnabled to check for copy support 2017-04-21 09:05:03 +01:00
Dave Conway-Jones
b756a8edef Make tcp send msg more consistent
to close #1236
2017-04-20 12:22:36 +01:00
Kazuki-Nakanishi
adcb2f1aa8 Fix exec node error tests on Windows (#1234) 2017-04-19 22:09:53 +01:00
Nathanaël Lécaudé
e574f4516f Update 31-tcpin.js (#1235)
TCP-IN: Add check to see if object exists, fixes issue #1222
2017-04-18 16:03:16 +01:00
Dave Conway-Jones
2ac9c11ec9 Add tip to tab description editor
(and remove icons)
2017-04-16 21:08:32 +01:00
Dave Conway-Jones
1c470ab9e3 Make tab info edit box resizable 2017-04-16 20:25:15 +01:00
Dave Conway-Jones
08b8a8e3af update messages for updated exec node 2017-04-16 20:24:38 +01:00
Dave Conway-Jones
11ee1a7dcb fix exec node error test 2017-04-13 11:48:33 +01:00
Dave Conway-Jones
a281b8c74e Make exec node spawn and exec outputs more consistent
(with an option to revert if necessary)
and new info docs
2017-04-13 11:36:54 +01:00
Nick O'Leary
5cb37148c6 Add editorTheme.logout.redirect to allow redirect on logout
Closes #1213
2017-04-12 21:41:16 +01:00
Kazuki-Nakanishi
05878d3176 Fix the test cases which sometimes fails due to timing. (#1228) 2017-04-12 20:54:31 +01:00
Nick O'Leary
d1c42262d6 Ensure all nodes have access to global context
Fixes #1230
2017-04-12 20:48:43 +01:00
Nick O'Leary
c54cf26848 Add support for oauth adminAuth configs 2017-04-12 10:09:03 +01:00
Nick O'Leary
bfb548636e Merge branch 'master' into 0.17 2017-04-11 14:53:44 +01:00
Nick O'Leary
36e1b2ba08 Don't process subscription for unauthenticated comms link
Fixes #851
2017-04-11 14:48:19 +01:00
Nick O'Leary
301ac279ff Handle IncomingMessage/ServerResponse object types in debug
Fixes #1202
2017-04-10 21:59:59 +01:00
Nick O'Leary
08d21ccba7 Clone credentials when passing to node
Fixes #1198
2017-04-10 21:45:04 +01:00
Nick O'Leary
62876ca377 Toggling debug node enabled/disabled state should set state dirty
Fixes #1203
2017-04-10 16:11:01 +01:00
Kazuki-Nakanishi
10f94148af Exec node for windows environment (#1200)
* Modify exec node to run on Windows.

* Remove unnecessary modification.
2017-04-10 16:06:19 +01:00
Nick O'Leary
31502c2ebc remove allow_failures flag from node 7.x 2017-04-10 15:51:24 +01:00
David
62b29ecb65 Make theme able to load custom javascript (#1211)
* Make theme able to load custom javascript
- Look for the field 'customScript' in editorTheme (settings.js)
- Add it to mustach context
- Load list on template side (index.mst)

* Add unit tests for customScripts

* Code review edits : generic behavior for theme.page.[css|scripts]
- Use the same way to share css and javascript files from a theme
- Allow string instead of array for theme.page.scripts
- Remove old customScript field
2017-04-10 15:46:44 +01:00
Nick O'Leary
67337e013a Merge branch 'master' into 0.17 2017-04-10 15:45:21 +01:00
Andrey Bezugliy
f987fa13ea Resolve dir argument of getLocalNodeFiles function (#1216)
* Resolve dir argument of getLocalNodeFiles function

The getLocalNodeFiles is called 3 times.  Each time it called, the callee needs to resolve the dir argument.
That was not done for several of calls, and local modules (specified in the "nodesDir" setting) were not returned to client because of that.

This fix will allow to make sure the dir is consistently resolved.

* Several changes in "localfilesystem_spec.js":
- Changed checkNodes to verify that every node's file property is resolved, i.e. containst absolute path, not relative.
- Added a unit-test "Finds nodes in settings.nodesDir (string,relative path)"
2017-04-10 15:41:20 +01:00
Nick O'Leary
73dfe631ce Add .trace and .debug to Node prototype 2017-04-10 15:32:40 +01:00
Nick O'Leary
83ca8147ca Merge branch 'pr_1197' into 0.17 2017-04-10 15:25:19 +01:00
Nick O'Leary
1c11e7f97b Shrink config node appearance in info table 2017-04-10 14:33:21 +01:00
Nick O'Leary
aefae79186 Display config nodes in Info sidebar table 2017-04-10 11:29:52 +01:00
Nick O'Leary
4b05a9bb6f Ensure flow info box updates after editing flow 2017-04-10 00:00:10 +01:00
Nick O'Leary
2453719a87 Make H3 sections in node help collapsible 2017-04-07 13:30:12 +01:00
Nick O'Leary
ea929b00e3 Hide Node info section when displaying changelog 2017-04-07 12:36:06 +01:00
Nick O'Leary
ede940a398 Allow tips to be hidden and cycled through 2017-04-07 12:24:39 +01:00
Nick O'Leary
67da853146 Add info tips back to the sidebar 2017-04-07 11:21:30 +01:00
Nick O'Leary
624befd704 Restructure info tab 2017-04-06 23:17:30 +01:00
Dave Conway-Jones
203539841d allow shadowing in .jshintrc (mainly to test signing commits) 2017-04-06 11:12:11 +01:00
Nick O'Leary
262db23f7d First pass of new node-info style 2017-04-05 16:19:23 +01:00
Dave Conway-Jones
28ea22f0e1 MQTT new style info 2017-03-29 21:45:28 +01:00
Dave Conway-Jones
3f349c3531 remove requirement for cmd in exec node config + new style info 2017-03-29 21:44:58 +01:00
Dave Conway-Jones
9928e8562a let inject "between time" also fire at start - Plus new info 2017-03-24 14:01:26 +00:00
Dave Conway-Jones
b1e3fc5761 remove repeat symbol from inject if repeat is 0 2017-03-23 22:04:53 +00:00
Nam Giang
b2390f1caf adding frequency configuration to pwm output (#1206) 2017-03-23 21:02:22 +00:00
Nick O'Leary
b9379f2ddf Provide notification when new flows deployed in the background 2017-03-17 21:29:03 +00:00
Kazuki-Nakanishi
38a950a6dc Add description to flow same as subflow 2017-03-17 01:29:19 +09:00
Nick O'Leary
fb24dca019 Add JSON Expression editor 2017-03-12 23:52:31 +00:00
Nick O'Leary
07d131c945 Update jsonata 2017-03-12 22:04:38 +00:00
Dave Conway-Jones
0c1c710afe make sure MQTT client closes if redeploy during reconnect
to close #1193
Thanks @tedhuang for the excellent problem determination
2017-03-12 22:04:38 +00:00
Nick O'Leary
15cd93c30f Update follow_redirects to fix http_proxy handling
Fixes #1172
2017-03-12 22:04:38 +00:00
Ben Hardill
a5d9e17a8c Allow nodes to have translations not in core (#1183)
* Allow nodes to have translations not in core

Currently only languages in the core are checked when
the editor requests a translation. This means that if
a node includes more translations they are not checked.

This change removes the check against that short list,
but it only checks the first language from the browser
suported list

* remove whitespace
2017-03-12 22:04:37 +00:00
Kazuhito Yokoi
a82926dd0d Modify Japanese translation file for editor 2017-03-12 22:04:37 +00:00
Kazuki Nakanishi
12435b997a Added a name icon and a description label on edit subflow window. 2017-03-12 22:04:37 +00:00
Nick O'Leary
5945be95cf Treat missing msg properties as undefined rather than throw error
Fixes #1167
2017-03-12 22:04:37 +00:00
Nick O'Leary
5c2e7ce407 Update jsonata 2017-03-12 22:03:14 +00:00
Dave Conway-Jones
834e894b1d make sure MQTT client closes if redeploy during reconnect
to close #1193
Thanks @tedhuang for the excellent problem determination
2017-03-10 20:12:52 +00:00
Dave Conway-Jones
d25dac69d2 ask istanbul for more reports as default
and create a simple “grunt coverage” task synonym.
2017-03-10 20:04:14 +00:00
Kazuki-Nakanishi
3cc4173399 Extend timeout for the test case of installing non-existant path. (#1191)
to fix timeout on slower hosts
2017-03-10 13:59:44 +00:00
Nick O'Leary
36ab16c1ed Update follow_redirects to fix http_proxy handling
Fixes #1172
2017-03-09 22:49:22 +00:00
Nick O'Leary
5356373681 Finalise nodeSettings and update tlsConfigDisableLocalFiles
- increase test coverage around registerType
2017-03-09 21:06:49 +00:00
Nick O'Leary
f45a2643f2 Change default value of tlsConfigDisableLocalFiles to false 2017-03-09 20:01:44 +00:00
Nick O'Leary
e55933706d Merge branch 'nodeSettings' into 0.17 2017-03-09 20:00:54 +00:00
Kazuki-Nakanishi
3b3d696e45 Add the node setting tlsConfigDisableLocalFiles for tls node. (#1190)
* Add the node setting tlsConfigDisableLocalFiles for tls node.

* Fix the bug that shows node setting when specified in settings.js and exportable is false.
2017-03-09 19:58:34 +00:00
Kazuki-Nakanishi
281351e6b3 Add istanbul to Gruntfile.js (#1189) 2017-03-09 15:28:12 +00:00
Kazuki-Nakanishi
34089aec70 Allow a node to declare what settings should be made available to the editor. (#1185)
* Implement register/exportNodeSettings.

* Change normaliseRegisterTypeName to normaliseNodeTypeName. Force it to name in a camel case.
2017-03-08 14:38:33 +00:00
Kazuki-Nakanishi
3658d0e039 Add wait for writing a library entry into a file. (#1186) 2017-03-08 10:00:40 +00:00
kazuhitoyokoi
7a10636128 Add node whitelist function (#1184) 2017-03-08 10:00:00 +00:00
Ben Hardill
604ba7f4bc Allow nodes to have translations not in core (#1183)
* Allow nodes to have translations not in core

Currently only languages in the core are checked when
the editor requests a translation. This means that if
a node includes more translations they are not checked.

This change removes the check against that short list,
but it only checks the first language from the browser
suported list

* remove whitespace
2017-03-08 09:58:39 +00:00
Dave Conway-Jones
27b7fb54e8 nail trigger test for windows AND linux 2017-03-06 19:06:10 +00:00
Dave Conway-Jones
d351aa842c add port label to file node and update info 2017-03-06 19:05:52 +00:00
Dave Conway-Jones
59da705b8f really close tcp node connection right away (if told to)
rather than wait then close
2017-03-06 19:05:16 +00:00
Dave Conway-Jones
99b8f16d88 give up on SIGQUIT for widows test
revert to SIGINT
2017-03-06 17:42:59 +00:00
Dave Conway-Jones
06ffe722d4 better tests for windows nodes 2017-03-06 17:40:09 +00:00
Dave Conway-Jones
6264104642 comment out 2nd exec node kill tests
(to be revisited)
2017-03-06 16:49:51 +00:00
Dave Conway-Jones
c97812c340 retry exec node tests
(diff behaviour on host)
2017-03-06 16:25:38 +00:00
Nick O'Leary
bd4c578230 NLS messages for Flow enabled/disable 2017-03-06 15:55:38 +00:00
Nick O'Leary
6ec2949b6f Don't display port labels for subflow pseudo-port nodes 2017-03-06 15:41:19 +00:00
Nick O'Leary
1ff23ebfd9 Stop some ui elements from clearing url anchor when clicked 2017-03-06 15:30:42 +00:00
Nick O'Leary
7698990e37 Allows flows to be enabled/disabled in the runtime 2017-03-06 15:29:05 +00:00
Nick O'Leary
17e092afb3 Allow tabs to be enabled/disabled in the editor 2017-03-06 15:29:05 +00:00
Dave Conway-Jones
2db65b9d1f fixes for grunt files tests on Windows 2017-03-06 15:28:23 +00:00
Dave Conway-Jones
c6436f47eb let exec node take msg.kill SIG... param and pid param
and redo test
2017-03-06 15:27:29 +00:00
Nick O'Leary
e88b4a4412 Merge pull request #1181 from kazuhitoyokoi/master
Modify Japanese translation file for editor
2017-03-06 11:22:33 +00:00
Kazuhito Yokoi
01a177adfb Modify Japanese translation file for editor 2017-03-06 11:18:23 +00:00
Nick O'Leary
052b5e0ea8 Merge pull request #1174 from Kazuki-Nakanishi/master
Added a name icon and a description label on edit subflow window.
2017-03-03 16:19:18 +00:00
Kazuki Nakanishi
68cd447109 Added a name icon and a description label on edit subflow window. 2017-03-03 14:10:20 +00:00
Dave Conway-Jones
4a8a5ed8d4 Add port labels to inject node (to show types) 2017-03-03 10:21:07 +00:00
Dave Conway-Jones
84077505b0 add off option to logging settings comment 2017-03-02 23:12:40 +00:00
Dave Conway-Jones
c4554b71d3 Add link label value as portLabels 2017-03-02 23:12:06 +00:00
Nick O'Leary
63ce743571 Treat missing msg properties as undefined rather than throw error
Fixes #1167
2017-03-02 14:02:26 +00:00
Nick O'Leary
6cf53c611b merge exec fixes 2017-03-02 13:41:01 +00:00
Nick O'Leary
d8720ee325 Third output from Exec node must be consistent for success/failure conditions 2017-03-02 13:34:01 +00:00
Nick O'Leary
73501f3ad3 Resync with master 2017-03-01 17:45:09 +00:00
Nick O'Leary
54ee655472 Log error stack traces if verbose flag is set 2017-03-01 17:00:27 +00:00
Nick O'Leary
571b9fb8e0 Merge pull request #1122 from CANDY-LINE/feature/i18n-issue
Fix empty extra node help content issue
2017-03-01 16:38:08 +00:00
Nick O'Leary
cdd6b243ff Merge pull request #1171 from SenseTecnic/tls-certkey-upload
UI to upload certificates and keys for TLS
2017-03-01 16:34:05 +00:00
Nick O'Leary
fca77a868f Allow a node to declare settings that should be exported 2017-03-01 15:01:07 +00:00
Dave Conway-Jones
424e854778 clipboard export text stay highlighted even when button deselected
i.e. if you hit button twice text stays selected.
2017-02-28 22:54:13 +00:00
mblackstock
0979d565bb changes as suggested by @knolleary 2017-02-28 14:03:35 -08:00
Dave Conway-Jones
f5e6ca3e10 ensure export clipboard keeps text selected and formatted 2017-02-28 21:50:09 +00:00
mblackstock
2bde07561f UI to upload certificates and keys for TLS, and send them to node red in configuration properties to store them in credentials file
by default upload buttons will be shown unless a cert or key path is already set
added new settings flag called 'tlsDisableLocalFiles' to disable UI for local paths for cloud hosted NR
2017-02-28 12:21:34 -08:00
Nick O'Leary
16c92cc739 Merge pull request #1156 from LinusU/patch-1
Use pre-calculated values for connection path
2017-02-28 10:10:12 +00:00
Dave Conway-Jones
8b31a918a4 Fix Pi GPIO debounce
To close #1139
2017-02-27 19:22:02 +00:00
cinhcet
ee0bd49918 exec node returns 0 on the third output if command ended without error. (#1160)
* exec node returns 0 on the third output if command ended without error.
Otherwise, the status of the node is updated and the error code is send through the third output.

* info text updated and the second output returns only something if stderr is not empty

* proper stderror handling

* proper handling of stderr
2017-02-22 22:22:06 +00:00
Dave Conway-Jones
a625eeeac8 move csv fixes to master
to fix #1142 in master
2017-02-22 20:19:44 +00:00
Dave Conway-Jones
bfcd795687 Fix wrong number of double quotes in CSV parsing
to close #1162
2017-02-20 22:44:37 +00:00
Nick O'Leary
e2a9be9cec Defer resizing tray components until they have finished building 2017-02-16 21:41:20 +00:00
Linus Unnebäck
37dd075309 Use pre-calculated values for connection path 2017-02-16 18:05:59 +01:00
Nick O'Leary
89769fb0e5 Merge pull request #1155 from LinusU/patch-1
Use textContent to avoid manual escaping
2017-02-16 15:37:21 +00:00
Linus Unnebäck
b24fac3dd8 Use textContent to avoid manual escaping 2017-02-16 16:28:00 +01:00
Nick O'Leary
4794fe495c Add events to test helper 2017-02-15 23:15:24 +00:00
Nick O'Leary
869fdbcc6a Remove event passing for icons/examples from the api layer 2017-02-15 23:07:50 +00:00
Dave Conway-Jones
702e6d3b51 slight filed size adjust for mqtt broker port field - allow 5 digits 2017-02-14 20:59:52 +00:00
Nick O'Leary
2913e13a30 Misconfigured WebSocket nodes should not register msg handlers 2017-02-13 21:39:31 +00:00
Nick O'Leary
5f1e37b7fa Leave a node to nls its own port labels 2017-02-10 22:10:53 +00:00
Nick O'Leary
ec0209b175 Allow a node to override default labels 2017-02-09 23:24:16 +00:00
Nick O'Leary
a17dcbde0f Remove console log from Switch node 2017-02-08 20:43:26 +00:00
Nick O'Leary
fbd159a23a Add placeholder text on label inputs and clear buttons 2017-02-08 10:48:26 +00:00
Nick O'Leary
599a6bf050 Add port labels to Subflow nodes 2017-02-08 10:48:25 +00:00
Nick O'Leary
185b16a858 Keep port label form in sync with output reordering 2017-02-08 10:48:25 +00:00
Nick O'Leary
e7e3ed4923 Basic node label editor 2017-02-08 10:48:25 +00:00
Nick O'Leary
47df5476ba Add RED.stack as a common ui component 2017-02-08 10:48:25 +00:00
Nick O'Leary
d7c516ab00 Port label editor starting point 2017-02-08 10:48:24 +00:00
Dave Conway-Jones
50838970ec let css node handle ip addresses without trying to parse
and only warn once if no template (and then send object anyway)
to close #1142
2017-02-07 21:14:16 +00:00
Dave Conway-Jones
1d15ee7034 let Hypriot on Pi detect gpio correctly
clean up duplicate labels
2017-02-07 21:14:16 +00:00
Dave Conway-Jones
7029541b4f Let watch node recurse into subdirectories
to close #1140
2017-02-07 21:14:16 +00:00
Dave Conway-Jones
ada8e447cc exec node can be killed on demand 2017-02-07 21:14:16 +00:00
Dave Conway-Jones
1841fc18fa let trigger node set repeated outputs 2017-02-07 21:14:16 +00:00
Dave Conway-Jones
94ee465682 clone message before send in stay connected mode
to Fix #1137
2017-02-02 09:57:04 +00:00
Nick O'Leary
3e021b3a75 Fix loader test to expect line numbers in load errors 2017-01-30 09:58:43 +00:00
Nick O'Leary
0643f149b7 Extract line number if available from node load errors 2017-01-30 09:37:08 +00:00
Nick O'Leary
939768eec0 Cache auth details to save needlessly recalculating hashes 2017-01-28 14:44:47 +00:00
Nick O'Leary
f2235dacdc Shuffle promises for creating default package.json 2017-01-28 14:21:22 +00:00
Nick O'Leary
50017c28da Allow port labels be i18n identifiers 2017-01-27 22:36:00 +00:00
Nick O'Leary
85b2a03a42 Create a package.json file in userDir if one doesn't exist 2017-01-27 22:35:17 +00:00
Nick O'Leary
829087550d Add inputLabels and outputLabels to node defn + Update Change node 2017-01-27 18:11:25 +00:00
Nick O'Leary
dd6f71fe85 Resize port labels based on content 2017-01-27 16:33:11 +00:00
Nick O'Leary
92a928680c Initial port label behaviour 2017-01-26 15:38:25 +00:00
Nick O'Leary
d008b1970c Add option to parse Template result as JSON before sending 2017-01-25 17:12:53 +00:00
Nick O'Leary
4affbb8c6b Numeric validator that accepts blank should accept undefined 2017-01-25 16:11:56 +00:00
Nick O'Leary
ddb2ea4b5f autoInstallModules option must honour version/pending_version 2017-01-25 11:07:02 +00:00
Nick O'Leary
a69683183f Refuse to update a non-local node module 2017-01-24 22:50:40 +00:00
Nick O'Leary
8d34f87667 Add websocketVerifyClient option to enable custom websocket auth
Fixes #1127
2017-01-24 21:37:08 +00:00
Nick O'Leary
128c4fe222 Add visual cue as to whether the workspace is focused 2017-01-24 16:14:03 +00:00
Nick O'Leary
b10141d71f Allow statusCode/headers to be set directly within HTTP Response node 2017-01-24 14:56:48 +00:00
Nick O'Leary
68e0b35364 Allow RED.validators.number to allow blank values as valid 2017-01-24 14:28:15 +00:00
Nick O'Leary
1324f5e59c Update CHANGELOG for 0.16.2 2017-01-23 15:57:37 +00:00
Nick O'Leary
7759aacb35 Ensure custom mustache context parent set in Template node
fixes #1126
2017-01-23 15:34:34 +00:00
Nick O'Leary
fd6f7cd881 Display debug node name in debug panel if its known 2017-01-23 13:57:06 +00:00
Nick O'Leary
3fdeb38bb7 Ensure auth-tokens are removed when no user is specified in settings 2017-01-21 23:49:20 +00:00
Nick O'Leary
e27f5d0460 Add node module update api and expose in palette editor 2017-01-21 23:46:44 +00:00
Nick O'Leary
0720128bd4 Support dropping json files into the editor 2017-01-19 15:34:14 +00:00
Nick O'Leary
540472a093 Ensure all a tags have blank target in info sidebar 2017-01-19 13:52:38 +00:00
Nick O'Leary
daca78b6cd Ensure links do not span tabs in the editor 2017-01-19 13:24:54 +00:00
Dave Conway-Jones
4195840b2c make links in added info open in blank page rather than current window 2017-01-19 11:00:22 +00:00
Daisuke Baba
57c529758e Add an edge case test 2017-01-19 17:19:41 +09:00
Daisuke Baba
5ba9a0eb3f Fix empty extra node help content issue 2017-01-19 16:55:57 +09:00
Nick O'Leary
b8888a5d46 Add RED.utils.getNodeLabel utility function 2017-01-18 15:52:09 +00:00
Nick O'Leary
0857f979ff Update ui_spec for icon module path 2017-01-18 13:14:12 +00:00
Nick O'Leary
11f4ae019c Include module name in requests for node icons 2017-01-18 13:06:22 +00:00
Nick O'Leary
0ffeb0c5af Avoid creating multiple reconnect timers in websocket node 2017-01-17 20:48:05 +00:00
Nick O'Leary
d6f6b41145 Fix inner reference in install fail message catalog entry
Fixes #1120
2017-01-17 09:54:17 +00:00
Nick O'Leary
64daaeb310 Add file upload support to HTTP In node 2017-01-16 22:39:30 +00:00
Nick O'Leary
0646b0060e Display buffer data properly for truncated buffers under Object property 2017-01-16 17:43:39 +00:00
Nick O'Leary
c794ca85fd Update changelog for 0.16.1 2017-01-16 10:30:36 +00:00
Nick O'Leary
5b4019dd3d Add colour swatches to debug when hex colour matched 2017-01-16 10:29:00 +00:00
Nick O'Leary
a03ccd7b59 Nodes with hasUsers set to false should not appear unused 2017-01-15 13:37:21 +00:00
Nick O'Leary
4b64aad5ce Change hard error to verbose warning if using old node.js level 2017-01-14 23:57:39 +00:00
Nick O'Leary
d146ff8794 Update debug_spec test for Error messages 2017-01-14 21:47:18 +00:00
Nick O'Leary
5349bf7628 Don't filter debug properties starting with _
Fixes #1117
2017-01-14 21:34:09 +00:00
Nick O'Leary
a79e4d1bb3 Node logged errors not displayed properly in debug pane
Fixes #1116
2017-01-14 21:33:11 +00:00
Nick O'Leary
f462435dc2 Do not look for existing nodes when checking for wires on paste
Fixes #1114
2017-01-13 14:16:12 +00:00
Nick O'Leary
48ad614441 -v option not enabling verbose mode properly 2017-01-13 00:01:19 +00:00
Nick O'Leary
f699516fdb Add node.js version check on startup 2017-01-12 10:40:04 +00:00
Nick O'Leary
ca5cbb640a Bump version 0.16 2017-01-11 20:44:53 +00:00
Nick O'Leary
0a96259ddf Update copyright header for JS Foundation 2017-01-11 15:24:33 +00:00
Nick O'Leary
d99b9c04e4 Update changelog 2017-01-11 14:34:59 +00:00
Nick O'Leary
64d261e053 Add deploy action 2017-01-11 14:33:40 +00:00
Nick O'Leary
eb027d98aa Add column headings to keymap table 2017-01-11 14:15:29 +00:00
Nick O'Leary
a95727b654 Scope input/export actions to be global 2017-01-11 14:15:14 +00:00
Nick O'Leary
4e636d7eec Fix arg passing lint error 2017-01-11 12:18:52 +00:00
Nick O'Leary
3cd53f617a Include unassigned keys to shortcut dialog 2017-01-11 11:41:25 +00:00
Nick O'Leary
b1684e82d8 Dynamically generate keyboard shortcut help dialog 2017-01-11 11:35:48 +00:00
Dave Conway-Jones
a55027b838 let copy of settings file occur on a clean install. 2017-01-11 10:12:29 +00:00
Nick O'Leary
28678acf74 Add debug logging around flow revision ids 2017-01-10 14:20:51 +00:00
Nick O'Leary
ce6594c8cc Do not tie debug src loading to needsPermission
Fixes #1111
2017-01-10 09:43:46 +00:00
Nick O'Leary
75855d5450 Initialise nodeApp regardless of httpAdmin setting
Closes #1096 #1095
2017-01-09 22:22:49 +00:00
Nick O'Leary
f248699a30 Display info tips slightly longer 2017-01-09 22:09:06 +00:00
Nick O'Leary
29594726ca Speed up reveal of search dialogs 2017-01-09 22:08:54 +00:00
Nick O'Leary
0a41b07297 Reorder Debug/Inject nodes in quick-add dialog 2017-01-09 16:41:16 +00:00
Nick O'Leary
e45cb7fac1 Ensure flows exist before delegating status/error events
Fixes #1069
2017-01-09 16:39:41 +00:00
Nick O'Leary
489dbfc72a Update package dependencies 2017-01-09 15:01:33 +00:00
Nick O'Leary
a89ae7d77a Update MQTT to latest 2.2.1 2017-01-09 14:35:45 +00:00
Nick O'Leary
a1eeff4034 Node status not being refreshed properly in the editor 2017-01-09 14:18:59 +00:00
Nick O'Leary
0e1013a570 Add install/remove dialog to increase friction
Closes #1109
2017-01-09 13:41:20 +00:00
Nick O'Leary
4562b06a60 Try to prevent auto-fill of password fields in node edit tray
Fixes #1081
2017-01-08 23:14:14 +00:00
zuhito
3c96218338 Add Japanese translation file(editor.json) (#1084) 2017-01-08 23:02:07 +00:00
Nick O'Leary
f0a4ea099c Fix whitespace in localfilesystem 2017-01-08 23:01:28 +00:00
btsimonh
c8d6693fba fix bug where savesettings did not honor local settings variables (#1073)
* fix bug where savesettings did not honor local settings variables

* don't create lib/flows on read;  It's already created in localfilesystem.init and in saveLibraryEntry -
so removed call to promiseDir, and added a return of [] if accessing a folder which did not exist.
This is important because else when settings.readOnly is true, it still creates folders.

* Fix a CI failure where path passed to getLibraryEntry is empty;
treat this case as meaning it was wanting a folder, and return empty if the folder dioes not exist

* Add a test for getLibraryEntry( type, '/' ) as called by node-red

* change newsettings to camelCase newSettings
2017-01-08 23:00:27 +00:00
Nick O'Leary
81bbdfe413 Tidy up unused/duplicate editor messages
Closes #922
2017-01-08 22:54:46 +00:00
Nick O'Leary
0e362943bf Add option to colourise debug console output
Closes #1103
2017-01-08 22:38:40 +00:00
Nick O'Leary
1e37fed90b Report node catalogue load errors
Closes #1009
2017-01-08 20:51:31 +00:00
Nick O'Leary
aafcfef387 Add property validation to nodes using typedInput 2017-01-06 23:18:50 +00:00
Nick O'Leary
4b83d8160f Add common validator for typedInput fields
Closes #1104
2017-01-06 22:20:09 +00:00
Nick O'Leary
73a41707e5 Property expressions must not be blank 2017-01-06 21:58:17 +00:00
Nick O'Leary
c989c533e8 Properly report module remove errors in palette editor
Fixes #1043
2017-01-06 16:53:54 +00:00
Nick O'Leary
707dc8c65c Update debug node console logging indicator icon
Closes #1094
2017-01-06 14:43:51 +00:00
Nick O'Leary
4c6157a06e Tidy up merge commit of validatePropertyExpression 2017-01-06 14:32:37 +00:00
Nick O'Leary
f973396821 Merge pull request #1102 from node-red/0.16
0.16
2017-01-06 14:30:52 +00:00
Nick O'Leary
e73216d4c1 Merge branch 'master' into 0.16 2017-01-06 14:30:13 +00:00
Dave Conway-Jones
e6de26736b add port if wires array > number of ports declared. 2017-01-06 14:06:30 +00:00
Nick O'Leary
d131addd63 Allow tips to be enabled/disabled via menu option 2017-01-06 13:33:23 +00:00
Nick O'Leary
0c7705beff Allow quoted property expressions
Fixes #1101
2017-01-06 11:23:53 +00:00
Dave Conway-Jones
08b11addec Let exec node (spawn) handle commands with spaces in path 2017-01-06 09:55:52 +00:00
Nick O'Leary
555f96cfaf Info-tips update 2017-01-05 23:33:19 +00:00
Nick O'Leary
59ffacb3df Fix merge conflicts 2017-01-05 10:07:23 +00:00
Nick O'Leary
83acb66f00 NLS the diff dialog 2017-01-04 22:02:35 +00:00
Nick O'Leary
1f9ae45875 Fix diff node table layout for Safari 2017-01-04 20:57:10 +00:00
Nick O'Leary
ffa628be2d Index all node properties for node search 2017-01-04 16:46:36 +00:00
Nick O'Leary
8916f6f829 Update CHANGELOG/version for 0.15.3 2017-01-04 15:11:53 +00:00
Nick O'Leary
215c8fd261 NLS type search 2017-01-01 22:14:33 +00:00
Nick O'Leary
061cc908a7 Hide common entries when filtering typeSearch 2017-01-01 21:59:09 +00:00
Nick O'Leary
18a519f9ed Remove node 0.10 from travis config 2017-01-01 11:41:03 +00:00
Nick O'Leary
7970c9dbe5 Merge changes by reimporting changed node config 2017-01-01 00:20:12 +00:00
Nick O'Leary
5ca0c066e2 Better handling of moved nodes 2017-01-01 00:20:12 +00:00
Nick O'Leary
563728c7b8 Some more merging code 2017-01-01 00:20:12 +00:00
Nick O'Leary
31a72b6562 Three-way-diff 2017-01-01 00:20:12 +00:00
Nick O'Leary
d3dfbc3034 Add proper three-way diff view 2017-01-01 00:20:11 +00:00
Josh
f143a6ba08 update welcome message to use logger so it can be turned off/on if required (#1083) 2016-12-23 11:31:23 +00:00
Dave Conway-Jones
28a65923b6 bump various package versions
(not touching mqtt and other major version)
2016-12-22 13:36:06 +00:00
Dave Conway-Jones
4ca3df77b3 Add ⇶ to debug node to indicate debugging also to console.log 2016-12-22 13:27:27 +00:00
Dave Conway-Jones
4cbe264869 Change file node to use node 4 syntax (drops support for 0.8) 2016-12-22 13:17:08 +00:00
Nick O'Leary
b6b65b6bf7 Update debug node test for circular references 2016-12-20 23:21:25 +00:00
Nick O'Leary
e7cc42a927 Use json-stringify-safe to detect circular references in debug msgs 2016-12-20 23:16:11 +00:00
Nick O'Leary
bba3ca8cc0 Avoid misinterpreting valid objects as encoded arrays in debug 2016-12-20 22:46:56 +00:00
Dave Conway-Jones
8423e2d245 add info for httprequest responseUrl property 2016-12-16 22:03:00 +00:00
Dave Conway-Jones
fc263718a1 Add res.responseUrl to httprequest node response 2016-12-16 21:54:24 +00:00
Nick O'Leary
c3a99cf5a4 Update CONTRIBUTING guide 2016-12-09 13:35:29 +00:00
Dave Conway-Jones
f6820ec615 Bump a load of packages (for 0.16 branch only)
Ready to drop node 0.10 - update ws, bcrypt, drop serial port node
2016-12-07 23:43:41 +00:00
Nick O'Leary
226ad3fe22 Add missing diff file 2016-12-07 13:51:20 +00:00
Nick O'Leary
a9b17e930c Add diff markers to tabs in diff-view 2016-12-07 13:48:30 +00:00
Nick O'Leary
932ea7ba8f Add flow diff view 2016-12-06 22:37:21 +00:00
Nick O'Leary
c720d78c39 Ensure runtime event notification gets cleared on restart 2016-12-05 14:39:34 +00:00
Nick O'Leary
8d21e441a0 Add notification when runtime stopped due to missing types
Part of #832
2016-12-05 13:24:24 +00:00
Nick O'Leary
16ecb1a9cb Overhaul keyboard handling and introduce editor actions 2016-12-04 22:59:43 +00:00
Nick O'Leary
f68acca427 Fix dynamically loading multiple node-sets from palette editor 2016-12-01 15:27:29 +00:00
Dave Conway-Jones
671d7e2beb debug - format if time if correct length/range 2016-11-28 17:28:49 +00:00
Nick O'Leary
52fc497412 Properly escape html strings passed to debug 2016-11-27 21:51:34 +00:00
Nathanaël Lécaudé
2084ad318f Tcpgetfix: Another small check (#1070)
* TCPget: Add another check for clients[connection_id]
2016-11-26 21:16:19 +00:00
Nathanaël Lécaudé
b530c1a43d TCPGet: Ensure done() is called only once (#1068)
* Add additional safety checks to avoid acting on non-existent objects

* TCPGet: yet more checks

* TCPGet: seperate connected properties

* TCPGet: properly handle node.done()
2016-11-25 18:14:51 +00:00
Nick O'Leary
f2797a4153 Fix package.json conflict 2016-11-24 20:52:48 +00:00
Nick O'Leary
659c326f89 Add jsonata snippets 2016-11-23 23:16:17 +00:00
Nick O'Leary
534b07d120 Include jsonata from dependency on build and improve func highlight 2016-11-23 23:15:30 +00:00
Nick O'Leary
de64fc8b8d Update rather than hide install button after success install 2016-11-23 10:58:38 +00:00
Nick O'Leary
1e234fcb73 Add editableList api doc comments 2016-11-23 10:58:19 +00:00
Nick O'Leary
fa9a7e725b Sort quick-add types and add most-recent used type section 2016-11-22 22:57:05 +00:00
Nick O'Leary
95b2675f03 Support query and search paths in url when opening debug sub window 2016-11-22 13:14:52 +00:00
Nick O'Leary
564902b886 Allow $ and _ at start of property identifiers
Fixes #1063
2016-11-21 21:36:18 +00:00
Nathanaël Lécaudé
071a04595a TCPGet: Separated the node.connected property for each instance (#1062)
* Add additional safety checks to avoid acting on non-existent objects

* TCPGet: yet more checks

* TCPGet: seperate connected properties
2016-11-19 16:25:54 +00:00
Nick O'Leary
eaa4b76ede Update jsonata version 2016-11-18 16:38:48 +00:00
Nicholas Humfrey
74a1713e99 Corrected 'overide' typo in XML node help (#1061)
Thanks @njh
2016-11-18 11:41:48 +00:00
Nathanaël Lécaudé
5f5aa0b2f7 TCPGet: Last property check (hopefully) (#1059)
* Add additional safety checks to avoid acting on non-existent objects

* TCPGet: yet more checks
2016-11-18 11:25:06 +00:00
Nathanaël Lécaudé
eef59fd40e Add additional safety checks to avoid acting on non-existent objects (#1057) 2016-11-17 21:04:38 +00:00
Dave Conway-Jones
361ff315e9 add --title for process name to command line options 2016-11-17 13:57:33 +00:00
Dave Conway-Jones
eeea8e530e add indicator for fire once on inject node 2016-11-17 13:56:37 +00:00
Dave Conway-Jones
8d5286703f reimplement $(env var) replace to share common code.
and add test to utils
2016-11-17 13:56:17 +00:00
Dave Conway-Jones
74f2180fa4 Fix error message for missing node html file, and add test.
To close #1053
2016-11-16 22:46:01 +00:00
Dave Conway-Jones
d042169f2e Let credentials also use $(...) substitutions from ENV
to close #1051
(and add to test)
2016-11-16 21:47:13 +00:00
Nick O'Leary
1fd87bf664 Improve debug message meta data contrast and legibility 2016-11-16 15:05:04 +00:00
Nick O'Leary
eeaff6b553 Add insert-function button to expression editor 2016-11-16 14:54:51 +00:00
Nick O'Leary
6efd048fd6 Rename insecureRedirect to requireHttps 2016-11-16 14:24:27 +00:00
Paul Slater
6e9e694f66 Add setting to cause insecure redirect (#1054)
* add support for editor insecure redirect setting

set insecureRedirect: true to cause the editor app to redirect insecure connections

* document insecureRedirect

* use req.originalUrl instead of req.url

url has the path removed, whereas originalUrl preserves the path - ie /red
2016-11-16 14:17:47 +00:00
telogis-nodered
44a0f1b505 Palette editor fixes (#1033)
* ensure remove button is only enabled for local modules when refreshing palette editor

* ensure local field is propagated to the nodes when a new module is added to the registry
2016-11-16 14:12:31 +00:00
Monkey Do
9790211891 Close comms on stopServer in test helper (#1020)
* Close comms on stopServer in test helper

Using this file in another project to test nodes, when running tests with gulp and karma the process never ends as comms are still open.
This resolves the problem.

* Moved test helper server on close to stopServer method
2016-11-16 14:09:04 +00:00
Adam Hořčica
be18cc9f2d Add support for flow and global context in Template node (#1048)
* Enable tests for flow and global context

* Add support for flow and global context in Template node

* Handle missing node context
2016-11-16 14:08:14 +00:00
Nick O'Leary
8caee09ea4 Preserve newlines in jsonata expression via tabs 2016-11-16 13:44:45 +00:00
Nick O'Leary
26f5305593 Add jsonata function help 2016-11-15 23:22:25 +00:00
Nick O'Leary
d33029027f Add expression editor for jsonata 2016-11-15 00:19:04 +00:00
Dave Conway-Jones
339aaaec57 Tcpgetfix (#1050)
* TCPget: Store incoming messages alongside the client object to keep reference
2016-11-14 20:20:27 +00:00
Dave Conway-Jones
db2425c473 Seperated info messages to their own file
auto detect size still needs work
2016-11-14 19:10:02 +00:00
Nathanaël Lécaudé
18731f6055 TCPget: Store incoming messages alongside the client object to keep reference 2016-11-14 13:30:43 -05:00
Nathanaël Lécaudé
34f1f7a31d Merge remote-tracking branch 'upstream/master' into tcpgetfix 2016-11-14 08:09:44 -05:00
Nathanaël Lécaudé
7ef153756b TCPget can now handle concurrent sessions (#1042)
* First release of multi connection tcpget

* Works when connection is left open

* Change scope of clients object

* Fix comparison to "" in tcpin

* Add security checks

* Better scope handling
2016-11-11 09:01:22 +00:00
Nick O'Leary
bf90509526 Add jsonata support to Change/Switch nodes 2016-11-10 23:58:34 +00:00
Nathanaël Lécaudé
d853eca489 Better scope handling 2016-11-10 17:35:44 -05:00
Nathanaël Lécaudé
869ae01da9 Add security checks 2016-11-10 16:45:01 -05:00
Dave Conway-Jones
d63996eea1 slight tidy of YAML PR (remove excess console.log in test)
and improve XML test coverage slightly
2016-11-10 21:29:07 +00:00
Nathanaël Lécaudé
9bbc8eda9d Added YAML parser node (#1034)
Thanks @natcl -
(sorry pressed closed by mistake !)
* Added YAML parser node

* Added YAML error strings in messages.json

* Change location of YAML library import

* Remove copyright

* Remove copyright

* Change order of yaml in Template node

* Add YAML test

* Add working test
2016-11-10 21:22:05 +00:00
Dave Conway-Jones
9cc1b03c56 small change to udp httpadmin
as it refers to both in and pout
2016-11-10 20:19:55 +00:00
Dave Conway-Jones
b1ab26e3ad update Font Awesome to 4.7.0 2016-11-10 20:15:06 +00:00
Nathanaël Lécaudé
96820418b5 Fix comparison to "" in tcpin 2016-11-10 11:17:27 -05:00
Nathanaël Lécaudé
385d9f16e9 Change scope of clients object 2016-11-09 22:33:55 -05:00
Nathanaël Lécaudé
d56fce37dd Works when connection is left open 2016-11-09 13:25:19 -05:00
Nathanaël Lécaudé
aef2c9e5cf First release of multi connection tcpget 2016-11-09 10:15:23 -05:00
Nick O'Leary
89a05c580f Handle drag whilst quick-add dialog open 2016-11-09 13:25:55 +00:00
Nick O'Leary
b85e562980 Combine quick-add and quick-join actions 2016-11-09 13:17:26 +00:00
Nick O'Leary
a0e6628757 Tweak search box styling 2016-11-08 21:18:34 +00:00
Nick O'Leary
60a41524f0 editableList delete button click event not cancelled 2016-11-08 17:01:21 +00:00
Nick O'Leary
6042395b81 Allow a node to reorder its outputs and maintain links
Fixes #1031
2016-11-08 17:00:47 +00:00
Nick O'Leary
8a5db8ce4b Handle explicitly set input widths on typedInput 2016-11-08 13:36:32 +00:00
Nick O'Leary
196d6e79e2 Don't pin change node input widths 2016-11-08 13:29:01 +00:00
Nick O'Leary
91f16215e5 Make typedInput keyboard navigable 2016-11-08 13:18:28 +00:00
Nick O'Leary
9c675a7847 Focus tray body when edit dialog opened 2016-11-08 09:58:20 +00:00
Nick O'Leary
f9e09e87d6 Hit enter to edit first node in selection 2016-11-07 21:51:03 +00:00
Nick O'Leary
73574d6293 Add quick-add node mode with cmd/ctrl-click 2016-11-07 21:25:09 +00:00
Ben Hardill
0a5a42b32a Fix node.error() not printing when passed false (#1037)
This should fix #1036
2016-11-07 18:28:35 +00:00
Nick O'Leary
de225205bd Fix safari/firefox detection of Meta key up 2016-11-06 00:24:01 +00:00
Nick O'Leary
8a47d36480 Add cmd/ctrl-click to quick add wires 2016-11-06 00:14:07 +00:00
Dave Conway-Jones
d5f3ba8d8a remove unnecessary require from JSON node 2016-11-04 19:55:02 +00:00
Nick O'Leary
782a06ce84 Tweak node info table colours 2016-11-04 14:30:41 +00:00
Nick O'Leary
5cdafc50fb Add node delete button to edit dialog 2016-11-04 14:29:04 +00:00
Nick O'Leary
0ca3cdb9ae tab-info node properties use RED.utils.createObjectElement 2016-11-03 14:34:38 +00:00
Nick O'Leary
a1d6cbd5fd Only expand strings that contain tabs/newlines 2016-11-03 14:34:38 +00:00
Nick O'Leary
6c36778cac Move debug message utils into core 2016-11-03 14:34:38 +00:00
Nick O'Leary
1c3a97a71a Make red.min.js a reusable library 2016-11-03 14:34:37 +00:00
Nick O'Leary
3489fe0cf4 Better toggling between raw/string views of buffers 2016-11-03 14:34:37 +00:00
Nick O'Leary
74b6d9dff9 Provide string view of buffers in debug messages 2016-11-03 14:34:37 +00:00
Nick O'Leary
06ee9aa05c Make strings expandable in debug 2016-11-03 14:34:37 +00:00
Nick O'Leary
f0f40a8606 Restore object keys values in debug sidebar 2016-11-03 14:34:37 +00:00
Nick O'Leary
1f2c9879bd Handle big arrays/buffers better in debug sidebar 2016-11-03 14:34:37 +00:00
Nick O'Leary
d1eb82bdf6 Show newlines/tabs in debug output 2016-11-03 14:34:37 +00:00
Nick O'Leary
8167f623e3 Update debug_spec for format changes 2016-11-03 14:34:37 +00:00
Nick O'Leary
9555e296a2 Close debug window when main window unloads 2016-11-03 14:34:37 +00:00
Nick O'Leary
f460283fa1 Full event passing between debug window and main window 2016-11-03 14:34:37 +00:00
Nick O'Leary
79da8e5a37 Move all common debug list code to its own library 2016-11-03 14:34:37 +00:00
Nick O'Leary
a35ce22218 Make debug message node id clickable 2016-11-03 14:34:36 +00:00
Nick O'Leary
1c905da8c2 Handle long strings in debug 2016-11-03 14:34:36 +00:00
Nick O'Leary
2b558768f1 Add debug filter box 2016-11-03 14:34:36 +00:00
Nick O'Leary
7607c4c882 Make inbuilt debug messages navigable 2016-11-03 14:34:36 +00:00
Nick O'Leary
c9f4813ce1 Fix debug path 2016-11-03 14:34:36 +00:00
Nick O'Leary
0428e27039 Improved type styling 2016-11-03 14:34:36 +00:00
Nick O'Leary
e30da2168d Make Debug object explorable 2016-11-03 14:34:36 +00:00
Nick O'Leary
0cd20768f4 Style the debug window to match the sidebar 2016-11-03 14:34:36 +00:00
Nick O'Leary
ab31f34862 Initial debug pop-out window 2016-11-03 14:34:36 +00:00
Dave Conway-Jones
9a4ff5cb43 fix test for CSV array input 2016-11-03 08:56:38 +00:00
Dave Conway-Jones
f66c91e18e different test for Pi (rather than use serial port name) 2016-11-03 08:56:18 +00:00
Dave Conway-Jones
a235745be7 Fix missing 0 handling for css node with array input 2016-11-02 15:49:51 +00:00
Nick O'Leary
9516da01e3 0.15.2 changelog 2016-10-28 08:48:10 +01:00
Nick O'Leary
7657bd2375 Bump 0.15.2 2016-10-28 08:43:21 +01:00
Nick O'Leary
0adcea9e7c Revert bidi changes to nodes and hide menu option until fixed
Fixes #1024
2016-10-28 08:37:33 +01:00
Dave Conway-Jones
aa8ad60083 Let xml node set options both ways
to close #1022  to close #975
Thanks @martin-doyle and @nikhildx
2016-10-26 22:06:35 +01:00
Dave Conway-Jones
5d98a86a6b bump serialport to use version 4
(precompiled versions more available)
2016-10-25 21:42:27 +01:00
Dave Conway-Jones
4418fdaed6 gpio node handle multiple bits of data returned in one go 2016-10-25 21:42:27 +01:00
Nick O'Leary
c58c45c917 HTTP In should pass application/octet-stream as buffer not string
Fixes #1023
2016-10-25 21:19:49 +01:00
Dave Conway-Jones
45eba5cabd tidy up udp node - repeat setting of var 2016-10-25 20:40:11 +01:00
Nick O'Leary
3ab0d0d865 Handle missing httpNodeRoot setting properly 2016-10-21 13:50:47 +01:00
Nick O'Leary
a6803081ab Config sidebar not handling node definition error properly 2016-10-21 13:47:54 +01:00
Nick O'Leary
8debed805b Add minimum show time to deploy spinner to avoid flicker 2016-10-21 12:59:55 +01:00
Nick O'Leary
fc9835512d Add work-in-progress update button to palette-editor 2016-10-21 10:29:26 +01:00
Nick O'Leary
5f0cab8cc2 Add log.removeHandler function 2016-10-20 23:31:40 +01:00
Nick O'Leary
bd391963bc Add Crtl/Shift/p shortcut for manage palette 2016-10-20 14:01:37 +01:00
Nick O'Leary
97fa28fb10 Add spinner to deploy button 2016-10-20 13:11:12 +01:00
Nick O'Leary
67d5b39c96 Status messages from nodes in subflows not delegated properly
Fixes #1016
2016-10-19 21:06:45 +01:00
Dave Conway-Jones
dbceef2581 fix spelling in join node info
Manual fix for #1014
Thanks @rogovski
2016-10-17 21:40:12 +01:00
Nick O'Leary
5b22ccfca6 Speed up tab scrolling 2016-10-15 20:58:27 +01:00
Nick O'Leary
714c254bab Update delay burst test to be more tolerant of timing
Fixes #1013
2016-10-14 22:35:43 +01:00
Nick O'Leary
90f4db9158 Bump 0.15.1 2016-10-13 19:53:43 +01:00
Nick O'Leary
eed470ddae Update default palette catalogue to use https 2016-10-13 16:22:25 +01:00
Nick O'Leary
49f72881f4 Disable palette editor if npm not found 2016-10-12 22:30:32 +01:00
Nick O'Leary
a76674032d Searching package catalogue should be case-insensitive
Fixes #1010
2016-10-12 20:08:08 +01:00
Nick O'Leary
ec392a7f9a contenteditable fields not handled in config nodes
Fixes #1011
2016-10-12 19:56:12 +01:00
Dave Conway-Jones
8a2ae6c480 Change html link refs from _new to _blank to be standards compliant 2016-10-12 17:53:27 +01:00
Nick O'Leary
b3796a8e24 Fix unit tests for /flows 2016-10-12 10:33:51 +01:00
Nick O'Leary
b9144ff987 Bump version 0.15.0 2016-10-12 10:27:08 +01:00
Nick O'Leary
5344949c71 Tidy up /flows api responses 2016-10-12 10:24:10 +01:00
Nick O'Leary
05cbba9a35 Exporting current flow not formatting tab node correctly 2016-10-11 21:34:52 +01:00
Nick O'Leary
325c6135cf Defeat the exec node test dragons 2016-10-11 20:31:42 +01:00
Dave Conway-Jones
fdea19a45b leave Pi GPIO pins in a sensible state on error 2016-10-11 15:37:34 +01:00
Nick O'Leary
fad63c0c18 Fix tab_config revealing unused config nodes 2016-10-11 15:06:34 +01:00
Nick O'Leary
f002560616 Exec node spawn mode should clone messages it reuses 2016-10-11 14:49:48 +01:00
Nick O'Leary
8e7d52e645 Avoid reencyrpting credentials if they haven't changed 2016-10-11 14:27:35 +01:00
Nick O'Leary
d119594cbf Tidy up exec node clean-up to remove failure-causing timing window 2016-10-11 13:25:19 +01:00
Nick O'Leary
84f7da6e93 Fix null checking in exec node test 2016-10-11 11:16:10 +01:00
Nick O'Leary
22e1bafe1b Fix exec test on node 0.10 2016-10-11 10:53:50 +01:00
Nick O'Leary
3f8e42e510 update changelog 2016-10-11 10:28:16 +01:00
Dave Conway-Jones
9704fb04d9 inject node label - show topic for timestamp mode if short 2016-10-11 09:27:02 +01:00
Nick O'Leary
dcfaf1e2b9 Update changelog 2016-10-11 00:17:06 +01:00
Nick O'Leary
42f7dc1947 Fix type checking in unit tests 2016-10-10 13:27:43 +01:00
Nick O'Leary
eb1a597456 Add npm build/test scripts
Closes #946 #660
2016-10-10 11:49:38 +01:00
Dave Conway-Jones
8368815db5 extra change tests for partial and complete match
to close #934
2016-10-10 11:48:52 +01:00
Nick O'Leary
9c6295d0d8 Lighten shade color in editor 2016-10-10 11:42:36 +01:00
Dave Conway-Jones
4d19f881e9 Let change node set type if total match
remove unnecessary 2 step move when not required.
add test for moving sub property up to main property
2016-10-10 11:10:36 +01:00
Dave Conway-Jones
3a8820397b clean up status on close for several core nodes. 2016-10-10 11:08:06 +01:00
Nick O'Leary
85b1c1fe97 Increase default apiMaxLength to 5mb and add to default settings
Closes #1001
2016-10-10 10:14:08 +01:00
Nick O'Leary
a4de9e94dd Update dependency versions 2016-10-10 10:02:41 +01:00
Nick O'Leary
0dd2c7fe24 Change node: reparse JSON set value each time to avoid pass-by-ref 2016-10-09 23:14:52 +01:00
Nick O'Leary
f22c3b549e Merge branch '0.15.0' 2016-10-09 23:00:28 +01:00
Nick O'Leary
3c60b3d2c9 Prevent search box opening when other modals are open 2016-10-09 22:54:47 +01:00
Nick O'Leary
f2d36b84b5 Don't hide install button on already-installed node modules 2016-10-09 22:23:47 +01:00
Nick O'Leary
9af08ef26a Update test helper for new flow api 2016-10-09 22:22:13 +01:00
Nick O'Leary
b4be1184fd Add v2 /flows api and deploy-overwrite protection 2016-10-09 22:02:40 +01:00
Nick O'Leary
c60e0d389c Mark nodes as changed when they are moved 2016-10-09 22:02:40 +01:00
Dave Conway-Jones
d658fe7709 move travis to node 6 and 7 - drop 5 and 0.12
move serialport  to 0.3.0 version
2016-10-06 13:31:59 +01:00
TJKoury
54036a2b4d Added parent containment option for draggable. (#1006)
* added parent containment option for draggable

* taking Nick's suggestion, #main-container it is
2016-10-02 22:45:49 +01:00
Dave Conway-Jones
2da9572a45 Better handle httprequest header capitalisation 2016-10-02 17:44:48 +01:00
Nick O'Leary
306825aa90 Enable es6 parsing in Function editor by default
Fixes #985
2016-09-30 23:51:27 +01:00
Nick O'Leary
c797073c05 Ignore bidi event handling on non-existent and non-Input elements
Closes #999
2016-09-30 23:35:05 +01:00
Nick O'Leary
d9d65d59d1 Fix timing window when scrolling search box results 2016-09-30 23:34:44 +01:00
Nick O'Leary
aad29e4487 Remove list of flows from menu 2016-09-30 23:34:26 +01:00
Nick O'Leary
b00985f99f Replace palette-edit button with menu option 2016-09-30 20:33:27 +01:00
Nick O'Leary
538a16a5fb Allow nodes to be imported with their credentials 2016-09-30 14:15:04 +01:00
Nick O'Leary
300a8d3a89 Click to close search box 2016-09-30 13:27:53 +01:00
Nick O'Leary
e3b7c5fce7 Add 'no matches' message to package search results 2016-09-30 11:19:47 +01:00
Nick O'Leary
2e87ebe800 Fix editableList sizing on safari 2016-09-30 10:46:13 +01:00
Nick O'Leary
7ed9e7cdd4 Update debug sidebar to use RED.view.reveal to show debug nodes 2016-09-29 23:49:58 +01:00
Nick O'Leary
7ff9c2885d Fix scrollable tab buttons changing location hash 2016-09-29 23:46:55 +01:00
Nick O'Leary
18c8bbb0fc Add workspace search option 2016-09-29 23:46:29 +01:00
Nick O'Leary
9a49fb9450 Add escape-to-clear to searchBox and other css fixes 2016-09-29 23:45:25 +01:00
Nick O'Leary
84457bc7b4 Add scrollOnAdd option to editableList 2016-09-29 23:44:49 +01:00
Dave Conway-Jones
15f1e2c85c Add swift markup to editor for open whisk node 2016-09-27 22:04:13 +01:00
Nick O'Leary
15e828e975 Adjust dragging tabs when partially scrolled 2016-09-27 00:05:43 +01:00
Nick O'Leary
e4626ee52b Scrollable tabs 👍 2016-09-26 22:56:28 +01:00
Nick O'Leary
1866c9c7ef Allow linking to individual flow via url hash 2016-09-24 22:57:41 +01:00
Nick O'Leary
a0f91aa814 Avoid duplicating existing subflows on import 2016-09-24 22:20:28 +01:00
Dave Conway-Jones
a89c7b1a70 Add full path tip to file node, And tidy up Pi node tips 2016-09-23 23:37:56 +01:00
Dave Conway-Jones
ded1376957 remove websocket node maxlistener warning 2016-09-23 23:36:58 +01:00
Nick O'Leary
252040f03b Add import-to-new-tab option 2016-09-23 22:02:12 +01:00
Nick O'Leary
d29abc2724 Encrypt credentials by default 2016-09-23 10:38:30 +01:00
Nick O'Leary
44c35d2644 Update test node helper module for storage api changes 2016-09-21 22:22:04 +01:00
Nick O'Leary
f9b972349d Move credential load/save storage functions under get/setFlows 2016-09-21 21:58:50 +01:00
Nick O'Leary
e06cadd761 Pass full runtime object to storage and flow sub-components 2016-09-21 10:22:04 +01:00
Nick O'Leary
ee45d6b48f Fix contenteditable div unfocused css 2016-09-20 10:10:28 +01:00
Nick O'Leary
d915b280d4 Add new options to export-nodes dialog 2016-09-19 13:54:23 +01:00
Nick O'Leary
39d90fe881 Update mqtt-broker node to use fully name-space qualified status messages 2016-09-19 09:36:38 +01:00
wajnberg
b9da1f18b4 Fixing issue 989 (#997)
* Fixing issue 989

Signed-off-by: Moshe Wajnberg <wajnberg@il.ibm.com>

* Fixing the getRangeAt problem on Chrome

Signed-off-by: Moshe Wajnberg <wajnberg@il.ibm.com>

* Fixing the getRangeAt problem on Chrome

Signed-off-by: Moshe Wajnberg <wajnberg@il.ibm.com>
2016-09-18 21:20:50 +01:00
Dave Conway-Jones
69a0934173 Merge pull request #996 from Belphemur/delay-migration
Fix migration of Delay Node
2016-09-17 15:54:27 +01:00
Antoine Aflalo
289de85754 Fix the check for nbRateUnits 2016-09-17 10:38:30 -04:00
Dave Conway-Jones
0ec95041d9 another tiny nudge for code tag 2016-09-17 15:29:54 +01:00
Dave Conway-Jones
fcb6f78d54 give <code> tag slightly more bottom space 2016-09-17 14:06:01 +01:00
Dave Conway-Jones
29e9740668 Let UDP node better share same port instance if required 2016-09-17 14:05:26 +01:00
Antoine Aflalo
ea8c6d5cce Add number of units to the delay node (rate) (#994)
* Add possibility to set the value for the rate unit

Backward compatible, if the new nbRateUnits is not set, default to 1.
This way we can delay messages to 1 msg per X seconds/minutes/hours days
instead of always 1.
Useful when interacting with API that have a uncommon rate limiting like
1req per 2 seconds.

* Fix existing testing for delay

* Add new test for the nbRateUnits

* Fix label for timed and topic for delay node

* Schrink width of Units delay rate

* pluralisation of labels

* Dynamic pluralisation respecting i18n

* Remove debug data left
2016-09-16 14:27:14 +01:00
Alice Ferrazzi
e4c951984a typo fix (#990)
typo fix in mqtt broker help text
2016-09-14 23:13:08 +01:00
Dave Conway-Jones
0071afb205 update registry loader test to normalise path for windows
Thanks shrikes
2016-09-13 22:57:20 +01:00
Nick O'Leary
d3c7ac75be Set switch node rule input widths properly 2016-09-08 21:12:39 +01:00
Nick O'Leary
55d7420abf Remove tabs 2016-09-08 20:49:44 +01:00
wajnberg
489b56456f Completing STT support (#976)
* Completing STT support

Signed-off-by: Moshe Wajnberg <wajnberg@il.ibm.com>

* Adressing Nick comments

Signed-off-by: Moshe Wajnberg <wajnberg@il.ibm.com>
2016-09-08 20:46:30 +01:00
Nick O'Leary
1f24fcb364 Ensure errors thrown by RED.events handlers don't percolate up 2016-09-05 23:09:33 +01:00
Nick O'Leary
722b31edee Safely ignore subflow instance nodes in palette editor 2016-09-02 20:31:24 +01:00
Dave Conway-Jones
765f0393b0 Add test for change node ,move to sub-property 2016-08-28 12:09:37 +01:00
Dave Conway-Jones
6868ef044b Allow http middleware to skip rawBodyParser 2016-08-28 12:02:34 +01:00
Dave Conway-Jones
5dd0622e40 Let change node move property to sub-property. 2016-08-28 12:02:34 +01:00
Dave Conway-Jones
48bdab1dcf Add info to exec warning about buffered output if using python 2016-08-28 12:02:34 +01:00
Nick O'Leary
aee483e9f1 Stop nodes being added beyond the outer bounds of the workspace 2016-08-26 16:22:06 +01:00
Nick O'Leary
8542b9bf67 Fix splice handling when a subflow input/output node is selected 2016-08-26 13:34:29 +01:00
Nick O'Leary
feaf6f2501 Remove console.log from bidi 2016-08-26 13:27:19 +01:00
Nick O'Leary
d7d30aa972 Default config nodes to global scope unless in a subflow
Closes #972
2016-08-26 13:26:42 +01:00
Nick O'Leary
91c23d1f7d Fix palette-editor handling of subflows 2016-08-26 13:21:33 +01:00
Nick O'Leary
57479edc59 Merge branch 'palette-ui' into 0.15.0 2016-08-26 13:01:03 +01:00
Nick O'Leary
4b462eaae9 Move initInputEvents to prepareInput 2016-08-26 12:50:18 +01:00
Nick O'Leary
c60fb3bc25 Move setting text direction into bidi module 2016-08-26 00:40:01 +01:00
Nick O'Leary
b17c34402d Fix some more tabs/spaces in bidi work 2016-08-26 00:28:22 +01:00
Nick O'Leary
6ad71bd222 Move bidi code under RED.text 2016-08-25 17:09:56 +01:00
wajnberg
ccc08be0ee Bidi support for Text Direction and Structured Text (#961)
* Bidi support for Text Direction and Structured Text

Signed-off-by: Moshe Wajnberg <wajnberg@il.ibm.com>

* Adding documentation for functions in bidi.js and format.js

Signed-off-by: Moshe Wajnberg <wajnberg@il.ibm.com>

* Removing unused functions from format.js

Signed-off-by: Moshe Wajnberg <wajnberg@il.ibm.com>
2016-08-25 16:47:30 +01:00
telogis-nodered
2a2fc80931 Fix jquery selector, selecting more than one help pane/popover and displaying incorrectly. (#970) 2016-08-25 10:44:23 +01:00
James Thomas
9ebca91775 Fixes removeItem not passing row data to callback. (#965)
Call to .data('data') was happening after the remove() call, which
deletes the retained data. This was passing undefined back to the
callback for removeItem.

I've changed the data retrieval to a temporary variable before the
delete call.
2016-08-21 23:05:53 +01:00
Dave Conway-Jones
456fc23463 update README link to IBM ETS blog page 2016-08-18 13:50:46 +01:00
Nick O'Leary
eb17562f4d NLS the palette editor 2016-08-14 23:08:37 +01:00
Nick O'Leary
b7dbfd5cfc Only reload catalogue when requested 2016-08-13 00:33:41 +01:00
Nick O'Leary
cdc7ab562a Add sort options to palette-editor search 2016-08-12 23:00:28 +01:00
Nick O'Leary
e6b5552cba Add some more error handlers for custom node label functions
Closes #956
2016-08-11 14:49:22 +01:00
Nick O'Leary
eecf92183f Update to new catalogue format 2016-08-10 21:59:31 +01:00
Nick O'Leary
11656382a7 Allow palette-editor to be disabled via editorTheme 2016-08-10 20:15:17 +01:00
Nick O'Leary
e4d788ad0b Add install tab to palette-editor 2016-08-09 10:43:03 +01:00
Nick O'Leary
3017442702 Move common components and add searchBox 2016-08-09 10:41:26 +01:00
Nick O'Leary
ba37db275c Add node filter to palette-editor 2016-08-05 16:39:41 +01:00
Nick O'Leary
521e669879 Enable palette-editor remove buttons 2016-08-05 13:39:14 +01:00
Nick O'Leary
12e302c10a Collapse palette modules when palette-editor closed 2016-08-04 22:28:56 +01:00
Nick O'Leary
7220af3ef0 Move palette editor to left hand side 2016-08-04 16:49:36 +01:00
Dave Conway-Jones
42f4e0fa86 TCP node: pass on latest input msg properties
to close #944
2016-08-04 15:49:38 +01:00
Dave Conway-Jones
022d066fe0 Make sure MQTT broker is really set
To close #951
2016-08-04 10:02:27 +01:00
Dave Conway-Jones
4c9d7cbeed Merge pull request #955 from natcl/master
Fix escapce character catch in TCPGet + support 0x?? sequences
2016-08-02 20:15:31 +01:00
Nathanaël Lécaudé
1541e382e4 Fix escapce character catch in TCPGet + support 0x?? sequences 2016-08-02 12:32:49 -04:00
Dave Conway-Jones
1d9488d24f Merge pull request #954 from natcl/master
Fix split character in TCP Request node
2016-08-02 16:26:37 +01:00
Nathanaël Lécaudé
6cbc1afb9b Fix split character in TCP Request node 2016-08-02 11:09:41 -04:00
Nathanaël Lécaudé
3f86b660ed Add CSS hilighting to the template node (#950)
This can be useful when using the template node to create frontends, see this post:
https://groups.google.com/d/msg/node-red/q4DKaX87Ano/Xa1mLpOdAwAJ

Thanks !
2016-08-01 22:32:02 +01:00
Dave Conway-Jones
4603f2d9ca only update switch Prev value after all rules are run 2016-08-01 12:31:35 +01:00
Nick O'Leary
da818cf420 Add initial palette sidebar 2016-07-29 12:52:00 +01:00
Nick O'Leary
86a2ed652d Update changelog 2016-07-29 10:44:52 +01:00
Nick O'Leary
269761f222 Bump version/changelog 2016-07-29 10:43:53 +01:00
Dave Conway-Jones
53ca3046b3 Add RPi.GPIO lib test for ArchLinux 2016-07-28 18:20:18 +01:00
Nick O'Leary
f484156d8e Tell ace about Function node globals
Closes #927
2016-07-28 17:14:55 +01:00
Nick O'Leary
1da8712a4a Update ace to 1.2.4 2016-07-28 17:14:38 +01:00
Nick O'Leary
dd47eba88c Add proper help text to link nodes 2016-07-28 15:58:00 +01:00
Nick O'Leary
0ade8ff7a2 Add log warning if node module required version cannot be satisfied 2016-07-28 15:43:26 +01:00
Nick O'Leary
6a528b5fdb Allow config nodes to provide a sort function for their select list 2016-07-28 13:27:34 +01:00
Nick O'Leary
7f63ddc9ea Handle importing old mqtt-broker configs that lack properties 2016-07-27 23:05:48 +01:00
Nick O'Leary
d6b326c134 Handle empty credentials file
Closes #937
2016-07-26 22:23:49 +01:00
Nick O'Leary
d944298dd7 Tidy up mqtt nodes - linting and done handling
Closes #935
2016-07-26 21:33:00 +01:00
Nick O'Leary
0136ebd2b4 Fix invalid html in TCP and HTML node edit templates 2016-07-26 16:19:27 +01:00
Nick O'Leary
45f8def1ed Bump version + change log 2016-07-23 22:59:56 +01:00
Nick O'Leary
7c6e8eeefc Cannot clear cookies with http nodes 2016-07-23 22:41:37 +01:00
Dave Conway-Jones
e81e48cde3 Fix html parse node test 2016-07-20 20:58:52 +01:00
Dave Conway-Jones
8eebb6ea2d let HTML parse node allow msg.select set select
to close #943
2016-07-20 20:08:50 +01:00
Nick O'Leary
ad8290ebcb Validate nodes on import after any references have been remapped 2016-07-20 11:30:49 +01:00
Nick O'Leary
15b6f6268b Debug node handles objects without constructor property
Fixes #933
2016-07-15 22:41:35 +01:00
Nick O'Leary
92d5af7446 Ensure 'false' property values are displayed in info panel
Fixes #940
2016-07-15 22:33:17 +01:00
Nick O'Leary
d57425a15e Fix node enable/disable over restart - load configs after settings init 2016-07-15 00:11:28 +01:00
Nick O'Leary
a457c06500 Bump version 2016-07-06 23:22:26 +01:00
Nick O'Leary
906bbae899 Update CHANGELOG 2016-07-06 21:35:06 +01:00
Dave Conway-Jones
e360e57a5b Fix node.status to check hasOwnProperty("text") 2016-07-06 17:22:45 +01:00
Nick O'Leary
c5753a013c Handle DOMException when embedded in an iframe of different origin
Fixes #932
2016-07-06 13:28:51 +01:00
Nick O'Leary
691b083364 Update trigger node ui to use typedInputs 2016-07-05 15:39:00 +01:00
Dave Conway-Jones
b74a35b9d1 add extra test for CSV with odd quotes 2016-07-05 11:51:08 +01:00
Dave Conway-Jones
82269462a4 Fixed better handling of odd quotes in CSV node
(and a better commit message)
2016-07-05 11:31:25 +01:00
Dave Conway-Jones
d7943aab28 better handling of snatched quotes in css parser 2016-07-05 11:03:11 +01:00
Nick O'Leary
446eb8e978 Fix double firing of menu actions 2016-07-05 09:16:27 +01:00
Nick O'Leary
d91a99c833 Clarify the MQTT node sends msg.payload
Closes #929
2016-07-04 11:29:43 +01:00
Nick O'Leary
dc00870461 Fix select box handling in Safari
Fixes #928
2016-07-04 11:22:30 +01:00
Dave Conway-Jones
b8f578862e Add sql mode to ace editor 2016-07-04 09:58:03 +01:00
Jesse Naranjo
dc24c05229 Keyboard shortcuts dialog update (#923)
* Added Ctrl+Z to the Keyboard Shortcuts dialog.

* Added Arrow Keys and Shift + Arrow Keys shortcuts to the Keyboard Shortcuts dialog.

* Added the [Backspace] key to the Keyboard Shortcuts dialog.
2016-07-03 23:10:51 +01:00
Nick O'Leary
f62cf6818b Clear context in node test helper
Fixes #858
2016-07-03 23:08:53 +01:00
Nick O'Leary
c05e9da9c5 Allow node properties to be same as existing object functions
Fixes #880
2016-07-03 23:00:48 +01:00
Nick O'Leary
6c00194d35 Handle comms link closely whilst completing the initial connect 2016-06-30 00:44:06 +01:00
Nick O'Leary
6bc3f82afe Protect against node type names that clash with Object property names
Fixes #917
2016-06-30 00:38:48 +01:00
Nick O'Leary
12e46deea2 Ensure importing link nodes to a subflow doesn't add outbound links
Fixes #921
2016-06-29 23:51:08 +01:00
Nick O'Leary
8608d010b8 Clone default node properties to avoid reference leakage 2016-06-29 22:53:14 +01:00
Nick O'Leary
9d4d1acf2d Strip tab node definition when exporting 2016-06-29 21:58:14 +01:00
Nick O'Leary
23087447f1 Check for null config properties in editor before overwritting them 2016-06-29 21:32:39 +01:00
Nick O'Leary
3008e4e60f Add hasUsers flag to config nodes 2016-06-29 21:07:45 +01:00
Nick O'Leary
9d52ed5ff6 Add updateConfigNodeUsers function to editor 2016-06-28 14:57:48 +01:00
Nick O'Leary
5f047633c3 Scroll to bottom when item added to editableList 2016-06-28 10:56:03 +01:00
Nick O'Leary
d3be1f1e2c Fix lint error 2016-06-26 23:55:04 +01:00
Nick O'Leary
c3b1cf7c35 Form input widths behave more consistently when resizing
Fixes #919 #920
2016-06-26 23:48:59 +01:00
Nick O'Leary
682345da22 Inject node should reuse the message it is triggered with
Closes #914
2016-06-25 21:44:10 +01:00
Dave Conway-Jones
82f289c42e (un)Fix inject payload width field
to close #919
2016-06-25 15:53:03 +01:00
Dave Conway-Jones
78eae99bd4 Stop trigger node re-using old message…
to Close #916
Thanks @jimbojw
2016-06-25 10:44:44 +01:00
Nick O'Leary
9ec7bb8d41 bump version 2016-06-20 21:38:09 +01:00
Nick O'Leary
2b9bfbc309 MQTT In subscription qos not defaulting properly 2016-06-20 21:35:43 +01:00
Dave Conway-Jones
e50d04077b Let exec node handle 0 as well as "0" 2016-06-20 19:28:59 +01:00
Nick O'Leary
b6fcaacb77 Create default settings.js in the user-specified directory
Fixes #908
2016-06-20 14:41:47 +01:00
Nick O'Leary
939da4e551 bump version 2016-06-20 14:27:28 +01:00
Nick O'Leary
f30ce1f9eb Cannot add twitter credentials
Fixes #913
2016-06-20 14:25:11 +01:00
Nick O'Leary
343588b2a0 Support array references in Debug property field 2016-06-20 10:19:18 +01:00
Nick O'Leary
77b13ce9d4 Bump version & changelog 2016-06-20 09:56:29 +01:00
Nick O'Leary
7cb41d2ca9 Remove duplicate "Delete" entry in keyboard shortcut window
Fixes #911
2016-06-20 09:56:01 +01:00
Nicholas Humfrey
8bbc9e6502 Added 'exec' to the command in the node-red-pi script (#910) 2016-06-20 09:53:57 +01:00
Nick O'Leary
e29a0df3fd Handle undefined node properties when mapping array references 2016-06-20 09:38:16 +01:00
Nick O'Leary
0eba04aac0 Change example httpStatic to avoid node-red-dashboard clash 2016-06-19 20:25:31 +01:00
Nick O'Leary
b78210e3be Handle numberic msg.payload in HTTP Response node 2016-06-17 22:08:58 +01:00
Nick O'Leary
958de21be8 Update changelog 2016-06-17 21:44:06 +01:00
Nick O'Leary
0eb4742982 Update minor dependency versions and bump version 2016-06-17 21:42:17 +01:00
Nick O'Leary
78b1bf8f25 Merge branch '0.14.0' 2016-06-17 21:30:09 +01:00
Nick O'Leary
08f2741871 Ensure default settings copied to command-line specified userDir
Fixes #908
2016-06-17 21:16:31 +01:00
Dave Conway-Jones
98b24ae630 Merge pull request #798 from natcl/master
Add pinned tab icon for Safari
2016-06-17 14:24:36 +01:00
Dave Conway-Jones
7fc056c8e3 remove extraneous udp console.log
and two tiny whitespace changes
2016-06-17 08:18:26 +01:00
Nick O'Leary
0411623857 Update change log 2016-06-16 00:09:32 +01:00
Nick O'Leary
365d71264f Add index to editableList callback signature 2016-06-16 00:09:32 +01:00
Nick O'Leary
0d4d51fc39 Pass type/value on typedInput.change event 2016-06-16 00:09:32 +01:00
Nick O'Leary
b21745808b Don't mark 'edit subflow template' as primary button 2016-06-16 00:09:32 +01:00
Dave Conway-Jones
e4d5271d58 Better fix for css, reverting test 2016-06-14 23:55:50 +01:00
Dave Conway-Jones
8f2f3bf75d Fix CSV test 2016-06-14 23:20:09 +01:00
Dave Conway-Jones
9e96eba98f fix csv handling of "numbers" with E in... 2016-06-14 22:36:44 +01:00
Nick O'Leary
0441c83fd7 Fix use of hasOwnProperty in Flow
Closes #907
2016-06-14 20:30:37 +01:00
Nick O'Leary
d8405052d8 Dont hover disabled editor primary buttons 2016-06-14 14:38:52 +01:00
Nick O'Leary
cc02b07ff0 Improve edit tray button colour contrast 2016-06-14 14:28:25 +01:00
Nick O'Leary
2d6aac7d6f Update changelog 2016-06-13 22:36:47 +01:00
Nick O'Leary
589d43f0e5 Add RED.util to Function node sandbox 2016-06-13 22:16:36 +01:00
Nick O'Leary
13c1d1df7a Update Debug node to use typedInput for complete/property option 2016-06-13 22:00:42 +01:00
Nick O'Leary
08ade44dc8 Handle more edge cases with RED.util.normalisePropertyExpression 2016-06-13 22:00:42 +01:00
Dave Conway-Jones
8fb1c76247 update font-awesome fonts to latest and
bump some npm pre-req versions
2016-06-13 21:05:32 +01:00
Nick O'Leary
3ad9053d65 Fix multi-level sequences of split/join nodes 2016-06-13 17:44:20 +01:00
Dave Conway-Jones
8fe07e0f07 Limit Pi GPIO to dedicated GPIO pins
to avoid clashes with internal drivers (e.g. I2C, SPI, AMA0 etc)
2016-06-13 14:23:19 +01:00
Nick O'Leary
09b069c129 Add icons to parser nodes 2016-06-12 22:37:38 +01:00
Nick O'Leary
b2db083f39 Another rev of the split/join icons 2016-06-12 21:33:27 +01:00
Nick O'Leary
53e2f3e263 Update split/join icons 2016-06-12 12:24:52 +01:00
Nick O'Leary
945fbbc065 Capture error stack on node.error
Closes #879
2016-06-12 11:07:05 +01:00
Nick O'Leary
4dc9c7714c Clear node context on close
Fixes #870
2016-06-11 22:53:27 +01:00
Nick O'Leary
7302ac5871 Add merged object to Join node 2016-06-11 21:44:00 +01:00
Dave Conway-Jones
1cfad27d6f Delay node only warn once on queue >1000 messages
and then again at >10000 messages
2016-06-10 23:21:12 +01:00
Nick O'Leary
d82fe95076 Update split node docs 2016-06-10 22:51:57 +01:00
Nick O'Leary
8f8df4971c Fix switch node assumptions around string/number handling 2016-06-10 21:03:38 +01:00
Nick O'Leary
fd66569950 Update Join node implementation 2016-06-09 11:33:40 +01:00
Nick O'Leary
e97d9fb0b2 Add draft changelog for 0.14 2016-06-08 17:58:36 +01:00
Nick O'Leary
04424c2a7c Add CHANGELOG.md and make it accessible from menu 2016-06-08 16:18:24 +01:00
Nick O'Leary
241e2828e7 Add support to HTTP In node for PATCH requests
Closes #904
2016-06-08 11:31:59 +01:00
Nick O'Leary
5f6a0141f0 Add cookie handling to HTTP In and HTTP Response nodes 2016-06-08 11:09:18 +01:00
Nick O'Leary
ef2f71859c Join node ui updates 2016-06-07 23:18:46 +01:00
Dave Conway-Jones
fdaeeb5d01 add join icon 2016-06-07 23:18:46 +01:00
Nick O'Leary
e594ffe0f8 Update Join node runtime to match UI changes 2016-06-07 23:18:46 +01:00
Nick O'Leary
9f8c32ce8f Split node UI rework - WIP 2016-06-07 23:18:46 +01:00
Nick O'Leary
762eb07dd4 Add support for array-syntax in typedInput msg properties 2016-06-07 23:01:23 +01:00
Nick O'Leary
0300458ba8 Add error handling to all node definition api calls 2016-06-06 14:45:36 +01:00
Nick O'Leary
3959fcdc88 Handle null return from Function node in array of messages 2016-06-06 11:40:02 +01:00
Dave Conway-Jones
ea76c18f59 Add some info words to config nodes 2016-06-04 09:05:19 +01:00
Nick O'Leary
d125ecc671 Remove rogue console.log 2016-06-04 00:42:33 +01:00
Nick O'Leary
7d9b90a1f3 Disarm click-to-close whilst opening an edit tray 2016-06-04 00:42:08 +01:00
Nick O'Leary
7402c27b6a Reduce tab left-padding below a width threshold 2016-06-04 00:41:26 +01:00
Nick O'Leary
4e762e2063 Enable shift-drag detach of just the selected link 2016-05-31 23:42:00 +01:00
Nick O'Leary
0afe98b399 Move rename flow dialog to editor tray 2016-05-31 23:20:25 +01:00
Nick O'Leary
daed059c47 Emit editor:open/close events from the tray itself 2016-05-31 23:19:43 +01:00
Trisooma
f1ce0fab8b Option to enable cors for editor (#886)
Adds httpAdminCors setting
2016-05-31 14:55:03 +01:00
Nick O'Leary
b5d3f505e3 Defer loading of token sessions until they are accessed
Fixes #895
2016-05-31 14:39:50 +01:00
Nick O'Leary
6c8f688f33 Close the current edit tray when the workspace is clicked 2016-05-31 13:24:56 +01:00
Nick O'Leary
ed1b601a84 Editor buttons should have same border colour as other input elements 2016-05-31 13:09:27 +01:00
Nick O'Leary
add541f67f Restore the edit-select box add behaviour
This reverts commit 59a7c46482.
2016-05-31 13:01:49 +01:00
Nick O'Leary
bea8eb799f Add node/editor lifecycle events 2016-05-29 23:51:20 +01:00
Nick O'Leary
3cac48e86f Fix jshint issue in editableList 2016-05-29 22:41:25 +01:00
Nick O'Leary
64722da4a7 Make sidebars disabled-on-edit by default 2016-05-29 22:37:25 +01:00
Nick O'Leary
ada1e624d8 Update editableList apis 2016-05-29 22:37:25 +01:00
Dave Conway-Jones
69f83cb905 fully log node warnings on start
(i.e. don’t need -v for simple errors on start)
2016-05-26 10:38:24 +01:00
Dave Conway-Jones
807873f685 set pi gpio pin status correctly if set on start 2016-05-26 10:37:20 +01:00
Nick O'Leary
8d4be848b0 Workaround firefox not allowing SVG elements to have focus 2016-05-22 21:23:30 +01:00
Nick O'Leary
59a7c46482 Modify config node select box to have dedicated add button 2016-05-21 22:11:29 +01:00
Nick O'Leary
eabfeb9502 Slow down the tray slide animation slightly 2016-05-21 22:11:10 +01:00
Nick O'Leary
291240dd94 Add editableList widget and update Switch/Change nodes to use it 2016-05-20 22:13:28 +01:00
Nick O'Leary
2f6ed47168 Handle null node array references in catch/status nodes 2016-05-20 10:32:06 +01:00
Nick O'Leary
9a73568c7a Ensure node field change handlers are invoked after editprepare 2016-05-19 22:42:28 +01:00
Nick O'Leary
acdef87be7 Ensure editor resize is called even when limits are hit 2016-05-19 11:16:37 +01:00
Nick O'Leary
b14546605d Fix dialog button order in tab-delete and confirm-deploy dialogs 2016-05-19 11:16:37 +01:00
Nick O'Leary
5ad46106f4 Use onadd in link nodes to ensure imported links are updated 2016-05-19 11:16:37 +01:00
Dave Conway-Jones
3e9be9eed3 remove orion from build 2016-05-18 11:11:59 +01:00
Nick O'Leary
7318a7b767 Prevent parent window scrolling when view is focused
Fixes #635
2016-05-18 09:53:04 +01:00
Nick O'Leary
b78682f413 Change Inject repeat label icon 2016-05-18 09:35:43 +01:00
Nick O'Leary
e50659af09 Add repeat indicator to inject node label
Closes #887
2016-05-17 23:36:09 +01:00
Josh
3454e5ac77 Flows lib honours flowFilePretty setting (#837)
* Flow lib now adheres to pretty flow file, ui also adheres to this as well

* added settings mock object in flows_spec get api test

* reverted api changes, fixed parse of flow only

* try spell flows correctly
2016-05-17 22:09:57 +01:00
Nick O'Leary
9e26aeea1d Handle scoped node modules in the api 2016-05-17 21:56:03 +01:00
Nick O'Leary
d7715b05ee Ensure catch/status/link node references update on import 2016-05-17 09:39:18 +01:00
Nick O'Leary
db433efbef Link nodes show hidden wires when selected
2016-05-17 09:18:32 +01:00
Dave Conway-Jones
f1f8c887c6 bump font awesome to 4.6.2 level 2016-05-11 20:39:38 +01:00
Nick O'Leary
9ae4745ca5 Refocus workspace after closing edit tray 2016-05-11 17:15:36 +01:00
Nick O'Leary
726d9c8ec5 Set z-index of editor shade so it stays above tabs 2016-05-08 22:55:55 +01:00
Nick O'Leary
a9bfa4e79b Allow keyboard shortcuts to be scoped to a dom element
This gets rid of the need to enable/disable the keyboard handling
at various times.

Allows Ctrl-C to work as expected when selecting text in debug/info
sidebar.

Downside is shortcuts that apply to the workspace (select-all, copy
etc) now require the workspace to be focussed.
2016-05-08 22:50:55 +01:00
Nick O'Leary
8e6bba143a Escape regex chars in palette filter input 2016-05-08 20:55:13 +01:00
Nick O'Leary
feeba77f16 Remove console.log debug from tray 2016-05-06 17:20:25 +01:00
Nick O'Leary
ea41a0e842 Improve edit tray size handling for small screens 2016-05-06 17:19:56 +01:00
Dave Conway-Jones
74b7500181 Add javascript highlighter to template node
because it’s FF
2016-05-06 17:00:58 +01:00
Nick O'Leary
594ff8cd3d Add support for loading scoped node modules
Fixes #885
2016-05-06 10:16:41 +01:00
Nick O'Leary
337f5f9b98 Handle missing tab nodes in a loaded flow config 2016-05-04 22:09:11 +01:00
Nick O'Leary
41445a1b48 Merge branch 'config' into 0.14.0
explain why this merge is necessary,
2016-05-04 15:44:48 +01:00
Nick O'Leary
269763fa0c Allow workspace tabs to be re-ordered 2016-05-04 15:22:30 +01:00
Nick O'Leary
fa90eeac55 Make all dialog buttons consistent with editor tray 2016-05-03 21:36:22 +01:00
Nick O'Leary
edceffdaaf Ensure typedInput dropdown doesn't fall off the page 2016-05-03 17:01:45 +01:00
Nick O'Leary
ce25fc658b Move edit tray buttons to top 2016-05-03 15:45:29 +01:00
Dave Conway-Jones
b27db3e2e7 tiny changes to JSON and exec test for node6
no need to specify npm2 defaults are ok now. (on travis)
2016-04-30 17:05:10 +01:00
Dave Conway-Jones
622d4214f7 Let's try that node6 thing again... 2016-04-29 10:00:14 +01:00
Nick O'Leary
0c53b5310a Protect against node types with reserved names such as toString
Fixes #880
2016-04-28 14:17:48 +01:00
Nick O'Leary
45ff86eae5 Do not rely on the HTML file to identify where nodes are registered from 2016-04-28 11:23:42 +01:00
Dave Conway-Jones
47316b0fb7 Merge branch 'master' into 0.14.0 2016-04-27 23:22:37 +01:00
Dave Conway-Jones
c09be02e4e small fix to exec node test 2016-04-27 22:54:00 +01:00
Dave Conway-Jones
bd59398cab Add optional timeout to exec node
(both exec and spawn modes)
and add test for it (both exec and spawn)
also extra test for trigger node.
2016-04-27 22:32:58 +01:00
Nick O'Leary
8080ebceb4 Fix linting error on Flow.js 2016-04-27 12:37:20 +01:00
Nick O'Leary
1e2521c37a Add TLS node and update MQTT/HTTP nodes to use it 2016-04-27 12:33:02 +01:00
Nick O'Leary
b744491dd2 Ensure config nodes are instantiated in the right order 2016-04-27 12:33:02 +01:00
Nick O'Leary
2a089f7d90 Ensure parent nodes marked as changed due to child config node changes 2016-04-27 12:33:02 +01:00
Nick O'Leary
088e3e5374 Validate all edit dialog inputs when one changes 2016-04-27 12:33:02 +01:00
Nick O'Leary
bac8a3092f Recursively validate nodes after editing config node directly 2016-04-27 12:33:02 +01:00
Nick O'Leary
e56da17957 Disable keyboard shortcuts when editing a config node 2016-04-27 12:33:01 +01:00
Nick O'Leary
71b2e714ee Allow config select input to override default width 2016-04-27 12:33:01 +01:00
Nick O'Leary
1b06afb81c Preserve node properties on import 2016-04-27 12:33:01 +01:00
Nick O'Leary
819e48b03a Enable config nodes to reference other config nodes 2016-04-27 12:33:01 +01:00
Nick O'Leary
1861c1feb6 Restore tray size properly when maximised 2016-04-27 12:33:01 +01:00
Nick O'Leary
0efccc4758 Add quick resize buttons to tray 2016-04-27 12:33:01 +01:00
Nick O'Leary
a9feeaa1c9 Make tray resizble and remember size per-node-type 2016-04-27 12:33:01 +01:00
Nick O'Leary
f9c869f521 Refresh node info when edit tray closes 2016-04-27 12:33:01 +01:00
Nick O'Leary
9c766d76f3 Resize tray on create to ensure proper size 2016-04-27 12:33:01 +01:00
Nick O'Leary
333acccff6 Add subflow dialogs to the tray 2016-04-27 12:33:01 +01:00
Nick O'Leary
1790ebf567 Update info sidebar as trays open/close 2016-04-27 12:33:01 +01:00
Nick O'Leary
6354b68bae Config node tray 2016-04-27 12:33:01 +01:00
Nick O'Leary
41b10fd5e4 Add new style tray editor 2016-04-27 12:33:01 +01:00
Dave Conway-Jones
4ad540412a trigger node, fix send last message ...
(if extend not selected).
2016-04-24 21:24:15 +01:00
Dave Conway-Jones
8916cf273e Let trigger node also send last payload to arrive
and add test for it.
2016-04-24 17:42:24 +01:00
Dave Conway-Jones
b2923d0fc4 enhance a couple of tests to check more
Delay node checks  times properly for both types of queue. And File
checks to make sure other payload types are handled (a bit better than
they were)
2016-04-24 17:41:22 +01:00
Dave Conway-Jones
8fc0018cb9 Fix regression in delay node.
topic based queue was emptying all the time instead of spreading out
messages.
2016-04-24 11:08:58 +01:00
Dave Conway-Jones
d0f57efe0b test a few extra paths in several nodes
trigger, switch and file
(and linted delay just because)
2016-04-23 21:06:48 +01:00
Dave Conway-Jones
595ff63b72 Fix exec test for v0.10
Back out nvm 6 in travis (not there yet)
2016-04-23 17:41:56 +01:00
Dave Conway-Jones
9990046abb get more debug from travis for exec test
Don’t have v.10 locally.
And a,y as well try node v6 also ;-)
2016-04-23 17:29:31 +01:00
Dave Conway-Jones
8dacf72b3c try to increase coverage for exec and template nodes
(works locally - may fail on travis - lets see…)
2016-04-23 17:09:46 +01:00
Nick O'Leary
2801838ffa Throw an error if a Function node adds an input event listener 2016-04-21 22:25:47 +01:00
Dave Conway-Jones
59b34c2b3f Add timestamp as a default typedInput
and update Inject and change nodes to match,
and add some tests.
2016-04-18 14:38:36 +01:00
Nick O'Leary
f55f85aa14 Fix debug toolbar button sizes 2016-04-18 14:08:07 +01:00
Nick O'Leary
627a80419a Fix hang on partial deploy with disconnected mqtt node 2016-04-18 13:54:05 +01:00
Dave Conway-Jones
4bc482bc85 update load of grunt related versions
and mqtt and fs-extra and should. Fix tests to keep working.
2016-04-18 12:40:08 +01:00
Dave Conway-Jones
0a1257a23a Add Ace css support / remove swift 2016-04-18 12:38:32 +01:00
Dave Conway-Jones
51d99248d7 update marked.min.js 2016-04-18 12:21:03 +01:00
Dave Conway-Jones
af9aa74337 Add process.env.PORT to settings.js as we said we would 2016-04-18 09:12:12 +01:00
Nick O'Leary
321f5e615b Activate link splice on node centre not mouse position 2016-04-17 21:28:56 +01:00
Nick O'Leary
95c31f3e17 Add option to filter debug by flow and highlight subflow-emitting nodes 2016-04-15 20:20:16 -07:00
Nick O'Leary
cf69dbe1dc TypedInput: preload type icons to ensure width calc correct 2016-04-13 18:10:04 -07:00
Nick O'Leary
e92241bf97 Resize change node rules when they are added 2016-04-13 18:09:41 -07:00
Nick O'Leary
44dc37ef6d Add qos option to MQTT In node 2016-04-11 08:49:50 -07:00
Nick O'Leary
6b0bef61a5 Prompt for login if comms reconnect fails authentication 2016-04-11 08:49:49 -07:00
Nick O'Leary
0c227be02d Back off comms reconnect attempts after prolonged failures 2016-04-11 08:49:49 -07:00
Dave Conway-Jones
08794bad74 Add tests for Change node move function 2016-04-10 15:55:05 +01:00
Nick O'Leary
44693dd23a Enable finer grained permissions in adminAuth 2016-04-10 15:30:13 +01:00
Nick O'Leary
75a7be41eb Better notification message when action is not permitted 2016-04-10 15:30:13 +01:00
Dave Conway-Jones
913b09570c ensure tcp node creates a buffer of size 1 at least 2016-04-10 12:21:56 +01:00
Dave Conway-Jones
1c9b5dfd00 add status to exec spawn mode 2016-04-10 12:21:07 +01:00
Dave Conway-Jones
2954ae917b Add Move capability to change node 2016-04-10 12:20:46 +01:00
Dave Conway-Jones
736ddaeca4 Update Ace Editor 2016-04-10 12:19:59 +01:00
Gabe Johnson
b909e32201 Prevent RED.node.registerNode from overriding a constructor's prototype (#865)
* prevent registry.registerNodeConstructor from overriding a constructors protoype

* fix for node < v5.0.0

* exercise another code path

* altering __proto__ for node < v0.12

* move inheritance code to helper function
2016-04-07 22:18:28 +01:00
Nick O'Leary
bcff74327b Add CoC.md 2016-04-07 21:51:12 +01:00
Nick O'Leary
e60b63e72f Update to CoC 1.4 2016-04-07 21:13:40 +01:00
Nick O'Leary
2bf5d2b4e5 Adopt Contributor Covenant 1.2 2016-04-07 20:49:44 +01:00
Nick O'Leary
e1d09349ff Add link nodes 2016-04-07 17:08:51 +01:00
Nick O'Leary
f07c8108fc Change style of nodes in subflow template view 2016-04-07 16:28:04 +01:00
Nick O'Leary
39f5078d6b Return editorTheme default if value is undefined 2016-04-04 22:30:19 +01:00
Nick O'Leary
1d54761d48 Fix comparison of Buffers (again) 2016-04-01 10:32:11 +01:00
Nick O'Leary
7cb9b2da66 Use Buffer.equals not Buffer.compare for node 4+ 2016-04-01 10:23:00 +01:00
Nick O'Leary
b1896e3737 Fix RED.util.compareObjects for Function created objects and Buffers 2016-04-01 10:13:11 +01:00
Dave Conway-Jones
6fa78bdb04 bump serial port version number
uses typed widget to support other baud rates
2016-04-01 08:56:28 +01:00
Nick O'Leary
ee96f7d937 Fix closing tag in index.mst 2016-03-30 08:59:36 +01:00
Nick O'Leary
129ca0e39f bump version 2016-03-21 11:02:09 +00:00
Dave Conway-Jones
906703db5f Add timed release mode to delay node 2016-03-20 17:46:12 +00:00
Nick O'Leary
0cd4a2b4ec Add api/flow_spec tests
Part of #840
2016-03-18 21:01:21 +00:00
Nick O'Leary
aef8aaa0bd Enable link splicing for when import_dragging nodes
Closes #811
2016-03-17 11:12:45 +00:00
Nick O'Leary
428fbb8622 Fix uncaught exception on deploy whilst node sending messages 2016-03-16 15:37:44 +00:00
Nick O'Leary
b9f03e7d80 Deprecate old mqtt client and connection pool modules 2016-03-16 11:15:30 +00:00
Nick O'Leary
db686388b9 Fix registry test for Node 5 2016-03-16 11:05:10 +00:00
Nick O'Leary
626cba4002 Change node: add bool/num types to change mode
Closes #835 #835 #835
2016-03-13 23:10:10 +00:00
Nick O'Leary
37d4a6b9e2 Validate fields that are $(env-vars)
Closes #825
2016-03-13 14:29:36 +00:00
Nick O'Leary
12c4561aba Handle missing config nodes when validating node properties 2016-03-13 13:25:59 +00:00
Dave Conway-Jones
fed49e3718 pi node - don't try to send data if closing 2016-03-13 10:58:22 +00:00
Nick O'Leary
3af37d3984 Load node message catalog when added dynamically 2016-03-12 22:53:07 +00:00
Nick O'Leary
0f49a11228 Split palette labels on spaces and hypens when laying out 2016-03-12 22:41:23 +00:00
Nick O'Leary
27d3e165b0 Message catalog updates for zero-length flow file handling 2016-03-12 00:04:27 +00:00
Nick O'Leary
e941c22f6c Warn if editor routes are accessed but runtime not started
Closes #816
2016-03-12 00:03:50 +00:00
Nick O'Leary
7281e4deb6 Add zero-length flow file tests 2016-03-11 22:58:11 +00:00
Nick O'Leary
f2191e94b3 Better handling of zero-length flow files
Closes #819

If a flow file is found to be zero-bytes:
  If there is a non-empty backup, restore the backup and resolve
  If there is no backup or it is also empty, resolve empty flow
If a flow file is found to be invalid json:
  Log and resolve empty flow
2016-03-11 22:42:04 +00:00
Dave Conway-Jones
349ebfe4db remove extra brace added to library.js in error 2016-03-06 20:54:46 +00:00
Nick O'Leary
708365c4ac Allow runtime calls to RED._ to specify other namespace 2016-03-06 20:43:19 +00:00
Dave Conway-Jones
0e9ea0aff1 Replace - & _ from example node name labels with space
and align lines (ocd)
2016-03-05 17:07:39 +00:00
Dave Conway-Jones
63ba05a193 Better right alignment of numerics in delay and trigger nodes 2016-03-04 10:12:07 +00:00
Nick O'Leary
4b702815cf Strip node-red-contrib/node- prefix from Example menu labels 2016-03-03 11:02:37 +00:00
Nick O'Leary
55e66ebcac Allow node modules to include example flows 2016-03-02 23:34:24 +00:00
Nick O'Leary
dcd8b3699c Create node_modules in userDir
This ensures npm install puts modules under .node-red even if there's
already a node_modules dir in the parent directory.
2016-03-01 22:08:37 +00:00
Nick O'Leary
0e2d13172a Ensure errors in node def funcs don't break view rendering
Fixes #815

 - also fixes errors in the Catch/Status node label funcs #815
2016-03-01 21:58:57 +00:00
Nick O'Leary
2e2556fdad Merge pull request #805 from aryehof/InjectInfoUpdate
Updated Inject node info with instructions for flow and global options
2016-02-26 14:07:21 +00:00
Nick O'Leary
859a7538e1 Fix crash on repeated inject of invalid json payload 2016-02-26 10:35:15 +00:00
Dave Conway-Jones
0d1543ee8a Add tail node binary mode test 2016-02-25 08:52:43 +00:00
Dave Conway-Jones
d3a98dd355 Add binary mode to tail node 2016-02-24 23:06:27 +00:00
Dave Conway-Jones
ad10125303 revert Cheerio to somewhat smaller version 2016-02-23 09:47:49 +00:00
Dave Conway-Jones
b89e866d39 Add os/platform info to default debug 2016-02-22 17:47:16 +00:00
Dave Conway-Jones
afbaf1cfe0 make sample node info consistent <code> 2016-02-22 17:46:14 +00:00
Dave Conway-Jones
b3be8b30e7 remove direction flag from delay node 2016-02-22 17:45:28 +00:00
Aryeh Hoffman
8bfab8f73d Updated Inject node info with instructions for flow and global options 2016-02-21 18:17:05 +02:00
Nick O'Leary
c6ad2c9ad2 Don't force reconnect mqtt client if message arrives
Fixes the annoying mqtt connect/disconnect cycle
2016-02-19 22:52:43 +00:00
Nick O'Leary
3b44d9972e Bump package version 2016-02-19 21:21:22 +00:00
Nick O'Leary
af736c98f2 Add -p/--port option to override listening port 2016-02-19 21:18:50 +00:00
Nick O'Leary
f1377fa217 Invert toggle button colours so state is more obvious 2016-02-18 10:28:22 +00:00
Dave Conway-Jones
2ba146b9ff Add timeout to httprequest node
and override 2 min default in settings.js.
to Close #801
2016-02-15 09:45:58 +00:00
Dave Conway-Jones
2361607aa3 file node info to same style as others 2016-02-14 13:45:14 +00:00
Nick O'Leary
86ffc80098 Tidy up spinner css 2016-02-14 11:52:33 +00:00
Dave Conway-Jones
7f6915eb59 tcp node add reply (to all) capability
if no _session present.
2016-02-12 13:17:50 +00:00
Dave Conway-Jones
d69bcad028 hardware, logic, storage nodes info updates
(and udp)
2016-02-12 13:17:21 +00:00
Dave Conway-Jones
4cb45e2712 parser node info updates 2016-02-12 13:16:28 +00:00
Dave Conway-Jones
b7a0ad703a io and analysis nodes info updates 2016-02-12 13:15:53 +00:00
Dave Conway-Jones
7610b9a975 core nodes info updates 2016-02-12 13:15:05 +00:00
Dave Conway-Jones
7d95f621df update UDP node info to be more correct. 2016-02-11 22:21:12 +00:00
Nick O'Leary
bba210e112 Allow the template node to be treated as plain text 2016-02-11 13:16:15 +00:00
Nick O'Leary
3a97e20bde Validate MQTT In topics
Fixes #792
2016-02-10 22:38:59 +00:00
Nick O'Leary
4fe7ea00b0 httpNodeAuth should not block http options requests
Fixes #793#793#793
2016-02-10 21:57:46 +00:00
Nick O'Leary
3ec8ecd4de Disable perMessageDeflate on WS servers
Workaround for this issue: https://github.com/websockets/ws/pull/632
as it has been fixed in the 1.x release that drops support for
node 0.10...
2016-02-10 21:43:37 +00:00
Dave Conway-Jones
401e65e852 Merge pull request #799 from natcl/patch-1
Fix typo in delay node: replaced ramdom to random
Thanks @natcl
2016-02-09 23:09:10 +00:00
Nathanaël Lécaudé
e7c5b691a0 More ramdom --> random 2016-02-09 18:03:27 -05:00
Nathanaël Lécaudé
9f3ea8da67 Fix typo in delay node: replaced ramdom to random 2016-02-09 17:57:50 -05:00
Nathanaël Lécaudé
d1269b441d Update index.mst 2016-02-08 09:20:43 -05:00
Nathanaël Lécaudé
7615743aa5 Update theme.js 2016-02-08 09:20:07 -05:00
Nathanaël Lécaudé
dcaa0eeea4 Add node-red-icon-black.svg file to header
Add node-red-icon-black.svg file to header, according to Safari's pinned tab icon spec.
See :
https://developer.apple.com/library/ios/documentation/AppleApplications/Reference/SafariWebContent/pinnedTabs/pinnedTabs.html
2016-02-08 00:05:17 -05:00
Nathanaël Lécaudé
1d5e2f703e Create node-red-icon-black.svg 2016-02-08 00:01:19 -05:00
Dave Conway-Jones
4d84d624b1 clear trigger status icon on re-deploy 2016-02-04 22:13:08 +00:00
Nick O'Leary
633a6a0ee6 Fix inject test to use a proper type 2016-02-04 21:52:27 +00:00
Nick O'Leary
c7bcd3f438 Don't default inject payload to blank string 2016-02-04 21:43:18 +00:00
Dave Conway-Jones
d3a29a6f16 fix trigger tests 2016-02-04 21:22:52 +00:00
Dave Conway-Jones
827711ca89 Fix util jshint as we need the behaviour. 2016-02-04 21:21:57 +00:00
Dave Conway-Jones
76e98f74fa let new typed-inputs return correctly
0 now returns correct type for boolean and number when required.
2016-02-04 21:06:20 +00:00
Dave Conway-Jones
fb09f4b22d trigger node, add configurable reset
and make it do strings when it says so, and numbers if you want.
2016-02-04 21:05:15 +00:00
Dave Conway-Jones
bb06585748 another tidy up on Pi GPIO node 2016-02-03 21:10:44 +00:00
Nick O'Leary
c76ba1dcc7 Allow function properties in settings
Fixes #790
2016-01-29 11:56:16 +00:00
Nick O'Leary
a115301b04 Fix order of config dialog calls to save/creds/validate 2016-01-29 11:56:16 +00:00
Dave Conway-Jones
72917117a9 Add debounce to Pi GPIO node 2016-01-25 09:56:35 +00:00
Nick O'Leary
6567739236 Bump version 2016-01-21 22:20:18 +00:00
Nick O'Leary
4aa6b47c0e Revert wrapping of http requestion object
Fixes #787
2016-01-21 22:15:25 +00:00
Nick O'Leary
03558b012c Bump version and dependencies 2016-01-18 11:09:52 +00:00
Nick O'Leary
3288efdad6 Remove unimplemented flow.enable/disable functions 2016-01-18 10:53:50 +00:00
Dave Conway-Jones
3902a343f3 Add ports in use warning to udp node
to close #786
Thanks @hugobox
2016-01-17 10:34:40 +00:00
Dave Conway-Jones
882b7d0391 change settings.js example to octalbonescript 2016-01-16 13:58:24 +00:00
Nick O'Leary
81f082825d Add 'previous value' option to Switch node 2016-01-15 11:35:59 +00:00
Nick O'Leary
392fd6fed3 Allow existing nodes to splice into links on drag 2016-01-14 15:59:45 +00:00
Nick O'Leary
51afed4041 Ensure config list refreshes properly on tab delete 2016-01-14 15:22:00 +00:00
Nick O'Leary
17e3b71d9c Allow update of global flow 2016-01-14 14:57:13 +00:00
Nick O'Leary
6e75089f3a CORS not properly configured on multiple http routes
Fixes #783
2016-01-13 12:54:34 +00:00
Nick O'Leary
6dc640b129 Add hidden count when config node filtered 2016-01-13 10:30:24 +00:00
Nick O'Leary
27cbaac343 Restore shift-drag to snap/unsnap to grid 2016-01-13 09:16:24 +00:00
Nick O'Leary
fa4006619e Make debug/config sidebar headers consistent 2016-01-12 23:55:18 +00:00
Nick O'Leary
cb8fe8462a Moving nodes with keyboard should flag workspace dirty 2016-01-12 23:08:13 +00:00
Nick O'Leary
abd51a5511 Notifications flagged as fixed should not be click-closable 2016-01-12 23:06:18 +00:00
Nick O'Leary
a0cc1e6b0c Add config node filter 2016-01-12 23:03:33 +00:00
Nick O'Leary
50399c6bfa Rework config sidebar and deploy warning 2016-01-12 17:54:53 +00:00
Nick O'Leary
de48c1be44 Wrap http request object to match http response object 2016-01-11 22:35:31 +00:00
Nick O'Leary
0786ec4b66 Move typedInput icons and update boolean 2016-01-11 21:24:35 +00:00
Nick O'Leary
db319e0ebc Ensure global context is seeded properly 2016-01-11 11:28:01 +00:00
Nick O'Leary
4fc568856a Clear link_splice style on drag end 2016-01-11 11:00:54 +00:00
Nick O'Leary
4c6771669b Fix palette node link splicing on Firefox 2016-01-10 22:25:20 +00:00
Nick O'Leary
9bca2a91c9 Tidy up view menu 2016-01-10 21:25:05 +00:00
Nick O'Leary
66eaaf5a48 Add 'view' menu and reorganise a few things 2016-01-09 20:39:03 +00:00
Nick O'Leary
9837f0e2e1 Highlight node port when dragging wires and undash the wires 2016-01-09 13:47:05 +00:00
Nick O'Leary
6b8ffb4c68 Fix lint issues in view 2016-01-09 00:31:05 +00:00
Nick O'Leary
f35dd34da9 Allow shift-click to detach existing wires 2016-01-09 00:29:04 +00:00
Nick O'Leary
ed19e4fa08 Splice nodes dragged from palette into links 2016-01-08 22:34:10 +00:00
Dave Conway-Jones
661e1a4f90 try to trim imported/dragged flows to [ ] 2016-01-08 19:54:16 +00:00
Nick O'Leary
5826de76ca Make dragging nodes from the palette line up better 2016-01-08 14:42:05 +00:00
Nick O'Leary
05888740e5 Update jquery version to 0.11.3 2016-01-08 14:41:37 +00:00
Nick O'Leary
41f3b0c333 Fix variable leak in theme.js 2016-01-08 13:41:33 +00:00
Nick O'Leary
70f3e72a20 Move version number as title of NR logo 2016-01-08 13:36:49 +00:00
Nick O'Leary
e873afd40b Moving nodes mark workspace as dirty 2016-01-08 11:08:48 +00:00
Nick O'Leary
2777c2937a Make version number slightly darker 2016-01-07 22:29:20 +00:00
Nick O'Leary
798903e4cc Move layout menu down one position 2016-01-07 22:28:03 +00:00
Nick O'Leary
58622ba18f Attach dialog close handlers to dialog parents 2016-01-07 20:08:31 +00:00
Nick O'Leary
c368dcd5b7 Ok/Cancel edit dialogs with Ctrl-Enter/Escape 2016-01-07 17:10:59 +00:00
Nick O'Leary
0b4c652ce7 Add version number of sidebar footer 2016-01-07 16:42:10 +00:00
Nick O'Leary
dbaacc411a Handle OSX Meta key when selecting nodes 2016-01-07 15:09:14 +00:00
Nick O'Leary
1850185d1e Add grid-alignment options 2016-01-07 14:39:01 +00:00
Nick O'Leary
2e9d445d36 Add oneditresize function definition 2016-01-06 17:01:14 +00:00
Nick O'Leary
aed89d82fb Fix template test 2016-01-06 17:01:14 +00:00
Nick O'Leary
231adac6d8 Rename typedInput.options 2016-01-06 17:01:14 +00:00
Nick O'Leary
587c4e5915 Update template node to use typedInput 2016-01-06 17:01:14 +00:00
Nick O'Leary
55f1cbf18f Ensure inject payload exists 2016-01-06 17:01:13 +00:00
Nick O'Leary
38168a545b Update Inject node to use typedInput 2016-01-06 17:01:13 +00:00
Nick O'Leary
43c6df49d7 Update typedInput nls 2016-01-06 17:01:13 +00:00
Nick O'Leary
f1c59faf72 Rename propertySelect to typedInput and add boolean opt 2016-01-06 17:01:13 +00:00
Nick O'Leary
5f7019325c Update switch/change help text to reflect updates 2016-01-06 17:01:13 +00:00
Nick O'Leary
fe4dae8518 Add propertySelect to switch node 2016-01-06 17:01:13 +00:00
Nick O'Leary
1f848b205b Add propertySelect support to Change node 2016-01-06 17:01:13 +00:00
Nick O'Leary
742c470d81 Add context/flow/global support to Function node 2016-01-06 17:01:13 +00:00
Nick O'Leary
5ead3342cc Add node context/flow/global 2016-01-06 17:01:13 +00:00
Nick O'Leary
b95dc2ecce Add propertySelect jquery widget 2016-01-06 17:01:13 +00:00
Nick O'Leary
4d0950215f Don't allow tabs or subflows to be added with new flow 2016-01-06 17:01:13 +00:00
Nick O'Leary
da0ce9fe0d Simplify flow api implementation and add logging messages 2016-01-06 17:01:13 +00:00
Nick O'Leary
ca62e720b5 Add missing spec file 2016-01-06 17:01:13 +00:00
Nick O'Leary
c4b1795396 Add add/update/delete flow apis 2016-01-06 17:01:13 +00:00
Nick O'Leary
fd2e47ed73 WIP: add flow api 2016-01-06 17:01:12 +00:00
Nick O'Leary
d5f2255a68 Handle null coreNodesPath 2016-01-06 17:01:12 +00:00
Nick O'Leary
05b58e9263 Allow core nodes dir to be provided to runtime via settings 2016-01-06 17:01:12 +00:00
Nick O'Leary
4a91c27e4b Allow server to be option on red.init 2016-01-06 17:01:12 +00:00
Nick O'Leary
3a03d46d8d Fix lint error in registry.js 2016-01-06 17:01:12 +00:00
Nick O'Leary
f03aff7006 Tidy up API passed to node modules 2016-01-06 17:01:12 +00:00
Nick O'Leary
043b8a3105 Register node message catalog directly, not via event 2016-01-06 17:01:12 +00:00
Nick O'Leary
1dd9984521 Pickup default language from i18n module 2016-01-06 17:01:12 +00:00
Nick O'Leary
d2be7f8c8f Move locale files under api/runtime components 2016-01-06 17:01:12 +00:00
Nick O'Leary
88dc202db2 Fix node test helper for api/runtime changes 2016-01-06 17:01:12 +00:00
Nick O'Leary
083d54b008 Add unit test for flow reload api 2016-01-06 17:01:11 +00:00
Nick O'Leary
87d77efa57 Add flow reload admin api 2016-01-06 17:01:11 +00:00
Nick O'Leary
35c4a41d7b Node id generation should only be done in runtime/util 2016-01-06 17:01:11 +00:00
Nick O'Leary
1ca3ca07d5 api/nodes accessing comms module incorrectly 2016-01-06 17:01:11 +00:00
Nick O'Leary
d673846e3d WIP: runtime api for node modules 2016-01-06 17:01:11 +00:00
Nick O'Leary
f62b7afede Remove all uses of fs.exists as it is deprecated
The tests still use it in places - particular localfilesystem tests,
but those tests need to be redone with sinon stubbing in place and
not rely on real fs operations.
2016-01-06 17:01:11 +00:00
Nick O'Leary
e65770a53a Add missing test resources
They were ignored as they have node_modules in the path...
2016-01-06 17:01:11 +00:00
Nick O'Leary
a92a741932 Fix incorrect async test completion 2016-01-06 17:01:11 +00:00
Nick O'Leary
45f67191ba Improve node registry test coverage 2016-01-06 17:01:11 +00:00
Nick O'Leary
93f5da325b Fix node test helper for runtime/api changes 2016-01-06 17:01:11 +00:00
Nick O'Leary
8fb955e182 Move comms from runtime to api component 2016-01-06 17:01:11 +00:00
Nick O'Leary
9f5e6a4b37 Update tests for runtime/api separation 2016-01-06 17:01:11 +00:00
Nick O'Leary
f43738446e WIP: separate runtime and api components 2016-01-06 17:01:11 +00:00
Nick O'Leary
923a46d304 Bump version 0.12.5 2016-01-06 16:55:38 +00:00
Dave Conway-Jones
b9b5eaccae better handle utf8 file output chars 2016-01-06 12:27:47 +00:00
Dave Conway-Jones
cda11491c2 bump sentiment node npm prereq 2016-01-06 12:27:47 +00:00
Nick O'Leary
98c539f662 Refresh active nodes when node properties change 2016-01-04 22:05:17 +00:00
Dave Conway-Jones
9fb958b302 close tcp node connection properly when required. 2015-12-23 20:01:05 +00:00
Dave Conway-Jones
8e25e76439 Add hint re servos to Pi GPIO node info 2015-12-23 11:50:47 +00:00
Nick O'Leary
62694da7e6 Ensure last mqtt node turns off the lights before closing
The mqtt-broker node disconnects when the last node using it
is closed. But that node-close was not waiting for the disconnect
to complete. This led to a race-condition where the using node
was recreated and started trying to use the broker node whilst it
was still disconnecting.
2015-12-22 23:31:22 +00:00
Dave Conway-Jones
86064651af Add Pi Keyboard code node 2015-12-21 10:27:58 +00:00
Dave Conway-Jones
65daaeb617 add attribute test to HTML parser node tests 2015-12-19 14:30:43 +00:00
Dave Conway-Jones
08b39f50b3 Add attribute capability to HTML parser node 2015-12-19 12:44:11 +00:00
Nick O'Leary
d0f7e5ca4d Bump version 0.12.4 2015-12-14 10:01:10 +00:00
Nick O'Leary
4eb5058e68 Add readOnly setting to prevent file writes in localfilesystem storage 2015-12-13 22:45:44 +00:00
Nick O'Leary
1054193298 Update example httpNodeAuth setting to be bcrypt 2015-12-13 21:27:57 +00:00
Nick O'Leary
38c6cf0450 Support bcrypt for httpNodeAuth 2015-12-13 20:46:27 +00:00
Dave Conway-Jones
5b04b86867 remove extraneous s from GPIO node... 2015-12-12 15:18:17 +00:00
Dave Conway-Jones
a074bcfd56 Pi no longer needs root workaround to access gpio
(stops PAM logging in Node-RED log under systemd)
2015-12-12 15:13:15 +00:00
Nick O'Leary
f93179d946 Rename library filename field to avoid id clash
Fixed #767
2015-12-12 12:57:33 +00:00
Nick O'Leary
2c347bc092 Bump version for 0.12.3 2015-12-11 22:02:37 +00:00
Dave Conway-Jones
0f7119f468 TCPget don't send nun msg on disconnect
(as we now send status anyway)
2015-12-11 14:17:50 +00:00
Dave Conway-Jones
2685a24705 Let TCPget node pass through other msg properties 2015-12-11 14:07:20 +00:00
Nick O'Leary
371f72f4f1 Skip delay node burst test 2015-12-11 14:04:24 +00:00
Nick O'Leary
c70c00043b Attached admin route before node route security 2015-12-11 13:42:44 +00:00
Nick O'Leary
50d0a88276 Ensure tabs are removed from runtime on partial deploy 2015-12-10 15:47:15 +00:00
Dave Conway-Jones
5bbf576dae set fa-icons perms 644 not 755... 2015-12-10 13:57:54 +00:00
Nick O'Leary
5d334e9619 Clarify auth settings in default settings.js 2015-12-10 13:20:58 +00:00
Dave Conway-Jones
98f9353338 bump serial port package dependency version. 2015-12-10 13:11:14 +00:00
Nick O'Leary
d3de7037e5 Move HTTPRequest node to its own file 2015-12-10 12:58:50 +00:00
Nick O'Leary
64431c6711 Ensure node.ports is properly intialised
Fixes #766
2015-12-10 10:46:12 +00:00
Dave Conway-Jones
d4ce193dc8 Fix trigger to block properly until reset
Fix to Close #764
2015-12-09 16:42:16 +00:00
Dave Conway-Jones
606305aec4 Bump FA-Icons to v4.5 2015-12-09 15:38:37 +00:00
Dave Conway-Jones
a95f44d68b remove annoying comma from comm.js
OCD reasons only
2015-12-09 13:37:20 +00:00
Dave Conway-Jones
ef2dc4b9e1 One more tidy up for tcp node 2015-12-07 22:39:42 +00:00
Dave Conway-Jones
9baca1772b Close tcp port for tcpin node (same as previous fix but for input) 2015-12-07 22:39:42 +00:00
Nick O'Leary
04cd19349d Don't reuse node-edit dialog for library export ui
Fixes #762
2015-12-07 22:15:14 +00:00
Dave Conway-Jones
1280e5bc8b Close tcp out node more forcibly. (and update status) on redeploy. 2015-12-07 17:41:51 +00:00
Dave Conway-Jones
dda90f956d Clear delay node status on re-deploy. (rate limit path) 2015-12-02 15:37:36 +00:00
Dave Conway-Jones
bc4b599513 Fix udp socket creation error on node v0.10 2015-12-01 14:52:15 +00:00
Dave Conway-Jones
090d52d678 narrowing in on tcpget fix, reconnect but don't resend.
to address issue #759
2015-12-01 13:41:39 +00:00
Dave Conway-Jones
a47ad4842a Clean up tcpget node connected status.
to address #759
2015-11-30 22:05:26 +00:00
Nick O'Leary
3d5ed840dc Bump version for 0.12.2 2015-11-28 20:32:19 +00:00
Nick O'Leary
11d75ff581 Inject time spinner incrementing value incorrectly 2015-11-26 09:56:49 +00:00
Nick O'Leary
306fb7a3d1 Kill processes run with exec node when flows redeployed 2015-11-24 23:09:44 +00:00
Nick O'Leary
0839b6f58e Debug node not handling null messages 2015-11-24 23:09:32 +00:00
Nick O'Leary
fceca703b3 Update tcp node status on reconnect after timeout
Closes #757
2015-11-24 22:40:39 +00:00
Nick O'Leary
4dc60d2477 Clarify debug rate limit method 2015-11-21 21:30:03 +00:00
Nick O'Leary
d840d0b67d Fix mqtt node lifecycle with partial deployments 2015-11-17 22:19:56 +00:00
Dave Conway-Jones
43dad4c465 ensure udp socket bind works more often 2015-11-16 08:38:22 +00:00
Dave Conway-Jones
60812b2d8a fix udp node messages
(timing issue still outstanding)
2015-11-16 00:25:26 +00:00
Nick O'Leary
35e2caff13 Handle errors thrown in Function node setTimeout/Interval 2015-11-15 22:22:17 +00:00
Nick O'Leary
1d9d5c6bc7 Add node 5 to travis 2015-11-14 21:32:28 +00:00
Nick O'Leary
4d99536ea7 Function setTimeout/Interval wrapper not returing timer id
Fixes #753
2015-11-14 21:21:14 +00:00
Nick O'Leary
34537180c3 Fix basic authentication on httpNode/Admin/Static 2015-11-10 15:44:48 +00:00
Nick O'Leary
cb01920ee6 Allow nodes to be installed by path name 2015-11-09 16:52:14 +00:00
Nick O'Leary
437b01a0ff Move node installer to its own module 2015-11-09 11:29:48 +00:00
Nick O'Leary
075a2abf71 Use child_process.execFile to prevent command injection 2015-11-08 14:26:11 +00:00
Nick O'Leary
985875cc75 Move node install/remove from server component to node engine 2015-11-08 14:06:36 +00:00
Nick O'Leary
1c45bc615f Enable touch-menu for links so they can be deleted 2015-11-06 16:46:07 +00:00
Nick O'Leary
fa7f2606fb bump version 2015-11-06 13:42:00 +00:00
Nick O'Leary
12b95f1c72 Enable config node dialog to have editor ui 2015-11-06 11:08:07 +00:00
Nick O'Leary
a0aee2021d Tidy up sheets/flows labelling 2015-11-05 14:22:15 +00:00
Nick O'Leary
c90fd1e6d8 Move credential http API handling to api component 2015-11-04 11:13:43 +00:00
Dave Conway-Jones
3b769fd2de add bash directive to nrgpio script 2015-11-04 08:42:00 +00:00
Nick O'Leary
71ecb89abc Merge branch 'flowengine' 2015-11-03 20:24:55 +00:00
Nick O'Leary
7b6bc1d3bc Increase default api request limit to 1mb
- expose it via settings.apiMaxLength
 - audit log api errors
2015-11-03 11:23:37 +00:00
Nick O'Leary
9c3be40fbe Automatically clear timeouts/intervals set in Function node
closes #744
2015-11-03 10:47:29 +00:00
Nick O'Leary
ab87fa9ce4 Ensure status/errors from global config nodes propagate properly 2015-11-03 10:20:00 +00:00
Nick O'Leary
d1940a023a Complete test coverage on flow engine refactor 2015-11-02 15:58:40 +00:00
Nick O'Leary
5a176a037c Update test helper for refactored flow engine 2015-11-02 15:58:40 +00:00
Nick O'Leary
ec25191c98 Flow Engine refactor
Each flow/tab now exists as its own logical object. This is the ground
work for allowing flows to be added/removed/updated independently.
2015-11-02 15:58:29 +00:00
Nick O'Leary
20b321f928 Handle null subflow info property 2015-10-26 11:12:49 +00:00
Dave Conway-Jones
425b016d63 Add missing space to label in delay node 2015-10-26 09:42:16 +00:00
Nick O'Leary
b2c7189ce4 Update package dependencies 2015-10-25 21:36:20 +00:00
Nick O'Leary
f66886dbdb Websocket input node not unsubscribing properly
Fixes #739
2015-10-23 23:01:25 +01:00
Nick O'Leary
712f8b4680 Add description field to Subflows 2015-10-23 22:14:39 +01:00
Nick O'Leary
f626ee060a Allow properties to be specified by environment variables
A property set to $(ABC) will be substituted with the environment
variable ABC - if it exists. If the property doesn't exist, the property
is left unchanged.
2015-10-23 22:14:39 +01:00
Dave Conway-Jones
86aa7c97be Make exec node status indication consistent with others 2015-10-22 19:02:22 +01:00
Dave Conway-Jones
30e3525987 Add status icon to trigger node while it is active 2015-10-22 16:27:07 +01:00
Dave Conway-Jones
ad44f838da update sample to refer to fa-icons 2015-10-20 19:30:42 +01:00
Dave Conway-Jones
2569a35b6c fix closing web socket timeout
to close #738 - thanks to @GSeva for spotting it.
2015-10-20 18:58:37 +01:00
Dave Conway-Jones
1ee5e50d50 Turn on tcp node socket keepalive when in server mode 2015-10-20 10:13:48 +01:00
Dave Conway-Jones
1dbec5eca8 slight tidy of Pi Mouse node 2015-10-20 10:02:57 +01:00
Nick O'Leary
2bc8db308c Add missing tab-config file 2015-10-17 19:05:23 +01:00
Nick O'Leary
f196740426 Restore config node tab 2015-10-16 21:56:20 +01:00
Dave Conway-Jones
20121b79c5 Let CSV node handle null columns in input array. array-> csv 2015-10-16 20:42:25 +01:00
Nick O'Leary
741a4cfe53 Don't assume def.align is set to 'right'
Fixes #734
2015-10-15 14:27:30 +01:00
Dave Conway-Jones
0343de9f34 Add status capability to function node 2015-10-15 13:33:05 +01:00
Nick O'Leary
4772bca14a Undo 'selection to subflow' not restoring nodes 2015-10-15 11:34:17 +01:00
Dave Conway-Jones
6ae1a5ba0d let CSV obj->css allow blank columns in template 2015-10-15 08:31:42 +01:00
Dave Conway-Jones
217c9718e4 catch missing template error in CSV parser node
and update help info
2015-10-14 23:38:29 +01:00
Dave Conway-Jones
61d7893467 Enhance CSV node to accept simple arrays -> css 2015-10-14 23:07:25 +01:00
Dave Conway-Jones
8f26c01f4b fix escaping of quotes in CSV node 2015-10-14 11:02:31 +01:00
Dave Conway-Jones
61045ddd7f try to fix debug node non-standard object type handling. 2015-10-10 22:41:07 +01:00
Dave Conway-Jones
1bf72a0bc3 correct TCP node server status message 2015-10-09 15:44:22 +01:00
Dave Conway-Jones
6d84b1bb8d update inspect to come from correct package (util)
(works from v0.10 onwards - but now deprecated in v4)
2015-10-09 13:36:35 +01:00
Dave Conway-Jones
8abd0b1fdf Detect/set correct method for http proxy
to close #732 — thanks @utaani
2015-10-09 09:19:09 +01:00
Dave Conway-Jones
81e125b7ba add bit more help to exec node
Point out that parameters with spaces should be quoted
2015-10-05 21:41:53 +01:00
Dave Conway-Jones
d5e1468718 Normalise spawn behaviour in exec node to accept identical parameters
Can now just tick or untick spawn and command still works.
2015-10-05 21:17:35 +01:00
Nick O'Leary
c232bf5ed6 Avoid unnecessary isUtf8 check on HTTP payloads 2015-10-05 21:10:32 +01:00
Nick O'Leary
21b25ffaee Merge pull request #730 from jthomas/master
Allow HTTP nodes to handle non-UTF8 content.
2015-10-05 20:52:35 +01:00
Dave Conway-Jones
ca0a93df08 Add Node-RED sag icon to default images 2015-10-05 13:46:42 +01:00
James Thomas
699a22c757 Allow HTTP nodes to handle non-UTF8 content.
Setting UTF-8 as the default body encoding stops us sending binary
content, e.g. audio, which can be decoded into a Buffer.

Use "Content-Type" header to decide whether to decode as UTF-8 or a
Buffer.
2015-10-05 11:53:29 +01:00
Nick O'Leary
8b2b1669b5 Add ignore-case flag to Switch regex rule
closes #366
2015-10-04 22:14:49 +01:00
Dave Conway-Jones
c1e8370916 Lets spawn msg.payload contain comma separated parameters
(like rest of parameters passed in to spawn via edit dialogue)
Will also accept an array…
2015-10-04 19:22:33 +01:00
Nick O'Leary
ddedea8b90 Resize change/switch rules with the dialog 2015-10-03 22:30:28 +01:00
Nick O'Leary
8f414ce458 Update auth revoke test for express 4 2015-10-03 20:32:24 +01:00
Nick O'Leary
453f23da20 Move to node 4.x.x in travis 2015-10-03 09:15:11 +01:00
Nick O'Leary
9e91e42a1b Increase delay burst test timeout
The test was occasionally timing out, despite it succeeding. Increased
the timeout to give it a bit more safety margin to complete
2015-10-03 09:06:51 +01:00
Nick O'Leary
b666734c79 Update dependency versions 2015-10-02 22:13:15 +01:00
Nick O'Leary
a2297f303d Update config node user list when node edits are undone 2015-10-02 21:27:31 +01:00
Nick O'Leary
ecde942255 Wrap msg.req/res objects and add deprecated warnings to functions 2015-10-02 21:27:31 +01:00
Nick O'Leary
d668d43a0a Move to express 4.x 2015-10-02 21:27:31 +01:00
Nick O'Leary
ca91a5dd95 Rename flow menu ids back to workspace 2015-10-02 21:27:31 +01:00
Nick O'Leary
5f9780d71c Improve error message if settings file fails to load 2015-10-02 21:27:31 +01:00
Nick O'Leary
ee37464741 Copy settings file to userDir on start-up if it makes sense
It will only copy the file if:
 - a custom file hasn't been specified (-s file)
 - there isn't an existing settings.js file in userDir
 - the default settings file (in install dir) hasn't been
   modified (mtime < ctime)
2015-10-02 21:27:31 +01:00
Nick O'Leary
8d73f927db Debug output should use overridden toString method if set
Closes #690
2015-10-02 21:27:31 +01:00
Nick O'Leary
4a0222bd1c Warn if a node references an unknown config node type
Closes #709
2015-10-02 21:27:31 +01:00
Nick O'Leary
c0b8f5e3e1 Add tab info to deploy error messages 2015-10-02 21:27:31 +01:00
Nick O'Leary
a9a0b263dc Add undo support for config-node delete 2015-10-02 21:27:30 +01:00
Nick O'Leary
f2b73187d8 Name flows back to sheets in the ui 2015-10-02 21:27:30 +01:00
Nick O'Leary
ef10ade0cc Improve handling of imported config nodes
Avoid creating unnecessary duplicates of config nodes, whilst
honouring the scope of the any existing node.

Also, 'undo' now removes any added config node
2015-10-02 21:27:30 +01:00
Nick O'Leary
719bb4263e Ensure config nodes are deleted when owning subflow is deleted 2015-10-02 21:27:30 +01:00
Nick O'Leary
b3602b268e Have grunt dev restart on message catalog changes 2015-10-02 21:27:30 +01:00
Nick O'Leary
66ec9bae27 Add warning if HTTP In node is missing path config 2015-10-02 21:27:30 +01:00
Nick O'Leary
d96b6e77c0 Allow config nodes to be scoped to an individual Flow 2015-10-02 21:27:30 +01:00
Nick O'Leary
da64c018ac Make the comms link be more tolerant to temporarily blips 2015-10-02 21:27:30 +01:00
Nick O'Leary
f9fb97adf2 Undo subflow rename not updating corresponding tab/menu labels 2015-10-02 21:27:30 +01:00
Nick O'Leary
8316bc6480 Move config node users tip into body of dialog 2015-10-02 21:27:30 +01:00
Nick O'Leary
08021e039a Better favicon 2015-10-02 21:27:30 +01:00
Dave Conway-Jones
cc6e0937a0 initialise status.text to be blank string if not set.
(and change test to use .text rather than .message)
(not that it matters at this level of test)
2015-10-02 21:27:30 +01:00
Nick O'Leary
c1d694a97c Add birth message to MQTT node 2015-10-02 21:27:30 +01:00
Dave Conway-Jones
fcf4f40c36 add basic status node test 2015-10-02 21:27:30 +01:00
Nick O'Leary
380b03399c Update to latest MQTT module version 2015-10-02 21:27:29 +01:00
Nick O'Leary
c33d02c53f Ensure MQTT node cleansession/keepalive defaults are used 2015-10-02 21:27:29 +01:00
Nick O'Leary
fa5e37993e Update mqtt node options to include will/cleansession/keepalive 2015-10-02 21:27:29 +01:00
Richard Ruston
437b2d506b Update MQTT node to use MQTT.js 1.2 and enable secure connections 2015-10-02 21:27:29 +01:00
Dave Conway-Jones
4ed09f6431 update FA icons to v4.4.0 2015-10-02 21:27:29 +01:00
Nick O'Leary
0b98a6acf8 Ensure catch/status nodes marked changed when edited 2015-10-02 21:27:29 +01:00
Nick O'Leary
1d73c86cb2 Add scope to status node 2015-10-02 21:27:29 +01:00
Nick O'Leary
40fe0f3239 Test Node.status calls through to Flow.handleStatus 2015-10-02 21:27:29 +01:00
Nick O'Leary
d1ea689999 Update catch node help text 2015-10-02 21:27:29 +01:00
Nick O'Leary
a6644ad5ff Add status node 2015-10-02 21:27:29 +01:00
Nick O'Leary
658746d2a3 Allow flow file to be specified with grunt dev
For example: grunt dev --flowFile=flows.json
2015-10-02 21:27:29 +01:00
Nick O'Leary
cbdd4de630 Errors in subflows propagate up to nearest catch node 2015-10-02 21:27:29 +01:00
Nick O'Leary
00c612485b Fix jshint errors 2015-10-02 21:27:29 +01:00
Nick O'Leary
3a6192bf73 Catch node can target specific nodes 2015-10-02 21:27:28 +01:00
Nick O'Leary
c64b5c2850 Add subflow tab image 2015-10-02 21:27:28 +01:00
Nick O'Leary
fdbf079896 Clean up subflow editor
- new appearance of subflow tabs
 - input/output buttons now counters
 - allow multiple input wires to the same node when converting to subflow
 - ensure edit history is propagated properly to instance nodes
2015-10-02 21:27:28 +01:00
Dave Conway-Jones
d1a5395727 update test for JSON parser to include array 2015-10-02 19:46:29 +01:00
Dave Conway-Jones
83a3642c0e Allow JSON node to handle array type 2015-10-02 17:30:23 +01:00
Nick O'Leary
9932d34304 Fix XML parse test
Workaround to https://github.com/Leonidas-from-XIV/node-xml2js/issues/239
2015-09-29 14:39:07 +01:00
Nick O'Leary
7aa37a1976 Bump version 2015-09-29 10:17:45 +01:00
Dave Conway-Jones
fa42fbdab8 Let XML node options be set
let msg.options to set a lot more options if required
2015-09-26 13:47:14 +01:00
Nick O'Leary
caa83ac830 Merge pull request #724 from vielmetti/travis-node-4
Support for Node 4.0.0 and Travis CI testing for same
2015-09-25 23:02:49 +01:00
Nick O'Leary
3963fa9738 Allow a language catalog to be a partial catalog 2015-09-24 21:56:45 +01:00
Edward Vielmetti
005a98d020 Update for node 4 testing.
Changes to .travis.yml
Patch from @dceejay to make a test portable
Patch from @dceejay to correct a case where an int was expected
2015-09-23 15:27:45 -04:00
Dave Conway-Jones
9560dc9408 remove delay spinner upper limit
e.g. 65 secs is perfectly valid…
close #728
2015-09-22 15:06:58 +01:00
Nick O'Leary
4ac9a5edf0 Merge pull request #726 from vielmetti/patch-2
Bump uglify to 2.4.24 to address security advisory
2015-09-22 10:15:54 +01:00
Edward Vielmetti
37e62597ae Bump uglify to 2.4.24 to address security advisory
Noted in https://nodesecurity.io/advisories/uglifyjs_incorrectly_handles_non-boolean_comparisons
2015-09-20 01:21:21 -04:00
Dave Conway-Jones
90bfe378d0 Add mobile category to palette order 2015-09-16 22:35:17 +01:00
Dave Conway-Jones
ce22b494ec Update README to use svg badges
to close #720
Thanks to @scherwi for the tip
2015-09-08 21:47:57 +01:00
Nick O'Leary
f9e0420647 Fix http node method-override nls message id 2015-08-31 16:06:00 +01:00
Dave Conway-Jones
2fe568d9ba Fix TCP node sending data
(it’s for the children)
2015-08-17 17:15:44 +01:00
Dave Conway-Jones
2d4979df4d only set tcp timeout if needs setting. 2015-08-15 22:16:48 +01:00
Dave Conway-Jones
b555b014b8 Update debug test to check lengths... 2015-08-12 21:56:19 +01:00
Dave Conway-Jones
999b888c54 debug nodes - show length of strings, buffers or size of arrays 2015-08-11 19:39:37 +01:00
Nick O'Leary
5193d7bddb Stop sending messages to ws connections that have errored
Fixes #708
2015-07-30 22:09:01 +01:00
Nick O'Leary
6b03379e4e Ensure exclusive conf node is removed on edit cancel
- If an exclusive conf node was added to a node, but the
   node's own edit dialog was canceled, the conf node remained
   but not associated with the node - effectively orphaning it
2015-07-22 22:28:30 +01:00
Nick O'Leary
08d687ad60 Update to travis container builds 2015-07-22 13:06:14 +01:00
Nick O'Leary
eb57089f06 Add flag to disable build check for tests 2015-07-22 11:41:58 +01:00
Nick O'Leary
a76e4fede1 Handle null acceptedLanguages
Closes #704
2015-07-19 22:11:25 +01:00
Nick O'Leary
705d043540 Replace bootstrap popover 2015-07-18 21:27:16 +01:00
Nick O'Leary
5462e251f8 Fix exclusive config node check when type not registered 2015-07-15 13:23:05 +01:00
Nick O'Leary
50788af6ca Add 0.12 to engine statement 2015-07-15 10:50:38 +01:00
Nick O'Leary
1a07c5a329 Bump 0.11.0 2015-07-15 10:48:33 +01:00
Nick O'Leary
9fb81b2814 Permit login with blank scope
Required for the editor, which doesn't know the appropriate scope
for the user logging in. The user will adopt their default permission
scope once logged in.
2015-07-15 10:12:45 +01:00
Dave Conway-Jones
10ad7fbf6e remove spaces before ? in messages 2015-07-14 23:47:58 +01:00
Nick O'Leary
811c4f2630 Ensure locales dir is included in release zip 2015-07-14 20:37:49 +01:00
Dave Conway-Jones
f7e3b0a64f Tiny pixel tweaks to new ui 2015-07-14 20:37:26 +01:00
Nick O'Leary
7d83d76fb3 Merge pull request #702 from node-red/ui-refresh
UI Refresh
2015-07-14 16:11:48 +01:00
Nick O'Leary
d3c41b38f7 More restylin 2015-07-14 15:59:56 +01:00
Nick O'Leary
57d6b16d5c Reset sidebar font size 2015-07-13 23:30:57 +01:00
Nick O'Leary
27aa5ae7db More UI refresh 2015-07-13 23:21:03 +01:00
Nick O'Leary
62e8f564b9 Fix node import error nls message 2015-07-13 16:28:23 +01:00
Nick O'Leary
a1d7bb4208 More restyling - workspace buttons 2015-07-13 15:08:17 +01:00
Nick O'Leary
5d8dae05c4 More ui redesign 2015-07-13 11:26:29 +01:00
Nick O'Leary
6bde07b5a0 Refresh appearance 2015-07-11 23:43:45 +01:00
Nick O'Leary
846ab08661 Allow node modules to declare supported versions of node-red 2015-07-10 21:42:14 +01:00
Nick O'Leary
999cf66b27 Add editor events component and migrate to it 2015-07-10 19:49:53 +01:00
Dave Conway-Jones
60539d890b Fix File node check of msg.payload to close #700
Also add feature to allow creation of directory(ies) if path to file
does not exist.
2015-07-10 14:59:23 +01:00
Nick O'Leary
e5a0f25d94 Keep sidebar tab menu in alphabetical order 2015-07-09 16:48:53 +01:00
Nick O'Leary
fde9d40098 Copy/clone config nodes properly on import/export 2015-07-08 22:12:52 +01:00
Nick O'Leary
f70e9ea076 Ensure RED._ is defined before initialising settings
- remove permissions requirement from locales files so the
   login dialog can be nls'd
2015-07-08 17:08:07 +01:00
Dave Conway-Jones
d0af4aac4d cleanup status on delay node 2015-07-08 15:06:46 +01:00
Dave Conway-Jones
7de3704210 lets exec node pass more than just string as the command payload. 2015-07-08 15:06:08 +01:00
Nick O'Leary
1c33b837b8 Fix delay node labels 2015-07-08 08:04:47 +01:00
Nick O'Leary
95d20d7fba Ensure status messages are strings 2015-07-08 08:02:23 +01:00
Nick O'Leary
90b8806e7c Merge pull request #697 from knolleary/node12
Add node 0.12 to Travis config and fix resulting errors
2015-07-05 23:11:19 +01:00
Nick O'Leary
39df80bf99 Fix exec test to restart helper server before each test 2015-07-05 23:02:10 +01:00
Nick O'Leary
bac4beae03 Fix Function error parsing for node 0.12 format 2015-07-05 22:40:24 +01:00
Nick O'Leary
a7b68c18b5 Bump fs-extra version to fix 0.12 support 2015-07-05 22:10:34 +01:00
Nick O'Leary
ef2360baee Add node 0.12 to Travis config 2015-07-04 22:08:58 +01:00
Nick O'Leary
8716e7e601 Ensure tab minimum size not applied when there is space for all 2015-07-03 20:54:31 +01:00
Nick O'Leary
00c2dae969 Set minimum size on workspace tab 2015-07-03 18:31:37 +01:00
Nick O'Leary
8782bc5896 Ensure sidebar panes are hidden, not removed on change 2015-07-03 11:17:27 +01:00
Nick O'Leary
6359b90352 Add sidebar menu and migrate existing panels to new api 2015-07-03 10:07:40 +01:00
Nick O'Leary
6cfa4976fe Fix nodes.install.installing message id 2015-07-02 13:25:15 +01:00
Nick O'Leary
35cd7cf2b8 Fix tcp status message 2015-07-02 10:56:27 +01:00
Nick O'Leary
b2d7f079b7 Merge pull request #694 from node-red/i18n
Add i18n support
2015-07-02 10:54:22 +01:00
Nick O'Leary
726069bc4b NLS status text in editor not runtime 2015-07-02 10:49:40 +01:00
Nick O'Leary
fbccf01933 Tidy up red.js runtime messages 2015-07-02 10:49:40 +01:00
Nick O'Leary
c9f3c6f4a3 Update trigger node ui 2015-07-02 10:49:40 +01:00
Nick O'Leary
c47da013ff Tidy up of editor i18n messages 2015-07-02 10:49:40 +01:00
Allen Boone
bc76499957 Use core category for custom nodes if core nodes disabled 2015-07-02 10:49:40 +01:00
Allen Boone
24afcff0ea Custom nodes category NLS 2015-07-02 10:49:40 +01:00
Nick O'Leary
6777f24845 Ensure library export dialog is i18n'd 2015-07-02 10:49:40 +01:00
Nick O'Leary
61e0923fc4 Restore when module dependency in red/api/nodes 2015-07-02 10:49:40 +01:00
Nick O'Leary
757caeb9a4 Try to use default palette label nls message if found 2015-07-02 10:49:40 +01:00
Allen Boone
fe9dc6b272 Palette category label NLS for core nodes 2015-07-02 10:49:40 +01:00
Nick O'Leary
24efdbe4da Add missing-type install hint nls messages 2015-07-02 10:49:39 +01:00
Nick O'Leary
9ca102cf81 Ensure error messages are toStringed 2015-07-02 10:49:39 +01:00
Nick O'Leary
48df31d7b7 NLS deprecated node message 2015-07-02 10:49:39 +01:00
Nick O'Leary
539afb1e1d Fix Inject node interval label 2015-07-02 10:49:39 +01:00
Nick O'Leary
bdcba44ca5 Remove moved node messages 2015-07-02 10:49:39 +01:00
Nick O'Leary
99a51b07ac Catch error loop detection nls 2015-07-02 10:49:39 +01:00
Allen Boone
5fbaca75b4 Fixed sidebar id issue 2015-07-02 10:49:39 +01:00
Allen Boone
a6974371b0 Fixed acceptedLanguage typo 2015-07-02 10:49:39 +01:00
Allen Boone
409fa49234 Added missing NLS strings to sidebar and index.mst 2015-07-02 10:49:39 +01:00
Nick O'Leary
9bbd6a70b8 Add namespaced i18n function to node definition 2015-07-02 10:49:39 +01:00
Nick O'Leary
f0b4cb608a Return locale specific node help 2015-07-02 10:49:39 +01:00
Allen Boone
284d7e26d1 Initialize list of supported languages from directories in the locale folder. 2015-07-02 10:49:39 +01:00
Scott Yoshizawa
965c0937ac NLS undo previous change (added require for ./red/log) 2015-07-02 10:49:39 +01:00
Nick O'Leary
d9cf6a4431 Only attempt to load one locale per catalog 2015-07-02 10:49:39 +01:00
Allen Boone
e6ed8ee509 locale exposed to editor 2015-07-02 10:49:39 +01:00
Scott Yoshizawa
2563649b3e NLS /red/nodes
NLS other js files under /red

NLS /red files (changed based on Nick's review)
2015-07-02 10:49:39 +01:00
Nick O'Leary
203bc41b06 Some more node i18n tidy up 2015-07-02 10:49:38 +01:00
Allen Boone
cb1d18c7c8 Fixed problem with RED._ being unavailable to module code 2015-07-02 10:49:38 +01:00
Nick O'Leary
5ea68dafc4 More node i18n tidy ups 2015-07-02 10:49:38 +01:00
Nick O'Leary
68bb8252af Ensure i18n func available to new config nodes 2015-07-02 10:49:38 +01:00
Nick O'Leary
406f742d29 Add jsonlint step to build 2015-07-02 10:49:38 +01:00
Nick O'Leary
5522e57f65 More node i18n tidy-up 2015-07-02 10:49:38 +01:00
Nick O'Leary
94e27dbfc5 Tidy up node i18n 2015-07-02 10:49:38 +01:00
Nick O'Leary
f5fc8f763f Pick up desired language from query string 2015-07-02 10:49:38 +01:00
Nick O'Leary
9058bf615c Fix invalid json in message catalog 2015-07-02 10:49:38 +01:00
Nick O'Leary
9d17137dec Ensure i18n message for Unknown nodes are available 2015-07-02 10:49:38 +01:00
Allen Boone
4a318553f7 Updated editor ui NLS strings 2015-07-02 10:49:38 +01:00
Allen Boone
0017074d38 Updated the notifications and errors to use NLS
removed errant comma
2015-07-02 10:49:36 +01:00
Allen Boone
a39a26fcc2 Converted editor menu to use NLS strings 2015-07-02 10:47:02 +01:00
Scott Yoshizawa
2fe859b111 NLS Core nodes
NLS exec node

NLS function/temple/delay nodes

NLS function/template/delay/trigger/comment nodes

NLS io nodes (mqtt/httpin/websocket/watch/serial)

NLS messages.json for tcpin

NLS io nodes (tcpin & udp half)

NLS io nodes (udp)

NLS logic nodes (switch/change)

NLS logic (range) and parsers (csv&html) nodes

NLS parser nodes (json/xml)

NLS test case update for logic/parsers

NLS analysis and hardware nodes

NLS storage nodes (file/redisout/mongodb) and test

NLS storage node (tail)

NLS social nodes (feedparse/email/irc)

NLS socal node (twitter half change)

NLS social node (twitter) and core node (unknown)
2015-07-02 10:46:57 +01:00
Nick O'Leary
c105b2df37 Add RED._ to test helper 2015-06-29 16:04:00 +01:00
Nick O'Leary
4fb86ab55a Fix !=0 comparison 2015-06-29 16:04:00 +01:00
Nick O'Leary
1ed98a5963 Dont create i18n function for subflows 2015-06-29 16:04:00 +01:00
Nick O'Leary
a4a29ceb3c Handle [html] data-i18n prefixes in config node dialog 2015-06-29 16:04:00 +01:00
Nick O'Leary
6249083431 Extract all core runtime messages 2015-06-29 16:04:00 +01:00
Nick O'Leary
aa18c65fa8 NLS enable the Inject node 2015-06-29 16:03:59 +01:00
Nick O'Leary
a7900940da Expose i18n in editor 2015-06-29 16:03:59 +01:00
Nick O'Leary
008bc98070 Ensure node help is blank if otherwise undefined 2015-06-29 16:03:59 +01:00
Nick O'Leary
0705589cc2 Load base locales in editor 2015-06-29 16:03:59 +01:00
Nick O'Leary
b2caba593f Add locales api endpoint 2015-06-29 16:03:59 +01:00
Nick O'Leary
6d4c64fcd5 i18n enable runtime node files 2015-06-29 16:03:59 +01:00
Nick O'Leary
7d41781fb4 Add initial red/i18n implementation 2015-06-29 16:03:59 +01:00
Nick O'Leary
0760facb77 Add .DS_store to gitignore 2015-06-29 16:02:01 +01:00
Nick O'Leary
a0ce095807 Error generating complete flow library list on OSX
Must use path.join to concatenate paths safely.
2015-06-29 16:00:10 +01:00
Nick O'Leary
df0110913a Remove rogue console.logs 2015-06-25 15:33:39 -07:00
Nick O'Leary
06731374a4 Fix trigger extend behaviour 2015-06-25 13:59:26 -07:00
Dave Conway-Jones
6c8b7c0082 Correct RPi pins labels... and add BCM pins also. 2015-06-24 12:39:27 +01:00
Dave Conway-Jones
93136961b9 make unspecified settings file totally obvious in debug. 2015-06-22 14:17:16 +01:00
Dave Conway-Jones
529a691e1d Add clearTimeout to function node sandbox
(to be a pair with setTimeout…)
2015-06-22 09:07:31 +01:00
Dave Conway-Jones
9f0b3eba47 Add basic exec node test 2015-06-22 08:26:38 +01:00
Nick O'Leary
6d897793cb Ensure node.outputs is always a number
Closes #686
2015-06-19 20:37:12 +01:00
Nick O'Leary
0e12fc6b02 Fix canvas focus issue on FF/IE 2015-06-17 22:52:04 +01:00
Nick O'Leary
c00558ea1b Remove old index.html 2015-06-17 22:46:54 +01:00
Dave Conway-Jones
bacf27a3ca mistook 2015-06-17 22:12:48 +01:00
Dave Conway-Jones
6560ea0630 Delete Dockerfile
mistook
2015-06-17 22:12:27 +01:00
Nick O'Leary
8338231ce5 Drop blank port from comms ws path 2015-06-17 22:09:27 +01:00
Dave Conway-Jones
5813a91244 adjust timing on file tail test
Runs cleaner on Mac
2015-06-17 22:08:53 +01:00
Nick O'Leary
dfd8ab3545 Detect mouse paste in Import nodes dialog 2015-06-17 20:48:56 +01:00
Nick O'Leary
a5b9b949a8 bump to 0.10.11 dev version 2015-06-17 14:58:22 +01:00
Nick O'Leary
72570e4510 Fix scope of knownUnknowns variable 2015-06-17 14:27:49 +01:00
Nick O'Leary
3002aead6b Add better install message on missing nodes 2015-06-17 14:18:47 +01:00
Nick O'Leary
841edbe6fb Ensure release files retain proper chmod status 2015-06-17 13:38:49 +01:00
Nick O'Leary
2b9aca0c56 Add bin to release package 2015-06-16 23:39:33 +01:00
Nick O'Leary
3a17c3ee6d Merge pull request #680 from cpswan/patch-1
https link (rather than git) in dev instructions
2015-06-16 23:38:58 +01:00
Chris Swan
df09252ee0 https link (rather than git) in dev instructions 2015-06-16 23:20:10 +01:00
Nick O'Leary
f51778d417 Bump to 0.10.9 2015-06-16 22:19:31 +01:00
Nick O'Leary
119fc63794 Bump version and dependencies 2015-06-16 21:27:44 +01:00
Nick O'Leary
ee3425d3be Normalise ace editor font size 2015-06-16 20:56:09 +01:00
Nick O'Leary
31c979f30f Add deprecated node list 2015-06-16 15:32:41 +01:00
dceejay
89f2c26cd6 Give our own linked core nodes some leeway on version number
so we can apply fixes without bumping package - which was the whole point of moving them out...
2015-06-16 08:40:39 +01:00
dceejay
0dbf43d0aa Update Gruntfile so only core nodes are linted. 2015-06-15 20:38:40 +01:00
dceejay
8a6d11b191 tiny lint thing in debug node... missing ; 2015-06-15 20:38:09 +01:00
dceejay
d8eb926e2c Move out several core node to node-red-nodes ready for 0.10.8
Update package.json to match.
Part of #668
2015-06-15 20:37:36 +01:00
Nick O'Leary
21d0adbdae Handle null message in catch loop detection 2015-06-15 15:22:51 +01:00
Nick O'Leary
c5fd3a5753 Detect and prevent Catch node loops 2015-06-15 15:09:50 +01:00
Nick O'Leary
eae4e3d983 Add deploy warning for unused config nodes 2015-06-10 14:52:58 +01:00
Nick O'Leary
bb1fe8daef Allow nodesExcludes to specify node module name 2015-06-08 23:17:45 +01:00
Nick O'Leary
c5d8e09b41 Only delete node type from registry if id matches
If a node is moved out of node-red core to an npm installable
package, the first time NR runs after the move it correctly
deletes the node-red version from the registry. However it was
also removing the node constructors registered by the new
npm installed version as it wasn't checking what it was removing
came from the now-removed node.
2015-06-08 16:32:50 +01:00
dceejay
369eae3d92 remove http response function call example from info. (being deprecated) 2015-06-03 22:53:27 +01:00
Nick O'Leary
e2fa457ca2 Minimise amount of node redrawing done during drag 2015-06-03 10:05:31 +01:00
Nick O'Leary
871f764e98 Allow node icon definition to be a function 2015-06-02 22:07:45 +01:00
Nick O'Leary
f8853af902 Enabling metric/audit logging takes precedence over level 2015-06-02 16:23:38 +01:00
Nick O'Leary
4248d20f39 Add RED.util.generateId and ensure HTTP node adds proper id 2015-06-02 15:54:37 +01:00
Nick O'Leary
5cda08e7b0 Update trigger node UI 2015-05-31 20:58:28 +01:00
dceejay
7e9d96ee87 Let email node set a default filename for binary attachment
so it will send "something" if only a buffer arrives.
2015-05-31 20:27:27 +01:00
dceejay
974ac31d33 Hide right sidebar on start if screen narrower than 600px
so at last you can see something that looks like Node-RED
2015-05-31 12:58:42 +01:00
Nick O'Leary
0658b70631 Inject node not parsing 0-23 hour range correctly 2015-05-29 22:28:42 +01:00
Nick O'Leary
53258eeede Restore ability to add nodes by filename 2015-05-27 14:11:11 +01:00
dceejay
4f174308b9 Fix tcp node miscounting bytes, and check if staying connected first. 2015-05-26 20:08:58 +01:00
dceejay
98c9e40349 Add small note re escaping test to inject node. 2015-05-26 20:04:12 +01:00
dceejay
3a4756bd83 let urllib parse proxy url more cleanly in http-request node. 2015-05-23 18:55:11 +01:00
dceejay
6ccb05cb2c http-request node - relax proxy regex check to let userid:password through 2015-05-21 17:45:11 +01:00
dceejay
3c2d32b867 Correct incorrect pwm "tip" info for RPI GPIO node
Closes #648
Thanks @edent
2015-05-21 17:03:59 +01:00
dceejay
956050434f Add no_proxy to http-request node.
also make it support HTTP_PROXY and NO_PROXY (ie uppercase)
2015-05-19 11:07:54 +01:00
dceejay
38ab1550d2 change http request to use http_proxy environment rather than do it ourselves 2015-05-19 10:00:06 +01:00
dceejay
e852d1e57c remove unrequired require from Arduino node 2015-05-19 10:00:06 +01:00
Nick O'Leary
7de0216976 Add audit log entries on API calls
Closes #627
2015-05-14 14:22:56 +01:00
dceejay
911288e695 Arduino node - improved logging and port error handling. 2015-05-13 22:26:01 +01:00
dceejay
72e1f20383 Arduino - ensure port list populated on start,
also allow connect to first found board - by not specifying a port.
2015-05-13 21:59:15 +01:00
Nick O'Leary
d28a6eaf9d Add httpNodeMiddleware option
Closes #631

Enables custom middleware to be inserted in front of all HTTP In
nodes.
2015-05-13 21:25:37 +01:00
dceejay
17f3366556 Adds proxy support to http node - via settings.js 2015-05-13 13:54:47 +01:00
Nick O'Leary
0bef04ae0a Set NODE_ENV in grunt dev task to serve non-minified assets 2015-05-11 20:24:15 +01:00
dceejay
f11b906fd9 Websocket - fix broken test (or rather - fix code to pass test) 2015-05-10 10:00:44 +01:00
dceejay
518358d9dc Websocket - add reconnect capability when running as a client.
to close #643

Also adds node.status to nodes.
2015-05-10 00:12:52 +01:00
dceejay
5ffde21d83 revert change to editor change detector, and redo function node valid
code "flag" to report as non-boolean.
2015-05-08 15:31:48 +01:00
dceejay
052302b3e7 actually set valid to be false in function so .toString will work... 2015-05-07 22:02:46 +01:00
Nick O'Leary
fe1ce21114 toString values before checking for changes 2015-05-07 21:17:06 +01:00
Nick O'Leary
ce5c9da107 Ensure ace edit history is reset after initialisation 2015-05-07 21:12:46 +01:00
dceejay
cf25b2866e Allow http to accept delete properly, and put, options etc. 2015-05-07 16:45:44 +01:00
dceejay
07fd5a5f5f function node was marking changed even on no change. 2015-05-07 16:44:55 +01:00
Nick O'Leary
913fdac671 Add support for exclusive config nodes 2015-05-06 11:08:01 +01:00
Nick O'Leary
7dc838dea6 Fix click on debug message to reveal source node 2015-05-05 22:00:47 +01:00
Nick O'Leary
7112fd2a22 Partial deploy containing deleted subflow throws error 2015-05-05 13:53:40 +01:00
dceejay
56e8c143dd CONTRIBUTING - remove link to specific Issues (so we can use this file
for all the projects)
2015-05-05 12:50:46 +01:00
dceejay
7b4cbbe816 Add try catch to exec node stdout if utf8 check fails 2015-05-05 12:50:46 +01:00
Nick O'Leary
8f8ee4662d Initialise checkboxes in config editor for new nodes 2015-05-05 00:03:35 +01:00
Nick O'Leary
86013c7db4 Ensure node.credentials exists for nodes with registered creds
Fixes #639
2015-05-04 23:28:55 +01:00
Nick O'Leary
01aa3324f8 Fix lint error in user.js 2015-05-03 22:28:03 +01:00
Nick O'Leary
b9cfeee965 Navigate and submit login dialog with Enter key 2015-05-03 22:23:30 +01:00
Nick O'Leary
b3684a70b5 Handle Buffer payloads in HTTP Response node 2015-05-02 22:20:46 +01:00
Nick O'Leary
51fce9343b Ensure errors in node.receive are handled 2015-05-02 22:15:33 +01:00
Nick O'Leary
0c5c3448d0 Merge pull request #633 from scott1y/Issue#626
Added the capability to register custom loggers (for Issue #626)
2015-05-02 21:53:07 +01:00
Scott Yoshizawa
deaef3ab86 Corrected based on knolleary's comments. 2015-05-01 09:37:23 -04:00
Nick O'Leary
a443491c0c Merge pull request #630 from lostinthestory/swagger-gen
Added support for swagger doc to HTTP-In
2015-05-01 09:32:57 +01:00
Scott Yoshizawa
276d893198 Added the capability to register custom loggers (for Issue #626) 2015-04-30 17:01:22 -04:00
Nick O'Leary
653d0e71e4 Add meta tag for IE edge compatibility 2015-04-28 14:25:41 +01:00
Nick O'Leary
faa7d948a7 Update MQTT Out node status if already connected 2015-04-27 20:08:00 +01:00
Nick O'Leary
771342989e HTTP Request - handle null url
Fixes #632
2015-04-26 08:50:42 +01:00
Cody Walker
e9ce519e4b Added support for swagger doc to HTTP-In 2015-04-24 13:53:38 -05:00
Nick O'Leary
c016b102eb Add async error handler to UDP out node
Fixes #629
2015-04-24 11:17:18 +01:00
Nick O'Leary
0583c60837 Editor link filter failing for src_port == 0
Fixes #621
2015-04-22 22:53:21 +01:00
Nick O'Leary
1c1a85dcef editorTheme: allow header logo/title to be a link 2015-04-22 14:03:42 +01:00
Nick O'Leary
c71e76335b Serial Out not appending character
Fixes #622
2015-04-21 09:43:00 +01:00
Nick O'Leary
c1a32c4eb9 Merge pull request #620 from drwoods/master
fix 3 localfilesystem tests failing on Windows
2015-04-20 15:27:38 +01:00
drwoods
9ad1f769d3 localfilesystem tests failing on Windows 2015-04-20 10:13:00 -04:00
Nick O'Leary
87f8fd34b8 Ensure full deploy is visually selected by default 2015-04-20 11:17:27 +01:00
dceejay
e206d2919e More defensive on closing tcp connections,
and tidy up some lint
2015-04-19 12:13:45 +01:00
dceejay
9d809aa2ba Point Grunt to use external jshintrc 2015-04-16 11:53:39 +01:00
dceejay
8f744794e4 push opinionated .jshintrc - matches Grunt build. for starters. 2015-04-16 10:22:12 +01:00
Nick O'Leary
78ab4217be Arduino pin values should be strings not numbers 2015-04-15 09:34:03 +01:00
Nick O'Leary
d090df94c5 Arduino output - ensure string/number payloads handled
A change to tighten the type checking meant passing a string
'0' or '1' no longer matched the tests for numeric 0 or 1.
2015-04-14 23:14:13 +01:00
Nick O'Leary
937f26da41 Merge pull request #606 from drwoods/master
Ignore Eclipse project files and fix some jshint warnings
2015-04-14 21:34:23 +01:00
drwoods
98e3ff014e ignore Eclipse files and resolve some Eclipse JSHint warnings
squashed 4 commits into 1
2015-04-14 14:17:08 -04:00
dceejay
6f84526364 Remove pre-req for mkdirp package.
(fs-extra has all the features needed already)
2015-04-14 18:41:48 +01:00
dceejay
105d38c885 MQTT node - don't report missing topic if payload is missing... 2015-04-14 18:39:42 +01:00
dceejay
d7bdcd69fc fix exec missing addpayload,
improve switch null test (to include null object)
check mqtt has payload before sending
2015-04-14 17:15:56 +01:00
Nick O'Leary
87e537da90 Merge pull request #611 from node-red/themes
Editor Themes
2015-04-13 22:51:52 +01:00
Nick O'Leary
8f16695f06 Add theme tests 2015-04-13 22:15:15 +01:00
Nick O'Leary
8403f6291f Tidy deploy button css 2015-04-13 21:50:40 +01:00
Nick O'Leary
5af6ac3e80 Rename menu ids to be logically consistent 2015-04-13 16:48:38 +01:00
Nick O'Leary
0d557094b2 Move help customisation under menu settings 2015-04-13 15:32:11 +01:00
Nick O'Leary
a2aa78afd4 Add main menu customisation 2015-04-13 13:55:17 +01:00
Nick O'Leary
b0de8abb63 Customise help link label/url 2015-04-13 11:35:52 +01:00
Nick O'Leary
6ff540ed08 Customise login image 2015-04-13 10:37:30 +01:00
Nick O'Leary
2b8ed9850b Pass deployButton and userMenu theme options to ui 2015-04-13 09:48:49 +01:00
Nick O'Leary
dcd579b5e3 Some scss tidy up 2015-04-13 00:11:32 +01:00
Nick O'Leary
c9d2d301aa Add editorTheme setting 2015-04-13 00:11:11 +01:00
Nick O'Leary
1aaef598a5 Concatenate vendor js/css where possible 2015-04-13 00:10:10 +01:00
dceejay
73d1f3d0e8 Expose rest of email node header fields. 2015-04-12 00:46:03 +01:00
Nick O'Leary
e369ded6c5 Allow deploy button to be customised 2015-04-11 22:51:00 +01:00
dceejay
269846c587 Catch bad folder error in email node 2015-04-11 19:24:32 +01:00
dceejay
8dc98420db handle pure plain text messages in email node. 2015-04-11 16:48:50 +01:00
dceejay
1014abe92f Fix email node repeat send, add to, cc, bcc fields, and ability to select inbox. 2015-04-11 16:09:13 +01:00
Nick O'Leary
6927f10f8f Fix login image path 2015-04-10 15:39:29 +01:00
Nick O'Leary
49d3a7190a Update nodemonignore/watch rules 2015-04-09 22:18:37 +01:00
Nick O'Leary
a2e65b0018 Prepend copyright to built editor files 2015-04-09 21:12:39 +01:00
Nick O'Leary
f48ee01a03 Ensure MQTT nodes unsubscribe before disconnect
Fixes #609

Needed for partial deployment - the nodes assumed the
connection would always be closed when a deploy occurs.
2015-04-09 20:10:34 +01:00
Nick O'Leary
0e926c566b Add missing header scss 2015-04-09 17:26:11 +01:00
Nick O'Leary
d2c4c2c34c Split css into individual scss files 2015-04-09 14:46:29 +01:00
Nick O'Leary
c2253d1e25 Merge pull request #608 from node-red/build2
Add build process to grunt
2015-04-09 13:02:01 +01:00
Nick O'Leary
eae16b6e8c Add tests for build check 2015-04-09 12:13:46 +01:00
Nick O'Leary
868ae5b5dd Add .dist to gitignore 2015-04-09 11:37:16 +01:00
Nick O'Leary
1406503e10 Add build info to README 2015-04-09 10:22:05 +01:00
Nick O'Leary
9ca9d88546 Drop Node 0.8 from travis build due to devDependencie issues 2015-04-09 10:22:05 +01:00
Nick O'Leary
203d3f672c Add build step to Grunt file 2015-04-09 10:22:05 +01:00
dceejay
698b2688f6 Add port, ssl and allow self signed certs to IRC node 2015-04-09 09:55:34 +01:00
dceejay
be1620dd07 Fix watch node to stat file sizes ok
(and also not to when file missing)
2015-04-08 21:43:44 +01:00
Nick O'Leary
e1f0969957 Add dedicated route for editor index.html 2015-04-08 21:29:55 +01:00
Nick O'Leary
e1dd8cf2ab Restore node order in palette following async changes
The move to async loading of node files led to them appearing
out of order in the palette.
2015-04-08 20:17:24 +01:00
dceejay
8ee90777ee Move serialport (and irc) to optional dependancies so installs ok in more places.
(albeit without serialport etc... - but not many clouds have serialports)
2015-04-08 09:55:48 +01:00
Nick O'Leary
2fe9c1e55f Change node config load to be async 2015-04-07 23:46:52 +01:00
Nick O'Leary
9dd7e2e43d Refactor registry structure
Splits registry up into smaller components.

Unit tests still drive api via registry/index_spec - still
need to split them up into the currently blank _spec files
2015-04-07 16:02:15 +01:00
Nick O'Leary
5efbdf5d04 Revert removal of flow storage api
Whilst we know with the file system storage inplementation
getLibraryEntry is a suitable replacement for getFlow, this
may not be the case with other implementations.

The storage code uses the deprecated functions if they are
present - so the core code should call them and let the storage
layer decide what it calls.
2015-04-05 20:54:11 +01:00
dceejay
5be3472413 For some reason http request node icon was aligned right,
inconsistent with most other "function" nodes...
2015-04-05 17:57:06 +01:00
dceejay
a9a0953653 Slide timing window to left for trigger node test. 2015-04-04 22:27:25 +01:00
Nick O'Leary
d4ac4c44d0 Fix library test for deprecated storage api 2015-04-04 19:33:37 +01:00
Nick O'Leary
f459ff8ad0 Remove use of deprecated storage api 2015-04-04 19:25:07 +01:00
Nick O'Leary
b96ea36b70 Deprecate getAllFlows/getFlow/saveFlow storage functions
They were specialised versions of get/saveLibraryEntry that
complicated the interface.

This change removes them from localfilesystem, but the top
level module checks for their existence and uses them if
they are there - for backwards compatibility.
2015-04-03 23:05:56 +01:00
Nick O'Leary
e543cc0fed Log settings file in use on start up 2015-04-03 23:05:15 +01:00
Nick O'Leary
0b1b4df210 Update README / Remove INSTALL.md 2015-04-02 21:19:57 +01:00
Nick O'Leary
e59ffb0b19 Bump to dev version 0.10.7 2015-04-01 10:48:57 +01:00
Nick O'Leary
120c8f2c28 Bump version 0.10.6 2015-04-01 10:28:04 +01:00
Nick O'Leary
fbfc5c8a2d Add error codes to api responses 2015-03-31 22:29:42 +01:00
dceejay
31b018c80e Missed closing brace in email node fix 2015-03-31 16:39:00 +01:00
dceejay
255d708fb6 updates to serial, watch, websocket, udp, twitter, email to handle no payload. 2015-03-31 09:21:11 +01:00
dceejay
78d1da5fbc Updates to sentiment, exec and range to handle missing payload properties 2015-03-31 08:35:56 +01:00
dceejay
9c22a770ef remove superfluous console.log from debug node 2015-03-30 21:59:54 +01:00
Nick O'Leary
b201828236 Remove 'loaded' property from external node info object
and fix everything that doing this broke
2015-03-30 21:49:20 +01:00
Nick O'Leary
2a8a885271 Standardise API error response format 2015-03-30 14:16:04 +01:00
Nick O'Leary
7adefd6ee0 Add access_token expiry 2015-03-30 14:14:32 +01:00
Nick O'Leary
f967a5ecdc Fix auth on comms link and for anon user
The move to honour scope level of token broke the comms link
checking as well as the permissions checking for anon users.
2015-03-29 22:27:07 +01:00
Nick O'Leary
c8d6dc2531 Auth permission should honour the token scope 2015-03-29 21:59:48 +01:00
Nick O'Leary
216b5fba7a Increment subflow name on import of duplicate 2015-03-28 22:12:18 +00:00
Nick O'Leary
f4ec9a72d5 Increase tab max-width 2015-03-28 22:08:39 +00:00
Nick O'Leary
cf0c2825eb Expand palette category when first entry added 2015-03-28 21:46:27 +00:00
Nick O'Leary
be46c419dc Center palette label whilst being dragged 2015-03-26 20:08:25 +00:00
Nick O'Leary
62c68d06fe Merge pull request #598 from dceejay/dcjtests
new tests for sentiment, file and csv nodes
2015-03-26 16:57:04 +00:00
Nick O'Leary
4f4d8419bc Nudge palette labels to rebalance them 2015-03-26 16:55:55 +00:00
dceejay
16e17954b4 add try catch to helper shutdown,
tiny fixes for exec and trigger based on tests
2015-03-26 15:02:08 +00:00
Nick O'Leary
cc1d080a5a Remove add/removeNode by filename api
Only support add/remove by module name
2015-03-26 11:39:35 +00:00
Nick O'Leary
dd7f4f6752 Filter loaded property from /nodes endpoint 2015-03-26 11:38:51 +00:00
Nick O'Leary
9daeba02b5 Flow.registerType should indicate if type was missing or not 2015-03-26 11:37:24 +00:00
dceejay
8a96dbd121 New tests for Trigger, catch and unknown nodes 2015-03-25 21:58:26 +00:00
Nick O'Leary
2a57d0b6d0 auth/login should return empty object when insecure 2015-03-25 20:33:29 +00:00
dceejay
8a5c1bade5 new tests for sentiment, file and csv
(inc a bugfix for csv :-)

tweka of 0.8 ?

temp remove buffer should equall test from file node test

comment out failing test in file node (0.8 specific fail...)

stagger multiple writes slightly in file test
2015-03-25 14:58:57 +00:00
dceejay
fcc6943f98 Extra tests for html, xml, json and tail nodes
(and some consistent passing of missing payloads)
2015-03-24 17:43:47 +00:00
dceejay
72a9de058d tests for defaults in switch, change and range nodes. 2015-03-24 17:35:54 +00:00
Nick O'Leary
8748be28b7 Bump to 0.10.5 2015-03-23 10:56:14 +00:00
Nick O'Leary
20bdea7ae0 Increase registry test coverage 2015-03-22 22:54:52 +00:00
Nick O'Leary
e19b8d35a9 Modules not properly removed from config.json 2015-03-22 21:48:12 +00:00
Nick O'Leary
81df74dfc8 Server not waiting for settings to load 2015-03-22 20:55:38 +00:00
Nick O'Leary
153fa7478f Increase flows test coverage 2015-03-22 20:12:10 +00:00
Nick O'Leary
500e9a4010 Increase localfilesystem test coverage 2015-03-22 17:40:42 +00:00
dceejay
5352fc87ee add extra tests to debug, delay & template 2015-03-22 09:38:42 +00:00
dceejay
f07fd64ffb Make trigger have sensible defaults when dragged on. 2015-03-21 19:27:39 +00:00
Nick O'Leary
36f299c031 Improve core test coverage 2015-03-21 17:42:06 +00:00
Nick O'Leary
78cf310c58 Collapse palette category when emptied 2015-03-20 23:12:52 +00:00
Nick O'Leary
18a3d71024 Double-click on subflow palette node to open flow 2015-03-20 23:11:24 +00:00
Nick O'Leary
26db1048f9 Remove dialog close button via css not jquery 2015-03-20 23:11:03 +00:00
Nick O'Leary
b61a250d58 Debug message formatting mangling brackets 2015-03-20 22:09:58 +00:00
Nick O'Leary
1d10eba0cc Propagate changed flag to parent subflow 2015-03-20 21:20:04 +00:00
Nick O'Leary
35042132fa Make node-info properties collapsable in sidebar 2015-03-20 21:13:00 +00:00
Nick O'Leary
57c049b49f Palette filter on label as well as id 2015-03-20 11:40:34 +00:00
Nick O'Leary
7a0ce0c957 Update style of nodes in palette to match workspace 2015-03-20 11:37:47 +00:00
Nick O'Leary
eb4cadb0b5 Propagate valid flag to parent subflows 2015-03-19 23:11:55 +00:00
Nick O'Leary
ac0ca083c0 Import of subflow loses certain internal wires
Wires between subflow inputs and outputs are getting lost when
JSON is imported.
2015-03-19 22:59:09 +00:00
dceejay
9afb4a9315 reverse overide behaviour on file, http and email. Node properties now
have priority. Warn user if msg.property tries to override. 
Warning should  be removed at next major verion bump.
2015-03-19 21:25:43 +00:00
dceejay
df065e94b7 add extra tests to user_spec to test some else conditions. 2015-03-19 19:57:41 +00:00
dceejay
a9789697e7 add bcrypt as optional dependency to speed up Pi,
but not force compile on Windows.
Fix to close Issue #585
2015-03-19 11:36:48 +00:00
Nick O'Leary
2d91be8814 Disable node buttons in subflow view
Closes #592
2015-03-19 11:19:44 +00:00
Nick O'Leary
5c58b0c2f4 Revalidate all config node users after edit 2015-03-19 10:49:56 +00:00
Nick O'Leary
f0139f9808 Add multi-rule support to Change node 2015-03-18 16:20:50 +00:00
dceejay
5610a3184e small spelling mistake in deploy.js 2015-03-17 15:38:31 +00:00
Nick O'Leary
b202c73708 Allow access_token to be provided in url 2015-03-17 15:15:24 +00:00
Nick O'Leary
dd4cec84bf Add node.send/on to Function node 2015-03-17 13:40:12 +00:00
Nick O'Leary
a1dac1e290 Resize ace editor on dialog-open 2015-03-17 13:36:50 +00:00
Nick O'Leary
e199d6725e Test helper - initialise credentials with express instance 2015-03-16 21:57:31 +00:00
dceejay
aef38b945d Change http request node info to suggest {{{ rather than {{ to supress
html escape when forming urls from mustache.
2015-03-16 20:22:25 +00:00
dceejay
cd5eac2cbb Add type and size reporting to the file watch node. 2015-03-16 20:21:05 +00:00
dceejay
8fea443e71 Add error msg to rpi node 2015-03-16 17:09:13 +00:00
dceejay
2a47951e46 make sure MQTT msg has a topic 2015-03-16 17:07:46 +00:00
dceejay
5234fda266 Tidy up arduino node slightly and update settings example to work nicer
with JohnnyFive
2015-03-16 17:07:17 +00:00
Nick O'Leary
e63067cd9f Add OS X command symbol to keyboard dialog 2015-03-16 15:40:25 +00:00
Nick O'Leary
be61cf6a88 Add node.error handling to core nodes 2015-03-16 13:58:01 +00:00
Nick O'Leary
5efc89d514 Warn when leaving editor with undeployed changes 2015-03-15 23:48:02 +00:00
Nick O'Leary
9c104faff3 Use RED.nodes.filterLinks in pref to RED.nodes.eachLink 2015-03-15 23:41:16 +00:00
Nick O'Leary
cf8fe16b09 Remove direct access to RED.nodes.nodes/links
- Adds RED.nodes.filterNodes and RED.nodes.filterLinks for
   doing simply queries to find elements that match a criteria
2015-03-15 23:31:38 +00:00
Nick O'Leary
71db193675 Move user menu creation to user module 2015-03-15 23:07:57 +00:00
Nick O'Leary
9952d9451e Move deploy menu/action to own module 2015-03-15 22:54:55 +00:00
Nick O'Leary
fb738ad9fa Track dirty state in RED.nodes not RED.view
- add 'change' event on RED.nodes for tracking dirty state change
2015-03-15 21:54:36 +00:00
Nick O'Leary
46f2f752b0 Node on deleted tab not removed on partial deploy 2015-03-15 21:27:11 +00:00
Nick O'Leary
42730b8fce Move external drag/drop to clipboard module 2015-03-14 22:53:31 +00:00
Nick O'Leary
1c2be579d9 Move keyboard shortcut dialog to keyboard module 2015-03-14 22:16:07 +00:00
Nick O'Leary
51e891ff88 Move sessionStorageModule into main storageModule
Fixes #586

 - add get/saveSessions to main storage module
 - handle storage modules without those functions
 - store .session file in userDir
2015-03-13 23:37:59 +00:00
Nick O'Leary
731efe1c01 Add credential extract unit tests 2015-03-13 21:26:50 +00:00
Nick O'Leary
f77dd06e65 Partial deploy with missing type breaks flow diff
Another refactor of Flow lifecycle.
 - diffFlow made a private static function
 - applyConfig now diffConfig - which returns a diff object that
   can be passed to .stop/.start to be properly applied
2015-03-13 17:54:58 +00:00
Nick O'Leary
af20f3df64 Partial deploy with missing node type breaks deploy 2015-03-13 13:15:20 +00:00
Nick O'Leary
4078212089 Split cliboard and workspaces out of editor view 2015-03-12 23:38:37 +00:00
Nick O'Leary
7bdb3181e2 Don't reload page on enter in subflow dialog 2015-03-12 17:23:17 +00:00
Nick O'Leary
933608aec1 Disable buttons of nodes with undeployed changes 2015-03-12 13:58:53 +00:00
Nick O'Leary
1d7f06bbba Redraw unselected link when joining nodes starts 2015-03-12 13:35:39 +00:00
Nick O'Leary
f26cadab7f Minimise link redrawing 2015-03-12 13:26:31 +00:00
Nick O'Leary
eacf41a4f6 Minimise filtering of nodes on redraw 2015-03-12 11:21:05 +00:00
Nick O'Leary
ab3e64271b Move subflow handling to own module 2015-03-12 00:09:30 +00:00
Nick O'Leary
e26ea14104 Undo subflow rename not reflected in palette 2015-03-12 00:09:30 +00:00
dceejay
3967e23828 change settings to replace commented out arduino library
with johnny-five to match example in docs to make life easier.
2015-03-11 17:49:06 +00:00
dceejay
1f8c6f87c9 add don't add payload to exec node
to close #578
2015-03-11 17:43:42 +00:00
Nick O'Leary
f6203fe60a Allow a config-node be marked as not required 2015-03-09 20:42:23 +00:00
Nick O'Leary
06bf710515 Improve editor dialog auto-sizing 2015-03-09 20:41:57 +00:00
Nick O'Leary
0f3cc3196c Log-in window incorrect
fixes #583
2015-03-09 20:02:13 +00:00
dceejay
4403a00651 Revert change to http until we fully deprecate msg/node priorities
Fix to close #582
2015-03-08 18:36:35 +00:00
dceejay
9c46feb22b more tests for log and Node 2015-03-08 16:53:48 +00:00
dceejay
10277aa956 revert/redo tests for api/index, log and Node_spec 2015-03-08 15:26:47 +00:00
Nick O'Leary
ff093d98c6 Merge pull request #576 from Belphemur/function-logger
Adding an Object Node to the sandbox of a function node
2015-03-07 23:37:00 +00:00
dceejay
acc0e0875b few more tests for permissions and strategies
reset log flags at end of log test
2015-03-07 13:22:21 +00:00
dceejay
69f85bd688 boost api index, nodes index and nodes Node test coverage 2015-03-06 22:58:30 +00:00
dceejay
910d983b82 More tests for red, log, info and util. 2015-03-06 14:14:47 +00:00
dceejay
128415bc9e back out some changes to red_spec test while investigate fail on v0.8 2015-03-06 10:51:57 +00:00
dceejay
082ce798d8 slightly enhance test coverage for info and log and settings. 2015-03-06 10:18:33 +00:00
dceejay
234abd82a2 Move away from __defineGetter syntax, in red and server
Bump test coverage forwards a bit
2015-03-06 10:17:00 +00:00
dceejay
3cbc1bbb1b Add ipv6 support to udp node 2015-03-05 13:07:38 +00:00
Antoine Aflalo
0ed9f6cc4f Adding an Object node to the sandbox of a function node
Permit the user of the sandbox to log using the Function Node.
Test provided and working.

Fix Display warning message in the debug log
Before they were displayed as error instead of warning
2015-03-05 09:50:11 +02:00
Nick O'Leary
10b092a9a7 Ignore 'type' when detecting config nodes 2015-03-04 22:38:53 +00:00
Nick O'Leary
444a897410 Resort to NODE_RED_HOME if User HOME not found
Fixes #575
2015-03-04 21:47:38 +00:00
Nick O'Leary
e013afb053 Import/Export dialogs cannot be cancelled
Fixes #577
2015-03-04 21:44:14 +00:00
Nick O'Leary
34364f5627 Allow node to register multiple close handlers
Closes #573
2015-03-04 21:42:11 +00:00
Nick O'Leary
cef378d820 Add selection-changed event on RED.view 2015-03-04 13:22:32 +00:00
Nick O'Leary
a27353c166 Add onadd/onremove event handlers to node definitions 2015-03-04 13:22:29 +00:00
dceejay
bbd197c71d Note in info that MQTT node can support binary. 2015-03-03 15:56:42 +00:00
Nick O'Leary
fabf013714 Allow the main view hold keyboard focus 2015-03-02 22:55:34 +00:00
dceejay
81dcfecb4e Catch very early exit null pointer when ctrl-c hit during startup. 2015-03-02 17:32:22 +00:00
Nick O'Leary
971a62ebc9 Merge pull request #571 from knolleary/errnode
Add Catch node
2015-02-26 22:58:03 +00:00
Nick O'Leary
04f2c92ba6 Add subflow/catch node tests 2015-02-26 22:40:54 +00:00
Nick O'Leary
00d0f8cfc7 Invoke catch node only when msg is provided 2015-02-26 22:40:54 +00:00
Nick O'Leary
c5c404ea05 Update catch node icon and help text 2015-02-26 22:40:54 +00:00
Nick O'Leary
c80a44933c Add errorHandler tests 2015-02-26 22:40:54 +00:00
Nick O'Leary
5599b999ec Add catch node 2015-02-26 22:40:53 +00:00
Nick O'Leary
172cbdaa84 Merge pull request #574 from knolleary/editor
Migrate to ACE editor
2015-02-26 22:27:02 +00:00
Nick O'Leary
a3c4f12764 Bump 0.10.4 2015-02-26 21:39:30 +00:00
Nick O'Leary
bf1cd457cd Add RED.editor.createEditor utility function 2015-02-26 21:29:56 +00:00
dceejay
8af50a51ba add validation triangle to ace function editor on errors 2015-02-26 17:08:50 +00:00
Nick O'Leary
ddf31e87b2 Update core nodes to use ACE editor 2015-02-26 17:08:50 +00:00
Nick O'Leary
5adbc012f3 Add ACE editor 2015-02-26 17:08:50 +00:00
Nick O'Leary
393fc349b9 Fix saving for node-library content 2015-02-26 17:08:20 +00:00
dceejay
dfed4963ed fix big labelling issue with Pi + pins ... 2015-02-26 14:18:49 +00:00
dceejay
131adb6f4e let email node mark mail as read
(for the ones it reads)
2015-02-26 14:18:49 +00:00
dceejay
a8b3cbb683 remove unecessary require from serial node 2015-02-26 14:18:49 +00:00
Nick O'Leary
e97d5c7354 Rename node-red wrapper to node-red-pi 2015-02-26 13:41:01 +00:00
Nick O'Leary
061c44f958 Move shebang to the correct red.js 2015-02-26 13:24:38 +00:00
Nick O'Leary
f5d8433341 Add node-red-pi command 2015-02-26 11:38:05 +00:00
Nick O'Leary
f78a71e8ed Load flows file from userDir when appropriate 2015-02-26 11:30:20 +00:00
Nick O'Leary
4d48c72146 Add node-red script
Needed to allow arguments to be passed to the node
engine, which isn't possible if red.js is run with
a #! line.
2015-02-25 22:37:56 +00:00
dceejay
71ff828947 Tidy up all console.log util.log from core nodes.
Try to make log,warn,error more consistent behaviour.

Especially make sure any existing catches produce errors
2015-02-25 19:10:59 +00:00
Nick O'Leary
b6245bdef7 Remove console.log from XML test spec 2015-02-25 14:25:37 +00:00
Nick O'Leary
ce1cd1ab9c Change default data dir
Changes the default location for user data to $HOME/.node-red.
2015-02-25 14:25:01 +00:00
dceejay
54b0debb3b Re-order palette categories, move subflows to top of list. 2015-02-25 10:10:10 +00:00
Nick O'Leary
1876b56022 Fix jshint error 2015-02-24 23:06:07 +00:00
Nick O'Leary
d148a23ed6 Handle config nodes appearing out of order in flow
The editor ensures config nodes appear first in the flow file. The
code in the runtime and editor assumes this to be the case, so that
when a node is instantiated that requires a config node, it can assume
the config node already exists.

This change allows a config node to appear in the flow file after a
node that wants to use it. In both the editor and runtime, the code
now scans for config nodes and handles them first.
2015-02-24 23:04:55 +00:00
dceejay
049a5f1be6 revert small whitespace change to server start messages. 2015-02-24 22:22:16 +00:00
Nick O'Leary
f3880b7601 Fix credential pruning and start/stop log messages 2015-02-24 22:03:04 +00:00
dceejay
fbb45a8961 make udp node consistent with it's info.... (re params passed out) 2015-02-24 13:22:48 +00:00
dceejay
b8c460b825 pass original url request through http request node
(will be useful when we handle errors... ;-)
2015-02-24 13:20:33 +00:00
523 changed files with 72426 additions and 25394 deletions

24
.gitignore vendored
View File

@@ -1,11 +1,19 @@
node_modules
credentials.json
flows*.json
.DS_store
.config.json
.dist
.jshintignore
.npm
.project
.sessions.json
.settings
.tern-project
*.backup
*_cred*
coverage
credentials.json
flows*.json
nodes/node-red-nodes/
.npm
/coverage
.config.json
.sessions.json
node_modules
public
locales/zz-ZZ
nodes/core/locales/zz-ZZ

19
.jshintrc Normal file
View File

@@ -0,0 +1,19 @@
{
"asi": true, // allow missing semicolons
"curly": true, // require braces
"eqnull": true, // ignore ==null
//"eqeqeq": true, // enforce ===
"freeze": true, // don't allow override
"indent": 4, // default indent of 4
"forin": true, // require property filtering in "for in" loops
"immed": true, // require immediate functions to be wrapped in ( )
"nonbsp": true, // warn on unexpected whitespace breaking chars
//"strict": true, // commented out for now as it causes 100s of warnings, but want to get there eventually
//"unused": true, // Check for unused functions and variables
"loopfunc": true, // allow functions to be defined in loops
//"expr": true, // allow ternery operator syntax...
"shadow": true, // allow variable shadowing (re-use of names...)
"sub": true, // don't warn that foo['bar'] should be written as foo.bar
"proto": true, // allow setting of __proto__ in node < v0.12,
"esversion": 6 // allow es6
}

View File

@@ -1,4 +1,5 @@
.git/*
*.json
lib/*
/Gruntfile.js
/.git/*
/lib/*
*.backup
/public/*

7
.npmignore Normal file
View File

@@ -0,0 +1,7 @@
.settings
.jshintignore
.jshintrc
.project
.tern-project
.travis.yml
.git

View File

@@ -1,9 +1,19 @@
sudo: false
language: node_js
before_install:
- npm install -g npm@~1.4.18
env:
- CXX="g++-4.8"
addons:
apt:
sources:
- ubuntu-toolchain-r-test
packages:
- g++-4.8
- gcc-4.8
node_js:
- "0.10"
- "0.8"
- "8"
- "7"
- "6"
- "4"
script:
- istanbul cover ./node_modules/.bin/grunt --report lcovonly && istanbul report text && ( cat coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js || true ) && rm -rf coverage
before_script:

914
CHANGELOG.md Normal file
View File

@@ -0,0 +1,914 @@
#### 0.17.1: Maintenance Release
- Fix PI gpio to use BCM
- Prevent event thread contention when sending to Debug node Closes #1311
- 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
- Return flow rev on reload api when api v2 enabled Closes #1273
- 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
- Strip BOM character from JSON files if present Fixes #1239
- Version check no meta (#1243)
- Ensure all nodes have access to global context Fixes #1230
- Don't process subscription for unauthenticated comms link Fixes #851
- Clone credentials when passing to node Fixes #1198
- 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
- Treat missing msg properties as undefined rather than throw error Fixes #1167
- 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
- Handle IncomingMessage/ServerResponse object types in debug Fixes #1202
- Toggling debug node enabled/disabled state should set state dirty Fixes #1203
- 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
- Handle HTTP In url that is missing its leading / Fixes #1218
- Add file upload support to HTTP In node
- HTTP Request node: add info on how to do form encoding
- Prevent unmodified msg.headers from breaking HTTP Request flows Closed #1015
- 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.
- Update follow_redirects to fix http_proxy handling Fixes #1172
- 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
- Add websocketVerifyClient option to enable custom websocket auth Fixes #1127
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)
- Add editorTheme.logout.redirect to allow redirect on logout Closes #1213
- Handle logging out and already logged-out editor Fixes #1288
- Fix bug: Export Subflows (#1282)
- destroy editor to ensure fully removed on close (function, template, comment)
- Don't try to nls status text starting with '.' Fixes #1258
- 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
- Update JSONata to 1.2.4 Closes #1275
- 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
- Ensure custom mustache context parent set in Template node fixes #1126
- 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
- Fix inner reference in install fail message catalog entry Fixes #1120
- 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
- Don't filter debug properties starting with _ Fixes #1117
- Node logged errors not displayed properly in debug pane Fixes #1116
- Do not look for existing nodes when checking for wires on paste Fixes #1114
- -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
- Add option to colourise debug console output Closes #1103
- Add property validation to nodes using typedInput
- Add common validator for typedInput fields Closes #1104
- Update debug node console logging indicator icon Closes #1094
- 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
- Add install/remove dialog to increase friction Closes #1109
- Report node catalogue load errors Closes #1009
- Properly report module remove errors in palette editor Fixes #1043
- 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
- Add notification when runtime stopped due to missing types Part of #832
Fixes
- Do not tie debug src loading to needsPermission Fixes #1111
- Initialise nodeApp regardless of httpAdmin setting Closes #1096 #1095
- Speed up reveal of search dialogs
- Ensure flows exist before delegating status/error events Fixes #1069
- Update package dependencies
- Update MQTT to latest 2.2.1
- Node status not being refreshed properly in the editor
- Try to prevent auto-fill of password fields in node edit tray Fixes #1081
- Fix whitespace in localfilesystem
- fix bug where savesettings did not honor local settings variables (#1073)
- Tidy up unused/duplicate editor messages Closes #922
- Property expressions must not be blank
- Tidy up merge commit of validatePropertyExpression
- add port if wires array > number of ports declared.
- Allow quoted property expressions Fixes #1101
- 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
- Allow a node to reorder its outputs and maintain links Fixes #1031
#### 0.15.3: Maintenance Release
- Tcpgetfix: Another small check (#1070)
- TCPGet: Ensure done() is called only once (#1068)
- Allow $ and _ at start of property identifiers Fixes #1063
- 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
- Revert bidi changes to nodes and hide menu option until fixed Fixes #1024
- Let xml node set options both ways
- Bump serialport to use version 4
- gpio node handle multiple bits of data returned in one go
- HTTP In should pass application/octet-stream as buffer not string Fixes #1023
- 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
- Status messages from nodes in subflows not delegated properly Fixes #1016
- fix spelling in join node info
- Speed up tab scrolling
- Update delay burst test to be more tolerant of timing Fixes #1013
#### 0.15.1: Maintenance Release
- Update default palette catalogue to use https
- Disable palette editor if npm not found - and fix for Windows
- Searching package catalogue should be case-insensitive Fixes #1010
- contenteditable fields not handled in config nodes Fixes #1011
- Change html link refs from `_new` to `_blank` to be standards compliant
#### 0.15.0: Milestone Release
Runtime
- Increase default apiMaxLength to 5mb and add to default settings Closes #1001
- 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)
- Ignore bidi event handling on non-existent and non-Input elements Closes #999
- 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
- Default config nodes to global scope unless in a subflow Closes #972
- 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
- Enable ES6 parsing in Function editor by default Fixes #985
- 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
- Add npm build/test scripts Closes #946 #660
- Move travis to node 6 and 7 - drop 5 and 0.12
#### 0.14.6: Maintenance Release
Fixes
- Tell ace about Function node globals. Closes #927
- Tidy up mqtt nodes - linting and done handling. Closes #935
- 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
- Handle empty credentials file. Closes #937
- 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
- Debug node handles objects without constructor property Fixes #933
- Ensure 'false' property values are displayed in info panel Fixes #940
- 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
- Clarify the MQTT node sends msg.payload - closes #929
- Inject node should reuse the message it is triggered with Closes #914
- Stop trigger node re-using old message
- Allow node.status text to be 'falsey' values
Fixes
- Handle DOMException when embedded in an iframe of different origin Fixes #932
- Fix double firing of menu actions
- Fix select box handling in Safari - fixes #928
- Clear context in node test helper Fixes #858
- Allow node properties to be same as existing object functions Fixes #880
- Handle comms link closing whilst completing the initial connect
- Protect against node type names that clash with Object property names Fixes #917
- 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)
- Ensure importing link nodes to a subflow doesn't add outbound links Fixes #921
- Add updateConfigNodeUsers function to editor
- Scroll to bottom when item added to editableList
- Form input widths behave more consistently when resizing Fixes #919 #920
#### 0.14.3: Maintenance Release
Fixes
- Create default setting.js in user-specified directory. Fixes #908
- MQTT In subscription qos not defaulting properly
- Let exec node handle 0 as well as "0"
#### 0.14.2: Maintenance Release
Fixes
- Cannot add new twitter credentials. Fixes #913
- Support array references in Debug property field
#### 0.14.1: Maintenance Release
Fixes
- Handle undefined property that led to missing wires in the editor
- Remove duplicate 'Delete' entry in keyboard shortcut window. Closes #911
- Add 'exec' to node-red-pi launch script. Closes #910
#### 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
- Add support for loading scoped node modules. Closes #885
- Add process.env.PORT to settings.js
- Clear node context on deploy. Closes #870
- Enable finer grained permissions in adminAuth
Nodes
- Enable config nodes to reference other config nodes
- Add Split/Join nodes
- Add Link nodes
- Add support to HTTP In node for PATCH requests. Closes #904
- Add cookie handling to HTTP In and HTTP Response nodes
- Add repeat indicator to inject node label. Closes #887
- 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
- Capture error stack on node.error. Closes #879
Fixes
- Add error handling to all node definition api calls
- Handle null return from Function node in array of messages
- Defer loading of token sessions until they are accessed. Fixes #895
- set pi gpio pin status correctly if set on start
- Prevent parent window scrolling when view is focused. Fixes #635
- Handle missing tab nodes in a loaded flow config
- Ensure typedInput dropdown doesn't fall off the page
- Protect against node types with reserved names such as toString. Fixes #880
- 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
- Enable link splicing for when import_dragging nodes. Closes #811
- Fix uncaught exception on deploy whilst node sending messages
- Deprecate old mqtt client and connection pool modules
- Change node: add bool/num types to change mode Closes #835
- Validate fields that are `$(env-vars)` Closes #825
- 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
- Warn if editor routes are accessed but runtime not started Closes #816
- Better handling of zero-length flow files Closes #819
- 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
- Ensure errors in node def functions don't break view rendering Fixes #815
- 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
- Validate MQTT In topics Fixes #792
- httpNodeAuth should not block http options requests Fixes #793
- 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
- Allow function properties in settings Fixes #790 - fixes use of httpNodeMiddleware
- 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
- CORS not properly configured on multiple http routes Fixes #783
- 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

74
CODE_OF_CONDUCT.md Normal file
View File

@@ -0,0 +1,74 @@
# Contributor Covenant Code of Conduct
## Our Pledge
In the interest of fostering an open and welcoming environment, we as
contributors and maintainers pledge to making participation in our project and
our community a harassment-free experience for everyone, regardless of age, body
size, disability, ethnicity, gender identity and expression, level of experience,
nationality, personal appearance, race, religion, or sexual identity and
orientation.
## Our Standards
Examples of behavior that contributes to creating a positive environment
include:
* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members
Examples of unacceptable behavior by participants include:
* The use of sexualized language or imagery and unwelcome sexual attention or
advances
* Trolling, insulting/derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or electronic
address, without explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting
## Our Responsibilities
Project maintainers are responsible for clarifying the standards of acceptable
behavior and are expected to take appropriate and fair corrective action in
response to any instances of unacceptable behavior.
Project maintainers have the right and responsibility to remove, edit, or
reject comments, commits, code, wiki edits, issues, and other contributions
that are not aligned to this Code of Conduct, or to ban temporarily or
permanently any contributor for other behaviors that they deem inappropriate,
threatening, offensive, or harmful.
## Scope
This Code of Conduct applies both within project spaces and in public spaces
when an individual is representing the project or its community. Examples of
representing a project or community include using an official project e-mail
address, posting via an official social media account, or acting as an appointed
representative at an online or offline event. Representation of a project may be
further defined and clarified by project maintainers.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported by contacting the project team at team@nodered.org. All
complaints will be reviewed and investigated and will result in a response that
is deemed necessary and appropriate to the circumstances. The project team is
obligated to maintain confidentiality with regard to the reporter of an incident.
Further details of specific enforcement policies may be posted separately.
Project maintainers who do not follow or enforce the Code of Conduct in good
faith may face temporary or permanent repercussions as determined by other
members of the project's leadership.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
available at [http://contributor-covenant.org/version/1/4][version]
[homepage]: http://contributor-covenant.org
[version]: http://contributor-covenant.org/version/1/4/

View File

@@ -6,11 +6,14 @@ We welcome contributions, but request you follow these guidelines.
- [Feature requests](#feature-requests)
- [Pull-Requests](#pull-requests)
- [Contributor License Agreement](#contributor-license-agreement)
This project adheres to the [Contributor Covenant 1.4](http://contributor-covenant.org/version/1/4/).
By participating, you are expected to uphold this code. Please report unacceptable
behavior to any of the [project's core team](https://github.com/orgs/node-red/teams/core).
## Raising issues
Please raise any bug reports on the project's
[issue tracker](https://github.com/node-red/node-red/issues?state=open). Be sure to
Please raise any bug reports on the relevant project's issue tracker. Be sure to
search the list to see if your issue has already been raised.
A good bug report is one that make it easy for us to understand what you were
@@ -25,7 +28,6 @@ At a minimum, please include:
- Version of Node-RED - either release number if you downloaded a zip, or the first few lines of `git log` if you are cloning the repository directly.
- Version of node.js - what does `node -v` say?
## Feature requests
For feature requests, please raise them on the [mailing list](https://groups.google.com/forum/#!forum/node-red).
@@ -33,24 +35,16 @@ For feature requests, please raise them on the [mailing list](https://groups.goo
## Pull-Requests
If you want to raise a pull-request with a new feature, or a refactoring
of existing code, it may well get rejected if you haven't discussed it on
of existing code, it may well get rejected if you haven't discussed it on
the [mailing list](https://groups.google.com/forum/#!forum/node-red) first.
### Contributor License Agreement
All contributors need to sign the JS Foundation's Contributor License Agreement.
It is an online process and quick to do. You can read the details of the agreement
here: https://cla.js.foundation/node-red/node-red.
In order for us to accept pull-requests, the contributor must first complete
a Contributor License Agreement (CLA). This clarifies the intellectual
property license granted with any contribution. It is for your protection as a
Contributor as well as the protection of IBM and its customers; it does not
change your rights to use your own Contributions for any other purpose.
If you raise a pull-request without having signed the CLA, you will be prompted
to do so automatically.
You can download the CLAs here:
- [individual](http://nodered.org/cla/node-red-cla-individual.pdf)
- [corporate](http://nodered.org/cla/node-red-cla-corporate.pdf)
If you are an IBMer, please contact us directly as the contribution process is
slightly different.
### Coding standards
@@ -59,13 +53,5 @@ code base. Some basic rules include:
- all files must have the Apache license in the header.
- indent with 4-spaces, no tabs. No arguments.
- opening brace on same line as `if`/`for`/`function`/etc, closing brace on its
own line.
- opening brace on same line as `if`/`for`/`function` and so on, closing brace
on its own line.

View File

@@ -1,5 +1,5 @@
/**
* Copyright 2013, 2014 IBM Corp.
* Copyright JS Foundation and other contributors, http://js.foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,82 +14,481 @@
* limitations under the License.
**/
var path = require("path");
module.exports = function(grunt) {
// Project configuration.
var nodemonArgs = ["-v"];
var flowFile = grunt.option('flowFile');
if (flowFile) {
nodemonArgs.push(flowFile);
}
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
simplemocha: {
options: {
globals: ['expect'],
timeout: 3000,
ignoreLeaks: false,
ui: 'bdd',
reporter: 'spec'
},
all: { src: ['test/**/*_spec.js'] },
core: { src: ["test/_spec.js","test/red/**/*_spec.js"]},
nodes: { src: ["test/nodes/**/*_spec.js"]}
pkg: grunt.file.readJSON('package.json'),
paths: {
dist: ".dist"
},
simplemocha: {
options: {
globals: ['expect'],
timeout: 3000,
ignoreLeaks: false,
ui: 'bdd',
reporter: 'spec'
},
jshint: {
options: {
// http://www.jshint.com/docs/options/
"asi": true, // allow missing semicolons
"curly": true, // require braces
"eqnull": true, // ignore ==null
"forin": true, // require property filtering in "for in" loops
"immed": true, // require immediate functions to be wrapped in ( )
"nonbsp": true, // warn on unexpected whitespace breaking chars
//"strict": true, // commented out for now as it causes 100s of warnings, but want to get there eventually
"loopfunc": true, // allow functions to be defined in loops
"sub": true // don't warn that foo['bar'] should be written as foo.bar
},
all: [
'Gruntfile.js',
'red.js',
'red/**/*.js',
'nodes/**/*.js',
'public/red/**/*.js'
],
core: {
files: {
src: [
'Gruntfile.js',
'red.js',
'red/**/*.js'
]
}
},
nodes: {
files: {
src: [ 'nodes/**/*.js' ]
}
},
editor: {
files: {
src: [ 'public/red/**/*.js' ]
}
},
tests: {
files: {
src: ['test/**/*.js']
},
options: {
"expr": true
}
all: { src: ['test/**/*_spec.js'] },
core: { src: ["test/_spec.js","test/red/**/*_spec.js"]},
nodes: { src: ["test/nodes/**/*_spec.js"]}
},
mocha_istanbul: {
options: {
globals: ['expect'],
timeout: 3000,
ignoreLeaks: false,
ui: 'bdd',
reportFormats: ['lcov'],
print: 'both'
},
coverage: { src: ['test/**/*_spec.js'] }
},
jshint: {
options: {
jshintrc:true
// http://www.jshint.com/docs/options/
//"asi": true, // allow missing semicolons
//"curly": true, // require braces
//"eqnull": true, // ignore ==null
//"forin": true, // require property filtering in "for in" loops
//"immed": true, // require immediate functions to be wrapped in ( )
//"nonbsp": true, // warn on unexpected whitespace breaking chars
////"strict": true, // commented out for now as it causes 100s of warnings, but want to get there eventually
//"loopfunc": true, // allow functions to be defined in loops
//"sub": true // don't warn that foo['bar'] should be written as foo.bar
},
all: [
'Gruntfile.js',
'red.js',
'red/**/*.js',
'nodes/core/*/*.js',
'editor/js/**/*.js'
],
core: {
files: {
src: [
'Gruntfile.js',
'red.js',
'red/**/*.js'
]
}
},
nodes: {
files: {
src: [ 'nodes/core/*/*.js' ]
}
},
editor: {
files: {
src: [ 'editor/js/**/*.js' ]
}
},
tests: {
files: {
src: ['test/**/*.js']
},
options: {
"expr": true
}
}
},
concat: {
options: {
separator: ";",
},
build: {
src: [
// Ensure editor source files are concatenated in
// the right order
"editor/js/red.js",
"editor/js/events.js",
"editor/js/i18n.js",
"editor/js/settings.js",
"editor/js/user.js",
"editor/js/comms.js",
"editor/js/text/bidi.js",
"editor/js/text/format.js",
"editor/js/ui/state.js",
"editor/js/nodes.js",
"editor/js/history.js",
"editor/js/validators.js",
"editor/js/ui/utils.js",
"editor/js/ui/common/editableList.js",
"editor/js/ui/common/checkboxSet.js",
"editor/js/ui/common/menu.js",
"editor/js/ui/common/panels.js",
"editor/js/ui/common/popover.js",
"editor/js/ui/common/searchBox.js",
"editor/js/ui/common/tabs.js",
"editor/js/ui/common/stack.js",
"editor/js/ui/common/typedInput.js",
"editor/js/ui/actions.js",
"editor/js/ui/deploy.js",
"editor/js/ui/diff.js",
"editor/js/ui/keyboard.js",
"editor/js/ui/workspaces.js",
"editor/js/ui/view.js",
"editor/js/ui/sidebar.js",
"editor/js/ui/palette.js",
"editor/js/ui/tab-info.js",
"editor/js/ui/tab-config.js",
"editor/js/ui/palette-editor.js",
"editor/js/ui/editor.js",
"editor/js/ui/tray.js",
"editor/js/ui/clipboard.js",
"editor/js/ui/library.js",
"editor/js/ui/notifications.js",
"editor/js/ui/search.js",
"editor/js/ui/typeSearch.js",
"editor/js/ui/subflow.js",
"editor/js/ui/userSettings.js",
"editor/js/ui/touch/radialMenu.js"
],
dest: "public/red/red.js"
},
vendor: {
files: {
"public/vendor/vendor.js": [
"editor/vendor/jquery/js/jquery-1.11.3.min.js",
"editor/vendor/bootstrap/js/bootstrap.min.js",
"editor/vendor/jquery/js/jquery-ui-1.10.3.custom.min.js",
"editor/vendor/jquery/js/jquery.ui.touch-punch.min.js",
"editor/vendor/marked/marked.min.js",
"editor/vendor/d3/d3.v3.min.js",
"editor/vendor/i18next/i18next.min.js"
],
"public/vendor/vendor.css": [
// TODO: resolve relative resource paths in
// bootstrap/FA/jquery
],
"public/vendor/jsonata/jsonata.min.js": [
"node_modules/jsonata/jsonata-es5.min.js",
"editor/vendor/jsonata/formatter.js"
],
"public/vendor/ace/worker-jsonata.js": [
"node_modules/jsonata/jsonata-es5.min.js",
"editor/vendor/jsonata/worker-jsonata.js"
]
}
}
},
uglify: {
build: {
files: {
'public/red/red.min.js': 'public/red/red.js',
'public/red/main.min.js': 'public/red/main.js',
'public/vendor/ace/mode-jsonata.js': 'editor/vendor/jsonata/mode-jsonata.js',
'public/vendor/ace/snippets/jsonata.js': 'editor/vendor/jsonata/snippets-jsonata.js'
}
}
},
sass: {
build: {
options: {
outputStyle: 'compressed'
},
files: [{
dest: 'public/red/style.min.css',
src: 'editor/sass/style.scss'
},
{
dest: 'public/vendor/bootstrap/css/bootstrap.min.css',
src: 'editor/vendor/bootstrap/css/bootstrap.css'
}]
}
},
jsonlint: {
messages: {
src: [
'nodes/core/locales/en-US/messages.json',
'red/api/locales/en-US/editor.json',
'red/runtime/locales/en-US/runtime.json'
]
},
keymaps: {
src: [
'editor/js/keymap.json'
]
}
},
attachCopyright: {
js: {
src: [
'public/red/red.min.js',
'public/red/main.min.js'
]
},
css: {
src: [
'public/red/style.min.css'
]
}
},
clean: {
build: {
src: [
"public/red",
"public/index.html",
"public/favicon.ico",
"public/icons",
"public/vendor"
]
},
release: {
src: [
'<%= paths.dist %>'
]
}
},
watch: {
js: {
files: [
'editor/js/**/*.js'
],
tasks: ['copy:build','concat','uglify','attachCopyright:js']
},
sass: {
files: [
'editor/sass/**/*.scss'
],
tasks: ['sass','attachCopyright:css']
},
json: {
files: [
'nodes/core/locales/en-US/messages.json',
'red/api/locales/en-US/editor.json',
'red/runtime/locales/en-US/runtime.json'
],
tasks: ['jsonlint:messages']
},
keymaps: {
files: [
'editor/js/keymap.json'
],
tasks: ['jsonlint:keymaps','copy:build']
},
misc: {
files: [
'CHANGELOG.md'
],
tasks: ['copy:build']
}
},
nodemon: {
/* uses .nodemonignore */
dev: {
script: 'red.js',
options: {
args: nodemonArgs,
ext: 'js,html,json',
watch: [
'red','nodes'
]
}
}
},
concurrent: {
dev: {
tasks: ['nodemon', 'watch'],
options: {
logConcurrentOutput: true
}
}
},
copy: {
build: {
files:[
{
src: 'editor/js/main.js',
dest: 'public/red/main.js'
},
{
src: 'editor/js/keymap.json',
dest: 'public/red/keymap.json'
},
{
cwd: 'editor/images',
src: '**',
expand: true,
dest: 'public/red/images/'
},
{
cwd: 'editor/vendor',
src: [
'ace/**',
//'bootstrap/css/**',
'bootstrap/img/**',
'jquery/css/**',
'font-awesome/**'
],
expand: true,
dest: 'public/vendor/'
},
{
cwd: 'editor/icons',
src: '**',
expand: true,
dest: 'public/icons/'
},
{
expand: true,
src: ['editor/index.html','editor/favicon.ico'],
dest: 'public/',
flatten: true
},
{
src: 'CHANGELOG.md',
dest: 'public/red/about'
}
]
},
release: {
files: [{
mode: true,
expand: true,
src: [
'*.md',
'LICENSE',
'package.json',
'settings.js',
'red.js',
'lib/.gitignore',
'nodes/*.demo',
'nodes/core/**',
'red/**',
'public/**',
'editor/templates/**',
'bin/**'
],
dest: path.resolve('<%= paths.dist %>/node-red-<%= pkg.version %>')
}]
}
},
chmod: {
options: {
mode: '755'
},
release: {
// Target-specific file/dir lists and/or options go here.
src: [
path.resolve('<%= paths.dist %>/node-red-<%= pkg.version %>/nodes/core/hardware/nrgpio*')
]
}
},
compress: {
release: {
options: {
archive: '<%= paths.dist %>/node-red-<%= pkg.version %>.zip'
},
expand: true,
cwd: '<%= paths.dist %>/',
src: ['node-red-<%= pkg.version %>/**']
}
}
});
grunt.loadNpmTasks('grunt-simple-mocha');
grunt.loadNpmTasks('grunt-contrib-jshint');
grunt.registerTask('default', ['test-core','test-editor','test-nodes']);
grunt.registerTask('test-core', ['jshint:core','simplemocha:core']);
grunt.registerTask('test-editor', ['jshint:editor']);
grunt.registerTask('test-nodes', ['simplemocha:nodes']);
grunt.loadNpmTasks('grunt-contrib-concat');
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-contrib-clean');
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.loadNpmTasks('grunt-concurrent');
grunt.loadNpmTasks('grunt-sass');
grunt.loadNpmTasks('grunt-nodemon');
grunt.loadNpmTasks('grunt-contrib-compress');
grunt.loadNpmTasks('grunt-contrib-copy');
grunt.loadNpmTasks('grunt-chmod');
grunt.loadNpmTasks('grunt-jsonlint');
grunt.loadNpmTasks('grunt-mocha-istanbul');
grunt.registerMultiTask('attachCopyright', function() {
var files = this.data.src;
var copyright = "/**\n"+
" * Copyright JS Foundation and other contributors, http://js.foundation\n"+
" *\n"+
" * Licensed under the Apache License, Version 2.0 (the \"License\");\n"+
" * you may not use this file except in compliance with the License.\n"+
" * You may obtain a copy of the License at\n"+
" *\n"+
" * http://www.apache.org/licenses/LICENSE-2.0\n"+
" *\n"+
" * Unless required by applicable law or agreed to in writing, software\n"+
" * distributed under the License is distributed on an \"AS IS\" BASIS,\n"+
" * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n"+
" * See the License for the specific language governing permissions and\n"+
" * limitations under the License.\n"+
" **/\n";
if (files) {
for (var i=0; i<files.length; i++) {
var file = files[i];
if (!grunt.file.exists(file)) {
grunt.log.warn('File '+ file + ' not found');
return false;
} else {
var content = grunt.file.read(file);
if (content.indexOf(copyright) == -1) {
content = copyright+content;
if (!grunt.file.write(file, content)) {
return false;
}
grunt.log.writeln("Attached copyright to "+file);
} else {
grunt.log.writeln("Copyright already on "+file);
}
}
}
}
});
grunt.registerTask('setDevEnv',
'Sets NODE_ENV=development so non-minified assets are used',
function () {
process.env.NODE_ENV = 'development';
});
grunt.registerTask('default',
'Builds editor content then runs code style checks and unit tests on all components',
['build','test-core','test-editor','test-nodes']);
grunt.registerTask('test-core',
'Runs code style check and unit tests on core runtime code',
['jshint:core','simplemocha:core']);
grunt.registerTask('test-editor',
'Runs code style check on editor code',
['jshint:editor']);
grunt.registerTask('test-nodes',
'Runs unit tests on core nodes',
['simplemocha:nodes']);
grunt.registerTask('build',
'Builds editor content',
['clean:build','jsonlint','concat:build','concat:vendor','copy:build','uglify:build','sass:build','attachCopyright']);
grunt.registerTask('dev',
'Developer mode: run node-red, watch for source changes and build/restart',
['build','setDevEnv','concurrent:dev']);
grunt.registerTask('release',
'Create distribution zip file',
['build','clean:release','copy:release','chmod:release','compress:release']);
grunt.registerTask('coverage',
'Run Istanbul code test coverage task',
['build','mocha_istanbul']);
};

View File

@@ -1,57 +0,0 @@
Node-RED Install
================
## Install node.js
You can get the latest version from <http://nodejs.org/download/>.
Or, you may want to use a version from your operating system's package manager:
<https://github.com/joyent/node/wiki/Installing-Node.js-via-package-manager>
## Get Node-RED
Clone the repository from GitHub:
$ git clone git@github.com:node-red/node-red.git
## Install the pre-requisite modules
From the top-level directory of Node-RED, run:
$ npm install
This will install the core pre-requisite modules.
## Run Node-RED
From the top-level directory, run:
$ node red.js
You can then access Node-RED at <http://localhost:1880>.
Online documentation is available at <http://nodered.org/docs>.
## Installing individual node dependencies
When Node-RED starts, it attempts to load the nodes from the `nodes/` directory.
Each will have its own set of dependencies that will need to be installed before
the node is available in the palette.
To help identify the dependencies, Node-RED logs any modules it fails to find
for a particular node. You don't have to install these unless you want or need
that node to appear.
Alternatively, a node's `.js` file can be examined to identify the modules it
explicitly requires. For example, the Twitter node is defined in
`nodes/social/27-twitter.js` and contains:
var RED = require("../../red/red");
var ntwitter = require('ntwitter');
var OAuth= require('oauth').OAuth;
Of these, `ntwitter` and `oauth` are neither built-in modules nor ones provided
by Node-RED itself. They can subsequently be installed by running:
$ npm install ntwitter oauth

View File

@@ -1,3 +1,4 @@
Copyright JS Foundation and other contributors, http://js.foundation
Apache License
Version 2.0, January 2004

View File

@@ -2,49 +2,73 @@
http://nodered.org
[![Build Status](https://travis-ci.org/node-red/node-red.png)](https://travis-ci.org/node-red/node-red) [![Coverage Status](https://coveralls.io/repos/node-red/node-red/badge.png?branch=master)](https://coveralls.io/r/node-red/node-red?branch=master)
[![Build Status](https://travis-ci.org/node-red/node-red.svg)](https://travis-ci.org/node-red/node-red)
[![Coverage Status](https://coveralls.io/repos/node-red/node-red/badge.svg?branch=master)](https://coveralls.io/r/node-red/node-red?branch=master)
A visual tool for wiring the Internet of Things.
![Screenshot](http://nodered.org/images/node-red-screenshot.png "Node-RED: A visual tool for wiring the Internet of Things")
![Node-RED: A visual tool for wiring the Internet of Things](http://nodered.org/images/node-red-screenshot.png)
## Quick Start
Check out [INSTALL](INSTALL.md) for full instructions on getting started.
Check out http://nodered.org/docs/getting-started/ for full instructions on getting
started.
1. download the zip and unzip, or git clone
2. cd node-red
3. npm install
4. node red.js
5. Open <http://localhost:1880>
1. `sudo npm install -g node-red`
2. `node-red`
3. Open <http://localhost:1880>
## Getting Help
More documentation can be found [here](http://nodered.org/docs).
For further help, or general discussion, please use the [mailing list](https://groups.google.com/forum/#!forum/node-red).
For further help, or general discussion, please use the
[mailing list](https://groups.google.com/forum/#!forum/node-red).
## Browser Support
## Developers
The Node-RED editor runs in the browser. We routinely develop and test using
Chrome and Firefox. We have anecdotal evidence that it works in recent versions of IE.
If you want to run the latest code from git, here's how to get started:
We have basic support for using in mobile/tablet browsers.
1. Clone the code:
git clone https://github.com/node-red/node-red.git
cd node-red
2. Install the node-red dependencies
npm install
3. Build the code
npm run build
4. Run
npm start
or
node red.js
## Contributing
Before raising a pull-request, please read our [contributing guide](https://github.com/node-red/node-red/blob/master/CONTRIBUTING.md).
Before raising a pull-request, please read our
[contributing guide](https://github.com/node-red/node-red/blob/master/CONTRIBUTING.md).
This project adheres to the [Contributor Covenant 1.4](http://contributor-covenant.org/version/1/4/).
By participating, you are expected to uphold this code. Please report unacceptable
behavior to any of the [project's core team](https://github.com/orgs/node-red/teams/core).
## Authors
Node-RED is a creation of [IBM Emerging Technology](http://ibm.com/blogs/et).
Node-RED is a project of the [JS Foundation](http://js.foundation).
It was created by [IBM Emerging Technology](https://www.ibm.com/blogs/emerging-technology/).
* Nick O'Leary [@knolleary](http://twitter.com/knolleary)
* Dave Conway-Jones [@ceejay](http://twitter.com/ceejay)
For more open-source projects from IBM, head over [here](http://ibm.github.io).
## Copyright and license
Copyright 2013, 2015 IBM Corp. under [the Apache 2.0 license](LICENSE).
Copyright JS Foundation and other contributors, http://js.foundation under [the Apache 2.0 license](LICENSE).

43
bin/node-red-pi Executable file
View File

@@ -0,0 +1,43 @@
#!/bin/bash
#
# Copyright JS Foundation and other contributors, http://js.foundation
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# Separate out node/v8 options from node-red ones
OPTIONS=""
ARGS=""
for arg in "$@"
do
case $arg in
--userDir|--settings|--help) ARGS="$ARGS $arg";;
--*) OPTIONS="$OPTIONS $arg";;
*) ARGS="$ARGS $arg";;
esac
done
# Find the real location of this script
CURRENT_PATH=`pwd`
SCRIPT_PATH="${BASH_SOURCE[0]}";
while([ -h "${SCRIPT_PATH}" ]); do
cd "`dirname "${SCRIPT_PATH}"`"
SCRIPT_PATH="$(readlink "`basename "${SCRIPT_PATH}"`")";
done
cd "`dirname "${SCRIPT_PATH}"`" > /dev/null
SCRIPT_PATH="`pwd`";
cd $CURRENT_PATH
# Run Node-RED
exec /usr/bin/env node $OPTIONS $SCRIPT_PATH/../red.js $ARGS

BIN
editor/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

View File

Before

Width:  |  Height:  |  Size: 308 B

After

Width:  |  Height:  |  Size: 308 B

View File

Before

Width:  |  Height:  |  Size: 603 B

After

Width:  |  Height:  |  Size: 603 B

View File

Before

Width:  |  Height:  |  Size: 393 B

After

Width:  |  Height:  |  Size: 393 B

View File

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 508 B

View File

Before

Width:  |  Height:  |  Size: 575 B

After

Width:  |  Height:  |  Size: 575 B

BIN
editor/icons/cog.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 493 B

View File

Before

Width:  |  Height:  |  Size: 601 B

After

Width:  |  Height:  |  Size: 601 B

View File

Before

Width:  |  Height:  |  Size: 459 B

After

Width:  |  Height:  |  Size: 459 B

View File

Before

Width:  |  Height:  |  Size: 218 B

After

Width:  |  Height:  |  Size: 218 B

View File

Before

Width:  |  Height:  |  Size: 324 B

After

Width:  |  Height:  |  Size: 324 B

View File

Before

Width:  |  Height:  |  Size: 378 B

After

Width:  |  Height:  |  Size: 378 B

View File

Before

Width:  |  Height:  |  Size: 255 B

After

Width:  |  Height:  |  Size: 255 B

View File

Before

Width:  |  Height:  |  Size: 457 B

After

Width:  |  Height:  |  Size: 457 B

View File

Before

Width:  |  Height:  |  Size: 502 B

After

Width:  |  Height:  |  Size: 502 B

View File

Before

Width:  |  Height:  |  Size: 449 B

After

Width:  |  Height:  |  Size: 449 B

BIN
editor/icons/join.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 253 B

View File

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

Before

Width:  |  Height:  |  Size: 639 B

After

Width:  |  Height:  |  Size: 639 B

BIN
editor/icons/link-out.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 402 B

View File

Before

Width:  |  Height:  |  Size: 414 B

After

Width:  |  Height:  |  Size: 414 B

View File

Before

Width:  |  Height:  |  Size: 671 B

After

Width:  |  Height:  |  Size: 671 B

View File

Before

Width:  |  Height:  |  Size: 386 B

After

Width:  |  Height:  |  Size: 386 B

View File

Before

Width:  |  Height:  |  Size: 386 B

After

Width:  |  Height:  |  Size: 386 B

BIN
editor/icons/parser-csv.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 413 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 393 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 467 B

BIN
editor/icons/parser-xml.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 393 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 423 B

View File

Before

Width:  |  Height:  |  Size: 360 B

After

Width:  |  Height:  |  Size: 360 B

View File

Before

Width:  |  Height:  |  Size: 736 B

After

Width:  |  Height:  |  Size: 736 B

View File

Before

Width:  |  Height:  |  Size: 482 B

After

Width:  |  Height:  |  Size: 482 B

View File

Before

Width:  |  Height:  |  Size: 273 B

After

Width:  |  Height:  |  Size: 273 B

BIN
editor/icons/split.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 256 B

View File

Before

Width:  |  Height:  |  Size: 439 B

After

Width:  |  Height:  |  Size: 439 B

View File

Before

Width:  |  Height:  |  Size: 592 B

After

Width:  |  Height:  |  Size: 592 B

View File

Before

Width:  |  Height:  |  Size: 509 B

After

Width:  |  Height:  |  Size: 509 B

View File

Before

Width:  |  Height:  |  Size: 488 B

After

Width:  |  Height:  |  Size: 488 B

View File

Before

Width:  |  Height:  |  Size: 628 B

After

Width:  |  Height:  |  Size: 628 B

View File

Before

Width:  |  Height:  |  Size: 258 B

After

Width:  |  Height:  |  Size: 258 B

View File

Before

Width:  |  Height:  |  Size: 404 B

After

Width:  |  Height:  |  Size: 404 B

View File

Before

Width:  |  Height:  |  Size: 591 B

After

Width:  |  Height:  |  Size: 591 B

View File

Before

Width:  |  Height:  |  Size: 707 B

After

Width:  |  Height:  |  Size: 707 B

View File

Before

Width:  |  Height:  |  Size: 291 B

After

Width:  |  Height:  |  Size: 291 B

View File

Before

Width:  |  Height:  |  Size: 386 B

After

Width:  |  Height:  |  Size: 386 B

View File

Before

Width:  |  Height:  |  Size: 289 B

After

Width:  |  Height:  |  Size: 289 B

View File

Before

Width:  |  Height:  |  Size: 368 B

After

Width:  |  Height:  |  Size: 368 B

View File

Before

Width:  |  Height:  |  Size: 290 B

After

Width:  |  Height:  |  Size: 290 B

View File

Before

Width:  |  Height:  |  Size: 392 B

After

Width:  |  Height:  |  Size: 392 B

BIN
editor/images/grip.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 192 B

View File

Before

Width:  |  Height:  |  Size: 8.3 KiB

After

Width:  |  Height:  |  Size: 8.3 KiB

View File

@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0" y="0" width="480" height="480" viewBox="0, 0, 480, 480">
<g id="Calque_1">
<path d="M408,16 C438.928,16 464,41.072 464,72 L464,408 C464,438.928 438.928,464 408,464 L72,464 C41.072,464 16,438.928 16,408 L16,296.002 L69.339,296.002 C89.715,296.002 105.993,279.497 105.993,259.12 L105.992,242.19 C190.296,243.397 214.83,265.317 241.661,288.777 C267.502,311.375 296.48,335.662 371.989,336.261 L371.993,344.57 C372.002,364.947 388.693,382 409.069,382 L463.991,382 L463.991,356 L409.069,356 C402.189,356 396.991,351.449 396.991,344.569 L396.991,308.32 C396.991,301.44 402.189,296 409.069,296 L463.991,296 L463.991,272 L409.069,272 C388.693,272 372.002,287.943 371.993,308.32 L371.99,316.908 C300.63,316.672 280.362,296.883 254.41,274.189 C232.267,254.825 206.244,233.534 148.914,225.789 C149.412,225.361 149.872,224.945 150.353,224.505 C161.391,214.382 167.343,202.153 173.167,191.593 C178.99,181.034 184.469,172.221 193.444,166.061 C200.725,161.064 211.08,157.338 226.992,156.647 L226.993,165.123 C226.997,185.5 243.431,202.999 263.808,202.999 L411.141,202.999 C431.517,202.999 447.993,185.5 447.993,165.123 L447.993,128.874 C447.993,108.497 431.517,91.999 411.141,91.999 L263.808,91.999 C243.431,91.999 226.983,108.496 226.993,128.874 L226.998,137.281 C207.794,138.053 193.238,142.713 182.496,150.086 C169.469,159.028 162.277,171.247 156.21,182.247 C150.144,193.247 145.009,203.104 137.25,210.218 C130.497,216.411 121.157,221.193 105.993,222.976 L105.993,222.579 C106.111,202.203 89.715,186.002 69.339,186.002 L16,186.002 L16,72 C16,41.072 41.072,16 72,16 L408,16 z" fill="#000000"/>
<path d="M16,211.002 L69.339,211.002 C76.219,211.002 81.992,215.991 81.992,222.871 L81.992,259.12 C81.992,266 76.219,272.002 69.339,272.002 L16,272.002 L16,211.002 z" fill="#000000"/>
<path d="M411.135,116.997 C418.015,116.997 422.987,121.992 422.987,128.872 L422.987,165.122 C422.987,172.002 418.015,176.998 411.135,176.998 L263.802,176.998 C256.923,176.998 250.99,172.002 250.99,165.122 L250.99,128.872 C250.99,121.993 256.923,116.997 263.802,116.997 L411.135,116.997 z" fill="#000000"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.3 KiB

View File

@@ -0,0 +1,33 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="480" width="480" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" viewBox="0 0 480.00002 479.99999">
<title>Node-RED Icon</title>
<metadata>
<rdf:RDF>
<cc:Work rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
<dc:title>Node-RED Icon</dc:title>
<cc:license rdf:resource="http://creativecommons.org/licenses/by/3.0/"/>
<dc:creator>
<cc:Agent>
<dc:title>Nick O&apos;Leary</dc:title>
</cc:Agent>
</dc:creator>
</cc:Work>
<cc:License rdf:about="http://creativecommons.org/licenses/by/3.0/">
<cc:permits rdf:resource="http://creativecommons.org/ns#Reproduction"/>
<cc:permits rdf:resource="http://creativecommons.org/ns#Distribution"/>
<cc:requires rdf:resource="http://creativecommons.org/ns#Notice"/>
<cc:requires rdf:resource="http://creativecommons.org/ns#Attribution"/>
<cc:permits rdf:resource="http://creativecommons.org/ns#DerivativeWorks"/>
</cc:License>
</rdf:RDF>
</metadata>
<g transform="translate(0 -572.36)">
<rect style="color-rendering:auto;color:#000000;isolation:auto;mix-blend-mode:normal;shape-rendering:auto;solid-color:#000000;image-rendering:auto" ry="56" height="448" width="448" y="588.36" x="16" fill="#8f0000"/>
<g transform="matrix(8.545 0 0 8.545 -786.19 -1949.8)">
<path style="color-rendering:auto;text-decoration-color:#000000;color:#000000;isolation:auto;mix-blend-mode:normal;shape-rendering:auto;solid-color:#000000;block-progression:tb;text-decoration-line:none;text-decoration-style:solid;image-rendering:auto;white-space:normal;text-indent:0;text-transform:none" d="m104.41 321.21c0.0138-2.3846-1.905-4.2806-4.2896-4.2806h-6.243v2.9257h6.243c0.80513 0 1.4808 0.58383 1.4808 1.389v4.2422c0 0.80513-0.67566 1.5075-1.4808 1.5075h-6.243v2.8086h6.243c2.3846 0 4.2895-1.9315 4.2895-4.3162l-0.00005-1.9812c9.8659 0.14125 12.737 2.7065 15.877 5.4519 3.0241 2.6446 6.4153 5.4869 15.252 5.557l0.00046 0.97238c0.001 2.3846 1.9543 4.3803 4.3389 4.3803h6.4273v-3.0427h-6.4273c-0.80514 0-1.4135-0.53255-1.4135-1.3377v-4.2422c0-0.80513 0.60835-1.4418 1.4135-1.4418h6.4273v-2.8086h-6.4273c-2.3846 0-4.3379 1.8658-4.3389 4.2504l-0.00045 1.005c-8.351-0.0276-10.723-2.3434-13.76-4.9992-2.5914-2.2662-5.6368-4.7578-12.346-5.6642 0.0583-0.0501 0.11211-0.0987 0.16838-0.15027 1.2918-1.1846 1.9884-2.6158 2.6699-3.8516 0.68148-1.2357 1.3227-2.267 2.373-2.9879 0.85207-0.58483 2.0639-1.0208 3.926-1.1017l0.00018 0.99192c0.00043 2.3846 1.9236 4.4325 4.3083 4.4325h17.242c2.3846 0 4.3127-2.0479 4.3127-4.4325v-4.2422c0-2.3846-1.9281-4.3153-4.3127-4.3153h-17.242c-2.3846 0-4.3095 1.9306-4.3083 4.3153l0.00051 0.98395c-2.2474 0.0903-3.9508 0.6357-5.2079 1.4985-1.5245 1.0464-2.3662 2.4764-3.0762 3.7637-0.70992 1.2873-1.3108 2.4408-2.2188 3.2734-0.79034 0.72475-1.8834 1.2844-3.658 1.493zm18.468-12.356h17.242c0.80514 0 1.387 0.58455 1.387 1.3897v4.2422c0 0.80514-0.5819 1.3898-1.387 1.3898h-17.242c-0.80514 0-1.4994-0.58462-1.4994-1.3898v-4.2422c0-0.80513 0.69431-1.3897 1.4994-1.3897z" fill="#fff"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.3 KiB

View File

Before

Width:  |  Height:  |  Size: 1019 B

After

Width:  |  Height:  |  Size: 1019 B

View File

Before

Width:  |  Height:  |  Size: 600 B

After

Width:  |  Height:  |  Size: 600 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 410 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 638 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 546 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 638 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 646 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 563 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 588 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 502 B

View File

@@ -1,5 +1,5 @@
/**
* Copyright 2014 IBM Corp.
* Copyright JS Foundation and other contributors, http://js.foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -13,23 +13,33 @@
* See the License for the specific language governing permissions and
* limitations under the License.
**/
RED.comms = (function() {
var errornotification = null;
var clearErrorTimer = null;
var connectCountdownTimer = null;
var connectCountdown = 10;
var subscriptions = {};
var ws;
var pendingAuth = false;
var reconnectAttempts = 0;
var active = false;
function connectWS() {
var path = location.hostname+":"+location.port+document.location.pathname;
active = true;
var path = location.hostname;
var port = location.port;
if (port.length !== 0) {
path = path+":"+port;
}
path = path+document.location.pathname;
path = path+(path.slice(-1) == "/"?"":"/")+"comms";
path = "ws"+(document.location.protocol=="https:"?"s":"")+"://"+path;
var auth_tokens = RED.settings.get("auth-tokens");
pendingAuth = (auth_tokens!=null);
function completeConnection() {
for (var t in subscriptions) {
if (subscriptions.hasOwnProperty(t)) {
@@ -37,9 +47,10 @@ RED.comms = (function() {
}
}
}
ws = new WebSocket(path);
ws.onopen = function() {
reconnectAttempts = 0;
if (errornotification) {
clearErrorTimer = setTimeout(function() {
errornotification.close();
@@ -54,9 +65,17 @@ RED.comms = (function() {
}
ws.onmessage = function(event) {
var msg = JSON.parse(event.data);
if (pendingAuth && msg.auth == "ok") {
pendingAuth = false;
completeConnection();
if (pendingAuth && msg.auth) {
if (msg.auth === "ok") {
pendingAuth = false;
completeConnection();
} else if (msg.auth === "fail") {
// anything else is an error...
active = false;
RED.user.login({updateMenu:true},function() {
connectWS();
})
}
} else if (msg.topic) {
for (var t in subscriptions) {
if (subscriptions.hasOwnProperty(t)) {
@@ -74,16 +93,45 @@ RED.comms = (function() {
}
};
ws.onclose = function() {
if (errornotification == null) {
errornotification = RED.notify("<b>Error</b>: Lost connection to server","error",true);
} else if (clearErrorTimer) {
if (!active) {
return;
}
if (clearErrorTimer) {
clearTimeout(clearErrorTimer);
clearErrorTimer = null;
}
setTimeout(connectWS,1000);
reconnectAttempts++;
if (reconnectAttempts < 10) {
setTimeout(connectWS,1000);
if (reconnectAttempts > 5 && errornotification == null) {
errornotification = RED.notify(RED._("notification.errors.lostConnection"),"error",true);
}
} else if (reconnectAttempts < 20) {
setTimeout(connectWS,2000);
} else {
connectCountdown = 60;
connectCountdownTimer = setInterval(function() {
connectCountdown--;
if (connectCountdown === 0) {
errornotification.update(RED._("notification.errors.lostConnection"));
clearInterval(connectCountdownTimer);
connectWS();
} else {
var msg = RED._("notification.errors.lostConnectionReconnect",{time: connectCountdown})+' <a href="#">'+ RED._("notification.errors.lostConnectionTry")+'</a>';
errornotification.update(msg);
$(errornotification).find("a").click(function(e) {
e.preventDefault();
errornotification.update(RED._("notification.errors.lostConnection"));
clearInterval(connectCountdownTimer);
connectWS();
})
}
},1000);
}
}
}
function subscribe(topic,callback) {
if (subscriptions[topic] == null) {
subscriptions[topic] = [];
@@ -93,7 +141,7 @@ RED.comms = (function() {
ws.send(JSON.stringify({subscribe:topic}));
}
}
function unsubscribe(topic,callback) {
if (subscriptions[topic]) {
for (var i=0;i<subscriptions[topic].length;i++) {
@@ -107,7 +155,7 @@ RED.comms = (function() {
}
}
}
return {
connect: connectWS,
subscribe: subscribe,

53
editor/js/events.js Normal file
View File

@@ -0,0 +1,53 @@
/**
* Copyright JS Foundation and other contributors, http://js.foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
**/
RED.events = (function() {
var handlers = {};
function on(evt,func) {
handlers[evt] = handlers[evt]||[];
handlers[evt].push(func);
}
function off(evt,func) {
var handler = handlers[evt];
if (handler) {
for (var i=0;i<handler.length;i++) {
if (handler[i] === func) {
handler.splice(i,1);
return;
}
}
}
}
function emit(evt,arg) {
if (handlers[evt]) {
for (var i=0;i<handlers[evt].length;i++) {
try {
handlers[evt][i](arg);
} catch(err) {
console.log("RED.events.emit error: ["+evt+"] "+(err.toString()));
console.log(err);
}
}
}
}
return {
on: on,
off: off,
emit: emit
}
})();

327
editor/js/history.js Normal file
View File

@@ -0,0 +1,327 @@
/**
* Copyright JS Foundation and other contributors, http://js.foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
**/
RED.history = (function() {
var undo_history = [];
function undoEvent(ev) {
var i;
var len;
var node;
var subflow;
var modifiedTabs = {};
if (ev) {
if (ev.t == 'multi') {
len = ev.events.length;
for (i=len-1;i>=0;i--) {
undoEvent(ev.events[i]);
}
} else if (ev.t == 'replace') {
RED.nodes.clear();
var imported = RED.nodes.import(ev.config);
imported[0].forEach(function(n) {
if (ev.changed[n.id]) {
n.changed = true;
}
})
RED.nodes.version(ev.rev);
} else if (ev.t == 'add') {
if (ev.nodes) {
for (i=0;i<ev.nodes.length;i++) {
node = RED.nodes.node(ev.nodes[i]);
if (node.z) {
modifiedTabs[node.z] = true;
}
RED.nodes.remove(ev.nodes[i]);
}
}
if (ev.links) {
for (i=0;i<ev.links.length;i++) {
RED.nodes.removeLink(ev.links[i]);
}
}
if (ev.workspaces) {
for (i=0;i<ev.workspaces.length;i++) {
RED.nodes.removeWorkspace(ev.workspaces[i].id);
RED.workspaces.remove(ev.workspaces[i]);
}
}
if (ev.subflows) {
for (i=0;i<ev.subflows.length;i++) {
RED.nodes.removeSubflow(ev.subflows[i]);
RED.workspaces.remove(ev.subflows[i]);
}
}
if (ev.subflow) {
if (ev.subflow.instances) {
ev.subflow.instances.forEach(function(n) {
var node = RED.nodes.node(n.id);
if (node) {
node.changed = n.changed;
node.dirty = true;
}
});
}
if (ev.subflow.hasOwnProperty('changed')) {
subflow = RED.nodes.subflow(ev.subflow.id);
if (subflow) {
subflow.changed = ev.subflow.changed;
}
}
}
if (ev.removedLinks) {
for (i=0;i<ev.removedLinks.length;i++) {
RED.nodes.addLink(ev.removedLinks[i]);
}
}
} else if (ev.t == "delete") {
if (ev.workspaces) {
for (i=0;i<ev.workspaces.length;i++) {
RED.nodes.addWorkspace(ev.workspaces[i]);
RED.workspaces.add(ev.workspaces[i]);
}
}
if (ev.subflow && ev.subflow.subflow) {
RED.nodes.addSubflow(ev.subflow.subflow);
}
if (ev.subflowInputs && ev.subflowInputs.length > 0) {
subflow = RED.nodes.subflow(ev.subflowInputs[0].z);
subflow.in.push(ev.subflowInputs[0]);
subflow.in[0].dirty = true;
}
if (ev.subflowOutputs && ev.subflowOutputs.length > 0) {
subflow = RED.nodes.subflow(ev.subflowOutputs[0].z);
ev.subflowOutputs.sort(function(a,b) { return a.i-b.i});
for (i=0;i<ev.subflowOutputs.length;i++) {
var output = ev.subflowOutputs[i];
subflow.out.splice(output.i,0,output);
for (var j=output.i+1;j<subflow.out.length;j++) {
subflow.out[j].i++;
subflow.out[j].dirty = true;
}
RED.nodes.eachLink(function(l) {
if (l.source.type == "subflow:"+subflow.id) {
if (l.sourcePort >= output.i) {
l.sourcePort++;
}
}
});
}
}
if (ev.subflow && ev.subflow.hasOwnProperty('instances')) {
ev.subflow.instances.forEach(function(n) {
var node = RED.nodes.node(n.id);
if (node) {
node.changed = n.changed;
node.dirty = true;
}
});
}
if (subflow) {
RED.nodes.filterNodes({type:"subflow:"+subflow.id}).forEach(function(n) {
n.inputs = subflow.in.length;
n.outputs = subflow.out.length;
while (n.outputs > n.ports.length) {
n.ports.push(n.ports.length);
}
n.resize = true;
n.dirty = true;
});
}
if (ev.nodes) {
for (i=0;i<ev.nodes.length;i++) {
RED.nodes.add(ev.nodes[i]);
modifiedTabs[ev.nodes[i].z] = true;
}
}
if (ev.links) {
for (i=0;i<ev.links.length;i++) {
RED.nodes.addLink(ev.links[i]);
}
}
if (ev.changes) {
for (i in ev.changes) {
if (ev.changes.hasOwnProperty(i)) {
node = RED.nodes.node(i);
if (node) {
for (var d in ev.changes[i]) {
if (ev.changes[i].hasOwnProperty(d)) {
node[d] = ev.changes[i][d];
}
}
node.dirty = true;
}
}
}
}
} else if (ev.t == "move") {
for (i=0;i<ev.nodes.length;i++) {
var n = ev.nodes[i];
n.n.x = n.ox;
n.n.y = n.oy;
n.n.dirty = true;
n.n.moved = n.moved;
}
// A move could have caused a link splice
if (ev.links) {
for (i=0;i<ev.links.length;i++) {
RED.nodes.removeLink(ev.links[i]);
}
}
if (ev.removedLinks) {
for (i=0;i<ev.removedLinks.length;i++) {
RED.nodes.addLink(ev.removedLinks[i]);
}
}
} else if (ev.t == "edit") {
for (i in ev.changes) {
if (ev.changes.hasOwnProperty(i)) {
if (ev.node._def.defaults[i] && ev.node._def.defaults[i].type) {
// This is a config node property
var currentConfigNode = RED.nodes.node(ev.node[i]);
if (currentConfigNode) {
currentConfigNode.users.splice(currentConfigNode.users.indexOf(ev.node),1);
}
var newConfigNode = RED.nodes.node(ev.changes[i]);
if (newConfigNode) {
newConfigNode.users.push(ev.node);
}
}
ev.node[i] = ev.changes[i];
}
}
if (ev.subflow) {
if (ev.subflow.hasOwnProperty('inputCount')) {
if (ev.node.in.length > ev.subflow.inputCount) {
ev.node.in.splice(ev.subflow.inputCount);
} else if (ev.subflow.inputs.length > 0) {
ev.node.in = ev.node.in.concat(ev.subflow.inputs);
}
}
if (ev.subflow.hasOwnProperty('outputCount')) {
if (ev.node.out.length > ev.subflow.outputCount) {
ev.node.out.splice(ev.subflow.outputCount);
} else if (ev.subflow.outputs.length > 0) {
ev.node.out = ev.node.out.concat(ev.subflow.outputs);
}
}
if (ev.subflow.hasOwnProperty('instances')) {
ev.subflow.instances.forEach(function(n) {
var node = RED.nodes.node(n.id);
if (node) {
node.changed = n.changed;
node.dirty = true;
}
});
}
RED.nodes.filterNodes({type:"subflow:"+ev.node.id}).forEach(function(n) {
n.inputs = ev.node.in.length;
n.outputs = ev.node.out.length;
RED.editor.updateNodeProperties(n);
});
} else {
var outputMap;
if (ev.outputMap) {
outputMap = {};
for (var port in ev.outputMap) {
if (ev.outputMap.hasOwnProperty(port) && ev.outputMap[port] !== "-1") {
outputMap[ev.outputMap[port]] = port;
}
}
}
RED.editor.updateNodeProperties(ev.node,outputMap);
RED.editor.validateNode(ev.node);
}
if (ev.links) {
for (i=0;i<ev.links.length;i++) {
RED.nodes.addLink(ev.links[i]);
}
}
ev.node.dirty = true;
ev.node.changed = ev.changed;
} else if (ev.t == "createSubflow") {
if (ev.nodes) {
RED.nodes.filterNodes({z:ev.subflow.subflow.id}).forEach(function(n) {
n.z = ev.activeWorkspace;
n.dirty = true;
});
for (i=0;i<ev.nodes.length;i++) {
RED.nodes.remove(ev.nodes[i]);
}
}
if (ev.links) {
for (i=0;i<ev.links.length;i++) {
RED.nodes.removeLink(ev.links[i]);
}
}
RED.nodes.removeSubflow(ev.subflow.subflow);
RED.workspaces.remove(ev.subflow.subflow);
if (ev.removedLinks) {
for (i=0;i<ev.removedLinks.length;i++) {
RED.nodes.addLink(ev.removedLinks[i]);
}
}
} else if (ev.t == "reorder") {
if (ev.order) {
RED.workspaces.order(ev.order);
}
}
Object.keys(modifiedTabs).forEach(function(id) {
var subflow = RED.nodes.subflow(id);
if (subflow) {
RED.editor.validateNode(subflow);
}
});
RED.nodes.dirty(ev.dirty);
RED.view.redraw(true);
RED.palette.refresh();
RED.workspaces.refresh();
RED.sidebar.config.refresh();
}
}
return {
//TODO: this function is a placeholder until there is a 'save' event that can be listened to
markAllDirty: function() {
for (var i=0;i<undo_history.length;i++) {
undo_history[i].dirty = true;
}
},
list: function() {
return undo_history
},
depth: function() {
return undo_history.length;
},
push: function(ev) {
undo_history.push(ev);
},
pop: function() {
var ev = undo_history.pop();
undoEvent(ev);
},
peek: function() {
return undo_history[undo_history.length-1];
}
}
})();

68
editor/js/i18n.js Normal file
View File

@@ -0,0 +1,68 @@
/**
* Copyright JS Foundation and other contributors, http://js.foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
**/
RED.i18n = (function() {
return {
init: function(done) {
i18n.init({
resGetPath: 'locales/__ns__?lng=__lng__',
dynamicLoad: false,
load:'current',
ns: {
namespaces: ["editor","node-red","jsonata","infotips"],
defaultNs: "editor"
},
fallbackLng: ['en-US'],
useCookie: false
},function() {
done();
});
RED["_"] = function() {
return i18n.t.apply(null,arguments);
}
},
loadCatalog: function(namespace,done) {
i18n.loadNamespace(namespace,done);
},
loadNodeCatalogs: function(done) {
var languageList = i18n.functions.toLanguages(i18n.detectLanguage());
var toLoad = languageList.length;
languageList.forEach(function(lang) {
$.ajax({
headers: {
"Accept":"application/json"
},
cache: false,
url: 'locales/nodes?lng='+lang,
success: function(data) {
var namespaces = Object.keys(data);
namespaces.forEach(function(ns) {
i18n.addResourceBundle(lang,ns,data[ns]);
});
toLoad--;
if (toLoad === 0) {
done();
}
}
});
})
}
}
})();

39
editor/js/keymap.json Normal file
View File

@@ -0,0 +1,39 @@
{
"*": {
"ctrl-shift-p":"core:manage-palette",
"ctrl-f": "core:search",
"ctrl-=": "core:zoom-in",
"ctrl--": "core:zoom-out",
"ctrl-0": "core:zoom-reset",
"ctrl-enter": "core:confirm-edit-tray",
"ctrl-escape": "core:cancel-edit-tray",
"ctrl-g i": "core:show-info-tab",
"ctrl-g d": "core:show-debug-tab",
"ctrl-g c": "core:show-config-tab",
"ctrl-e": "core:show-export-dialog",
"ctrl-i": "core:show-import-dialog",
"ctrl-space": "core:toggle-sidebar",
"ctrl-,": "core:show-user-settings"
},
"workspace": {
"backspace": "core:delete-selection",
"delete": "core:delete-selection",
"enter": "core:edit-selected-node",
"ctrl-c": "core:copy-selection-to-internal-clipboard",
"ctrl-x": "core:cut-selection-to-internal-clipboard",
"ctrl-v": "core:paste-from-internal-clipboard",
"ctrl-z": "core:undo",
"ctrl-a": "core:select-all-nodes",
"shift-?": "core:show-help",
"up": "core:move-selection-up",
"right": "core:move-selection-right",
"down": "core:move-selection-down",
"left": "core:move-selection-left",
"shift-up": "core:step-selection-up",
"shift-right": "core:step-selection-right",
"shift-down": "core:step-selection-down",
"shift-left": "core:step-selection-left",
"ctrl-shift-j": "core:show-previous-tab",
"ctrl-shift-k": "core:show-next-tab"
}
}

274
editor/js/main.js Normal file
View File

@@ -0,0 +1,274 @@
/**
* Copyright JS Foundation and other contributors, http://js.foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
**/
(function() {
function loadNodeList() {
$.ajax({
headers: {
"Accept":"application/json"
},
cache: false,
url: 'nodes',
success: function(data) {
RED.nodes.setNodeList(data);
RED.i18n.loadNodeCatalogs(loadNodes);
}
});
}
function loadNodes() {
$.ajax({
headers: {
"Accept":"text/html"
},
cache: false,
url: 'nodes',
success: function(data) {
$("body").append(data);
$("body").i18n();
$("#palette > .palette-spinner").hide();
$(".palette-scroll").removeClass("hide");
$("#palette-search").removeClass("hide");
loadFlows();
}
});
}
function loadFlows() {
$.ajax({
headers: {
"Accept":"application/json",
},
cache: false,
url: 'flows',
success: function(nodes) {
var currentHash = window.location.hash;
RED.nodes.version(nodes.rev);
RED.nodes.import(nodes.flows);
RED.nodes.dirty(false);
RED.view.redraw(true);
if (/^#flow\/.+$/.test(currentHash)) {
RED.workspaces.show(currentHash.substring(6));
}
var persistentNotifications = {};
RED.comms.subscribe("notification/#",function(topic,msg) {
var parts = topic.split("/");
var notificationId = parts[1];
if (notificationId === "runtime-deploy") {
// handled in ui/deploy.js
return;
}
if (msg.text) {
var text = RED._(msg.text,{default:msg.text});
if (!persistentNotifications.hasOwnProperty(notificationId)) {
persistentNotifications[notificationId] = RED.notify(text,msg.type,msg.timeout === undefined,msg.timeout);
} else {
persistentNotifications[notificationId].update(text,msg.timeout);
}
} else if (persistentNotifications.hasOwnProperty(notificationId)) {
persistentNotifications[notificationId].close();
delete persistentNotifications[notificationId];
}
});
RED.comms.subscribe("status/#",function(topic,msg) {
var parts = topic.split("/");
var node = RED.nodes.node(parts[1]);
if (node) {
if (msg.hasOwnProperty("text")) {
if (msg.text[0] !== ".") {
msg.text = node._(msg.text.toString(),{defaultValue:msg.text.toString()});
}
}
node.status = msg;
node.dirty = true;
RED.view.redraw();
}
});
RED.comms.subscribe("node/#",function(topic,msg) {
var i,m;
var typeList;
var info;
if (topic == "node/added") {
var addedTypes = [];
msg.forEach(function(m) {
var id = m.id;
RED.nodes.addNodeSet(m);
addedTypes = addedTypes.concat(m.types);
RED.i18n.loadCatalog(id, function() {
$.get('nodes/'+id, function(data) {
$("body").append(data);
});
});
});
if (addedTypes.length) {
typeList = "<ul><li>"+addedTypes.join("</li><li>")+"</li></ul>";
RED.notify(RED._("palette.event.nodeAdded", {count:addedTypes.length})+typeList,"success");
}
} else if (topic == "node/removed") {
for (i=0;i<msg.length;i++) {
m = msg[i];
info = RED.nodes.removeNodeSet(m.id);
if (info.added) {
typeList = "<ul><li>"+m.types.join("</li><li>")+"</li></ul>";
RED.notify(RED._("palette.event.nodeRemoved", {count:m.types.length})+typeList,"success");
}
}
} else if (topic == "node/enabled") {
if (msg.types) {
info = RED.nodes.getNodeSet(msg.id);
if (info.added) {
RED.nodes.enableNodeSet(msg.id);
typeList = "<ul><li>"+msg.types.join("</li><li>")+"</li></ul>";
RED.notify(RED._("palette.event.nodeEnabled", {count:msg.types.length})+typeList,"success");
} else {
$.get('nodes/'+msg.id, function(data) {
$("body").append(data);
typeList = "<ul><li>"+msg.types.join("</li><li>")+"</li></ul>";
RED.notify(RED._("palette.event.nodeAdded", {count:msg.types.length})+typeList,"success");
});
}
}
} else if (topic == "node/disabled") {
if (msg.types) {
RED.nodes.disableNodeSet(msg.id);
typeList = "<ul><li>"+msg.types.join("</li><li>")+"</li></ul>";
RED.notify(RED._("palette.event.nodeDisabled", {count:msg.types.length})+typeList,"success");
}
} else if (topic == "node/upgraded") {
RED.notify(RED._("palette.event.nodeUpgraded", {module:msg.module,version:msg.version}),"success");
RED.nodes.registry.setModulePendingUpdated(msg.module,msg.version);
}
// Refresh flow library to ensure any examples are updated
RED.library.loadFlowLibrary();
});
}
});
}
function showAbout() {
$.get('red/about', function(data) {
var aboutHeader = '<div style="text-align:center;">'+
'<img width="50px" src="red/images/node-red-icon.svg" />'+
'</div>';
RED.sidebar.info.set(aboutHeader+marked(data));
RED.sidebar.info.show();
});
}
function loadEditor() {
var menuOptions = [];
menuOptions.push({id:"menu-item-view-menu",label:RED._("menu.label.view.view"),options:[
// {id:"menu-item-view-show-grid",setting:"view-show-grid",label:RED._("menu.label.view.showGrid"),toggle:true,onselect:"core:toggle-show-grid"},
// {id:"menu-item-view-snap-grid",setting:"view-snap-grid",label:RED._("menu.label.view.snapGrid"),toggle:true,onselect:"core:toggle-snap-grid"},
// {id:"menu-item-status",setting:"node-show-status",label:RED._("menu.label.displayStatus"),toggle:true,onselect:"core:toggle-status", selected: true},
//null,
// {id:"menu-item-bidi",label:RED._("menu.label.view.textDir"),options:[
// {id:"menu-item-bidi-default",toggle:"text-direction",label:RED._("menu.label.view.defaultDir"),selected: true, onselect:function(s) { if(s){RED.text.bidi.setTextDirection("")}}},
// {id:"menu-item-bidi-ltr",toggle:"text-direction",label:RED._("menu.label.view.ltr"), onselect:function(s) { if(s){RED.text.bidi.setTextDirection("ltr")}}},
// {id:"menu-item-bidi-rtl",toggle:"text-direction",label:RED._("menu.label.view.rtl"), onselect:function(s) { if(s){RED.text.bidi.setTextDirection("rtl")}}},
// {id:"menu-item-bidi-auto",toggle:"text-direction",label:RED._("menu.label.view.auto"), onselect:function(s) { if(s){RED.text.bidi.setTextDirection("auto")}}}
// ]},
// null,
{id:"menu-item-sidebar",label:RED._("menu.label.sidebar.show"),toggle:true,onselect:"core:toggle-sidebar", selected: true},
null
]});
menuOptions.push(null);
menuOptions.push({id:"menu-item-import",label:RED._("menu.label.import"),options:[
{id:"menu-item-import-clipboard",label:RED._("menu.label.clipboard"),onselect:"core:show-import-dialog"},
{id:"menu-item-import-library",label:RED._("menu.label.library"),options:[]}
]});
menuOptions.push({id:"menu-item-export",label:RED._("menu.label.export"),disabled:true,options:[
{id:"menu-item-export-clipboard",label:RED._("menu.label.clipboard"),disabled:true,onselect:"core:show-export-dialog"},
{id:"menu-item-export-library",label:RED._("menu.label.library"),disabled:true,onselect:"core:library-export"}
]});
menuOptions.push(null);
menuOptions.push({id:"menu-item-search",label:RED._("menu.label.search"),onselect:"core:search"});
menuOptions.push(null);
menuOptions.push({id:"menu-item-config-nodes",label:RED._("menu.label.displayConfig"),onselect:"core:show-config-tab"});
menuOptions.push({id:"menu-item-workspace",label:RED._("menu.label.flows"),options:[
{id:"menu-item-workspace-add",label:RED._("menu.label.add"),onselect:"core:add-flow"},
{id:"menu-item-workspace-edit",label:RED._("menu.label.rename"),onselect:"core:edit-flow"},
{id:"menu-item-workspace-delete",label:RED._("menu.label.delete"),onselect:"core:remove-flow"}
]});
menuOptions.push({id:"menu-item-subflow",label:RED._("menu.label.subflows"), options: [
{id:"menu-item-subflow-create",label:RED._("menu.label.createSubflow"),onselect:"core:create-subflow"},
{id:"menu-item-subflow-convert",label:RED._("menu.label.selectionToSubflow"),disabled:true,onselect:"core:convert-to-subflow"},
]});
menuOptions.push(null);
if (RED.settings.theme('palette.editable') !== false) {
menuOptions.push({id:"menu-item-edit-palette",label:RED._("menu.label.editPalette"),onselect:"core:manage-palette"});
menuOptions.push(null);
}
menuOptions.push({id:"menu-item-user-settings",label:RED._("menu.label.userSettings"),onselect:"core:show-user-settings"});
menuOptions.push(null);
menuOptions.push({id:"menu-item-keyboard-shortcuts",label:RED._("menu.label.keyboardShortcuts"),onselect:"core:show-help"});
menuOptions.push({id:"menu-item-help",
label: RED.settings.theme("menu.menu-item-help.label","Node-RED website"),
href: RED.settings.theme("menu.menu-item-help.url","http://nodered.org/docs")
});
menuOptions.push({id:"menu-item-node-red-version", label:"v"+RED.settings.version, onselect: "core:show-about" });
RED.view.init();
RED.userSettings.init();
RED.user.init();
RED.library.init();
RED.keyboard.init();
RED.palette.init();
if (RED.settings.theme('palette.editable') !== false) {
RED.palette.editor.init();
}
RED.sidebar.init();
RED.subflow.init();
RED.workspaces.init();
RED.clipboard.init();
RED.search.init();
RED.editor.init();
RED.diff.init();
RED.menu.init({id:"btn-sidemenu",options: menuOptions});
RED.deploy.init(RED.settings.theme("deployButton",null));
RED.actions.add("core:show-about", showAbout);
RED.comms.connect();
$("#main-container").show();
$(".header-toolbar").show();
loadNodeList();
}
$(function() {
if ((window.location.hostname !== "localhost") && (window.location.hostname !== "127.0.0.1")) {
document.title = document.title+" : "+window.location.hostname;
}
ace.require("ace/ext/language_tools");
RED.i18n.init(function() {
RED.settings.init(loadEditor);
})
});
})();

1310
editor/js/nodes.js Normal file

File diff suppressed because it is too large Load Diff

16
editor/js/red.js Normal file
View File

@@ -0,0 +1,16 @@
/**
* Copyright JS Foundation and other contributors, http://js.foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
**/
var RED = {};

View File

@@ -1,5 +1,5 @@
/**
* Copyright 2014 IBM, Antoine Aflalo
* Copyright JS Foundation and other contributors, http://js.foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,9 +16,9 @@
RED.settings = (function () {
var loadedSettings = {};
var hasLocalStorage = function () {
try {
return 'localStorage' in window && window['localStorage'] !== null;
@@ -33,6 +33,7 @@ RED.settings = (function () {
}
localStorage.setItem(key, JSON.stringify(value));
};
/**
* If the key is not set in the localStorage it returns <i>undefined</i>
* Else return the JSON parsed value
@@ -68,23 +69,30 @@ RED.settings = (function () {
};
var init = function (done) {
var accessTokenMatch = /[?&]access_token=(.*?)(?:$|&)/.exec(window.location.search);
if (accessTokenMatch) {
var accessToken = accessTokenMatch[1];
RED.settings.set("auth-tokens",{access_token: accessToken});
window.location.search = "";
}
$.ajaxSetup({
beforeSend: function(jqXHR,settings) {
// Only attach auth header for requests to relative paths
if (!/^\s*(https?:|\/|\.)/.test(settings.url)) {
var auth_tokens = RED.settings.get("auth-tokens");
if (auth_tokens) {
jqXHR.setRequestHeader("authorization","bearer "+auth_tokens.access_token);
jqXHR.setRequestHeader("Authorization","Bearer "+auth_tokens.access_token);
}
jqXHR.setRequestHeader("Node-RED-API-Version","v2");
}
}
});
load(done);
}
var load = function(done) {
$.ajax({
headers: {
"Accept": "application/json"
@@ -94,7 +102,7 @@ RED.settings = (function () {
url: 'settings',
success: function (data) {
setProperties(data);
if (RED.settings.user && RED.settings.user.anonymous) {
if (!RED.settings.user || RED.settings.user.anonymous) {
RED.settings.remove("auth-tokens");
}
console.log("Node-RED: " + data.version);
@@ -102,21 +110,43 @@ RED.settings = (function () {
},
error: function(jqXHR,textStatus,errorThrown) {
if (jqXHR.status === 401) {
if (/[?&]access_token=(.*?)(?:$|&)/.test(window.location.search)) {
window.location.search = "";
}
RED.user.login(function() { load(done); });
} else {
console.log("Unexpected error:",jqXHR.status,textStatus);
}
} else {
console.log("Unexpected error:",jqXHR.status,textStatus);
}
}
});
};
function theme(property,defaultValue) {
if (!RED.settings.editorTheme) {
return defaultValue;
}
var parts = property.split(".");
var v = RED.settings.editorTheme;
try {
for (var i=0;i<parts.length;i++) {
v = v[parts[i]];
}
if (v === undefined) {
return defaultValue;
}
return v;
} catch(err) {
return defaultValue;
}
}
return {
init: init,
load: load,
set: set,
get: get,
remove: remove
remove: remove,
theme: theme
}
})
();

130
editor/js/text/bidi.js Normal file
View File

@@ -0,0 +1,130 @@
/**
* Copyright JS Foundation and other contributors, http://js.foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
**/
RED.text = {};
RED.text.bidi = (function() {
var textDir = "";
var LRE = "\u202A",
RLE = "\u202B",
PDF = "\u202C";
function isRTLValue(stringValue) {
var length = stringValue.length;
for (var i=0;i<length;i++) {
if (isBidiChar(stringValue.charCodeAt(i))) {
return true;
}
else if(isLatinChar(stringValue.charCodeAt(i))) {
return false;
}
}
return false;
}
function isBidiChar(c) {
return (c >= 0x05d0 && c <= 0x05ff)||
(c >= 0x0600 && c <= 0x065f)||
(c >= 0x066a && c <= 0x06ef)||
(c >= 0x06fa && c <= 0x07ff)||
(c >= 0xfb1d && c <= 0xfdff)||
(c >= 0xfe70 && c <= 0xfefc);
}
function isLatinChar(c){
return (c > 64 && c < 91)||(c > 96 && c < 123)
}
/**
* Determines the text direction of a given string.
* @param value - the string
*/
function resolveBaseTextDir(value) {
if (textDir == "auto") {
if (isRTLValue(value)) {
return "rtl";
} else {
return "ltr";
}
}
else {
return textDir;
}
}
function onInputChange() {
$(this).attr("dir", resolveBaseTextDir($(this).val()));
}
/**
* Adds event listeners to the Input to ensure its text-direction attribute
* is properly set based on its content.
* @param input - the input field
*/
function prepareInput(input) {
input.on("keyup",onInputChange).on("paste",onInputChange).on("cut",onInputChange);
// Set the initial text direction
onInputChange.call(input);
}
/**
* Enforces the text direction of a given string by adding
* UCC (Unicode Control Characters)
* @param value - the string
*/
function enforceTextDirectionWithUCC(value) {
if (value) {
var dir = resolveBaseTextDir(value);
if (dir == "ltr") {
return LRE + value + PDF;
}
else if (dir == "rtl") {
return RLE + value + PDF;
}
}
return value;
}
/**
* Enforces the text direction for all the spans with style bidiAware under
* workspace or sidebar div
*/
function enforceTextDirectionOnPage() {
$("#workspace").find('span.bidiAware').each(function() {
$(this).attr("dir", resolveBaseTextDir($(this).html()));
});
$("#sidebar").find('span.bidiAware').each(function() {
$(this).attr("dir", resolveBaseTextDir($(this).text()));
});
}
/**
* Sets the text direction preference
* @param dir - the text direction preference
*/
function setTextDirection(dir) {
textDir = dir;
RED.nodes.eachNode(function(n) { n.dirty = true;});
RED.view.redraw();
RED.palette.refresh();
enforceTextDirectionOnPage();
}
return {
setTextDirection: setTextDirection,
enforceTextDirectionWithUCC: enforceTextDirectionWithUCC,
resolveBaseTextDir: resolveBaseTextDir,
prepareInput: prepareInput
}
})();

1330
editor/js/text/format.js Normal file

File diff suppressed because it is too large Load Diff

35
editor/js/ui/actions.js Normal file
View File

@@ -0,0 +1,35 @@
RED.actions = (function() {
var actions = {
}
function addAction(name,handler) {
actions[name] = handler;
}
function removeAction(name) {
delete actions[name];
}
function getAction(name) {
return actions[name];
}
function invokeAction(name) {
if (actions.hasOwnProperty(name)) {
actions[name]();
}
}
function listActions() {
var result = [];
Object.keys(actions).forEach(function(action) {
var shortcut = RED.keyboard.getShortcut(action);
result.push({id:action,scope:shortcut?shortcut.scope:undefined,key:shortcut?shortcut.key:undefined,user:shortcut?shortcut.user:undefined})
})
return result;
}
return {
add: addAction,
remove: removeAction,
get: getAction,
invoke: invokeAction,
list: listActions
}
})();

379
editor/js/ui/clipboard.js Normal file
View File

@@ -0,0 +1,379 @@
/**
* Copyright JS Foundation and other contributors, http://js.foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
**/
RED.clipboard = (function() {
var dialog;
var dialogContainer;
var exportNodesDialog;
var importNodesDialog;
var disabled = false;
function setupDialogs() {
dialog = $('<div id="clipboard-dialog" class="hide node-red-dialog"><form class="dialog-form form-horizontal"></form></div>')
.appendTo("body")
.dialog({
modal: true,
autoOpen: false,
width: 500,
resizable: false,
buttons: [
{
id: "clipboard-dialog-cancel",
text: RED._("common.label.cancel"),
click: function() {
$( this ).dialog( "close" );
}
},
{
id: "clipboard-dialog-close",
class: "primary",
text: RED._("common.label.close"),
click: function() {
$( this ).dialog( "close" );
}
},
{
id: "clipboard-dialog-copy",
class: "primary",
text: RED._("clipboard.export.copy"),
click: function() {
$("#clipboard-export").select();
document.execCommand("copy");
document.getSelection().removeAllRanges();
RED.notify(RED._("clipboard.nodesExported"));
$( this ).dialog( "close" );
}
},
{
id: "clipboard-dialog-ok",
class: "primary",
text: RED._("common.label.import"),
click: function() {
RED.view.importNodes($("#clipboard-import").val(),$("#import-tab > a.selected").attr('id') === 'import-tab-new');
$( this ).dialog( "close" );
}
}
],
open: function(e) {
$(this).parent().find(".ui-dialog-titlebar-close").hide();
},
close: function(e) {
}
});
dialogContainer = dialog.children(".dialog-form");
exportNodesDialog =
'<div class="form-row">'+
'<label style="width:auto;margin-right: 10px;" data-i18n="clipboard.export.copy"></label>'+
'<span id="export-range-group" class="button-group">'+
'<a id="export-range-selected" class="editor-button toggle" href="#" data-i18n="clipboard.export.selected"></a>'+
'<a id="export-range-flow" class="editor-button toggle" href="#" data-i18n="clipboard.export.current"></a>'+
'<a id="export-range-full" class="editor-button toggle" href="#" data-i18n="clipboard.export.all"></a>'+
'</span>'+
'</div>'+
'<div class="form-row">'+
'<textarea readonly style="resize: none; width: 100%; border-radius: 4px;font-family: monospace; font-size: 12px; background:#f3f3f3; padding-left: 0.5em; box-sizing:border-box;" id="clipboard-export" rows="5"></textarea>'+
'</div>'+
'<div class="form-row" style="text-align: right;">'+
'<span id="export-format-group" class="button-group">'+
'<a id="export-format-mini" class="editor-button editor-button-small toggle" href="#" data-i18n="clipboard.export.compact"></a>'+
'<a id="export-format-full" class="editor-button editor-button-small toggle" href="#" data-i18n="clipboard.export.formatted"></a>'+
'</span>'+
'</div>';
importNodesDialog = '<div class="form-row">'+
'<textarea style="resize: none; width: 100%; border-radius: 0px;font-family: monospace; font-size: 12px; background:#eee; padding-left: 0.5em; box-sizing:border-box;" id="clipboard-import" rows="5" placeholder="'+
RED._("clipboard.pasteNodes")+
'"></textarea>'+
'</div>'+
'<div class="form-row">'+
'<label style="width:auto;margin-right: 10px;" data-i18n="clipboard.import.import"></label>'+
'<span id="import-tab" class="button-group">'+
'<a id="import-tab-current" class="editor-button toggle selected" href="#" data-i18n="clipboard.export.current"></a>'+
'<a id="import-tab-new" class="editor-button toggle" href="#" data-i18n="clipboard.import.newFlow"></a>'+
'</span>'+
'</div>';
}
function validateImport() {
var importInput = $("#clipboard-import");
var v = importInput.val();
v = v.substring(v.indexOf('['),v.lastIndexOf(']')+1);
try {
JSON.parse(v);
importInput.removeClass("input-error");
importInput.val(v);
$("#clipboard-dialog-ok").button("enable");
} catch(err) {
if (v !== "") {
importInput.addClass("input-error");
}
$("#clipboard-dialog-ok").button("disable");
}
}
function importNodes() {
if (disabled) {
return;
}
dialogContainer.empty();
dialogContainer.append($(importNodesDialog));
dialogContainer.i18n();
$("#clipboard-dialog-ok").show();
$("#clipboard-dialog-cancel").show();
$("#clipboard-dialog-close").hide();
$("#clipboard-dialog-copy").hide();
$("#clipboard-dialog-ok").button("disable");
$("#clipboard-import").keyup(validateImport);
$("#clipboard-import").on('paste',function() { setTimeout(validateImport,10)});
$("#import-tab > a").click(function(evt) {
evt.preventDefault();
if ($(this).hasClass('disabled') || $(this).hasClass('selected')) {
return;
}
$(this).parent().children().removeClass('selected');
$(this).addClass('selected');
});
dialog.dialog("option","title",RED._("clipboard.importNodes")).dialog("open");
}
function exportNodes() {
if (disabled) {
return;
}
dialogContainer.empty();
dialogContainer.append($(exportNodesDialog));
dialogContainer.i18n();
var format = RED.settings.flowFilePretty ? "export-format-full" : "export-format-mini";
$("#export-format-group > a").click(function(evt) {
evt.preventDefault();
if ($(this).hasClass('disabled') || $(this).hasClass('selected')) {
$("#clipboard-export").focus();
return;
}
$(this).parent().children().removeClass('selected');
$(this).addClass('selected');
var flow = $("#clipboard-export").val();
if (flow.length > 0) {
var nodes = JSON.parse(flow);
format = $(this).attr('id');
if (format === 'export-format-full') {
flow = JSON.stringify(nodes,null,4);
} else {
flow = JSON.stringify(nodes);
}
$("#clipboard-export").val(flow);
$("#clipboard-export").focus();
}
});
$("#export-range-group > a").click(function(evt) {
evt.preventDefault();
if ($(this).hasClass('disabled') || $(this).hasClass('selected')) {
$("#clipboard-export").focus();
return;
}
$(this).parent().children().removeClass('selected');
$(this).addClass('selected');
var type = $(this).attr('id');
var flow = "";
var nodes = null;
if (type === 'export-range-selected') {
var selection = RED.view.selection();
nodes = RED.nodes.createExportableNodeSet(selection.nodes);
} else if (type === 'export-range-flow') {
var activeWorkspace = RED.workspaces.active();
nodes = RED.nodes.filterNodes({z:activeWorkspace});
var parentNode = RED.nodes.workspace(activeWorkspace)||RED.nodes.subflow(activeWorkspace);
nodes.unshift(parentNode);
nodes = RED.nodes.createExportableNodeSet(nodes);
} else if (type === 'export-range-full') {
nodes = RED.nodes.createCompleteNodeSet(false);
}
if (nodes !== null) {
if (format === "export-format-full") {
flow = JSON.stringify(nodes,null,4);
} else {
flow = JSON.stringify(nodes);
}
}
if (flow.length > 0) {
$("#export-copy").removeClass('disabled');
} else {
$("#export-copy").addClass('disabled');
}
$("#clipboard-export").val(flow);
$("#clipboard-export").focus();
})
$("#clipboard-dialog-ok").hide();
$("#clipboard-dialog-cancel").hide();
$("#clipboard-dialog-copy").hide();
$("#clipboard-dialog-close").hide();
var selection = RED.view.selection();
if (selection.nodes) {
$("#export-range-selected").click();
} else {
$("#export-range-selected").addClass('disabled').removeClass('selected');
$("#export-range-flow").click();
}
if (format === "export-format-full") {
$("#export-format-full").click();
} else {
$("#export-format-mini").click();
}
$("#clipboard-export")
.focus(function() {
var textarea = $(this);
textarea.select();
textarea.mouseup(function() {
textarea.unbind("mouseup");
return false;
})
});
dialog.dialog("option","title",RED._("clipboard.exportNodes")).dialog( "open" );
$("#clipboard-export").focus();
if (!document.queryCommandSupported("copy")) {
$("#clipboard-dialog-cancel").hide();
$("#clipboard-dialog-close").show();
} else {
$("#clipboard-dialog-cancel").show();
$("#clipboard-dialog-copy").show();
}
}
function hideDropTarget() {
$("#dropTarget").hide();
RED.keyboard.remove("escape");
}
function copyText(value,element,msg) {
var truncated = false;
if (typeof value !== "string" ) {
value = JSON.stringify(value, function(key,value) {
if (value !== null && typeof value === 'object') {
if (value.__encoded__ && value.hasOwnProperty('data') && value.hasOwnProperty('length')) {
truncated = value.data.length !== value.length;
return value.data;
}
}
return value;
});
}
if (truncated) {
msg += "_truncated";
}
$("#clipboard-hidden").val(value).select();
var result = document.execCommand("copy");
if (result && element) {
var popover = RED.popover.create({
target: element,
direction: 'left',
size: 'small',
content: RED._(msg)
});
setTimeout(function() {
popover.close();
},1000);
popover.open();
}
return result;
}
return {
init: function() {
setupDialogs();
$('<input type="text" id="clipboard-hidden">').appendTo("body");
RED.events.on("view:selection-changed",function(selection) {
if (!selection.nodes) {
RED.menu.setDisabled("menu-item-export",true);
RED.menu.setDisabled("menu-item-export-clipboard",true);
RED.menu.setDisabled("menu-item-export-library",true);
} else {
RED.menu.setDisabled("menu-item-export",false);
RED.menu.setDisabled("menu-item-export-clipboard",false);
RED.menu.setDisabled("menu-item-export-library",false);
}
});
RED.actions.add("core:show-export-dialog",exportNodes);
RED.actions.add("core:show-import-dialog",importNodes);
RED.events.on("editor:open",function() { disabled = true; });
RED.events.on("editor:close",function() { disabled = false; });
RED.events.on("search:open",function() { disabled = true; });
RED.events.on("search:close",function() { disabled = false; });
RED.events.on("type-search:open",function() { disabled = true; });
RED.events.on("type-search:close",function() { disabled = false; });
$('#chart').on("dragenter",function(event) {
if ($.inArray("text/plain",event.originalEvent.dataTransfer.types) != -1 ||
$.inArray("Files",event.originalEvent.dataTransfer.types) != -1) {
$("#dropTarget").css({display:'table'});
RED.keyboard.add("*", "escape" ,hideDropTarget);
}
});
$('#dropTarget').on("dragover",function(event) {
if ($.inArray("text/plain",event.originalEvent.dataTransfer.types) != -1 ||
$.inArray("Files",event.originalEvent.dataTransfer.types) != -1) {
event.preventDefault();
}
})
.on("dragleave",function(event) {
hideDropTarget();
})
.on("drop",function(event) {
if ($.inArray("text/plain",event.originalEvent.dataTransfer.types) != -1) {
var data = event.originalEvent.dataTransfer.getData("text/plain");
data = data.substring(data.indexOf('['),data.lastIndexOf(']')+1);
RED.view.importNodes(data);
} else if ($.inArray("Files",event.originalEvent.dataTransfer.types) != -1) {
var files = event.originalEvent.dataTransfer.files;
if (files.length === 1) {
var file = files[0];
var reader = new FileReader();
reader.onload = (function(theFile) {
return function(e) {
RED.view.importNodes(e.target.result);
};
})(file);
reader.readAsText(file);
}
}
hideDropTarget();
event.preventDefault();
});
},
import: importNodes,
export: exportNodes,
copyText: copyText
}
})();

View File

@@ -0,0 +1,131 @@
/**
* Copyright JS Foundation and other contributors, http://js.foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
**/
(function($) {
$.widget( "nodered.checkboxSet", {
_create: function() {
var that = this;
this.uiElement = this.element.wrap( "<span>" ).parent();
this.uiElement.addClass("red-ui-checkboxSet");
if (this.options.parent) {
this.parent = this.options.parent;
this.parent.checkboxSet('addChild',this.element);
}
this.children = [];
this.partialFlag = false;
this.stateValue = 0;
var initialState = this.element.prop('checked');
this.options = [
$('<span class="red-ui-checkboxSet-option hide"><i class="fa fa-square-o"></i></span>').appendTo(this.uiElement),
$('<span class="red-ui-checkboxSet-option hide"><i class="fa fa-check-square-o"></i></span>').appendTo(this.uiElement),
$('<span class="red-ui-checkboxSet-option hide"><i class="fa fa-minus-square-o"></i></span>').appendTo(this.uiElement)
];
if (initialState) {
this.options[1].show();
} else {
this.options[0].show();
}
this.element.change(function() {
if (this.checked) {
that.options[0].hide();
that.options[1].show();
that.options[2].hide();
} else {
that.options[1].hide();
that.options[0].show();
that.options[2].hide();
}
var isChecked = this.checked;
that.children.forEach(function(child) {
child.checkboxSet('state',isChecked,false,true);
})
})
this.uiElement.click(function(e) {
e.stopPropagation();
// state returns null for a partial state. Clicking on that should
// result in false.
that.state((that.state()===false)?true:false);
})
if (this.parent) {
this.parent.checkboxSet('updateChild',this);
}
},
_destroy: function() {
if (this.parent) {
this.parent.checkboxSet('removeChild',this.element);
}
},
addChild: function(child) {
var that = this;
this.children.push(child);
},
removeChild: function(child) {
var index = this.children.indexOf(child);
if (index > -1) {
this.children.splice(index,1);
}
},
updateChild: function(child) {
var checkedCount = 0;
this.children.forEach(function(c,i) {
if (c.checkboxSet('state') === true) {
checkedCount++;
}
});
if (checkedCount === 0) {
this.state(false,true);
} else if (checkedCount === this.children.length) {
this.state(true,true);
} else {
this.state(null,true);
}
},
disable: function() {
this.uiElement.addClass('disabled');
},
state: function(state,suppressEvent,suppressParentUpdate) {
if (arguments.length === 0) {
return this.partialFlag?null:this.element.is(":checked");
} else {
this.partialFlag = (state === null);
var trueState = this.partialFlag||state;
this.element.prop('checked',trueState);
if (state === true) {
this.options[0].hide();
this.options[1].show();
this.options[2].hide();
} else if (state === false) {
this.options[2].hide();
this.options[1].hide();
this.options[0].show();
} else if (state === null) {
this.options[0].hide();
this.options[1].hide();
this.options[2].show();
}
if (!suppressEvent) {
this.element.trigger('change',null);
}
if (!suppressParentUpdate && this.parent) {
this.parent.checkboxSet('updateChild',this);
}
}
}
})
})(jQuery);

View File

@@ -0,0 +1,327 @@
/**
* Copyright JS Foundation and other contributors, http://js.foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
**/
(function($) {
/**
* options:
* - addButton : boolean|string - text for add label, default 'add'
* - height : number|'auto'
* - resize : function - called when list as a whole is resized
* - resizeItem : function(item) - called to resize individual item
* - sortable : boolean|string - string is the css selector for handle
* - sortItems : function(items) - when order of items changes
* - connectWith : css selector of other sortables
* - removable : boolean - whether to display delete button on items
* - addItem : function(row,index,itemData) - when an item is added
* - removeItem : function(itemData) - called when an item is removed
* - filter : function(itemData) - called for each item to determine if it should be shown
* - sort : function(itemDataA,itemDataB) - called to sort items
* - scrollOnAdd : boolean - whether to scroll to newly added items
* methods:
* - addItem(itemData)
* - removeItem(itemData)
* - width(width)
* - height(height)
* - items()
* - empty()
* - filter(filter)
* - sort(sort)
* - length()
*/
$.widget( "nodered.editableList", {
_create: function() {
var that = this;
this.element.addClass('red-ui-editableList-list');
this.uiWidth = this.element.width();
this.uiContainer = this.element
.wrap( "<div>" )
.parent();
if (this.options.header) {
this.options.header.addClass("red-ui-editableList-header");
this.borderContainer = this.uiContainer.wrap("<div>").parent();
this.borderContainer.prepend(this.options.header);
this.topContainer = this.borderContainer.wrap("<div>").parent();
} else {
this.topContainer = this.uiContainer.wrap("<div>").parent();
}
this.topContainer.addClass('red-ui-editableList');
if (this.options.class) {
this.topContainer.addClass(this.options.class);
}
if (this.options.addButton !== false) {
var addLabel;
if (typeof this.options.addButton === 'string') {
addLabel = this.options.addButton
} else {
if (RED && RED._) {
addLabel = RED._("editableList.add");
} else {
addLabel = 'add';
}
}
$('<a href="#" class="editor-button editor-button-small" style="margin-top: 4px;"><i class="fa fa-plus"></i> '+addLabel+'</a>')
.appendTo(this.topContainer)
.click(function(evt) {
evt.preventDefault();
that.addItem({});
});
}
if (this.element.css("position") === "absolute") {
["top","left","bottom","right"].forEach(function(s) {
var v = that.element.css(s);
if (s!=="auto" && s!=="") {
that.topContainer.css(s,v);
that.uiContainer.css(s,"0");
that.element.css(s,'auto');
}
})
this.element.css("position","static");
this.topContainer.css("position","absolute");
this.uiContainer.css("position","absolute");
}
if (this.options.header) {
this.borderContainer.addClass("red-ui-editableList-border");
} else {
this.uiContainer.addClass("red-ui-editableList-border");
}
this.uiContainer.addClass("red-ui-editableList-container");
this.uiHeight = this.element.height();
this.activeFilter = this.options.filter||null;
this.activeSort = this.options.sort||null;
this.scrollOnAdd = this.options.scrollOnAdd;
if (this.scrollOnAdd === undefined) {
this.scrollOnAdd = true;
}
var minHeight = this.element.css("minHeight");
if (minHeight !== '0px') {
this.uiContainer.css("minHeight",minHeight);
this.element.css("minHeight",0);
}
if (this.options.height !== 'auto') {
this.uiContainer.css("overflow-y","scroll");
if (!isNaN(this.options.height)) {
this.uiHeight = this.options.height;
}
}
this.element.height('auto');
var attrStyle = this.element.attr('style');
var m;
if ((m = /width\s*:\s*(\d+%)/i.exec(attrStyle)) !== null) {
this.element.width('100%');
this.uiContainer.width(m[1]);
}
if (this.options.sortable) {
var handle = (typeof this.options.sortable === 'string')?
this.options.sortable :
".red-ui-editableList-item-handle";
var sortOptions = {
axis: "y",
update: function( event, ui ) {
if (that.options.sortItems) {
that.options.sortItems(that.items());
}
},
handle:handle,
cursor: "move",
tolerance: "pointer",
forcePlaceholderSize:true,
placeholder: "red-ui-editabelList-item-placeholder",
start: function(e, ui){
ui.placeholder.height(ui.item.height()-4);
}
};
if (this.options.connectWith) {
sortOptions.connectWith = this.options.connectWith;
}
this.element.sortable(sortOptions);
}
this._resize();
// this.menu = this._createMenu(this.types, function(v) { that.type(v) });
// this.type(this.options.default||this.types[0].value);
},
_resize: function() {
var currentFullHeight = this.topContainer.height();
var innerHeight = this.uiContainer.height();
var delta = currentFullHeight - innerHeight;
if (this.uiHeight !== 0) {
this.uiContainer.height(this.uiHeight-delta);
}
if (this.options.resize) {
this.options.resize();
}
if (this.options.resizeItem) {
var that = this;
this.element.children().each(function(i) {
that.options.resizeItem($(this).find(".red-ui-editableList-item-content"),i);
});
}
},
_destroy: function() {
},
_refreshFilter: function() {
var that = this;
var count = 0;
if (!this.activeFilter) {
return this.element.children().show();
}
var items = this.items();
items.each(function (i,el) {
var data = el.data('data');
try {
if (that.activeFilter(data)) {
el.parent().show();
count++;
} else {
el.parent().hide();
}
} catch(err) {
console.log(err);
el.parent().show();
count++;
}
});
return count;
},
_refreshSort: function() {
if (this.activeSort) {
var items = this.element.children();
var that = this;
items.sort(function(A,B) {
return that.activeSort($(A).find(".red-ui-editableList-item-content").data('data'),$(B).find(".red-ui-editableList-item-content").data('data'));
});
$.each(items,function(idx,li) {
that.element.append(li);
})
}
},
width: function(desiredWidth) {
this.uiWidth = desiredWidth;
this._resize();
},
height: function(desiredHeight) {
this.uiHeight = desiredHeight;
this._resize();
},
addItem: function(data) {
var that = this;
data = data || {};
var li = $('<li>');
var added = false;
if (this.activeSort) {
var items = this.items();
var skip = false;
items.each(function(i,el) {
if (added) { return }
var itemData = el.data('data');
if (that.activeSort(data,itemData) < 0) {
li.insertBefore(el.closest("li"));
added = true;
}
});
}
if (!added) {
li.appendTo(this.element);
}
var row = $('<div/>').addClass("red-ui-editableList-item-content").appendTo(li);
row.data('data',data);
if (this.options.sortable === true) {
$('<i class="red-ui-editableList-item-handle fa fa-bars"></i>').appendTo(li);
li.addClass("red-ui-editableList-item-sortable");
}
if (this.options.removable) {
var deleteButton = $('<a/>',{href:"#",class:"red-ui-editableList-item-remove editor-button editor-button-small"}).appendTo(li);
$('<i/>',{class:"fa fa-remove"}).appendTo(deleteButton);
li.addClass("red-ui-editableList-item-removable");
deleteButton.click(function(evt) {
evt.preventDefault();
var data = row.data('data');
li.addClass("red-ui-editableList-item-deleting")
li.fadeOut(300, function() {
$(this).remove();
if (that.options.removeItem) {
that.options.removeItem(data);
}
});
});
}
if (this.options.addItem) {
var index = that.element.children().length-1;
setTimeout(function() {
that.options.addItem(row,index,data);
if (that.activeFilter) {
try {
if (!that.activeFilter(data)) {
li.hide();
}
} catch(err) {
}
}
if (!that.activeSort && that.scrollOnAdd) {
setTimeout(function() {
that.uiContainer.scrollTop(that.element.height());
},0);
}
},0);
}
},
addItems: function(items) {
for (var i=0; i<items.length;i++) {
this.addItem(items[i]);
}
},
removeItem: function(data) {
var items = this.element.children().filter(function(f) {
return data === $(this).find(".red-ui-editableList-item-content").data('data');
});
items.remove();
if (this.options.removeItem) {
this.options.removeItem(data);
}
},
items: function() {
return this.element.children().map(function(i) { return $(this).find(".red-ui-editableList-item-content"); });
},
empty: function() {
this.element.empty();
},
filter: function(filter) {
if (filter !== undefined) {
this.activeFilter = filter;
}
return this._refreshFilter();
},
sort: function(sort) {
if (sort !== undefined) {
this.activeSort = sort;
}
return this._refreshSort();
},
length: function() {
return this.element.children().length;
}
});
})(jQuery);

View File

@@ -1,5 +1,5 @@
/**
* Copyright 2014 IBM Corp.
* Copyright JS Foundation and other contributors, http://js.foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -13,9 +13,6 @@
* See the License for the specific language governing permissions and
* limitations under the License.
**/
RED.menu = (function() {
var menuItems = {};
@@ -23,21 +20,38 @@ RED.menu = (function() {
function createMenuItem(opt) {
var item;
function setState() {
var savedStateActive = isSavedStateActive(opt.id);
if (opt !== null && opt.id) {
var themeSetting = RED.settings.theme("menu."+opt.id);
if (themeSetting === false) {
return null;
}
}
function setInitialState() {
var savedStateActive = RED.settings.get("menu-" + opt.id);
if (opt.setting) {
// May need to migrate pre-0.17 setting
if (savedStateActive !== null) {
RED.settings.set(opt.setting,savedStateActive);
RED.settings.remove("menu-" + opt.id);
} else {
savedStateActive = RED.settings.get(opt.setting);
}
}
if (savedStateActive) {
link.addClass("active");
opt.onselect.call(opt, true);
triggerAction(opt.id,true);
} else if (savedStateActive === false) {
link.removeClass("active");
opt.onselect.call(opt, false);
triggerAction(opt.id,false);
} else if (opt.hasOwnProperty("selected")) {
if (opt.selected) {
link.addClass("active");
} else {
link.removeClass("active");
}
opt.onselect.call(opt, opt.selected);
triggerAction(opt.id,opt.selected);
}
}
@@ -45,12 +59,16 @@ RED.menu = (function() {
item = $('<li class="divider"></li>');
} else {
item = $('<li></li>');
if (opt.group) {
item.addClass("menu-group-"+opt.group);
}
var linkContent = '<a '+(opt.id?'id="'+opt.id+'" ':'')+'tabindex="-1" href="#">';
if (opt.toggle) {
linkContent += '<i class="fa fa-square pull-left"></i>';
linkContent += '<i class="fa fa-check-square pull-left"></i>';
}
if (opt.icon !== undefined) {
if (/\.png/.test(opt.icon)) {
@@ -59,22 +77,23 @@ RED.menu = (function() {
linkContent += '<i class="'+(opt.icon?opt.icon:'" style="display: inline-block;"')+'"></i> ';
}
}
if (opt.sublabel) {
linkContent += '<span class="menu-label-container"><span class="menu-label">'+opt.label+'</span>'+
'<span class="menu-sublabel">'+opt.sublabel+'</span></span>'
} else {
linkContent += '<span class="menu-label">'+opt.label+'</span>'
}
linkContent += '</a>';
var link = $(linkContent).appendTo(item);
menuItems[opt.id] = opt;
if (opt.onselect) {
link.click(function() {
link.click(function(e) {
e.preventDefault();
if ($(this).parent().hasClass("disabled")) {
return;
}
@@ -96,10 +115,12 @@ RED.menu = (function() {
setSelected(opt.id, !selected);
}
} else {
opt.onselect.call(opt);
triggerAction(opt.id);
}
});
setState();
if (opt.toggle) {
setInitialState();
}
} else if (opt.href) {
link.attr("target","_blank").attr("href",opt.href);
} else if (!opt.options) {
@@ -113,23 +134,15 @@ RED.menu = (function() {
var submenu = $('<ul id="'+opt.id+'-submenu" class="dropdown-menu"></ul>').appendTo(item);
for (var i=0;i<opt.options.length;i++) {
createMenuItem(opt.options[i]).appendTo(submenu);
var li = createMenuItem(opt.options[i]);
if (li) {
li.appendTo(submenu);
}
}
}
if (opt.disabled) {
item.addClass("disabled");
}
if (opt.tip) {
item.popover({
placement:"left",
trigger: "hover",
delay: { show: 350, hide: 20 },
html: true,
container:'body',
content: opt.tip
});
}
}
@@ -138,34 +151,46 @@ RED.menu = (function() {
}
function createMenu(options) {
var button = $("#"+options.id);
var menuParent = $("#"+options.id);
//button.click(function(event) {
// $("#"+options.id+"-submenu").show();
// event.preventDefault();
//});
var topMenu = $("<ul/>",{id:options.id+"-submenu", class:"dropdown-menu pull-right"}).insertAfter(button);
var topMenu = $("<ul/>",{id:options.id+"-submenu", class:"dropdown-menu pull-right"});
if (menuParent.length === 1) {
topMenu.insertAfter(menuParent);
}
var lastAddedSeparator = false;
for (var i=0;i<options.options.length;i++) {
var opt = options.options[i];
createMenuItem(opt).appendTo(topMenu);
if (opt !== null || !lastAddedSeparator) {
var li = createMenuItem(opt);
if (li) {
li.appendTo(topMenu);
lastAddedSeparator = (opt === null);
}
}
}
return topMenu;
}
function isSavedStateActive(id) {
return RED.settings.get("menu-" + id);
function triggerAction(id, args) {
var opt = menuItems[id];
var callback = opt.onselect;
if (typeof opt.onselect === 'string') {
callback = RED.actions.get(opt.onselect);
}
if (callback) {
callback.call(opt,args);
} else {
console.log("No callback for",id,opt.onselect);
}
}
function isSelected(id) {
return $("#" + id).hasClass("active");
}
function setSavedState(id, state) {
RED.settings.set("menu-" + id, state);
}
function setSelected(id,state) {
if (isSelected(id) == state) {
return;
@@ -176,10 +201,14 @@ RED.menu = (function() {
} else {
$("#"+id).removeClass("active");
}
if (opt.onselect) {
opt.onselect.call(opt,state);
if (opt && opt.onselect) {
triggerAction(opt.id,state);
}
setSavedState(id, state);
RED.settings.set(opt.setting||("menu-"+opt.id), state);
}
function toggleSelected(id) {
setSelected(id,!isSelected(id));
}
function setDisabled(id,state) {
@@ -191,30 +220,44 @@ RED.menu = (function() {
}
function addItem(id,opt) {
createMenuItem(opt).appendTo("#"+id+"-submenu");
var item = createMenuItem(opt);
if (opt.group) {
var groupItems = $("#"+id+"-submenu").children(".menu-group-"+opt.group);
if (groupItems.length === 0) {
item.appendTo("#"+id+"-submenu");
} else {
for (var i=0;i<groupItems.length;i++) {
var groupItem = groupItems[i];
var label = $(groupItem).find(".menu-label").html();
if (opt.label < label) {
$(groupItem).before(item);
break;
}
}
if (i === groupItems.length) {
item.appendTo("#"+id+"-submenu");
}
}
} else {
item.appendTo("#"+id+"-submenu");
}
}
function removeItem(id) {
$("#"+id).parent().remove();
}
function setAction(id,action) {
menuItems[id].onselect = action;
$("#"+id).click(function() {
if ($(this).parent().hasClass("disabled")) {
return;
}
if (menuItems[id].toggle) {
setSelected(id,!isSelected(id));
} else {
menuItems[id].onselect.call(menuItems[id]);
}
});
var opt = menuItems[id];
if (opt) {
opt.onselect = action;
}
}
return {
init: createMenu,
setSelected: setSelected,
isSelected: isSelected,
toggleSelected: toggleSelected,
setDisabled: setDisabled,
addItem: addItem,
removeItem: removeItem,

View File

@@ -0,0 +1,81 @@
/**
* Copyright JS Foundation and other contributors, http://js.foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
**/
RED.panels = (function() {
function createPanel(options) {
var container = options.container || $("#"+options.id);
var children = container.children();
if (children.length !== 2) {
throw new Error("Container must have exactly two children");
}
container.addClass("red-ui-panels");
var separator = $('<div class="red-ui-panels-separator"></div>').insertAfter(children[0]);
var startPosition;
var panelHeights = [];
var modifiedHeights = false;
var panelRatio;
separator.draggable({
axis: "y",
containment: container,
scroll: false,
start:function(event,ui) {
var height = container.height();
startPosition = ui.position.top;
panelHeights = [$(children[0]).height(),$(children[1]).height()];
},
drag: function(event,ui) {
var height = container.height();
var delta = ui.position.top-startPosition;
var newHeights = [panelHeights[0]+delta,panelHeights[1]-delta];
$(children[0]).height(newHeights[0]);
$(children[1]).height(newHeights[1]);
if (options.resize) {
options.resize(newHeights[0],newHeights[1]);
}
ui.position.top -= delta;
panelRatio = newHeights[0]/height;
},
stop:function(event,ui) {
modifiedHeights = true;
}
});
return {
resize: function(height) {
var panelHeights = [$(children[0]).height(),$(children[1]).height()];
container.height(height);
if (modifiedHeights) {
var topPanelHeight = panelRatio*height;
var bottomPanelHeight = height - topPanelHeight - 48;
panelHeights = [topPanelHeight,bottomPanelHeight];
$(children[0]).height(panelHeights[0]);
$(children[1]).height(panelHeights[1]);
}
if (options.resize) {
options.resize(panelHeights[0],panelHeights[1]);
}
}
}
}
return {
create: createPanel
}
})();

View File

@@ -0,0 +1,135 @@
/**
* Copyright JS Foundation and other contributors, http://js.foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
**/
RED.popover = (function() {
var deltaSizes = {
"default": {
top: 10,
leftRight: 17,
leftLeft: 25
},
"small": {
top: 5,
leftRight: 8,
leftLeft: 16
}
}
function createPopover(options) {
var target = options.target;
var direction = options.direction || "right";
var trigger = options.trigger;
var content = options.content;
var delay = options.delay;
var width = options.width||"auto";
var size = options.size||"default";
if (!deltaSizes[size]) {
throw new Error("Invalid RED.popover size value:",size);
}
var timer = null;
var active;
var div;
var openPopup = function() {
if (active) {
div = $('<div class="red-ui-popover red-ui-popover-'+direction+'"></div>').appendTo("body");
if (size !== "default") {
div.addClass("red-ui-popover-size-"+size);
}
if (typeof content === 'function') {
content.call(res).appendTo(div);
} else {
div.html(content);
}
if (width !== "auto") {
div.width(width);
}
var targetPos = target.offset();
var targetWidth = target.width();
var targetHeight = target.height();
var divHeight = div.height();
var divWidth = div.width();
if (direction === 'right') {
div.css({top: targetPos.top+targetHeight/2-divHeight/2-deltaSizes[size].top,left:targetPos.left+targetWidth+deltaSizes[size].leftRight});
} else if (direction === 'left') {
div.css({top: targetPos.top+targetHeight/2-divHeight/2-deltaSizes[size].top,left:targetPos.left-deltaSizes[size].leftLeft-divWidth});
}
div.fadeIn("fast");
}
}
var closePopup = function() {
if (!active) {
if (div) {
div.fadeOut("fast",function() {
$(this).remove();
});
div = null;
}
}
}
if (trigger === 'hover') {
target.on('mouseenter',function(e) {
clearTimeout(timer);
active = true;
timer = setTimeout(openPopup,delay.show);
});
target.on('mouseleave', function(e) {
if (timer) {
clearTimeout(timer);
}
active = false;
setTimeout(closePopup,delay.hide);
});
} else if (trigger === 'click') {
target.click(function(e) {
e.preventDefault();
e.stopPropagation();
active = !active;
if (!active) {
closePopup();
} else {
openPopup();
}
});
}
var res = {
setContent: function(_content) {
content = _content;
},
open: function () {
active = true;
openPopup();
},
close: function () {
active = false;
closePopup();
}
}
return res;
}
return {
create: createPopover
}
})();

View File

@@ -0,0 +1,99 @@
/**
* Copyright JS Foundation and other contributors, http://js.foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
**/
(function($) {
$.widget( "nodered.searchBox", {
_create: function() {
var that = this;
this.currentTimeout = null;
this.lastSent = "";
this.element.val("");
this.uiContainer = this.element.wrap("<div>").parent();
this.uiContainer.addClass("red-ui-searchBox-container");
$('<i class="fa fa-search"></i>').prependTo(this.uiContainer);
this.clearButton = $('<a href="#"><i class="fa fa-times"></i></a>').appendTo(this.uiContainer);
this.clearButton.on("click",function(e) {
e.preventDefault();
that.element.val("");
that._change("",true);
that.element.focus();
});
this.resultCount = $('<span>',{class:"red-ui-searchBox-resultCount hide"}).appendTo(this.uiContainer);
this.element.val("");
this.element.on("keydown",function(evt) {
if (evt.keyCode === 27) {
that.element.val("");
}
})
this.element.on("keyup",function(evt) {
that._change($(this).val());
});
this.element.on("focus",function() {
$("body").one("mousedown",function() {
that.element.blur();
});
});
},
_change: function(val,instant) {
var fireEvent = false;
if (val === "") {
this.clearButton.hide();
fireEvent = true;
} else {
this.clearButton.show();
fireEvent = (val.length >= (this.options.minimumLength||0));
}
var current = this.element.val();
fireEvent = fireEvent && current !== this.lastSent;
if (fireEvent) {
if (!instant && this.options.delay > 0) {
clearTimeout(this.currentTimeout);
var that = this;
this.currentTimeout = setTimeout(function() {
that.lastSent = that.element.val();
that._trigger("change");
},this.options.delay);
} else {
this._trigger("change");
}
}
},
value: function(val) {
if (val === undefined) {
return this.element.val();
} else {
this.element.val(val);
this._change(val);
}
},
count: function(val) {
if (val === undefined || val === null || val === "") {
this.resultCount.text("").hide();
} else {
this.resultCount.text(val).show();
}
},
change: function() {
this._trigger("change");
}
});
})(jQuery);

View File

@@ -0,0 +1,119 @@
/**
* Copyright JS Foundation and other contributors, http://js.foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
**/
RED.stack = (function() {
function createStack(options) {
var container = options.container;
var entries = [];
var visible = true;
return {
add: function(entry) {
entries.push(entry);
entry.container = $('<div class="palette-category">').appendTo(container);
if (!visible) {
entry.container.hide();
}
var header = $('<div class="palette-header"></div>').appendTo(entry.container);
entry.content = $('<div></div>').appendTo(entry.container);
if (entry.collapsible !== false) {
header.click(function() {
if (options.singleExpanded) {
if (!entry.isExpanded()) {
for (var i=0;i<entries.length;i++) {
if (entries[i].isExpanded()) {
entries[i].collapse();
}
}
entry.expand();
}
} else {
entry.toggle();
}
});
var icon = $('<i class="fa fa-angle-down"></i>').appendTo(header);
if (entry.expanded) {
icon.addClass("expanded");
} else {
entry.content.hide();
}
} else {
header.css("cursor","default");
}
entry.title = $('<span></span>').html(entry.title).appendTo(header);
entry.toggle = function() {
if (entry.isExpanded()) {
entry.collapse();
return false;
} else {
entry.expand();
return true;
}
};
entry.expand = function() {
if (!entry.isExpanded()) {
if (entry.onexpand) {
entry.onexpand.call(entry);
}
icon.addClass("expanded");
entry.content.slideDown(200);
return true;
}
};
entry.collapse = function() {
if (entry.isExpanded()) {
icon.removeClass("expanded");
entry.content.slideUp(200);
return true;
}
};
entry.isExpanded = function() {
return icon.hasClass("expanded");
};
return entry;
},
hide: function() {
visible = false;
entries.forEach(function(entry) {
entry.container.hide();
});
return this;
},
show: function() {
visible = true;
entries.forEach(function(entry) {
entry.container.show();
});
return this;
}
}
}
return {
create: createStack
}
})();

379
editor/js/ui/common/tabs.js Normal file
View File

@@ -0,0 +1,379 @@
/**
* Copyright JS Foundation and other contributors, http://js.foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
**/
RED.tabs = (function() {
function createTabs(options) {
var tabs = {};
var currentTabWidth;
var currentActiveTabWidth = 0;
var ul = options.element || $("#"+options.id);
var wrapper = ul.wrap( "<div>" ).parent();
var scrollContainer = ul.wrap( "<div>" ).parent();
wrapper.addClass("red-ui-tabs");
if (options.vertical) {
wrapper.addClass("red-ui-tabs-vertical");
}
if (options.addButton && typeof options.addButton === 'function') {
wrapper.addClass("red-ui-tabs-add");
var addButton = $('<div class="red-ui-tab-button"><a href="#"><i class="fa fa-plus"></i></a></div>').appendTo(wrapper);
addButton.find('a').click(function(evt) {
evt.preventDefault();
options.addButton();
})
}
var scrollLeft;
var scrollRight;
if (options.scrollable) {
wrapper.addClass("red-ui-tabs-scrollable");
scrollContainer.addClass("red-ui-tabs-scroll-container");
scrollContainer.scroll(updateScroll);
scrollLeft = $('<div class="red-ui-tab-button red-ui-tab-scroll red-ui-tab-scroll-left"><a href="#" style="display:none;"><i class="fa fa-caret-left"></i></a></div>').appendTo(wrapper).find("a");
scrollLeft.on('mousedown',function(evt) { scrollEventHandler(evt,'-=150') }).on('click',function(evt){ evt.preventDefault();});
scrollRight = $('<div class="red-ui-tab-button red-ui-tab-scroll red-ui-tab-scroll-right"><a href="#" style="display:none;"><i class="fa fa-caret-right"></i></a></div>').appendTo(wrapper).find("a");
scrollRight.on('mousedown',function(evt) { scrollEventHandler(evt,'+=150') }).on('click',function(evt){ evt.preventDefault();});
}
function scrollEventHandler(evt,dir) {
evt.preventDefault();
if ($(this).hasClass('disabled')) {
return;
}
var currentScrollLeft = scrollContainer.scrollLeft();
scrollContainer.animate( { scrollLeft: dir }, 100);
var interval = setInterval(function() {
var newScrollLeft = scrollContainer.scrollLeft()
if (newScrollLeft === currentScrollLeft) {
clearInterval(interval);
return;
}
currentScrollLeft = newScrollLeft;
scrollContainer.animate( { scrollLeft: dir }, 100);
},100);
$(this).one('mouseup',function() {
clearInterval(interval);
})
}
ul.children().first().addClass("active");
ul.children().addClass("red-ui-tab");
function onTabClick() {
if (options.onclick) {
options.onclick(tabs[$(this).attr('href').slice(1)]);
}
activateTab($(this));
return false;
}
function updateScroll() {
if (ul.children().length !== 0) {
var sl = scrollContainer.scrollLeft();
var scWidth = scrollContainer.width();
var ulWidth = ul.width();
if (sl === 0) {
scrollLeft.hide();
} else {
scrollLeft.show();
}
if (sl === ulWidth-scWidth) {
scrollRight.hide();
} else {
scrollRight.show();
}
}
}
function onTabDblClick() {
if (options.ondblclick) {
options.ondblclick(tabs[$(this).attr('href').slice(1)]);
}
return false;
}
function activateTab(link) {
if (typeof link === "string") {
link = ul.find("a[href='#"+link+"']");
}
if (link.length === 0) {
return;
}
if (!link.parent().hasClass("active")) {
ul.children().removeClass("active");
ul.children().css({"transition": "width 100ms"});
link.parent().addClass("active");
if (options.scrollable) {
var pos = link.parent().position().left;
if (pos-21 < 0) {
scrollContainer.animate( { scrollLeft: '+='+(pos-50) }, 300);
} else if (pos + 120 > scrollContainer.width()) {
scrollContainer.animate( { scrollLeft: '+='+(pos + 140-scrollContainer.width()) }, 300);
}
}
if (options.onchange) {
options.onchange(tabs[link.attr('href').slice(1)]);
}
updateTabWidths();
setTimeout(function() {
ul.children().css({"transition": ""});
},100);
}
}
function activatePreviousTab() {
var previous = ul.find("li.active").prev();
if (previous.length > 0) {
activateTab(previous.find("a"));
}
}
function activateNextTab() {
var next = ul.find("li.active").next();
if (next.length > 0) {
activateTab(next.find("a"));
}
}
function updateTabWidths() {
if (options.vertical) {
return;
}
var tabs = ul.find("li.red-ui-tab");
var width = wrapper.width();
var tabCount = tabs.size();
var tabWidth = (width-12-(tabCount*6))/tabCount;
currentTabWidth = (100*tabWidth/width)+"%";
currentActiveTabWidth = currentTabWidth+"%";
if (options.scrollable) {
tabWidth = Math.max(tabWidth,140);
currentTabWidth = tabWidth+"px";
currentActiveTabWidth = 0;
var listWidth = Math.max(wrapper.width(),12+(tabWidth+6)*tabCount);
ul.width(listWidth);
updateScroll();
} else if (options.hasOwnProperty("minimumActiveTabWidth")) {
if (tabWidth < options.minimumActiveTabWidth) {
tabCount -= 1;
tabWidth = (width-12-options.minimumActiveTabWidth-(tabCount*6))/tabCount;
currentTabWidth = (100*tabWidth/width)+"%";
currentActiveTabWidth = options.minimumActiveTabWidth+"px";
} else {
currentActiveTabWidth = 0;
}
}
tabs.css({width:currentTabWidth});
if (tabWidth < 50) {
ul.find(".red-ui-tab-close").hide();
ul.find(".red-ui-tab-icon").hide();
ul.find(".red-ui-tab-label").css({paddingLeft:Math.min(12,Math.max(0,tabWidth-38))+"px"})
} else {
ul.find(".red-ui-tab-close").show();
ul.find(".red-ui-tab-icon").show();
ul.find(".red-ui-tab-label").css({paddingLeft:""})
}
if (currentActiveTabWidth !== 0) {
ul.find("li.red-ui-tab.active").css({"width":options.minimumActiveTabWidth});
ul.find("li.red-ui-tab.active .red-ui-tab-close").show();
ul.find("li.red-ui-tab.active .red-ui-tab-icon").show();
ul.find("li.red-ui-tab.active .red-ui-tab-label").css({paddingLeft:""})
}
}
ul.find("li.red-ui-tab a").on("click",onTabClick).on("dblclick",onTabDblClick);
setTimeout(function() {
updateTabWidths();
},0);
function removeTab(id) {
var li = ul.find("a[href='#"+id+"']").parent();
if (li.hasClass("active")) {
var tab = li.prev();
if (tab.size() === 0) {
tab = li.next();
}
activateTab(tab.find("a"));
}
li.remove();
if (options.onremove) {
options.onremove(tabs[id]);
}
delete tabs[id];
updateTabWidths();
}
return {
addTab: function(tab) {
tabs[tab.id] = tab;
var li = $("<li/>",{class:"red-ui-tab"}).appendTo(ul);
li.attr('id',"red-ui-tab-"+(tab.id.replace(".","-")));
li.data("tabId",tab.id);
var link = $("<a/>",{href:"#"+tab.id, class:"red-ui-tab-label"}).appendTo(li);
if (tab.icon) {
$('<img src="'+tab.icon+'" class="red-ui-tab-icon"/>').appendTo(link);
}
var span = $('<span/>',{class:"bidiAware"}).text(tab.label).appendTo(link);
span.attr('dir', RED.text.bidi.resolveBaseTextDir(tab.label));
link.on("click",onTabClick);
link.on("dblclick",onTabDblClick);
if (tab.closeable) {
var closeLink = $("<a/>",{href:"#",class:"red-ui-tab-close"}).appendTo(li);
closeLink.append('<i class="fa fa-times" />');
closeLink.on("click",function(event) {
event.preventDefault();
removeTab(tab.id);
});
}
updateTabWidths();
if (options.onadd) {
options.onadd(tab);
}
link.attr("title",tab.label);
if (ul.find("li.red-ui-tab").size() == 1) {
activateTab(link);
}
if (options.onreorder) {
var originalTabOrder;
var tabDragIndex;
var tabElements = [];
var startDragIndex;
li.draggable({
axis:"x",
distance: 20,
start: function(event,ui) {
originalTabOrder = [];
tabElements = [];
ul.children().each(function(i) {
tabElements[i] = {
el:$(this),
text: $(this).text(),
left: $(this).position().left,
width: $(this).width()
};
if ($(this).is(li)) {
tabDragIndex = i;
startDragIndex = i;
}
originalTabOrder.push($(this).data("tabId"));
});
ul.children().each(function(i) {
if (i!==tabDragIndex) {
$(this).css({
position: 'absolute',
left: tabElements[i].left+"px",
width: tabElements[i].width+2,
transition: "left 0.3s"
});
}
})
if (!li.hasClass('active')) {
li.css({'zIndex':1});
}
},
drag: function(event,ui) {
ui.position.left += tabElements[tabDragIndex].left+scrollContainer.scrollLeft();
var tabCenter = ui.position.left + tabElements[tabDragIndex].width/2 - scrollContainer.scrollLeft();
for (var i=0;i<tabElements.length;i++) {
if (i === tabDragIndex) {
continue;
}
if (tabCenter > tabElements[i].left && tabCenter < tabElements[i].left+tabElements[i].width) {
if (i < tabDragIndex) {
tabElements[i].left += tabElements[tabDragIndex].width+8;
tabElements[tabDragIndex].el.detach().insertBefore(tabElements[i].el);
} else {
tabElements[i].left -= tabElements[tabDragIndex].width+8;
tabElements[tabDragIndex].el.detach().insertAfter(tabElements[i].el);
}
tabElements[i].el.css({left:tabElements[i].left+"px"});
tabElements.splice(i, 0, tabElements.splice(tabDragIndex, 1)[0]);
tabDragIndex = i;
break;
}
}
},
stop: function(event,ui) {
ul.children().css({position:"relative",left:"",transition:""});
if (!li.hasClass('active')) {
li.css({zIndex:""});
}
updateTabWidths();
if (startDragIndex !== tabDragIndex) {
options.onreorder(originalTabOrder, $.makeArray(ul.children().map(function() { return $(this).data('tabId');})));
}
activateTab(tabElements[tabDragIndex].el.data('tabId'));
}
})
}
},
removeTab: removeTab,
activateTab: activateTab,
nextTab: activateNextTab,
previousTab: activatePreviousTab,
resize: updateTabWidths,
count: function() {
return ul.find("li.red-ui-tab").size();
},
contains: function(id) {
return ul.find("a[href='#"+id+"']").length > 0;
},
renameTab: function(id,label) {
tabs[id].label = label;
var tab = ul.find("a[href='#"+id+"']");
tab.attr("title",label);
tab.find("span.bidiAware").text(label).attr('dir', RED.text.bidi.resolveBaseTextDir(label));
updateTabWidths();
},
order: function(order) {
var existingTabOrder = $.makeArray(ul.children().map(function() { return $(this).data('tabId');}));
if (existingTabOrder.length !== order.length) {
return
}
var i;
var match = true;
for (i=0;i<order.length;i++) {
if (order[i] !== existingTabOrder[i]) {
match = false;
break;
}
}
if (match) {
return;
}
var existingTabMap = {};
var existingTabs = ul.children().detach().each(function() {
existingTabMap[$(this).data("tabId")] = $(this);
});
for (i=0;i<order.length;i++) {
existingTabMap[order[i]].appendTo(ul);
}
}
}
}
return {
create: createTabs
}
})();

View File

@@ -0,0 +1,472 @@
/**
* Copyright JS Foundation and other contributors, http://js.foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
**/
(function($) {
var allOptions = {
msg: {value:"msg",label:"msg.",validate:RED.utils.validatePropertyExpression},
flow: {value:"flow",label:"flow.",validate:RED.utils.validatePropertyExpression},
global: {value:"global",label:"global.",validate:RED.utils.validatePropertyExpression},
str: {value:"str",label:"string",icon:"red/images/typedInput/az.png"},
num: {value:"num",label:"number",icon:"red/images/typedInput/09.png",validate:/^[+-]?[0-9]*\.?[0-9]*([eE][-+]?[0-9]+)?$/},
bool: {value:"bool",label:"boolean",icon:"red/images/typedInput/bool.png",options:["true","false"]},
json: {
value:"json",
label:"JSON",
icon:"red/images/typedInput/json.png",
validate: function(v) { try{JSON.parse(v);return true;}catch(e){return false;}},
expand: function() {
var that = this;
var value = this.value();
try {
value = JSON.stringify(JSON.parse(value),null,4);
} catch(err) {
}
RED.editor.editJSON({
value: value,
complete: function(v) {
var value = v;
try {
value = JSON.stringify(JSON.parse(v));
} catch(err) {
}
that.value(value);
}
})
}
},
re: {value:"re",label:"regular expression",icon:"red/images/typedInput/re.png"},
date: {value:"date",label:"timestamp",hasValue:false},
jsonata: {
value: "jsonata",
label: "expression",
icon: "red/images/typedInput/expr.png",
validate: function(v) { try{jsonata(v);return true;}catch(e){return false;}},
expand:function() {
var that = this;
RED.editor.editExpression({
value: this.value().replace(/\t/g,"\n"),
complete: function(v) {
that.value(v.replace(/\n/g,"\t"));
}
})
}
},
bin: {
value: "bin",
label: "buffer",
icon: "red/images/typedInput/bin.png",
expand: function() {
var that = this;
RED.editor.editBuffer({
value: this.value(),
complete: function(v) {
that.value(v);
}
})
}
}
};
var nlsd = false;
$.widget( "nodered.typedInput", {
_create: function() {
if (!nlsd && RED && RED._) {
for (var i in allOptions) {
if (allOptions.hasOwnProperty(i)) {
allOptions[i].label = RED._("typedInput.type."+i,{defaultValue:allOptions[i].label});
}
}
}
nlsd = true;
var that = this;
this.disarmClick = false;
this.element.addClass('red-ui-typedInput');
this.uiWidth = this.element.outerWidth();
this.elementDiv = this.element.wrap("<div>").parent().addClass('red-ui-typedInput-input');
this.uiSelect = this.elementDiv.wrap( "<div>" ).parent();
var attrStyle = this.element.attr('style');
var m;
if ((m = /width\s*:\s*(\d+(%|px))/i.exec(attrStyle)) !== null) {
this.element.css('width','100%');
this.uiSelect.width(m[1]);
this.uiWidth = null;
} else {
this.uiSelect.width(this.uiWidth);
}
["Right","Left"].forEach(function(d) {
var m = that.element.css("margin"+d);
that.uiSelect.css("margin"+d,m);
that.element.css("margin"+d,0);
});
this.uiSelect.addClass("red-ui-typedInput-container");
this.options.types = this.options.types||Object.keys(allOptions);
this.selectTrigger = $('<button tabindex="0"></button>').prependTo(this.uiSelect);
$('<i class="fa fa-sort-desc"></i>').appendTo(this.selectTrigger);
this.selectLabel = $('<span></span>').appendTo(this.selectTrigger);
this.types(this.options.types);
if (this.options.typeField) {
this.typeField = $(this.options.typeField).hide();
var t = this.typeField.val();
if (t && this.typeMap[t]) {
this.options.default = t;
}
} else {
this.typeField = $("<input>",{type:'hidden'}).appendTo(this.uiSelect);
}
this.element.on('focus', function() {
that.uiSelect.addClass('red-ui-typedInput-focus');
});
this.element.on('blur', function() {
that.uiSelect.removeClass('red-ui-typedInput-focus');
});
this.element.on('change', function() {
that.validate();
})
this.selectTrigger.click(function(event) {
event.preventDefault();
that._showTypeMenu();
});
this.selectTrigger.on('keydown',function(evt) {
if (evt.keyCode === 40) {
// Down
that._showTypeMenu();
}
}).on('focus', function() {
that.uiSelect.addClass('red-ui-typedInput-focus');
})
// explicitly set optionSelectTrigger display to inline-block otherwise jQ sets it to 'inline'
this.optionSelectTrigger = $('<button tabindex="0" class="red-ui-typedInput-option-trigger" style="display:inline-block"><span class="red-ui-typedInput-option-caret"><i class="fa fa-sort-desc"></i></span></button>').appendTo(this.uiSelect);
this.optionSelectLabel = $('<span class="red-ui-typedInput-option-label"></span>').prependTo(this.optionSelectTrigger);
this.optionSelectTrigger.click(function(event) {
event.preventDefault();
that._showOptionSelectMenu();
}).on('keydown', function(evt) {
if (evt.keyCode === 40) {
// Down
that._showOptionSelectMenu();
}
}).on('blur', function() {
that.uiSelect.removeClass('red-ui-typedInput-focus');
}).on('focus', function() {
that.uiSelect.addClass('red-ui-typedInput-focus');
});
this.optionExpandButton = $('<button tabindex="0" class="red-ui-typedInput-option-expand" style="display:inline-block"><i class="fa fa-ellipsis-h"></i></button>').appendTo(this.uiSelect);
this.type(this.options.default||this.typeList[0].value);
},
_showTypeMenu: function() {
if (this.typeList.length > 1) {
this._showMenu(this.menu,this.selectTrigger);
this.menu.find("[value='"+this.propertyType+"']").focus();
} else {
this.element.focus();
}
},
_showOptionSelectMenu: function() {
if (this.optionMenu) {
this.optionMenu.css({
minWidth:this.optionSelectLabel.width()
});
this._showMenu(this.optionMenu,this.optionSelectLabel);
var selectedOption = this.optionMenu.find("[value='"+this.value()+"']");
if (selectedOption.length === 0) {
selectedOption = this.optionMenu.children(":first");
}
selectedOption.focus();
}
},
_hideMenu: function(menu) {
$(document).off("mousedown.close-property-select");
menu.hide();
if (this.elementDiv.is(":visible")) {
this.element.focus();
} else if (this.optionSelectTrigger.is(":visible")){
this.optionSelectTrigger.focus();
} else {
this.selectTrigger.focus();
}
},
_createMenu: function(opts,callback) {
var that = this;
var menu = $("<div>").addClass("red-ui-typedInput-options");
opts.forEach(function(opt) {
if (typeof opt === 'string') {
opt = {value:opt,label:opt};
}
var op = $('<a href="#"></a>').attr("value",opt.value).appendTo(menu);
if (opt.label) {
op.text(opt.label);
}
if (opt.icon) {
$('<img>',{src:opt.icon,style:"margin-right: 4px; height: 18px;"}).prependTo(op);
} else {
op.css({paddingLeft: "18px"});
}
op.click(function(event) {
event.preventDefault();
callback(opt.value);
that._hideMenu(menu);
});
});
menu.css({
display: "none",
});
menu.appendTo(document.body);
menu.on('keydown', function(evt) {
if (evt.keyCode === 40) {
// DOWN
$(this).children(":focus").next().focus();
} else if (evt.keyCode === 38) {
// UP
$(this).children(":focus").prev().focus();
} else if (evt.keyCode === 27) {
that._hideMenu(menu);
}
})
return menu;
},
_showMenu: function(menu,relativeTo) {
if (this.disarmClick) {
this.disarmClick = false;
return
}
var that = this;
var pos = relativeTo.offset();
var height = relativeTo.height();
var menuHeight = menu.height();
var top = (height+pos.top-3);
if (top+menuHeight > $(window).height()) {
top -= (top+menuHeight)-$(window).height()+5;
}
menu.css({
top: top+"px",
left: (2+pos.left)+"px",
});
menu.slideDown(100);
this._delay(function() {
that.uiSelect.addClass('red-ui-typedInput-focus');
$(document).on("mousedown.close-property-select", function(event) {
if(!$(event.target).closest(menu).length) {
that._hideMenu(menu);
}
if ($(event.target).closest(relativeTo).length) {
that.disarmClick = true;
event.preventDefault();
}
})
});
},
_getLabelWidth: function(label) {
var labelWidth = label.outerWidth();
if (labelWidth === 0) {
var container = $('<div class="red-ui-typedInput-container"></div>').css({
position:"absolute",
top:0,
left:-1000
}).appendTo(document.body);
var newTrigger = label.clone().appendTo(container);
labelWidth = newTrigger.outerWidth();
container.remove();
}
return labelWidth;
},
_resize: function() {
if (this.uiWidth !== null) {
this.uiSelect.width(this.uiWidth);
}
if (this.typeMap[this.propertyType] && this.typeMap[this.propertyType].hasValue === false) {
this.selectTrigger.addClass("red-ui-typedInput-full-width");
} else {
this.selectTrigger.removeClass("red-ui-typedInput-full-width");
var labelWidth = this._getLabelWidth(this.selectTrigger);
this.elementDiv.css('left',labelWidth+"px");
if (this.optionExpandButton.is(":visible")) {
this.elementDiv.css('right',"22px");
} else {
this.elementDiv.css('right','0');
}
if (this.optionSelectTrigger) {
this.optionSelectTrigger.css({'left':(labelWidth)+"px",'width':'calc( 100% - '+labelWidth+'px )'});
}
}
},
_destroy: function() {
this.menu.remove();
},
types: function(types) {
var that = this;
var currentType = this.type();
this.typeMap = {};
this.typeList = types.map(function(opt) {
var result;
if (typeof opt === 'string') {
result = allOptions[opt];
} else {
result = opt;
}
that.typeMap[result.value] = result;
return result;
});
this.selectTrigger.toggleClass("disabled", this.typeList.length === 1);
if (this.menu) {
this.menu.remove();
}
this.menu = this._createMenu(this.typeList, function(v) { that.type(v) });
if (currentType && !this.typeMap.hasOwnProperty(currentType)) {
this.type(this.typeList[0].value);
}
},
width: function(desiredWidth) {
this.uiWidth = desiredWidth;
this._resize();
},
value: function(value) {
if (!arguments.length) {
return this.element.val();
} else {
if (this.typeMap[this.propertyType].options) {
if (this.typeMap[this.propertyType].options.indexOf(value) === -1) {
value = "";
}
this.optionSelectLabel.text(value);
}
this.element.val(value);
this.element.trigger('change',this.type(),value);
}
},
type: function(type) {
if (!arguments.length) {
return this.propertyType;
} else {
var that = this;
var opt = this.typeMap[type];
if (opt && this.propertyType !== type) {
this.propertyType = type;
this.typeField.val(type);
this.selectLabel.empty();
var image;
if (opt.icon) {
image = new Image();
image.name = opt.icon;
image.src = opt.icon;
$('<img>',{src:opt.icon,style:"margin-right: 4px;height: 18px;"}).prependTo(this.selectLabel);
} else {
this.selectLabel.text(opt.label);
}
if (opt.options) {
if (this.optionExpandButton) {
this.optionExpandButton.hide();
}
if (this.optionSelectTrigger) {
this.optionSelectTrigger.show();
this.elementDiv.hide();
this.optionMenu = this._createMenu(opt.options,function(v){
that.optionSelectLabel.text(v);
that.value(v);
});
var currentVal = this.element.val();
if (opt.options.indexOf(currentVal) !== -1) {
this.optionSelectLabel.text(currentVal);
} else {
this.value(opt.options[0]);
}
}
} else {
if (this.optionMenu) {
this.optionMenu.remove();
this.optionMenu = null;
}
if (this.optionSelectTrigger) {
this.optionSelectTrigger.hide();
}
if (opt.hasValue === false) {
this.oldValue = this.element.val();
this.element.val("");
this.elementDiv.hide();
} else {
if (this.oldValue !== undefined) {
this.element.val(this.oldValue);
delete this.oldValue;
}
this.elementDiv.show();
}
if (opt.expand && typeof opt.expand === 'function') {
this.optionExpandButton.show();
this.optionExpandButton.off('click');
this.optionExpandButton.on('click',function(evt) {
evt.preventDefault();
opt.expand.call(that);
})
} else {
this.optionExpandButton.hide();
}
this.element.trigger('change',this.propertyType,this.value());
}
if (image) {
image.onload = function() { that._resize(); }
image.onerror = function() { that._resize(); }
} else {
this._resize();
}
}
}
},
validate: function() {
var result;
var value = this.value();
var type = this.type();
if (this.typeMap[type] && this.typeMap[type].validate) {
var val = this.typeMap[type].validate;
if (typeof val === 'function') {
result = val(value);
} else {
result = val.test(value);
}
} else {
result = true;
}
if (result) {
this.uiSelect.removeClass('input-error');
} else {
this.uiSelect.addClass('input-error');
}
return result;
},
show: function() {
this.uiSelect.show();
this._resize();
},
hide: function() {
this.uiSelect.hide();
}
});
})(jQuery);

Some files were not shown because too many files have changed in this diff Show More