Skip to content

Latest commit

History

118 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Flowy

Demo
A javascript library to create pretty flowcharts with ease ✨

Dribbble | Twitter | Live demo

Flowy makes creating WebApps with flowchart functionality an incredibly simple task. Build automation software, mind mapping tools, or simple programming platforms in minutes by implementing the library into your project.

Made by Alyssa X

Table of contents

Features

Currently, Flowy supports the following:

  • Responsive drag and drop
  • Automatic snapping
  • Block rearrangement
  • Delete blocks
  • Automatic block centering
  • Conditional snapping
  • Conditional block removal
  • Import saved files
  • Mobile support
  • Vanilla javascript (no dependencies)
  • npm install

You can suggest new features here

Installation

Adding Flowy to your WebApp is incredibly simple:

  1. Link flowy.min.js and flowy.min.css to your project. Through jsDelivr:
<linkrel="stylesheet" href="https://cdn.jsdelivr.net/gh/alyssaxuu/flowy/flowy.min.css"><scriptsrc="https://cdn.jsdelivr.net/gh/alyssaxuu/flowy/flowy.min.js"></script>
  1. Create a canvas element that will contain the flowchart (for example, <div id="canvas"></div>)
  2. Create the draggable blocks with the .create-flowy class (for example, <div class="create-flowy">Grab me</div>)

Running Flowy

Initialization

flowy(canvas,ongrab,onrelease,onsnap,onrearrange,spacing_x,spacing_y);
ParameterTypeDescription
canvasjavascript DOM elementThe element that will contain the blocks
ongrabfunction (optional)Function that gets triggered when a block is dragged
onreleasefunction (optional)Function that gets triggered when a block is released
onsnapfunction (optional)Function that gets triggered when a block snaps with another one
onrearrangefunction (optional)Function that gets triggered when blocks are rearranged
spacing_xinteger (optional)Horizontal spacing between blocks (default 20px)
spacing_yinteger (optional)Vertical spacing between blocks (default 80px)

To define the blocks that can be dragged, you need to add the class .create-flowy

Example

HTML

<divclass="create-flowy">The block to be dragged</div><divid="canvas"></div>

Javascript

varspacing_x=40;varspacing_y=100;// Initialize Flowyflowy(document.getElementById("canvas"),onGrab,onRelease,onSnap,onRearrange,spacing_x,spacing_y);functiononGrab(block){// When the user grabs a block}functiononRelease(){// When the user releases a block}functiononSnap(block,first,parent){// When a block snaps with another one}functiononRearrange(block,parent){// When a block is rearranged}

Callbacks

In order to use callbacks, you need to add the functions when initializing Flowy, as explained before.

On grab

functiononGrab(block){// When the user grabs a block}

Gets triggered when a user grabs a block with the class create-flowy

ParameterTypeDescription
blockjavascript DOM elementThe block that has been grabbed

On release

functiononRelease(){// When the user lets go of a block}

Gets triggered when a user lets go of a block, regardless of whether it attaches or even gets released in the canvas.

On snap

functiononSnap(block,first,parent){// When a block can attach to a parentreturntrue;}

Gets triggered when a block can attach to another parent block. You can either prevent the attachment, or allow it by using return true;

ParameterTypeDescription
blockjavascript DOM elementThe block that has been grabbed
firstbooleanIf true, the block that has been dragged is the first one in the canvas
parentjavascript DOM elementThe parent the block can attach to

On rearrange

functiononRearrange(block,parent){// When a block is rearrangedreturntrue;}

Gets triggered when blocks are rearranged and are dropped anywhere in the canvas, without a parent to attach to. You can either allow the blocks to be deleted, or prevent it and thus have them re-attach to their previous parent using return true;

ParameterTypeDescription
blockjavascript DOM elementThe block that has been grabbed
parentjavascript DOM elementThe parent the block can attach to

Methods

Get the flowchart data

// As an objectflowy.output();// As a JSON stringJSON.stringify(flowy.output());

The JSON object that gets outputted looks like this:

{
"html": "",
"blockarr": [],
"blocks": [
{
"id": 1,
"parent": 0,
"data": [
{
"name": "blockid",
"value": "1"
}
],
"attr": [
{
"id": "block-id",
"class": "block-class"
}
]
}
]
}

Here's what each property means:

KeyValue typeDescription
htmlstringContains the canvas data
blockarrarrayContains the block array generated by the library (for import purposes)
blocksarrayContains the readable block array
idintegerUnique value that identifies a block
parentintegerThe id of the parent a block is attached to (-1 means the block has no parent)
dataarray of objectsAn array of all the inputs within a certain block
namestringThe name attribute of the input
valuestringThe value attribute of the input
attrarray of objectsContains all the data attributes of a certain block

Import the flowchart data

flowy.import(output)

Allows you to import entire flowcharts initially exported using the previous method, flowy.output()

ParameterTypeDescription
outputjavascript DOM elementThe data from flowy.output()

Delete all blocks

To remove all blocks at once use:

flowy.deleteBlocks()

Currently there is no method to individually remove blocks. The only way to go about it is by splitting branches manually.

Feel free to reach out to me through email at hi@alyssax.com or on Twitter if you have any questions or feedback! Hope you find this useful 💜

About

The minimal javascript library to create flowcharts ✨

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages