Skip to content

Instantly share code, notes, and snippets.

@andrewobrien
Last active November 9, 2017 01:31
Show Gist options
  • Select an option

  • Save andrewobrien/c855cd11928c546329408d456fed4919 to your computer and use it in GitHub Desktop.

Select an option

Save andrewobrien/c855cd11928c546329408d456fed4919 to your computer and use it in GitHub Desktop.
Workflow builder
import Ember from 'ember';
export default Ember.Component.extend({
});
import Ember from 'ember';
export default Ember.Component.extend({
elementId: 'wf-decision-tree',
attributeBindings: ['style'],
style: 'background-color:yellow;width:200px;height:100px;position:absolute;top:400px;left:600px;'
});
import Ember from 'ember';
export default Ember.Component.extend({
elementId: 'wf-delay',
attributeBindings: ['style'],
style:'background-color:red;width:200px;height:100px;top:400px;left200px;position:absolute;'
});
import Ember from 'ember';
export default Ember.Component.extend({
elementId: 'wf-trigger',
attributeBindings: ['style'],
style:'background-color:green;width:200px;height:100px;position:absolute;top:50px;left:200px;'
});
import Ember from 'ember';
import { A } from 'ember-array/utils';
import jsPlumb from 'jsplumb';
const {get, set} = Ember;
jsPlumb.bind("ready", function(){
jsPlumb.Defaults.RenderMode = 'jsPlumb.SVG'
jsPlumb.Defaults.Anchors = ["TopCenter", "TopCenter"]
jsPlumb.Defaults.DragOptions = { cursor: 'wait', zIndex:-5 }
jsPlumb.Defaults.Connector = [ "Bezier", { curviness: 90 } ]
});
export default Ember.Component.extend({
showConnections: false,
connections: A(),
components: ['wf-trigger'],
didInsertElement() {
this._super(...arguments);
jsPlumb.setContainer(this.elementId);
const instance = jsPlumb.getInstance();
set(this, 'jsPlumbInstance', instance)
},
_addConnection( source, target, color, width ) {
let connection = jsPlumb.connect({
source: this.$(source),
target: this.$(target),
endpoint: 'Blank',
paintStyle: {
strokeStyle: color,
lineWidth: width
}
});
connection.bind("click", function(conn) {
jsPlumb.detach( conn );
});
this._drawLayout();
},
_drawLayout(){
let g = new dagre.graphlib.Graph();
g.setGraph({});
g.setDefaultEdgeLabel(function() { return {}; });
var nodes = $(".node");
for (var i = 0; i < nodes.length; i++) {
var n = nodes[i];
debugger
g.setNode(n.id, {width: $(n).width(), height: $(n).height()});
}
let edges = get(this, 'jsPlumbInstance').getAllConnections();
for (var i = 0; i < edges.length; i++) {
var c = edges[i];
g.setEdge(c.source.id,c.target.id );
}
// calculate the layout (i.e. node positions)
dagre.layout(g);
// Applying the calculated
g.nodes().forEach(function(v) {
Ember.$("#" + v).css("left", g.node(v).x + "px");
Ember.$("#" + v).css("top", g.node(v).y + "px");
})
},
actions: {
toggleConnections() {
if(!this.showConnections) {
this.addConnection( '#block1', '#block2', 'red', 5 );
this.addConnection( '#block1', '#block3', 'green', 5 );
this.addConnection( '#block2', '#block3', 'blue', 10 );
this.$('button').text('Hide connections');
} else {
jsPlumb.reset();
this.$('button').text('Show connections');
}
},
addNode(existingNode, newNode){
get(this, 'components').pushObject(newNode)
Ember.run.next(this, this._addConnection, `#${existingNode}`, `#${newNode}`, 'red', 5);
return false;
}
},
});
import Ember from 'ember';
import jsPlumb from 'jsplumb';
export default Ember.Controller.extend({
appName: 'Ember Twiddle',
});
{{#workflow-builder as |components addNode|}}
<div style='height: 300px; width: 300px; position: relative'>
{{#each components as |componentName|}}
{{component componentName connect=addNode class='node'}}
{{/each}}
</div>
{{/workflow-builder}}
{{outlet}}
{{input value=value}}
<button {{action attrs.connect attrs.existingNode value}}>Add Component</button>
{{yield}}
Workflow decision tree
{{wf-connector connect=attrs.connect existingNode=this.elementId}}
Workflow-delay
{{wf-connector connect=attrs.connect existingNode=this.elementId}}
Workflow-Trigger
{{wf-connector connect=attrs.connect existingNode=this.elementId}}
{{yield components (action 'addNode')}}
{
"version": "0.12.1",
"EmberENV": {
"FEATURES": {}
},
"options": {
"use_pods": false,
"enable-testing": false
},
"dependencies": {
"jquery": "https://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.3/jquery.js",
"ember": "2.12.0",
"ember-template-compiler": "2.12.0",
"ember-testing": "2.12.0",
"jsplumb": "https://jsplumbtoolkit.com/lib/jsPlumb-2.1.1-min.js",
"graphlib": "https://cdn.jsdelivr.net/npm/graphlib@2.1.1/dist/graphlib.min.js",
"dagre": "https://cdn.jsdelivr.net/npm/dagre@0.7.4/dist/dagre.min.js",
"dagre-core": "https://cdn.jsdelivr.net/npm/dagre@0.7.4/dist/dagre.core.min.js"
},
"addons": {
"ember-data": "2.12.1"
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment