cytoscape-edgehandles
Description
This extension creates handles on nodes that can be dragged to create edges between nodes.
Dependencies
- jQuery ^1.4 || ^2.0
- Cytoscape.js ^2.2.8
Usage instructions
Download the library:
- via npm:
npm install cytoscape-edgehandles
, - via bower:
bower install cytoscape-edgehandles
, or - via direct download in the repository (probably from a tag).
require()
the library as appropriate for your project:
CommonJS:
var cytoscape = ;var edgehandles = ;var jquery = ; ; // register extension
AMD:
;
Plain HTML/JS has the extension registered for you automatically, because no require()
is needed.
Initialisation
You initialise the extension on the Cytoscape instance:
var cy = ; // the default values of each option are outlined below:var defaults = preview: true // whether to show added edges preview before releasing selection stackOrder: 4 // Controls stack order of edgehandles canvas element by setting it's z-index handleSize: 10 // the size of the edge handle put on nodes handleColor: '#ff0000' // the colour of the handle and the line drawn from it handleLineType: 'ghost' // can be 'ghost' for real edge, 'straight' for a straight line, or 'draw' for a draw-as-you-go line handleLineWidth: 1 // width of handle line in pixels handleIcon: false // Pass an Image-object to use as icon on handle. Icons are resized according to zoom and centered in handle. handleNodes: 'node' // selector/filter function for whether edges can be made from a given node hoverDelay: 150 // time spend over a target node before it is considered a target selection cxt: false // whether cxt events trigger edgehandles (useful on touch) enabled: true // whether to start the extension in the enabled state toggleOffOnLeave: false // whether an edge is cancelled by leaving a node (true), or whether you need to go over again to cancel (false; allows multiple edges in one pass) { // can return 'flat' for flat edges between nodes or 'node' for intermediate node between them // returning null/undefined means an edge can't be added between the two nodes return 'flat'; } { // for the specified node, return whether edges from itself to itself are allowed return false; } nodeLoopOffset: -50 // offset for edgeType: 'node' loops { // for edges between the specified source and target // return element object to be passed to cy.add() for intermediary node return {}; } { // for edges between the specified source and target // return element object to be passed to cy.add() for edge // NB: i indicates edge index in case of edgeType: 'node' return {}; } { // fired when edgehandles interaction starts (drag on handle) } { // fired when edgehandles is done and entities are added } { // fired when edgehandles interaction is stopped (either complete with added edges or incomplete) }; cy;
Classes
These classes can be used for styling the graph as it interacts with the extension:
edgehandles-source
: The source nodeedgehandles-target
: A target nodeedgehandles-preview
: Preview elements (used withoptions.preview: true
)edgehandles-hover
: Added to nodes as they are hovered over as targetsedgehandles-ghost-edge
: The ghost handle line edge
Events
During the course of a user's interaction with the extension, several events are generated and triggered on the corresponding elements:
On the source node:
cyedgehandles.showhandle
: when the handle is showncyedgehandles.start
: when starting to drag on the handlecyedgehandles.stop
: when the handle is releasedcyedgehandles.complete
: when the handle has been released and edges are created
On the target node:
cyedgehandles.addpreview
: when a preview is shown (i.e. target selected)cyedgehandles.removepreview
: when a preview is removed (i.e. target unselected)
Example binding:
cy;
Extension functions
All function can be called via cy.edgehandles('function-name')
:
cy.edgehandles('enable')
: enable the extensioncy.edgehandles('enable')
: disable the extensioncy.edgehandles('option', 'preview', false)
: set individual option (e.g.'preview'
)cy.edgehandles('option', { /* options */ })
: set all optionscy.edgehandles('option', 'preview')
: get option value (e.g.'preview'
)cy.edgehandles('destroy')
: destroy the extension instancecy.edgehandles('start', 'some-node-id')
: start the handle drag state on node with specified id (e.g.'some-node-id'
)cy.edgehandles('drawon')
: enable draw modecy.edgehandles('drawoff')
: disable draw mode
Publishing instructions
This project is set up to automatically be published to npm and bower. To publish:
- Set the version number environment variable:
export VERSION=1.2.3
- Publish:
gulp publish
- If publishing to bower for the first time, you'll need to run
bower register cytoscape-edgehandles https://github.com/cytoscape/cytoscape.js-edgehandles.git