Giter Site home page Giter Site logo

spectrumbroad / xible Goto Github PK

View Code? Open in Web Editor NEW
73.0 6.0 10.0 2.68 MB

Visualize your workflow

Home Page: https://xible.io

License: MIT License

JavaScript 87.41% CSS 11.45% HTML 1.06% Dockerfile 0.07%
xible visual flow workflow connector string wire programming automate automation

xible's Introduction

XIBLE

A visual programming language. Visit https://xible.io for more information.

npm

Installation

See the installation documentation for details.

Docker

  1. docker run -it -p 9600:9600 spectrumbroad/xible
  2. Navigate to http://localhost:9600. Or replace "localhost" with the actual address of the machine where you are running the Docker image.

Run locally

Once you have Node.js installed;

  • Docker:
  • On Linux & maxOS run: sudo npm i xible -g --production
  • On Windows run: npm i xible -g --production

Start XIBLE

After installation is completed;

  1. xible server start
  2. Navigate to http://localhost:9600. Or replace "localhost" with the actual address of the machine where you installed XIBLE.

Automatically start XIBLE

To automatically start XIBLE on boot (requires a Linux installation);

  1. sudo xible service enable
  2. sudo xible service start to start it immediately.

xible's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

xible's Issues

Introduce new array modifier like nodes

Introduce nodes to handle output values through methods such as array.filter, array.concat (currently implemented as group), etc.

Note that the current filter node is not like array.filter which processes per item of the array. Instead the filter implementation either drops or returns all input values in one go based on a condition.

Show message if flow crashes

If a flow for whatever reason dies, it currently does so silently. A message of sorts should appear in the editor.

Set maximum status lines per node

There is currently no maximum setting on the amount of status lines for a node in the editor. As a result, there can be a very big list of messages directly between a node. This can be done cleaner by setting a (user-definable) max.

Warn when saving flow while flow is running

When the save button on a flow is clicked, the flow is first stopped. Also, the flow is not automatically restarted (the deploy button can be used to combine the two).

There should be a warning when saving the flow while it is running.

Visualize global connectors

In the editor, global in- & out-puts are visible by a white 'shadow'. It would be nice if hovering one of those globals, would actually show a connector between origin and destination global.

Ensure outputs without a type never get triggered

The type system of XIBLE ensures that only outputs and inputs are connected where the input is in the extends chain of the output.
However, if the output has no type set, eg 'any connection possible', there's no guarantee that the input receives a value within it's required type/extends chain.

From the graphical editor perspective, it still makes sense to allow outputs to have no type. Take for example the group node. The type gets set only when the 'any' input gets connected. Denying the user to connect anything to the 'grouped' output before that time would not be user friendly.
Instead the verifyConnectors() method already in place should drop connectors on the 'grouped' output when the type on the 'any' input becomes set by a new connection. This already happens, but does not lookup the extends chain. That should be fixed too by using this.matches(connector) for each connector.

Conclusion; by the time a flow is saved, all outputs should have a type. Whenever that is not the case, just ignore the output.

Implement console.* nodes in favor of log.console

Currently, the log.console node can be used to output to console. However, this is not consistent with Nodejs, which has console.log, console.error, etc.

XIBLE should by default be shipped with at least;

  • console.log
  • console.error

The log.console node should be removed.

Automatically download required nodepacks on flow install

Newly installed flows from the registry may contain nodes from nodepacks which are not installed.
From the cli it should be possible to auto download these nodepacks using a flag.
The editor should have an opt-out when installing new nodes, once the flow install feature is ready (#20).

Center copy to viewport/editor upon pasting selection

Currently the selection is pasted to its original position + 20px on both the x and y-axis.
This is fine for duplicating a selection (ctrl+j). But for pasting a previously copied selection (ctrl+c, ctrl+v), the position should be set according to the viewport/editor position.

Hide optional data fields by default

Some nodes may contain a lot of data fields, most of which are optional. It should be possible to hint optional fields and only reveal them when the mouse hovers a node or focus is on the node.

Verify which node.data will be published upon flow publish

When running xiblepm flow publish <name>, the user should verifiy the NODE.data to be published. Although sensitive data should be vaulted and therefore not be part of this data, there could still be non-vault-fields that a user does not want to publish.
If there is no data outside the vault, simply publish immediately.

Whenever flow publishing has been implemented in the editor, the same principe should apply.

Allow pinch-to-zoom

Zooming on a touchscreen currently only works with the zoom buttons in the bottom-right corner of the editor. This is sub-optimal to say the least.

have xiblepm upgrade work on all nodepacks

Currently a nodepack name has to be provided to run xiblepm upgrade <nodepack name> .
It should be possible to upgrade all nodepacks at once using just xiblepm upgrade.

show xiblepm config list output with full paths instead of json

Currently the output is the prettyfied JSON from the config file. However, since config set and config get work on a path basis (something.something.something), the default output of config list should show all settings with their full path, newline seperated.
A --json option could show the JSON file as we do currently.

Setting node (vault) data values from cli

The cli currently allows you to download a flow from the registry and run that flow using something like;

xiblepm flow install x
xible flow start x

However, if that flow contains nodes which store their (input-) data into the vault, than such data will be missing and therefore the flow will likely not run (successfully).

The cli should have the capability to set data values on nodes by their node id (not perfect, but I see no other value uniquely identifying a node). Proposal;

xible node set somedatafield=somevalue --node-id=123-asd-456
xible node delete somedatefield --node-id=123-asd-456
xible node get somedatafield --node-id=123-asd-456

Create minimal editor view for small vertical screen layouts

There's not really a way to properly visualize a flow in the editor on a narrow vertical screen layout. A phone in portrait mode for example would never be capable of showing the editor in such a way that it's useful.

A new view is recommended that simply shows all nodes in a flow in a vertical list. The order should try to mimic the processing order of a flow as close as possible (that's actually a tough thing to figure out).

Not sure yet how/if to visualize connectors in this view.

Editing should only be possible to the content of a node (input fields and such). Or perhaps this should be disabled completely.

Publishing a flow should not include its vault data

Just published flow "xible.bench.starttime" using xiblepm flow publish. After installing the flow on another machine, I noticed that the vault data was part of the published flow. The vault data should not be published.

Comment blocks

Implement a way to create blocks that can surround an arbitrary area, with comments inside of them.

Allow assignment in `xible config set`

Setting a configuration value currently only allows this format;

xible config set key value

But this should have the same result;

xible config set key=value

Resizing editor can cause the button/chart section to quickly toggle scrollbar

When you resize the editor to just around point where the column containing the deploy button and charts should start scrolling, the scrollbar is toggled in and out.
If you resize far enough beyond that point, there's no problem anymore.

The same issue persists in both FF & Edge, and seems to be caused by the charts.

Proper logging

At the moment, the xible command line interface sets the DEBUG environment param to 'xible*'.
This should be for debugging purposes only.

In addition there should be regular logging to file, preferably in JSON format so the UI can display the results in a human readable format.

Track pending changes in editor

Anything changed in the editor before deploy/save is currently not explicitely visible.

In addition; when running in directed mode, it is impossible to see that a node has not been saved yet and therefore cannot be run as part of directed mode.

Undo/redo

Feature to undo/redo the last action(s)

Add type definitions for node inputs/outputs

At the moment, any string can be used as a type definitions, also see the docs. Consequently, only types with the same name can be hooked up together.
However, there is no way to give custom types a color in the editor, as only a select few types are defined in the CSS. Custom types always appear black as a result, just like inputs/outputs with type 'any' or null.
On top of that, typedefs could be used for inheritance. Many types in use right now share one or more base types that should/could be used to connect to other inputs/outputs.

Installing nodepacks on Windows fails

C:\Users\...>xiblepm nodepack install math
{ Error: spawn npm ENOENT
    at exports._errnoException (util.js:1050:11)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:193:32)
    at onErrorNT (internal/child_process.js:367:16)
    at _combinedTickCallback (internal/process/next_tick.js:80:11)
    at process._tickCallback (internal/process/next_tick.js:104:9)
  code: 'ENOENT',
  errno: 'ENOENT',
  syscall: 'spawn npm',
  path: 'npm',
  spawnargs:
   [ 'install',
     'https://registry.npmjs.org/xible-nodepack-math/-/xible-nodepack-math-0.1.0.tgz' ] }

C:\Users\...>node --version
v7.10.0

C:\Users\...>npm --version
4.2.0

The same error is raised when installing a nodepack from the editor.

'on hold' nodes

It would be nice if a node can be skipped from a flow, without actually deleting it. This could also be implemented on connectors.

button to show complete flow in editor

There should be a way to fit the complete flow (all nodes and connectors) in the editor view.
Probably the best place for such a button is in the zoom section in the bottom-right corner of the editor.

Support parameters for flows

The configuration for a flow is currently locked in place when saved/deployed. There's no proper way of feeding one or multiple parameters when starting a flow through the cli or rest API.

Example, something like this would be nice;

xible flow start testFlow --params paramName=paramValue

paramValue can than be picked up in the flow by means of a xible.flow.param node where the 'paramName' is entered to point to a specific parameter.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.