0.3.0 • Published 7 months ago

@nigelcunningham/flowsvg v0.3.0

Weekly downloads
-
License
-
Repository
github
Last release
7 months ago

flowSVG

Create simple interactive and static flow charts using JavaScript and SVG.

See an example. The code for this is in example/.

flowSVG depends on svg.js. Optionally, for smooth scrolling to off-screen elements it uses jQuery and the jquery.scrollTo plugin

Usage

Setup

Link to the dependencies in the head of the page.

<!-- jQuery only required for smooth scrolling -->
<script src="jquery-2.1.3.min.js"></script>
<script src="jquery.scrollTo.min.js"></script>
<script src="svg.js"></script>
<script src="flowsvg.min.js"></script>

Quick start

Start by attaching an SVG element to a div.

<div id="drawing" style="margin-left:10px"></div>
<script>
flowSVG.draw(SVG('drawing').size(900, 1100));

// Then construct an array of shape objects.
flowSVG.shapes([
  {
  label: 'knowPolicy',
  type: 'decision',
  text: [
  'Do you know the ',
  'Open Access policy',
  'of the journal?'
  ],
  yes: 'hasOAPolicy',
  no: 'checkPolicy'
  }, 
  {
  label: 'hasOAPolicy',
  type: 'decision',
  text: [
  'Does it have Open',
  'Access paid option or is it an',
  'Open Access journal?'
  ],
  yes: 'CCOffered',
  no: 'canWrap'
  }
  // more shapes...
]);
</script>

The first shape in the array must be the starting shape of the chart. It must be a decision shape. After that, the order is irrelevant. Each shape object has the following required properties

 {
  // The label is how the shape is identified
  label: 'knowPolicy',
  // type may be decision, finish, or process
  type: 'decision',
  /* 
  text is an array of lines. SVG text doesn't
  wrap, so you have to manually adjust line length
  */
  text: [
  'Do you know the ',
  'Open Access policy',
  'of the journal?'
  ],
  /* 
  Where to go from here. 'yes' and 'no' apply to
  decisions. 'next' is used with processes.
  These don't apply to finish shapes for obvious
  reasons.
  */
  yes: 'hasOAPolicy',
  no: 'checkPolicy'
  // If this was a process...
  // next: ...
  }, 

Options

Orientating shapes

By default 'yes' choices are placed below the referring shape, 'no' choices to the right, and 'next' below.

To change any of these add an 'orient' object to the shape. valid choices are 'r' (right) and 'b' (bottom).

orient: {
  yes:'r',
  no: 'b'
  // If there is a next...
  //next: 'r'
}

To move a shape more to the right than the default in the static view add a 'moveRight' property to it.

moveRight: 250

Appearance

Use the config function to change the default properties e.g.

flowSVG.config({
    // Shape width
    w: 200,
    // Shape height
    h: 180,
    // The following are self-explanatory
    connectorLength: 100,
    connectorStrokeWidth: 3,
    arrowColour: 'lightgrey',
    decisionFill: 'firebrick',
    processFill: 'navajowhite',
    finishFill: 'seagreen',
    defaultFontSize: '14'
    // Any other configurations
});

To see all configuration options look at the init() function at the top of the uncompressed source file. Note that some of these are still experimental and may not work as expected, or at all.

Change Yes and No labels

These can be changed, but only globally. For example

flowSVG.config({
    labelYes: 'True',
    labelNo: 'false'
});

Having done this you may need to increase the size of the line labels, and maybe nudge them to the right or bottom. Don't forget that you also have connectorLength to play with.

flowSVG.config({
    labelYes: 'True',
    labelNo: 'false',
    labelWidth: 40,
    labelNudgeRight: 10,
    labelNudgeBottom: 10
});

Note that on the static view, if there are any angle lines coming out of the right of shapes, larger labels may overlap the elbow.

Add links

Links can be added to decision and process shapes. Links will go after the text.

/* Links is an array of objects */
links: [
  {
  text: 'SHERPA FACT/ROMEO ', 
  url: 'http://www.sherpa.ac.uk/romeo/index.php',
  // Optional target
  target: '_blank'
  }
],

Add a tip

A pop-up tip can be added to a finish shape.

tip: {
  title: 'HEFCE Note',
  text:[
  'You must put your',
  'accepted version into',
  'WRAP and/or subject',
  'repository within 3 months',
  'of acceptance.'
  ]
}

General options

Other configuration options that can be set are:

flowSVG.config({
  /*
  By default the chart loads in interactive mode.
  Change to false to load the static view first
  */
  interactive: false,
  /* 
  Buttons are shown by default. Set to false to
  hide them
  */
  showButtons: false,
  // Disable scrolling to off screen elements
  scrollto: true
});

Building charts incrementally

Flow charts take a lot of thinking about. You can build incrementally, rather than having the whole plan before you start. Referring to a non-existent shape in the 'yes, no' or 'next' properties will cause an error. To work around this, comment out these properties or leave them out until the referenced shapes exist.

Shapes are moved into position when another shape refers to them. So until a shape is referred to, it will pile up in the default top left position. To be able to see if a shape is hiding another shape, add the 'maxOpacity' property temporarily to the config function something like this.

maxOpacity: 0.5