1
0
mirror of https://github.com/node-red/node-red.git synced 2023-10-10 13:36:53 +02:00

Updated dynamic palette (markdown)

Nick O'Leary 2014-08-20 16:53:28 -07:00
parent 9dcd06c9a6
commit 311e9ef7db

@ -17,8 +17,26 @@ Some points that need to be considered:
- removing a node, without also removing the files, will mean it returns to the palette on the next restart. That would be unexpected. - removing a node, without also removing the files, will mean it returns to the palette on the next restart. That would be unexpected.
## On the packaging of nodes
### Adding a node type ### node ###
A **node** is defined in an html file and a js file. The js file will include a call to the runtime's version of `RED.nodes.registerType`. The html file will contain the template and help script blocks, along with a call to the editor's version of `RED.nodes.registerType`.
### node set ###
A js/html file pair may contain multiple **nodes**. This is called a **node set**. Any error loading the js/html files will cause all **nodes** in a **node set** to be unavailable.
### node module ###
An npm **node module** may contain multiple js/html file pairs - each identified in the `package.json` file. Hence, an npm module may contain multiple **node sets**, each containing 1 or more **nodes**.
### node pack ###
A `node pack` is a collection of similarly-themed nodes that a user might want to install together. It is structurally the same as a node module, but acts as a meta-package that pulls in multiple specific **node modules** using the standard package dependency mechanism.
### Add/Remove vs Enable/Disable
The Add/Remove api is for getting new nodes installed into the runtime as well as removing them. It operates at either the js/html level, or the node module level.
The Enable/Disable api is used with **node sets**. This is how a user can install a **node module** using the Add/Remove API, then elect to disable one or more of the **node sets** it contains so they don't appear in the palette.
### Adding a node set/module
To add a new node to the palette: To add a new node to the palette:
1. a request is POSTed to `{admin root}/nodes` to trigger the add. 1. a request is POSTed to `{admin root}/nodes` to trigger the add.
@ -29,9 +47,11 @@ To add a new node to the palette:
module: "npm module name" module: "npm module name"
} }
2. An event is fired over the comms link telling any connected editors that nodes have been added. This triggers a HTTP Get back to `{admin root}/nodes/{node-set-id}` to load the node definition/help/edit template. 2. The response to this request is a json object containing the node set id, a list of the specific types in the set and a boolean flag to show if it is enabled or not. If not enabled, it may also list an error message describing why it is not enabled - unless if has been disabled by the user.
### Remove node type 3. An event is fired over the comms link telling any connected editors that nodes have been added. This triggers a HTTP Get back to `{admin root}/nodes/{node-set-id}` to load the node definition/help/edit template.
### Remove node set/module
To remove a node from the palette: To remove a node from the palette:
1. a DELETE http request is sent to `{admin root}/nodes/{node-set-id}` to trigger the removal. 1. a DELETE http request is sent to `{admin root}/nodes/{node-set-id}` to trigger the removal.
@ -39,8 +59,12 @@ To remove a node from the palette:
3. The runtime registry removes the corresponding nodes. 3. The runtime registry removes the corresponding nodes.
4. An event is fired over the comms link telling any connected editors that the nodes have been removed. 4. An event is fired over the comms link telling any connected editors that the nodes have been removed.
### Question ### Enable a node set
@knolleary : Ref the point about multiple nodes: TBD
- a node file or module can contain multiple nodes. Making a request to remove a single node type may trigger the removal of multiple node types.
Is it possible to have two options? One to remove a specific node and a second to remove the collection? I am thinking of a use case where a Node module contains (for instance) 5 nodes for a specific use case (e.g, home automation), and I want to/will regularly use 3 of those nodes in the bundle but not interested in 2 of them. Can I just remove the 2 nodes to have a cleaner palette and runtime? - need a persistence mechanism to remember the enabled/disabled state of nodes over restarts.
<ly> PS: This section can be removed when dealt with </ly>
### Disable a node set
TBD
- as with remove, cannot disable a node set that contains an in-use type