iVis-at-Bilkent/cytoscape.js-undo-redo

Name: cytoscape.js-undo-redo

Owner: iVis-at-Bilkent

Description: A Cytoscape.js extension to provide an undo-redo framework

Created: 2016-06-13 13:01:38.0

Updated: 2017-11-15 10:11:19.0

Pushed: 2017-12-19 12:13:31.0

Homepage:

Size: 74

Language: JavaScript

GitHub Committers

UserMost Recent Commit# Commits

Other Committers

UserEmailMost Recent Commit# Commits

README

cytoscape.js-undo-redo

Description

A Cytsocape.js extension to control actions on Cytoscape.js graph, also providing built-in functionalities for common Cytoscape.js operations like dragging nodes, adding/removing nodes, etc. distributed under The MIT License.

Demo

Click here for demo

API
var cy = cytoscape({...});

var ur = cy.undoRedo(options);

cy.undoRedo(options, dontInit) Sets options. Also, dontInit can be left blank and is to be used in extensions to set default actions of an extension.

ur.action( actionName, actionFunction, undoFunction) Register action with its undo function & action name. actionFunction's return value will be used to call undoFunction by argument and vice versa. This function is chainable: ur.action(...).action(...)

ur.do(actionName, args) Calls registered function with action name actionName via actionFunction(args)

ur.undo() Undo last action. Returns arguments that are passed to redo.

ur.redo() Redo last action. Returns arguments that are passed to undo.

ur.undoAll() Undo all actions in undo stack.

ur.redoAll() Redo all actions in redo stack.

cy.on("undo", function(actionName, args){} ) Calls registered function with action name actionName via actionFunction(args)

cy.on("redo", function(actionName, args){} ) Calls registered function with action name actionName via actionFunction(args) *Note that args are returned from opposite action like (undo => redo || redo => undo)

ur.isUndoStackEmpty() Get whether undo stack is empty (namely is undoable)

ur.isRedoStackEmpty() Get whether undo stack is empty (namely is redoable)

ur.getUndoStack() Gets actions (with their args) in undo stack

ur.getRedoStack() Gets actions (with their args) in redo stack

ur.reset(undos, redos) If arguments are provided, overrides undo and redo stacks. Otherwise, undo and redo stacks are cleared.

Default Options
  var options = {
        isDebug: false, // Debug mode for console messages
        actions: {},// actions to be added
        undoableDrag: true, // Whether dragging nodes are undoable can be a function as well
        stackSizeLimit: undefined, // Size limit of undo stack, note that the size of redo stack cannot exceed size of undo stack
        ready: function () { // callback when undo-redo is ready

        }
    }

   var ur = cy.undoRedo(options); // Can also be set whenever wanted.
Events

Parameters:
actionName: Name of the action.
args: Arguments passed to the action.
res: The value returned when the function is executed. This value is to be passed to redo function in afterUndo case and it will be passed to undo function in afterDo/afterRedo cases.

.on("beforeUndo", function(event, actionName, args){ })

.on("afterUndo", function(event, actionName, args, res){ })

.on("beforeRedo", function(event, actionName, args){ })

.on("afterRedo", function(event, actionName, args, res){ })

.on("beforeDo", function(event, actionName, args){ })

.on("afterDo", function(event, actionName, args, res){ })

Default Actions (Undoable/Redoable)
Example
function deleteEles(eles){
    return eles.remove();
}
function restoreEles(eles){
    return eles.restore();
}
ur.action("deleteEles", deleteEles, restoreEles); // register

var selecteds = cy.$(":selected");
ur.do("deleteEles", selecteds); // 

ur.undo();
ur.redo();
Dependencies
Usage instructions

Download the library:

require() the library as appropriate for your project:

CommonJS:

cytoscape = require('cytoscape');
undoRedo = require('cytoscape-undo-redo');

Redo( cytoscape ); // register extension

AMD:

ire(['cytoscape', 'cytoscape.js-undo-redo'], function( cytoscape, undoRedo ){
doRedo( cytoscape ); // register extension

Plain HTML/JS has the extension registered for you automatically, because no require() is needed.

Publishing instructions

This project is set up to automatically be published to npm and bower. To publish:

  1. Set the version number environment variable: export VERSION=1.2.3
  2. Publish: gulp publish
  3. If publishing to bower for the first time, you'll need to run bower register cytoscape.js-undo-redo https://github.com/iVis-at-Bilkent/cytoscape.js-undo-redo.git
Team

This work is supported by the National Institutes of Health's National Center for Advancing Translational Sciences, Grant Number U24TR002306. This work is solely the responsibility of the creators and does not necessarily represent the official views of the National Institutes of Health.