From 4208e912a39b7411fad0565bb5acb67a25db277e Mon Sep 17 00:00:00 2001 From: knolleary Date: Thu, 25 Sep 2014 06:33:14 -0700 Subject: [PATCH] Updated Design: dynamic palette (markdown) --- Design: dynamic palette.md | 27 ++++++--------------------- 1 file changed, 6 insertions(+), 21 deletions(-) diff --git a/Design: dynamic palette.md b/Design: dynamic palette.md index 3e6cb4a..24a9af9 100644 --- a/Design: dynamic palette.md +++ b/Design: dynamic palette.md @@ -4,17 +4,7 @@ Currently, the palette of nodes is loaded when the runtime starts and does not c The runtime needs to allow nodes to be added/removed dynamically. -Some points that need to be considered: - -- nodes can be added by dropping files into the node path, or by npm. Both of these mechanisms should be supported by this feature - - adding by file will expect the file to have already been copied into node path - - adding by npm will trigger an npm install of the module - - future support for importing a zip or files themselves? -- removing a node cannot 'unload' the module - care must be taken if the node creates any 'static' resources -- removing a node in the editor must allow it to remove any artefacts added to the page (eg, debug node's tab) -- 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. -- what to do if the node is being used in the current flow? Safest option is to reject the removal. -- removing a node, without also removing the files, will mean it returns to the palette on the next restart. That would be unexpected. +As of 0.9, we only support adding/removing nodes by npm module name. We do not support installing by filename or by uploading a zip. The npm module name must also be a simple name - we do not support the full range of module names that npm does (name@version, http://example.com/file.tgz foo/bar). --- @@ -29,23 +19,22 @@ The Enable/Disable api is used with **node sets**. This is how a user can instal To add a new node to the palette: 1. a request is POSTed to `{admin root}/nodes` to trigger the add. Its `Content-Type` _must_ be `application/json`. - The post body is a JSON structure that identifies where the node information comes from, either a local file (`file`) or an npm module (`module`). + The post body is a JSON structure that identifies where the node information comes from. As of 0.9, only `module` is supported. { - file: "path to local node .js file or package.json", module: "npm module name" } -2. The response to this request is the corresponding node information object. This 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. +2. The response to this request is the corresponding node information object. This 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 it has been disabled by the user. 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: -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/{module-name}` to trigger the removal. 2. If the any of the corresponding nodes are in use, the request is rejected -3. The runtime registry removes the corresponding nodes. +3. The runtime registry removes the corresponding nodes and npm module 4. An event is fired over the comms link telling any connected editors that the nodes have been removed. ### Enable/Disable a node set @@ -64,8 +53,4 @@ To remove a node from the palette: ## ToDo - [ ] Create UI for enabling/disabling nodes -- [ ] Create UI for uninstalling nodes -- [x] Editor registry of types that is populated with the node list -- [x] Update registry in response to `node/enabled`/`node/disabled` events -- [x] Remove node from palette on `node/disabled` event -- [x] Add node back to palette on `node/enabled` event - definition should already be loaded +- [ ] Create UI for uninstalling nodes \ No newline at end of file