diff --git a/Gruntfile.js b/Gruntfile.js index 27dc4e4f2..b943f3863 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -11,7 +11,6 @@ var versions = { libraryNames = [ "jQuery", "MooTools", "YUI3", "Vanilla" ], renderers = [ "svg", "vml" ], demos = [ - [ "home", "Kitchen Sink" ], [ "flowchart", "Flowchart" ], [ "statemachine", "State Machine" ], [ "draggableConnectors", "Drag and Drop"], diff --git a/README.md b/README.md index bb8b1fe5b..da130902f 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # jsPlumb -jsPlumb provides a means for a developer to visually connect elements on their web pages. It uses SVG or Canvas in modern browsers, and VML on IE 8 and below. The latest version is 1.6.5. +jsPlumb provides a means for a developer to visually connect elements on their web pages. It uses SVG or Canvas in modern browsers, and VML on IE 8 and below. The latest version is 1.7.0. The project started out life on Google Code and was hosted there up until April 30, 2013. From May 1st, 2013, jsPlumb lives on GitHub only. @@ -22,7 +22,7 @@ Vanilla jsPlumb (`dom.jsPlumb-x.x.x.js`) has no external dependencies and offers jsPlumb requires jQuery 1.3.x or later; it has been tested on 1.3.2, 1.4.x, 1.5.x, 1.6.x, 1.7.x, 1.8.x and 1.9.x. To support dragging, you will need jQueryUI 1.7.x or 1.8.x. NOTE: jQuery 1.8.x only works with jQueryUI 1.8.22 and above. -__There is a bug in jQuery 1.6.x and 1.7.x's SVG support for IE9__ - see [this issue](http://bugs.jquery.com/ticket/10832). It means that mouse events do not get posted. There is another discussion of the issue [here](http://forum.jquery.com/topic/1.6.5-broke-svg-hover-events). +__There is a bug in jQuery 1.6.x and 1.7.x's SVG support for IE9__ - see [this issue](http://bugs.jquery.com/ticket/10832). It means that mouse events do not get posted. There is another discussion of the issue [here](http://forum.jquery.com/topic/1.7.0-broke-svg-hover-events). This issue is fixed in jQuery 1.8. - MooTools: diff --git a/bower.json b/bower.json index 1fa179e9d..57219e07c 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "jsPlumb", - "version": "1.6.5", + "version": "1.7.0", "ignore": [ "demo", "dist/apidocs", diff --git a/changelog.txt b/changelog.txt index 8ceee35ed..a88eb5a7f 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,4 +1,4 @@ -* 1.6.5 +* 1.7.0 ISSUES diff --git a/demo/animation/dom.html b/demo/animation/dom.html index 5e0e3a73e..b507be166 100644 --- a/demo/animation/dom.html +++ b/demo/animation/dom.html @@ -2,7 +2,7 @@ - jsPlumb 1.6.5 demo + jsPlumb 1.7.0 demo @@ -44,7 +44,7 @@

ANIMATION

Add a Disc Remove All Connections -

This demonstration uses jsPlumb 1.6.5. No external dependencies are required.

+

This demonstration uses jsPlumb 1.7.0. No external dependencies are required.

diff --git a/demo/animation/jquery.html b/demo/animation/jquery.html index 3b4c99f6f..e5ecbd9ac 100644 --- a/demo/animation/jquery.html +++ b/demo/animation/jquery.html @@ -2,7 +2,7 @@ - jsPlumb 1.6.5 demo - jQuery + jsPlumb 1.7.0 demo - jQuery @@ -44,7 +44,7 @@

ANIMATION

Add a Disc Remove All Connections -

This demonstration uses jsPlumb 1.6.5, jQuery 1.9.0 and jQuery UI 1.9.2.For touch support, jQuery Touch Punch is used.

+

This demonstration uses jsPlumb 1.7.0, jQuery 1.9.0 and jQuery UI 1.9.2.For touch support, jQuery Touch Punch is used.

diff --git a/demo/animation/mootools.html b/demo/animation/mootools.html index a61314f41..17552abc0 100644 --- a/demo/animation/mootools.html +++ b/demo/animation/mootools.html @@ -2,7 +2,7 @@ - jsPlumb 1.6.5 demo - MooTools + jsPlumb 1.7.0 demo - MooTools @@ -44,7 +44,7 @@

ANIMATION

Add a Disc Remove All Connections -

This demonstration uses jsPlumb 1.6.5, MooTools 1.4.5 and MooTools More 1.4.0.1.

+

This demonstration uses jsPlumb 1.7.0, MooTools 1.4.5 and MooTools More 1.4.0.1.

diff --git a/demo/animation/yui.html b/demo/animation/yui.html index 4301a6daa..8ba0e5a09 100644 --- a/demo/animation/yui.html +++ b/demo/animation/yui.html @@ -2,7 +2,7 @@ - jsPlumb 1.6.5 demo - YUI3 + jsPlumb 1.7.0 demo - YUI3 diff --git a/demo/chart/dom.html b/demo/chart/dom.html index 46a8348b5..2107b5697 100644 --- a/demo/chart/dom.html +++ b/demo/chart/dom.html @@ -2,7 +2,7 @@ - jsPlumb 1.6.5 demo + jsPlumb 1.7.0 demo @@ -42,7 +42,7 @@

CHART

Each connection has an Arrow overlay indicating direction, and paints itself orange on mouse hover.

The Bezier curve used in this demo has a 'curviness' of 50

-

This demonstration uses jsPlumb 1.6.5. No external dependencies are required.

+

This demonstration uses jsPlumb 1.7.0. No external dependencies are required.

window one
window two
diff --git a/demo/chart/jquery.html b/demo/chart/jquery.html index d6c0ae441..fcd8f1868 100644 --- a/demo/chart/jquery.html +++ b/demo/chart/jquery.html @@ -2,7 +2,7 @@ - jsPlumb 1.6.5 demo - jQuery + jsPlumb 1.7.0 demo - jQuery @@ -42,7 +42,7 @@

CHART

Each connection has an Arrow overlay indicating direction, and paints itself orange on mouse hover.

The Bezier curve used in this demo has a 'curviness' of 50

-

This demonstration uses jsPlumb 1.6.5, jQuery 1.9.0 and jQuery UI 1.9.2.For touch support, jQuery Touch Punch is used.

+

This demonstration uses jsPlumb 1.7.0, jQuery 1.9.0 and jQuery UI 1.9.2.For touch support, jQuery Touch Punch is used.

window one
window two
diff --git a/demo/chart/mootools.html b/demo/chart/mootools.html index 927042705..9f7f6ba35 100644 --- a/demo/chart/mootools.html +++ b/demo/chart/mootools.html @@ -2,7 +2,7 @@ - jsPlumb 1.6.5 demo - MooTools + jsPlumb 1.7.0 demo - MooTools @@ -42,7 +42,7 @@

CHART

Each connection has an Arrow overlay indicating direction, and paints itself orange on mouse hover.

The Bezier curve used in this demo has a 'curviness' of 50

-

This demonstration uses jsPlumb 1.6.5, MooTools 1.4.5 and MooTools More 1.4.0.1.

+

This demonstration uses jsPlumb 1.7.0, MooTools 1.4.5 and MooTools More 1.4.0.1.

window one
window two
diff --git a/demo/chart/yui.html b/demo/chart/yui.html index a049822e3..ffad6b975 100644 --- a/demo/chart/yui.html +++ b/demo/chart/yui.html @@ -2,7 +2,7 @@ - jsPlumb 1.6.5 demo - YUI3 + jsPlumb 1.7.0 demo - YUI3 diff --git a/demo/demo-list.js b/demo/demo-list.js index af8dcac73..05e101ef8 100644 --- a/demo/demo-list.js +++ b/demo/demo-list.js @@ -3,8 +3,7 @@ // demo. you don't need to concern yourself with what's going on in here. // ;(function() { - var list = [ - [ "home", "Kitchen Sink" ], + var list = [ [ "flowchart", "Flowchart" ], [ "statemachine", "State Machine" ], [ "draggableConnectors", "Drag and Drop"], diff --git a/demo/draggableConnectors/demo.js b/demo/draggableConnectors/demo.js index 3f612ba8b..1598a4952 100644 --- a/demo/draggableConnectors/demo.js +++ b/demo/draggableConnectors/demo.js @@ -133,7 +133,10 @@ paintStyle:{ fillStyle:example3Color, opacity:0.5 }, isSource:true, scope:'yellow', - connectorStyle:{ strokeStyle:example3Color, lineWidth:4 }, + connectorStyle:{ + strokeStyle:example3Color, + lineWidth:4 + }, connector : "Straight", isTarget:true, dropOptions : exampleDropOptions, diff --git a/demo/draggableConnectors/dom.html b/demo/draggableConnectors/dom.html index 34fe0560e..0a00d5849 100644 --- a/demo/draggableConnectors/dom.html +++ b/demo/draggableConnectors/dom.html @@ -2,7 +2,7 @@ - jsPlumb 1.6.5 demo - jQuery + jsPlumb 1.7.0 demo - jQuery @@ -45,7 +45,7 @@

DRAG & DROP

clear plumbing
-

This demonstration uses jsPlumb 1.6.5 No external libraries are required.

+

This demonstration uses jsPlumb 1.7.0 No external libraries are required.

one

toggle connections
disable dragging
detach all
two

toggle connections
disable dragging
detach all
@@ -60,7 +60,7 @@

DRAG & DROP

- + diff --git a/demo/draggableConnectors/jquery.html b/demo/draggableConnectors/jquery.html index 883e9d27f..fb5e8784e 100644 --- a/demo/draggableConnectors/jquery.html +++ b/demo/draggableConnectors/jquery.html @@ -2,7 +2,7 @@ - jsPlumb 1.6.5 demo - jQuery + jsPlumb 1.7.0 demo - jQuery @@ -45,7 +45,7 @@

DRAG & DROP

clear plumbing
-

This demonstration uses jsPlumb 1.6.5, jQuery 1.9.0 and jQuery UI 1.9.2.For touch support, jQuery Touch Punch is used.

+

This demonstration uses jsPlumb 1.7.0, jQuery 1.9.0 and jQuery UI 1.9.2.For touch support, jQuery Touch Punch is used.

one

toggle connections
disable dragging
detach all
two

toggle connections
disable dragging
detach all
diff --git a/demo/draggableConnectors/mootools.html b/demo/draggableConnectors/mootools.html index 372478e37..0c5535f47 100644 --- a/demo/draggableConnectors/mootools.html +++ b/demo/draggableConnectors/mootools.html @@ -2,7 +2,7 @@ - jsPlumb 1.6.5 demo - MooTools + jsPlumb 1.7.0 demo - MooTools @@ -45,7 +45,7 @@

DRAG & DROP

clear plumbing
-

This demonstration uses jsPlumb 1.6.5, MooTools 1.4.5 and MooTools More 1.4.0.1.

+

This demonstration uses jsPlumb 1.7.0, MooTools 1.4.5 and MooTools More 1.4.0.1.

one

toggle connections
disable dragging
detach all
two

toggle connections
disable dragging
detach all
diff --git a/demo/draggableConnectors/yui.html b/demo/draggableConnectors/yui.html index 9346ffdb6..369467123 100644 --- a/demo/draggableConnectors/yui.html +++ b/demo/draggableConnectors/yui.html @@ -2,7 +2,7 @@ - jsPlumb 1.6.5 demo - YUI3 + jsPlumb 1.7.0 demo - YUI3 diff --git a/demo/dynamicAnchors/dom.html b/demo/dynamicAnchors/dom.html index 2ca58a7f5..50eb6d8f4 100644 --- a/demo/dynamicAnchors/dom.html +++ b/demo/dynamicAnchors/dom.html @@ -1,7 +1,7 @@ - jsPlumb 1.6.5 demo + jsPlumb 1.7.0 demo @@ -39,7 +39,7 @@

DYNAMIC ANCHORS

This is a demonstration of anchors that change position dependent on the location of the other element in a connection. Each Connection is decorated with a Diamond overlay, located halfway along the connector.

You can drag new connections between Endpoints.

Endpoints support an unlimited number of Connections.

-

This demonstration uses jsPlumb 1.6.5. No external dependencies are required.

+

This demonstration uses jsPlumb 1.7.0. No external dependencies are required.

1

2

@@ -55,7 +55,7 @@

DYNAMIC ANCHORS

- + diff --git a/demo/dynamicAnchors/jquery.html b/demo/dynamicAnchors/jquery.html index d17168067..3f5af562d 100644 --- a/demo/dynamicAnchors/jquery.html +++ b/demo/dynamicAnchors/jquery.html @@ -1,7 +1,7 @@ - jsPlumb 1.6.5 demo - jQuery + jsPlumb 1.7.0 demo - jQuery @@ -39,7 +39,7 @@

DYNAMIC ANCHORS

This is a demonstration of anchors that change position dependent on the location of the other element in a connection. Each Connection is decorated with a Diamond overlay, located halfway along the connector.

You can drag new connections between Endpoints.

Endpoints support an unlimited number of Connections.

-

This demonstration uses jsPlumb 1.6.5, jQuery 1.9.0 and jQuery UI 1.9.2.For touch support, jQuery Touch Punch is used.

+

This demonstration uses jsPlumb 1.7.0, jQuery 1.9.0 and jQuery UI 1.9.2.For touch support, jQuery Touch Punch is used.

1

2

diff --git a/demo/dynamicAnchors/mootools.html b/demo/dynamicAnchors/mootools.html index 4b46896ea..8a9928c3c 100644 --- a/demo/dynamicAnchors/mootools.html +++ b/demo/dynamicAnchors/mootools.html @@ -1,7 +1,7 @@ - jsPlumb 1.6.5 demo - MooTools + jsPlumb 1.7.0 demo - MooTools @@ -39,7 +39,7 @@

DYNAMIC ANCHORS

This is a demonstration of anchors that change position dependent on the location of the other element in a connection. Each Connection is decorated with a Diamond overlay, located halfway along the connector.

You can drag new connections between Endpoints.

Endpoints support an unlimited number of Connections.

-

This demonstration uses jsPlumb 1.6.5, MooTools 1.4.5 and MooTools More 1.4.0.1.

+

This demonstration uses jsPlumb 1.7.0, MooTools 1.4.5 and MooTools More 1.4.0.1.

1

2

diff --git a/demo/dynamicAnchors/yui.html b/demo/dynamicAnchors/yui.html index c79ed2d1c..4d9cfcd7a 100644 --- a/demo/dynamicAnchors/yui.html +++ b/demo/dynamicAnchors/yui.html @@ -1,7 +1,7 @@ - jsPlumb 1.6.5 demo - YUI3 + jsPlumb 1.7.0 demo - YUI3 diff --git a/demo/flowchart/dom.html b/demo/flowchart/dom.html index 616b2a0c4..3fad697c8 100644 --- a/demo/flowchart/dom.html +++ b/demo/flowchart/dom.html @@ -2,7 +2,7 @@ - jsPlumb 1.6.5 demo - no library + jsPlumb 1.7.0 demo - no library @@ -42,7 +42,7 @@

FLOWCHART

Hover over connections to highlight them, click to delete.

Drag new connections from hollow dots to solid dots. You can also drag connections from their source/target to other sources/targets, or back onto themselves.

By default, Flowchart connectors have square corners, but by setting the 'cornerRadius' parameter, as we have here, you can get rounded corners.

-

This demonstration uses jsPlumb 1.6.5. No external libraries are required.

+

This demonstration uses jsPlumb 1.7.0. No external libraries are required.

1

2

diff --git a/demo/flowchart/jquery.html b/demo/flowchart/jquery.html index a0ddb77b8..ec2371bea 100644 --- a/demo/flowchart/jquery.html +++ b/demo/flowchart/jquery.html @@ -2,7 +2,7 @@ - jsPlumb 1.6.5 demo - jQuery + jsPlumb 1.7.0 demo - jQuery @@ -41,7 +41,7 @@

FLOWCHART

Hover over connections to highlight them, click to delete.

Drag new connections from hollow dots to solid dots. You can also drag connections from their source/target to other sources/targets, or back onto themselves.

By default, Flowchart connectors have square corners, but by setting the 'cornerRadius' parameter, as we have here, you can get rounded corners.

-

This demonstration uses jsPlumb 1.6.5, jQuery 1.9.0 and jQuery UI 1.9.2.For touch support, jQuery Touch Punch is used.

+

This demonstration uses jsPlumb 1.7.0, jQuery 1.9.0 and jQuery UI 1.9.2.For touch support, jQuery Touch Punch is used.

1

2

diff --git a/demo/flowchart/mootools.html b/demo/flowchart/mootools.html index 30069b425..bbc80e42e 100644 --- a/demo/flowchart/mootools.html +++ b/demo/flowchart/mootools.html @@ -2,7 +2,7 @@ - jsPlumb 1.6.5 demo - MooTools + jsPlumb 1.7.0 demo - MooTools @@ -41,7 +41,7 @@

FLOWCHART

Hover over connections to highlight them, click to delete.

Drag new connections from hollow dots to solid dots. You can also drag connections from their source/target to other sources/targets, or back onto themselves.

By default, Flowchart connectors have square corners, but by setting the 'cornerRadius' parameter, as we have here, you can get rounded corners.

-

This demonstration uses jsPlumb 1.6.5, MooTools 1.4.5 and MooTools More 1.4.0.1.

+

This demonstration uses jsPlumb 1.7.0, MooTools 1.4.5 and MooTools More 1.4.0.1.

1

2

diff --git a/demo/flowchart/yui.html b/demo/flowchart/yui.html index 5d2e59a2b..9f9d0770e 100644 --- a/demo/flowchart/yui.html +++ b/demo/flowchart/yui.html @@ -2,7 +2,7 @@ - jsPlumb 1.6.5 demo - yui + jsPlumb 1.7.0 demo - yui diff --git a/demo/home/demo.css b/demo/home/demo.css deleted file mode 100644 index 98c04d7fc..000000000 --- a/demo/home/demo.css +++ /dev/null @@ -1,9 +0,0 @@ -/** ELEMENT POSITIONS **/ -#window1 { top:5em;left:4em;} -#window2 { top:17em; left:49em;} -#window3 { top:31em;left:4em; } -#window4 { top:9em; left:28em;} -#window5 {top:45em;left:33em;} -#window6 {top:30em;left:64em;} -#window7 {top:52em;left:6em;} -#window8 {left:66em;top:32em;} diff --git a/demo/home/demo.js b/demo/home/demo.js deleted file mode 100644 index e98108aab..000000000 --- a/demo/home/demo.js +++ /dev/null @@ -1,212 +0,0 @@ -jsPlumb.ready(function() { - - var instance = jsPlumb.getInstance({ - DragOptions : { cursor: "pointer", zIndex:2000 }, - HoverClass:"connector-hover" - }); - - var connectorStrokeColor = "rgba(50, 50, 200, 1)", - connectorHighlightStrokeColor = "rgba(180, 180, 200, 1)", - hoverPaintStyle = { strokeStyle:"#7ec3d9" }; // hover paint style is merged on normal style, so you - // don't necessarily need to specify a lineWidth - - // - // connect window1 to window2 with a 13 px wide olive colored Bezier, from the BottomCenter of - // window1 to 3/4 of the way along the top edge of window2. give the connection a 1px black outline, - // and allow the endpoint styles to derive their color and outline from the connection. - // label it "Connection One" with a label at 0.7 of the length of the connection, and put an arrow that has a 50px - // wide tail at a point 0.2 of the length of the connection. we use 'cssClass' and 'endpointClass' to assign - // our own css classes, and the Label overlay has three css classes specified for it too. we also give this - // connection a 'hoverPaintStyle', which defines the appearance when the mouse is hovering over it. - // - var connection1 = instance.connect({ - source:"window1", - target:"window2", - connector:["Bezier", { curviness:70 }], - cssClass:"c1", - endpoint:"Blank", - endpointClass:"c1Endpoint", - anchors:["BottomCenter", [ 0.75, 0, 0, -1 ]], - paintStyle:{ - lineWidth:6, - strokeStyle:"#a7b04b", - outlineWidth:1, - outlineColor:"#666" - }, - endpointStyle:{ fillStyle:"#a7b04b" }, - hoverPaintStyle:hoverPaintStyle, - overlays : [ - ["Label", { - cssClass:"l1 component label", - label : "Connection One", - location:0.7, - id:"label", - events:{ - "click":function(label, evt) { - alert("clicked on label for connection " + label.component.id); - } - } - }], - ["Arrow", { - cssClass:"l1arrow", - id:"arrow", - location:0.5, width:20,length:20, - events:{ - "click":function(arrow, evt) { - alert("clicked on arrow for connection " + arrow.component.id); - } - } - }] - ] - }); - - - var w23Stroke = "rgb(189,11,11)"; - var connection3 = instance.connect({ - source:"window2", - target:"window3", - paintStyle:{ - lineWidth:8, - strokeStyle:w23Stroke, - outlineColor:"#666", - outlineWidth:1 - }, - detachable:false, - hoverPaintStyle:hoverPaintStyle, - anchors:[ [ 0.3 , 1, 0, 1 ], "TopCenter" ], - endpoint:"Rectangle", - endpointStyles:[ - { gradient : { stops:[[0, w23Stroke], [1, "#558822"]] }}, - { gradient : {stops:[[0, w23Stroke], [1, "#882255"]] }} - ] - }); - - var connection2 = instance.connect({ - source:'window3', target:'window4', - paintStyle:{ - lineWidth:10, - strokeStyle:connectorStrokeColor, - outlineColor:"#666", - outlineWidth:1 - }, - hoverPaintStyle:hoverPaintStyle, - anchor:"AutoDefault", - detachable:false, - endpointStyle:{ - gradient : { - stops:[[0, connectorStrokeColor], [1, connectorHighlightStrokeColor]], - offset:17.5, - innerRadius:15 - }, - radius:35 - }, - label : function(connection) { - var d = new Date(); - var fmt = function(n, m) { m = m || 10; return (n < m ? new Array(("" + m).length - (""+n).length + 1).join("0") : "") + n; }; - return (fmt(d.getHours()) + ":" + fmt(d.getMinutes()) + ":" + fmt(d.getSeconds())+ "." + fmt(d.getMilliseconds(), 100)); - }, - labelStyle:{ - cssClass:"component label" - } - }); - - - // - //this connects window5 with window6 using a Flowchart connector that is painted green, - //with large Dot endpoints that are placed in the center of each element. there is a - //label at the default location of 0.5, and the connection is marked as not being - //detachable. - // - var conn4Color = "rgba(46,164,26,0.8)"; - var connection4 = instance.connect({ - source:'window5', - target:'window6', - connector:[ "Flowchart", { cornerRadius:10 } ], - anchors:["Center", "Center"], - paintStyle:{ - lineWidth:9, - strokeStyle:conn4Color, - outlineColor:"#666", - outlineWidth:2, - joinstyle:"round" - }, - hoverPaintStyle:hoverPaintStyle, - detachable:false, - endpointsOnTop:false, - endpointStyle:{ radius:65, fillStyle:conn4Color }, - labelStyle : { cssClass:"component label" }, - label : "big\nendpoints" - }); - - var connection5 = instance.connect({ - source:"window4", - target:"window5", - anchors:["BottomRight", "TopLeft"], - paintStyle:{ - lineWidth:7, - strokeStyle:"rgb(131,8,135)", -// outlineColor:"#666", -// outlineWidth:1, - dashstyle:"4 2", - joinstyle:"miter" - }, - hoverPaintStyle:hoverPaintStyle, - endpoint:["Image", {url:"endpointTest1.png"}], - connector:"Straight", - endpointsOnTop:true, - overlays:[ ["Label", { - cssClass:"component label", - label : "4 - 5", - location:0.3 - }], - "Arrow" - - ] - }); - - var stateMachineConnector = { - connector:"StateMachine", - paintStyle:{lineWidth:3,strokeStyle:"#056"}, - hoverPaintStyle:{strokeStyle:"#dbe300"}, - endpoint:"Blank", - anchor:"Continuous", - overlays:[ ["PlainArrow", {location:1, width:15, length:12} ]] - }; - - instance.connect({ - source:"window3", - target:"window7" - }, stateMachineConnector); - - instance.connect({ - source:"window7", - target:"window3" - }, stateMachineConnector); - - // jsplumb event handlers - - // double click on any connection - instance.bind("dblclick", function(connection, originalEvent) { alert("double click on connection from " + connection.sourceId + " to " + connection.targetId); }); - // single click on any endpoint - instance.bind("endpointClick", function(endpoint, originalEvent) { alert("click on endpoint on element " + endpoint.elementId); }); - // context menu (right click) on any component. - instance.bind("contextmenu", function(component, originalEvent) { - alert("context menu on component " + component.id); - originalEvent.preventDefault(); - return false; - }); - - // make all .window divs draggable. note that here i am just using a convenience method - getSelector - - // that enables me to reuse this code across all three libraries. In your own usage of jsPlumb you can use - // your library's selector method - "$" for jQuery, "$$" for MooTools, "Y.all" for YUI3. - //instance.draggable(jsPlumb.getSelector(".window"), { containment:".demo"}); - instance.draggable(jsPlumb.getSelector(".window"), { - drag:function() { - //console.log("DRAG") - } - }); - - jsPlumb.fire("jsPlumbDemoLoaded", instance); -}); - - diff --git a/demo/home/dom.html b/demo/home/dom.html index d5d2bff6c..d8bb63c92 100644 --- a/demo/home/dom.html +++ b/demo/home/dom.html @@ -1,106 +1,7 @@ - - jsPlumb 1.6.5 demo - no library - - - - - - - -
- -
- - - -
- Tweet - -
- -
- -
-
- -

JSPLUMB

-

jsPlumb provides a way to connect elements in a UI.

-

This page contains examples of the various types of connections you can make.

-

This demonstration uses jsPlumb 1.6.5.

-
-
Window 1
-
Window 2
-
Window 3
-
Window 4
-
Window 5
-
Window 6
-
Window 7
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + \ No newline at end of file diff --git a/demo/home/endpointTest1.png b/demo/home/endpointTest1.png deleted file mode 100644 index a6ed6ad89..000000000 Binary files a/demo/home/endpointTest1.png and /dev/null differ diff --git a/demo/home/jquery.html b/demo/home/jquery.html index de52a7306..abb8a80de 100644 --- a/demo/home/jquery.html +++ b/demo/home/jquery.html @@ -1,108 +1,7 @@ - - jsPlumb 1.6.5 demo - jQuery - - - - - - -
- -
- - - -
- Tweet - -
- -
- -
-
- -

JSPLUMB

-

jsPlumb provides a way to connect elements in a UI.

-

This page contains examples of the various types of connections you can make.

-

There are several other demonstrations that offer - a more focused look at some specific part of jsPlumb's functionality - pick one from the drop down or cycle through Next/Previous. -

-

jsPlumb requires one of jQuery, MooTools or YUI3. See the documentation for a more detailed discussion of requirements.

-

This demonstration uses jsPlumb 1.6.5, jQuery 1.9.0 and jQuery UI 1.9.2.For touch support, jQuery Touch Punch is used.

-
-
Window 1
-
Window 2
-
Window 3
-
Window 4
-
Window 5
-
Window 6
-
Window 7
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + \ No newline at end of file diff --git a/demo/home/mootools.html b/demo/home/mootools.html index 296c5cd9f..1d4ca0270 100644 --- a/demo/home/mootools.html +++ b/demo/home/mootools.html @@ -1,107 +1,7 @@ - - jsPlumb 1.6.5 demo - MooTools - - - - - - -
- -
- - - -
- Tweet - -
- -
- -
-
- -

JSPLUMB

-

jsPlumb provides a way to connect elements in a UI.

-

This page contains examples of the various types of connections you can make.

-

There are several other demonstrations that offer - a more focused look at some specific part of jsPlumb's functionality - pick one from the drop down or cycle through Next/Previous. -

-

jsPlumb requires one of jQuery, MooTools or YUI3. See the documentation for a more detailed discussion of requirements.

-

This demonstration uses jsPlumb 1.6.5, MooTools 1.4.5 and MooTools More 1.4.0.1.

-
-
Window 1
-
Window 2
-
Window 3
-
Window 4
-
Window 5
-
Window 6
-
Window 7
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + \ No newline at end of file diff --git a/demo/home/yui.html b/demo/home/yui.html index 09a819ce9..be448c936 100644 --- a/demo/home/yui.html +++ b/demo/home/yui.html @@ -1,105 +1,7 @@ - - jsPlumb 1.6.5 demo - YUI3 - - - - - - -
- -
- - - -
- Tweet - -
- -
- -
-
- -

JSPLUMB

-

jsPlumb provides a way to connect elements in a UI.

-

This page contains examples of the various types of connections you can make.

-

There are several other demonstrations that offer - a more focused look at some specific part of jsPlumb's functionality - pick one from the drop down or cycle through Next/Previous. -

-

jsPlumb requires one of jQuery, MooTools or YUI3. See the documentation for a more detailed discussion of requirements.

-
-
Window 1
-
Window 2
-
Window 3
-
Window 4
-
Window 5
-
Window 6
-
Window 7
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + \ No newline at end of file diff --git a/demo/index.html b/demo/index.html index 4b5bdc5dd..8919b335b 100644 --- a/demo/index.html +++ b/demo/index.html @@ -1,7 +1,7 @@ - + \ No newline at end of file diff --git a/demo/perimeterAnchors/dom.html b/demo/perimeterAnchors/dom.html index 64feb61db..6657d33d8 100644 --- a/demo/perimeterAnchors/dom.html +++ b/demo/perimeterAnchors/dom.html @@ -2,7 +2,7 @@ - jsPlumb 1.6.5 demo - jQuery + jsPlumb 1.7.0 demo - jQuery @@ -38,7 +38,7 @@

PERIMETER ANCHORS

These are anchors that track the perimeter of some shape.

-

This demonstration uses jsPlumb 1.6.5. No external dependencies are required.

+

This demonstration uses jsPlumb 1.7.0. No external dependencies are required.

Rectangle
Ellipse
diff --git a/demo/perimeterAnchors/jquery.html b/demo/perimeterAnchors/jquery.html index 57ce90ee1..5d7af32eb 100644 --- a/demo/perimeterAnchors/jquery.html +++ b/demo/perimeterAnchors/jquery.html @@ -2,7 +2,7 @@ - jsPlumb 1.6.5 demo - jQuery + jsPlumb 1.7.0 demo - jQuery @@ -38,7 +38,7 @@

PERIMETER ANCHORS

These are anchors that track the perimeter of some shape.

-

This demonstration uses jsPlumb 1.6.5, jQuery 1.9.0 and jQuery UI 1.9.2.For touch support, jQuery Touch Punch is used.

+

This demonstration uses jsPlumb 1.7.0, jQuery 1.9.0 and jQuery UI 1.9.2.For touch support, jQuery Touch Punch is used.

Rectangle
Ellipse
diff --git a/demo/perimeterAnchors/mootools.html b/demo/perimeterAnchors/mootools.html index cb6a39aaf..891a73785 100644 --- a/demo/perimeterAnchors/mootools.html +++ b/demo/perimeterAnchors/mootools.html @@ -2,7 +2,7 @@ - jsPlumb 1.6.5 demo - MooTools + jsPlumb 1.7.0 demo - MooTools @@ -38,7 +38,7 @@

PERIMETER ANCHORS

These are anchors that track the perimeter of some shape.

-

This demonstration uses jsPlumb 1.6.5, MooTools 1.4.5 and MooTools More 1.4.0.1.

+

This demonstration uses jsPlumb 1.7.0, MooTools 1.4.5 and MooTools More 1.4.0.1.

Rectangle
Ellipse
diff --git a/demo/perimeterAnchors/yui.html b/demo/perimeterAnchors/yui.html index 9b419a5f3..9a7d52ea3 100644 --- a/demo/perimeterAnchors/yui.html +++ b/demo/perimeterAnchors/yui.html @@ -2,7 +2,7 @@ - jsPlumb 1.6.5 demo - YUI3 + jsPlumb 1.7.0 demo - YUI3 diff --git a/demo/sourcesAndTargets/dom.html b/demo/sourcesAndTargets/dom.html index 09a5a7caa..2668109ba 100644 --- a/demo/sourcesAndTargets/dom.html +++ b/demo/sourcesAndTargets/dom.html @@ -2,7 +2,7 @@ - jsPlumb 1.6.5 demo + jsPlumb 1.7.0 demo @@ -46,7 +46,7 @@

SOURCES & TARGETS

The `disable` link is excluded from being a drag source through the use of the `filter` parameter on the makeSource call.

The green elements are configured as Connection targets, with a `Top` anchor, and are draggable

-

This demonstration uses jsPlumb 1.6.5. No external dependencies are required.

+

This demonstration uses jsPlumb 1.7.0. No external dependencies are required.

Window 1 diff --git a/demo/sourcesAndTargets/jquery.html b/demo/sourcesAndTargets/jquery.html index fb934a7c2..105d405b7 100644 --- a/demo/sourcesAndTargets/jquery.html +++ b/demo/sourcesAndTargets/jquery.html @@ -2,7 +2,7 @@ - jsPlumb 1.6.5 demo - jQuery + jsPlumb 1.7.0 demo - jQuery @@ -46,7 +46,7 @@

SOURCES & TARGETS

The `disable` link is excluded from being a drag source through the use of the `filter` parameter on the makeSource call.

The green elements are configured as Connection targets, with a `Top` anchor, and are draggable

-

This demonstration uses jsPlumb 1.6.5, jQuery 1.9.0 and jQuery UI 1.9.2.For touch support, jQuery Touch Punch is used.

+

This demonstration uses jsPlumb 1.7.0, jQuery 1.9.0 and jQuery UI 1.9.2.For touch support, jQuery Touch Punch is used.

Window 1 diff --git a/demo/sourcesAndTargets/mootools.html b/demo/sourcesAndTargets/mootools.html index 4dcfbfd50..c4aae806e 100644 --- a/demo/sourcesAndTargets/mootools.html +++ b/demo/sourcesAndTargets/mootools.html @@ -2,7 +2,7 @@ - jsPlumb 1.6.5 demo - MooTools + jsPlumb 1.7.0 demo - MooTools @@ -46,7 +46,7 @@

SOURCES & TARGETS

The `disable` link is excluded from being a drag source through the use of the `filter` parameter on the makeSource call.

The green elements are configured as Connection targets, with a `Top` anchor, and are draggable

-

This demonstration uses jsPlumb 1.6.5, MooTools 1.4.5 and MooTools More 1.4.0.1.

+

This demonstration uses jsPlumb 1.7.0, MooTools 1.4.5 and MooTools More 1.4.0.1.

Window 1 diff --git a/demo/sourcesAndTargets/yui.html b/demo/sourcesAndTargets/yui.html index 29007ba69..3a3ba13bb 100644 --- a/demo/sourcesAndTargets/yui.html +++ b/demo/sourcesAndTargets/yui.html @@ -2,7 +2,7 @@ - jsPlumb 1.6.5 demo - YUI3 + jsPlumb 1.7.0 demo - YUI3 diff --git a/demo/statemachine/dom.html b/demo/statemachine/dom.html index 60eb9f55c..dd3ab5253 100644 --- a/demo/statemachine/dom.html +++ b/demo/statemachine/dom.html @@ -1,7 +1,7 @@ - jsPlumb 1.6.5 demo - jQuery + jsPlumb 1.7.0 demo - jQuery @@ -40,7 +40,7 @@

STATE MACHINE

Click and drag new Connections from the orange div in each element; the main elements in the UI are configured to be Connection targets. You can drag from one of these divs onto its parent element to create a 'loopback' connection. Each element supports up to 5 Connections.

Click on a Connection to delete it.

-

This demonstration uses jsPlumb 1.6.5. No external libraries are required.

+

This demonstration uses jsPlumb 1.7.0. No external libraries are required.

BEGIN
PHONE INTERVIEW 1
diff --git a/demo/statemachine/jquery.html b/demo/statemachine/jquery.html index 95d499222..eeb8f98ce 100644 --- a/demo/statemachine/jquery.html +++ b/demo/statemachine/jquery.html @@ -1,7 +1,7 @@ - jsPlumb 1.6.5 demo - jQuery + jsPlumb 1.7.0 demo - jQuery @@ -40,7 +40,7 @@

STATE MACHINE

Click and drag new Connections from the orange div in each element; the main elements in the UI are configured to be Connection targets. You can drag from one of these divs onto its parent element to create a 'loopback' connection. Each element supports up to 5 Connections.

Click on a Connection to delete it.

-

This demonstration uses jsPlumb 1.6.5, jQuery 1.9.0 and jQuery UI 1.9.2.For touch support, jQuery Touch Punch is used.

+

This demonstration uses jsPlumb 1.7.0, jQuery 1.9.0 and jQuery UI 1.9.2.For touch support, jQuery Touch Punch is used.

BEGIN
PHONE INTERVIEW 1
diff --git a/demo/statemachine/mootools.html b/demo/statemachine/mootools.html index 671baffeb..39c6d0ee8 100644 --- a/demo/statemachine/mootools.html +++ b/demo/statemachine/mootools.html @@ -1,7 +1,7 @@ - jsPlumb 1.6.5 demo - MooTools + jsPlumb 1.7.0 demo - MooTools @@ -40,7 +40,7 @@

STATE MACHINE

Click and drag new Connections from the orange div in each element; the main elements in the UI are configured to be Connection targets. You can drag from one of these divs onto its parent element to create a 'loopback' connection. Each element supports up to 5 Connections.

Click on a Connection to delete it.

-

This demonstration uses jsPlumb 1.6.5, MooTools 1.4.5 and MooTools More 1.4.0.1.

+

This demonstration uses jsPlumb 1.7.0, MooTools 1.4.5 and MooTools More 1.4.0.1.

BEGIN
PHONE INTERVIEW 1
diff --git a/demo/statemachine/yui.html b/demo/statemachine/yui.html index 730580ed8..dde8513f6 100644 --- a/demo/statemachine/yui.html +++ b/demo/statemachine/yui.html @@ -1,7 +1,7 @@ - jsPlumb 1.6.5 demo - YUI3 + jsPlumb 1.7.0 demo - YUI3 diff --git a/dist/apidocs/data.json b/dist/apidocs/data.json index c05136a85..587ba7512 100644 --- a/dist/apidocs/data.json +++ b/dist/apidocs/data.json @@ -2,7 +2,7 @@ "project": { "name": "jsPlumb", "description": "pipe up your life", - "version": "1.6.5", + "version": "1.7.0", "url": "" }, "files": { diff --git a/dist/demo/animation/dom.html b/dist/demo/animation/dom.html index 10c559fbe..e5ba33f40 100644 --- a/dist/demo/animation/dom.html +++ b/dist/demo/animation/dom.html @@ -5,7 +5,7 @@ - jsPlumb 1.6.5 demo - animation (Vanilla) + jsPlumb 1.7.0 demo - animation (Vanilla) @@ -50,7 +50,7 @@

ANIMATION

Add a Disc Remove All Connections -

This demonstration uses jsPlumb 1.6.5. No external dependencies are required.

+

This demonstration uses jsPlumb 1.7.0. No external dependencies are required.

@@ -62,7 +62,7 @@

ANIMATION

- + diff --git a/dist/demo/animation/jquery.html b/dist/demo/animation/jquery.html index c378fd8de..b25143f30 100644 --- a/dist/demo/animation/jquery.html +++ b/dist/demo/animation/jquery.html @@ -5,7 +5,7 @@ - jsPlumb 1.6.5 demo - animation (jQuery) + jsPlumb 1.7.0 demo - animation (jQuery) @@ -50,7 +50,7 @@

ANIMATION

Add a Disc Remove All Connections -

This demonstration uses jsPlumb 1.6.5, jQuery 1.9.0 and jQuery UI 1.9.2.For touch support, jQuery Touch Punch is used.

+

This demonstration uses jsPlumb 1.7.0, jQuery 1.9.0 and jQuery UI 1.9.2.For touch support, jQuery Touch Punch is used.

@@ -66,7 +66,7 @@

ANIMATION

- + diff --git a/dist/demo/animation/mootools.html b/dist/demo/animation/mootools.html index f94dae311..fdd455dda 100644 --- a/dist/demo/animation/mootools.html +++ b/dist/demo/animation/mootools.html @@ -5,7 +5,7 @@ - jsPlumb 1.6.5 demo - animation (MooTools) + jsPlumb 1.7.0 demo - animation (MooTools) @@ -50,7 +50,7 @@

ANIMATION

Add a Disc Remove All Connections -

This demonstration uses jsPlumb 1.6.5, MooTools 1.4.5 and MooTools More 1.4.0.1.

+

This demonstration uses jsPlumb 1.7.0, MooTools 1.4.5 and MooTools More 1.4.0.1.

@@ -65,7 +65,7 @@

ANIMATION

- + diff --git a/dist/demo/animation/yui.html b/dist/demo/animation/yui.html index 538f28cb4..158ce9ff8 100644 --- a/dist/demo/animation/yui.html +++ b/dist/demo/animation/yui.html @@ -5,7 +5,7 @@ - jsPlumb 1.6.5 demo - animation (YUI3) + jsPlumb 1.7.0 demo - animation (YUI3) @@ -63,7 +63,7 @@

ANIMATION

- + diff --git a/dist/demo/chart/dom.html b/dist/demo/chart/dom.html index 4783910a4..aa47f58a5 100644 --- a/dist/demo/chart/dom.html +++ b/dist/demo/chart/dom.html @@ -5,7 +5,7 @@ - jsPlumb 1.6.5 demo - chart (Vanilla) + jsPlumb 1.7.0 demo - chart (Vanilla) @@ -48,7 +48,7 @@

CHART

Each connection has an Arrow overlay indicating direction, and paints itself orange on mouse hover.

The Bezier curve used in this demo has a 'curviness' of 50

-

This demonstration uses jsPlumb 1.6.5. No external dependencies are required.

+

This demonstration uses jsPlumb 1.7.0. No external dependencies are required.

window one
window two
@@ -62,7 +62,7 @@

CHART

- + diff --git a/dist/demo/chart/jquery.html b/dist/demo/chart/jquery.html index db76f86fa..30d30fae2 100644 --- a/dist/demo/chart/jquery.html +++ b/dist/demo/chart/jquery.html @@ -5,7 +5,7 @@ - jsPlumb 1.6.5 demo - chart (jQuery) + jsPlumb 1.7.0 demo - chart (jQuery) @@ -48,7 +48,7 @@

CHART

Each connection has an Arrow overlay indicating direction, and paints itself orange on mouse hover.

The Bezier curve used in this demo has a 'curviness' of 50

-

This demonstration uses jsPlumb 1.6.5, jQuery 1.9.0 and jQuery UI 1.9.2.For touch support, jQuery Touch Punch is used.

+

This demonstration uses jsPlumb 1.7.0, jQuery 1.9.0 and jQuery UI 1.9.2.For touch support, jQuery Touch Punch is used.

window one
window two
@@ -66,7 +66,7 @@

CHART

- + diff --git a/dist/demo/chart/mootools.html b/dist/demo/chart/mootools.html index bfa3d61c1..c50ab0735 100644 --- a/dist/demo/chart/mootools.html +++ b/dist/demo/chart/mootools.html @@ -5,7 +5,7 @@ - jsPlumb 1.6.5 demo - chart (MooTools) + jsPlumb 1.7.0 demo - chart (MooTools) @@ -48,7 +48,7 @@

CHART

Each connection has an Arrow overlay indicating direction, and paints itself orange on mouse hover.

The Bezier curve used in this demo has a 'curviness' of 50

-

This demonstration uses jsPlumb 1.6.5, MooTools 1.4.5 and MooTools More 1.4.0.1.

+

This demonstration uses jsPlumb 1.7.0, MooTools 1.4.5 and MooTools More 1.4.0.1.

window one
window two
@@ -65,7 +65,7 @@

CHART

- + diff --git a/dist/demo/chart/yui.html b/dist/demo/chart/yui.html index 81b6d8ce1..7de1c5393 100644 --- a/dist/demo/chart/yui.html +++ b/dist/demo/chart/yui.html @@ -5,7 +5,7 @@ - jsPlumb 1.6.5 demo - chart (YUI3) + jsPlumb 1.7.0 demo - chart (YUI3) @@ -63,7 +63,7 @@

CHART

- + diff --git a/dist/demo/draggableConnectors/demo.js b/dist/demo/draggableConnectors/demo.js index 3f612ba8b..1598a4952 100644 --- a/dist/demo/draggableConnectors/demo.js +++ b/dist/demo/draggableConnectors/demo.js @@ -133,7 +133,10 @@ paintStyle:{ fillStyle:example3Color, opacity:0.5 }, isSource:true, scope:'yellow', - connectorStyle:{ strokeStyle:example3Color, lineWidth:4 }, + connectorStyle:{ + strokeStyle:example3Color, + lineWidth:4 + }, connector : "Straight", isTarget:true, dropOptions : exampleDropOptions, diff --git a/dist/demo/draggableConnectors/dom.html b/dist/demo/draggableConnectors/dom.html index 6cd05d26e..88c46947d 100644 --- a/dist/demo/draggableConnectors/dom.html +++ b/dist/demo/draggableConnectors/dom.html @@ -5,7 +5,7 @@ - jsPlumb 1.6.5 demo - draggableConnectors (Vanilla) + jsPlumb 1.7.0 demo - draggableConnectors (Vanilla) @@ -51,7 +51,7 @@

DRAG & DROP

clear plumbing
-

This demonstration uses jsPlumb 1.6.5 No external libraries are required.

+

This demonstration uses jsPlumb 1.7.0 No external libraries are required.

one

toggle connections
disable dragging
detach all
two

toggle connections
disable dragging
detach all
@@ -64,7 +64,7 @@

DRAG & DROP

- + diff --git a/dist/demo/draggableConnectors/jquery.html b/dist/demo/draggableConnectors/jquery.html index 28a7e0aa2..afe0adae1 100644 --- a/dist/demo/draggableConnectors/jquery.html +++ b/dist/demo/draggableConnectors/jquery.html @@ -5,7 +5,7 @@ - jsPlumb 1.6.5 demo - draggableConnectors (jQuery) + jsPlumb 1.7.0 demo - draggableConnectors (jQuery) @@ -51,7 +51,7 @@

DRAG & DROP

clear plumbing
-

This demonstration uses jsPlumb 1.6.5, jQuery 1.9.0 and jQuery UI 1.9.2.For touch support, jQuery Touch Punch is used.

+

This demonstration uses jsPlumb 1.7.0, jQuery 1.9.0 and jQuery UI 1.9.2.For touch support, jQuery Touch Punch is used.

one

toggle connections
disable dragging
detach all
two

toggle connections
disable dragging
detach all
@@ -68,7 +68,7 @@

DRAG & DROP

- + diff --git a/dist/demo/draggableConnectors/mootools.html b/dist/demo/draggableConnectors/mootools.html index 4f0c495e2..6a0d6e2d0 100644 --- a/dist/demo/draggableConnectors/mootools.html +++ b/dist/demo/draggableConnectors/mootools.html @@ -5,7 +5,7 @@ - jsPlumb 1.6.5 demo - draggableConnectors (MooTools) + jsPlumb 1.7.0 demo - draggableConnectors (MooTools) @@ -51,7 +51,7 @@

DRAG & DROP

clear plumbing
-

This demonstration uses jsPlumb 1.6.5, MooTools 1.4.5 and MooTools More 1.4.0.1.

+

This demonstration uses jsPlumb 1.7.0, MooTools 1.4.5 and MooTools More 1.4.0.1.

one

toggle connections
disable dragging
detach all
two

toggle connections
disable dragging
detach all
@@ -67,7 +67,7 @@

DRAG & DROP

- + diff --git a/dist/demo/draggableConnectors/yui.html b/dist/demo/draggableConnectors/yui.html index e1c243853..8c3d5b167 100644 --- a/dist/demo/draggableConnectors/yui.html +++ b/dist/demo/draggableConnectors/yui.html @@ -5,7 +5,7 @@ - jsPlumb 1.6.5 demo - draggableConnectors (YUI3) + jsPlumb 1.7.0 demo - draggableConnectors (YUI3) @@ -65,7 +65,7 @@

DRAG & DROP

- + diff --git a/dist/demo/dynamicAnchors/dom.html b/dist/demo/dynamicAnchors/dom.html index cfe0829fe..1bd8fd37c 100644 --- a/dist/demo/dynamicAnchors/dom.html +++ b/dist/demo/dynamicAnchors/dom.html @@ -5,7 +5,7 @@ - jsPlumb 1.6.5 demo - dynamicAnchors (Vanilla) + jsPlumb 1.7.0 demo - dynamicAnchors (Vanilla) @@ -46,7 +46,7 @@

DYNAMIC ANCHORS

This is a demonstration of anchors that change position dependent on the location of the other element in a connection. Each Connection is decorated with a Diamond overlay, located halfway along the connector.

You can drag new connections between Endpoints.

Endpoints support an unlimited number of Connections.

-

This demonstration uses jsPlumb 1.6.5. No external dependencies are required.

+

This demonstration uses jsPlumb 1.7.0. No external dependencies are required.

1

2

@@ -60,7 +60,7 @@

DYNAMIC ANCHORS

- + diff --git a/dist/demo/dynamicAnchors/jquery.html b/dist/demo/dynamicAnchors/jquery.html index 2c06e596f..430d66f42 100644 --- a/dist/demo/dynamicAnchors/jquery.html +++ b/dist/demo/dynamicAnchors/jquery.html @@ -5,7 +5,7 @@ - jsPlumb 1.6.5 demo - dynamicAnchors (jQuery) + jsPlumb 1.7.0 demo - dynamicAnchors (jQuery) @@ -46,7 +46,7 @@

DYNAMIC ANCHORS

This is a demonstration of anchors that change position dependent on the location of the other element in a connection. Each Connection is decorated with a Diamond overlay, located halfway along the connector.

You can drag new connections between Endpoints.

Endpoints support an unlimited number of Connections.

-

This demonstration uses jsPlumb 1.6.5, jQuery 1.9.0 and jQuery UI 1.9.2.For touch support, jQuery Touch Punch is used.

+

This demonstration uses jsPlumb 1.7.0, jQuery 1.9.0 and jQuery UI 1.9.2.For touch support, jQuery Touch Punch is used.

1

2

@@ -64,7 +64,7 @@

DYNAMIC ANCHORS

- + diff --git a/dist/demo/dynamicAnchors/mootools.html b/dist/demo/dynamicAnchors/mootools.html index faeb10195..3f062f2e6 100644 --- a/dist/demo/dynamicAnchors/mootools.html +++ b/dist/demo/dynamicAnchors/mootools.html @@ -5,7 +5,7 @@ - jsPlumb 1.6.5 demo - dynamicAnchors (MooTools) + jsPlumb 1.7.0 demo - dynamicAnchors (MooTools) @@ -46,7 +46,7 @@

DYNAMIC ANCHORS

This is a demonstration of anchors that change position dependent on the location of the other element in a connection. Each Connection is decorated with a Diamond overlay, located halfway along the connector.

You can drag new connections between Endpoints.

Endpoints support an unlimited number of Connections.

-

This demonstration uses jsPlumb 1.6.5, MooTools 1.4.5 and MooTools More 1.4.0.1.

+

This demonstration uses jsPlumb 1.7.0, MooTools 1.4.5 and MooTools More 1.4.0.1.

1

2

@@ -63,7 +63,7 @@

DYNAMIC ANCHORS

- + diff --git a/dist/demo/dynamicAnchors/yui.html b/dist/demo/dynamicAnchors/yui.html index 65eb73cb2..f8a412272 100644 --- a/dist/demo/dynamicAnchors/yui.html +++ b/dist/demo/dynamicAnchors/yui.html @@ -5,7 +5,7 @@ - jsPlumb 1.6.5 demo - dynamicAnchors (YUI3) + jsPlumb 1.7.0 demo - dynamicAnchors (YUI3) @@ -61,7 +61,7 @@

DYNAMIC ANCHORS

- + diff --git a/dist/demo/flowchart/dom.html b/dist/demo/flowchart/dom.html index d09d1751d..4517d9bbf 100644 --- a/dist/demo/flowchart/dom.html +++ b/dist/demo/flowchart/dom.html @@ -5,7 +5,7 @@ - jsPlumb 1.6.5 demo - flowchart (Vanilla) + jsPlumb 1.7.0 demo - flowchart (Vanilla) @@ -47,7 +47,7 @@

FLOWCHART

Hover over connections to highlight them, click to delete.

Drag new connections from hollow dots to solid dots. You can also drag connections from their source/target to other sources/targets, or back onto themselves.

By default, Flowchart connectors have square corners, but by setting the 'cornerRadius' parameter, as we have here, you can get rounded corners.

-

This demonstration uses jsPlumb 1.6.5. No external libraries are required.

+

This demonstration uses jsPlumb 1.7.0. No external libraries are required.

1

2

@@ -59,7 +59,7 @@

FLOWCHART

- + diff --git a/dist/demo/flowchart/jquery.html b/dist/demo/flowchart/jquery.html index bd4dbc527..3233d6446 100644 --- a/dist/demo/flowchart/jquery.html +++ b/dist/demo/flowchart/jquery.html @@ -5,7 +5,7 @@ - jsPlumb 1.6.5 demo - flowchart (jQuery) + jsPlumb 1.7.0 demo - flowchart (jQuery) @@ -47,7 +47,7 @@

FLOWCHART

Hover over connections to highlight them, click to delete.

Drag new connections from hollow dots to solid dots. You can also drag connections from their source/target to other sources/targets, or back onto themselves.

By default, Flowchart connectors have square corners, but by setting the 'cornerRadius' parameter, as we have here, you can get rounded corners.

-

This demonstration uses jsPlumb 1.6.5, jQuery 1.9.0 and jQuery UI 1.9.2.For touch support, jQuery Touch Punch is used.

+

This demonstration uses jsPlumb 1.7.0, jQuery 1.9.0 and jQuery UI 1.9.2.For touch support, jQuery Touch Punch is used.

1

2

@@ -63,7 +63,7 @@

FLOWCHART

- + diff --git a/dist/demo/flowchart/mootools.html b/dist/demo/flowchart/mootools.html index 47eeca578..22a1ff1fd 100644 --- a/dist/demo/flowchart/mootools.html +++ b/dist/demo/flowchart/mootools.html @@ -5,7 +5,7 @@ - jsPlumb 1.6.5 demo - flowchart (MooTools) + jsPlumb 1.7.0 demo - flowchart (MooTools) @@ -47,7 +47,7 @@

FLOWCHART

Hover over connections to highlight them, click to delete.

Drag new connections from hollow dots to solid dots. You can also drag connections from their source/target to other sources/targets, or back onto themselves.

By default, Flowchart connectors have square corners, but by setting the 'cornerRadius' parameter, as we have here, you can get rounded corners.

-

This demonstration uses jsPlumb 1.6.5, MooTools 1.4.5 and MooTools More 1.4.0.1.

+

This demonstration uses jsPlumb 1.7.0, MooTools 1.4.5 and MooTools More 1.4.0.1.

1

2

@@ -62,7 +62,7 @@

FLOWCHART

- + diff --git a/dist/demo/flowchart/yui.html b/dist/demo/flowchart/yui.html index b14717d0d..a6b897fa4 100644 --- a/dist/demo/flowchart/yui.html +++ b/dist/demo/flowchart/yui.html @@ -5,7 +5,7 @@ - jsPlumb 1.6.5 demo - flowchart (YUI3) + jsPlumb 1.7.0 demo - flowchart (YUI3) @@ -60,7 +60,7 @@

FLOWCHART

- + diff --git a/dist/demo/home/dom.html b/dist/demo/home/dom.html index 590db902f..3476aaad0 100644 --- a/dist/demo/home/dom.html +++ b/dist/demo/home/dom.html @@ -5,7 +5,7 @@ - jsPlumb 1.6.5 demo - home (Vanilla) + jsPlumb 1.7.0 demo - home (Vanilla) @@ -45,7 +45,7 @@

JSPLUMB

jsPlumb provides a way to connect elements in a UI.

This page contains examples of the various types of connections you can make.

-

This demonstration uses jsPlumb 1.6.5.

+

This demonstration uses jsPlumb 1.7.0.

Window 1
Window 2
@@ -60,7 +60,7 @@

JSPLUMB

- + diff --git a/dist/demo/home/jquery.html b/dist/demo/home/jquery.html index 6ff6a26d1..b1c2d42a2 100644 --- a/dist/demo/home/jquery.html +++ b/dist/demo/home/jquery.html @@ -5,7 +5,7 @@ - jsPlumb 1.6.5 demo - home (jQuery) + jsPlumb 1.7.0 demo - home (jQuery) @@ -49,7 +49,7 @@

JSPLUMB

a more focused look at some specific part of jsPlumb's functionality - pick one from the drop down or cycle through Next/Previous.

jsPlumb requires one of jQuery, MooTools or YUI3. See the documentation for a more detailed discussion of requirements.

-

This demonstration uses jsPlumb 1.6.5, jQuery 1.9.0 and jQuery UI 1.9.2.For touch support, jQuery Touch Punch is used.

+

This demonstration uses jsPlumb 1.7.0, jQuery 1.9.0 and jQuery UI 1.9.2.For touch support, jQuery Touch Punch is used.

Window 1
Window 2
@@ -68,7 +68,7 @@

JSPLUMB

- + diff --git a/dist/demo/home/mootools.html b/dist/demo/home/mootools.html index a01fddff0..31700a0f3 100644 --- a/dist/demo/home/mootools.html +++ b/dist/demo/home/mootools.html @@ -5,7 +5,7 @@ - jsPlumb 1.6.5 demo - home (MooTools) + jsPlumb 1.7.0 demo - home (MooTools) @@ -49,7 +49,7 @@

JSPLUMB

a more focused look at some specific part of jsPlumb's functionality - pick one from the drop down or cycle through Next/Previous.

jsPlumb requires one of jQuery, MooTools or YUI3. See the documentation for a more detailed discussion of requirements.

-

This demonstration uses jsPlumb 1.6.5, MooTools 1.4.5 and MooTools More 1.4.0.1.

+

This demonstration uses jsPlumb 1.7.0, MooTools 1.4.5 and MooTools More 1.4.0.1.

Window 1
Window 2
@@ -67,7 +67,7 @@

JSPLUMB

- + diff --git a/dist/demo/home/yui.html b/dist/demo/home/yui.html index 08e085bc3..1cc351404 100644 --- a/dist/demo/home/yui.html +++ b/dist/demo/home/yui.html @@ -5,7 +5,7 @@ - jsPlumb 1.6.5 demo - home (YUI3) + jsPlumb 1.7.0 demo - home (YUI3) @@ -65,7 +65,7 @@

JSPLUMB

- + diff --git a/dist/demo/perimeterAnchors/dom.html b/dist/demo/perimeterAnchors/dom.html index b3ca4fa75..06db847c1 100644 --- a/dist/demo/perimeterAnchors/dom.html +++ b/dist/demo/perimeterAnchors/dom.html @@ -5,7 +5,7 @@ - jsPlumb 1.6.5 demo - perimeterAnchors (Vanilla) + jsPlumb 1.7.0 demo - perimeterAnchors (Vanilla) @@ -44,7 +44,7 @@

PERIMETER ANCHORS

These are anchors that track the perimeter of some shape.

-

This demonstration uses jsPlumb 1.6.5. No external dependencies are required.

+

This demonstration uses jsPlumb 1.7.0. No external dependencies are required.

Rectangle
Ellipse
@@ -58,7 +58,7 @@

PERIMETER ANCHORS

- + diff --git a/dist/demo/perimeterAnchors/jquery.html b/dist/demo/perimeterAnchors/jquery.html index 79c2ba725..2a2b3c53e 100644 --- a/dist/demo/perimeterAnchors/jquery.html +++ b/dist/demo/perimeterAnchors/jquery.html @@ -5,7 +5,7 @@ - jsPlumb 1.6.5 demo - perimeterAnchors (jQuery) + jsPlumb 1.7.0 demo - perimeterAnchors (jQuery) @@ -44,7 +44,7 @@

PERIMETER ANCHORS

These are anchors that track the perimeter of some shape.

-

This demonstration uses jsPlumb 1.6.5, jQuery 1.9.0 and jQuery UI 1.9.2.For touch support, jQuery Touch Punch is used.

+

This demonstration uses jsPlumb 1.7.0, jQuery 1.9.0 and jQuery UI 1.9.2.For touch support, jQuery Touch Punch is used.

Rectangle
Ellipse
@@ -62,7 +62,7 @@

PERIMETER ANCHORS

- + diff --git a/dist/demo/perimeterAnchors/mootools.html b/dist/demo/perimeterAnchors/mootools.html index 1c5740dc7..16d625720 100644 --- a/dist/demo/perimeterAnchors/mootools.html +++ b/dist/demo/perimeterAnchors/mootools.html @@ -5,7 +5,7 @@ - jsPlumb 1.6.5 demo - perimeterAnchors (MooTools) + jsPlumb 1.7.0 demo - perimeterAnchors (MooTools) @@ -44,7 +44,7 @@

PERIMETER ANCHORS

These are anchors that track the perimeter of some shape.

-

This demonstration uses jsPlumb 1.6.5, MooTools 1.4.5 and MooTools More 1.4.0.1.

+

This demonstration uses jsPlumb 1.7.0, MooTools 1.4.5 and MooTools More 1.4.0.1.

Rectangle
Ellipse
@@ -61,7 +61,7 @@

PERIMETER ANCHORS

- + diff --git a/dist/demo/perimeterAnchors/yui.html b/dist/demo/perimeterAnchors/yui.html index c54f354c4..1ebc9e15c 100644 --- a/dist/demo/perimeterAnchors/yui.html +++ b/dist/demo/perimeterAnchors/yui.html @@ -5,7 +5,7 @@ - jsPlumb 1.6.5 demo - perimeterAnchors (YUI3) + jsPlumb 1.7.0 demo - perimeterAnchors (YUI3) @@ -59,7 +59,7 @@

PERIMETER ANCHORS

- + diff --git a/dist/demo/sourcesAndTargets/dom.html b/dist/demo/sourcesAndTargets/dom.html index d2fce1847..f97954e84 100644 --- a/dist/demo/sourcesAndTargets/dom.html +++ b/dist/demo/sourcesAndTargets/dom.html @@ -5,7 +5,7 @@ - jsPlumb 1.6.5 demo - sourcesAndTargets (Vanilla) + jsPlumb 1.7.0 demo - sourcesAndTargets (Vanilla) @@ -52,7 +52,7 @@

SOURCES & TARGETS

The `disable` link is excluded from being a drag source through the use of the `filter` parameter on the makeSource call.

The green elements are configured as Connection targets, with a `Top` anchor, and are draggable

-

This demonstration uses jsPlumb 1.6.5. No external dependencies are required.

+

This demonstration uses jsPlumb 1.7.0. No external dependencies are required.

Window 1 @@ -69,7 +69,7 @@

SOURCES & TARGETS

- + diff --git a/dist/demo/sourcesAndTargets/jquery.html b/dist/demo/sourcesAndTargets/jquery.html index 2c78b6e89..245196951 100644 --- a/dist/demo/sourcesAndTargets/jquery.html +++ b/dist/demo/sourcesAndTargets/jquery.html @@ -5,7 +5,7 @@ - jsPlumb 1.6.5 demo - sourcesAndTargets (jQuery) + jsPlumb 1.7.0 demo - sourcesAndTargets (jQuery) @@ -52,7 +52,7 @@

SOURCES & TARGETS

The `disable` link is excluded from being a drag source through the use of the `filter` parameter on the makeSource call.

The green elements are configured as Connection targets, with a `Top` anchor, and are draggable

-

This demonstration uses jsPlumb 1.6.5, jQuery 1.9.0 and jQuery UI 1.9.2.For touch support, jQuery Touch Punch is used.

+

This demonstration uses jsPlumb 1.7.0, jQuery 1.9.0 and jQuery UI 1.9.2.For touch support, jQuery Touch Punch is used.

Window 1 @@ -73,7 +73,7 @@

SOURCES & TARGETS

- + diff --git a/dist/demo/sourcesAndTargets/mootools.html b/dist/demo/sourcesAndTargets/mootools.html index 0c889d393..74352f846 100644 --- a/dist/demo/sourcesAndTargets/mootools.html +++ b/dist/demo/sourcesAndTargets/mootools.html @@ -5,7 +5,7 @@ - jsPlumb 1.6.5 demo - sourcesAndTargets (MooTools) + jsPlumb 1.7.0 demo - sourcesAndTargets (MooTools) @@ -52,7 +52,7 @@

SOURCES & TARGETS

The `disable` link is excluded from being a drag source through the use of the `filter` parameter on the makeSource call.

The green elements are configured as Connection targets, with a `Top` anchor, and are draggable

-

This demonstration uses jsPlumb 1.6.5, MooTools 1.4.5 and MooTools More 1.4.0.1.

+

This demonstration uses jsPlumb 1.7.0, MooTools 1.4.5 and MooTools More 1.4.0.1.

Window 1 @@ -72,7 +72,7 @@

SOURCES & TARGETS

- + diff --git a/dist/demo/sourcesAndTargets/yui.html b/dist/demo/sourcesAndTargets/yui.html index 4111b064c..97612d17d 100644 --- a/dist/demo/sourcesAndTargets/yui.html +++ b/dist/demo/sourcesAndTargets/yui.html @@ -5,7 +5,7 @@ - jsPlumb 1.6.5 demo - sourcesAndTargets (YUI3) + jsPlumb 1.7.0 demo - sourcesAndTargets (YUI3) @@ -70,7 +70,7 @@

SOURCES & TARGETS

- + diff --git a/dist/demo/statemachine/dom.html b/dist/demo/statemachine/dom.html index 5645abc8e..5ee97a538 100644 --- a/dist/demo/statemachine/dom.html +++ b/dist/demo/statemachine/dom.html @@ -5,7 +5,7 @@ - jsPlumb 1.6.5 demo - statemachine (Vanilla) + jsPlumb 1.7.0 demo - statemachine (Vanilla) @@ -48,7 +48,7 @@

STATE MACHINE

Click and drag new Connections from the orange div in each element; the main elements in the UI are configured to be Connection targets. You can drag from one of these divs onto its parent element to create a 'loopback' connection. Each element supports up to 5 Connections.

Click on a Connection to delete it.

-

This demonstration uses jsPlumb 1.6.5. No external libraries are required.

+

This demonstration uses jsPlumb 1.7.0. No external libraries are required.

BEGIN
PHONE INTERVIEW 1
@@ -61,7 +61,7 @@

STATE MACHINE

- + diff --git a/dist/demo/statemachine/jquery.html b/dist/demo/statemachine/jquery.html index e5f0ba4d3..130ff104a 100644 --- a/dist/demo/statemachine/jquery.html +++ b/dist/demo/statemachine/jquery.html @@ -5,7 +5,7 @@ - jsPlumb 1.6.5 demo - statemachine (jQuery) + jsPlumb 1.7.0 demo - statemachine (jQuery) @@ -48,7 +48,7 @@

STATE MACHINE

Click and drag new Connections from the orange div in each element; the main elements in the UI are configured to be Connection targets. You can drag from one of these divs onto its parent element to create a 'loopback' connection. Each element supports up to 5 Connections.

Click on a Connection to delete it.

-

This demonstration uses jsPlumb 1.6.5, jQuery 1.9.0 and jQuery UI 1.9.2.For touch support, jQuery Touch Punch is used.

+

This demonstration uses jsPlumb 1.7.0, jQuery 1.9.0 and jQuery UI 1.9.2.For touch support, jQuery Touch Punch is used.

BEGIN
PHONE INTERVIEW 1
@@ -65,7 +65,7 @@

STATE MACHINE

- + diff --git a/dist/demo/statemachine/mootools.html b/dist/demo/statemachine/mootools.html index c9be0a84f..7f4e409fc 100644 --- a/dist/demo/statemachine/mootools.html +++ b/dist/demo/statemachine/mootools.html @@ -5,7 +5,7 @@ - jsPlumb 1.6.5 demo - statemachine (MooTools) + jsPlumb 1.7.0 demo - statemachine (MooTools) @@ -48,7 +48,7 @@

STATE MACHINE

Click and drag new Connections from the orange div in each element; the main elements in the UI are configured to be Connection targets. You can drag from one of these divs onto its parent element to create a 'loopback' connection. Each element supports up to 5 Connections.

Click on a Connection to delete it.

-

This demonstration uses jsPlumb 1.6.5, MooTools 1.4.5 and MooTools More 1.4.0.1.

+

This demonstration uses jsPlumb 1.7.0, MooTools 1.4.5 and MooTools More 1.4.0.1.

BEGIN
PHONE INTERVIEW 1
@@ -64,7 +64,7 @@

STATE MACHINE

- + diff --git a/dist/demo/statemachine/yui.html b/dist/demo/statemachine/yui.html index 805060503..82f255248 100644 --- a/dist/demo/statemachine/yui.html +++ b/dist/demo/statemachine/yui.html @@ -5,7 +5,7 @@ - jsPlumb 1.6.5 demo - statemachine (YUI3) + jsPlumb 1.7.0 demo - statemachine (YUI3) @@ -62,7 +62,7 @@

STATE MACHINE

- + diff --git a/dist/js/demo-list.js b/dist/js/demo-list.js index af8dcac73..05e101ef8 100644 --- a/dist/js/demo-list.js +++ b/dist/js/demo-list.js @@ -3,8 +3,7 @@ // demo. you don't need to concern yourself with what's going on in here. // ;(function() { - var list = [ - [ "home", "Kitchen Sink" ], + var list = [ [ "flowchart", "Flowchart" ], [ "statemachine", "State Machine" ], [ "draggableConnectors", "Drag and Drop"], diff --git a/dist/js/dom.jsPlumb-1.6.5-min.js b/dist/js/dom.jsPlumb-1.7.0-min.js similarity index 99% rename from dist/js/dom.jsPlumb-1.6.5-min.js rename to dist/js/dom.jsPlumb-1.7.0-min.js index 37375712a..ff4e49e2b 100644 --- a/dist/js/dom.jsPlumb-1.6.5-min.js +++ b/dist/js/dom.jsPlumb-1.7.0-min.js @@ -3,4 +3,4 @@ return C&&!d&&(d=D),!e&&d&&d===x[h]?{o:a.offset||w[h],s:B[h]}:(e||!g&&null==w[h]?(c=v[h].el,null!=c&&(B[h]=f.getSize(c),w[h]=b(c,f),x[h]=d)):(w[h]=g||w[h],null==B[h]&&(c=v[h].el,null!=c&&(B[h]=f.getSize(c))),x[h]=d),w[h]&&!w[h].right&&(w[h].right=w[h].left+B[h][0],w[h].bottom=w[h].top+B[h][1],w[h].width=B[h][0],w[h].height=B[h][1],w[h].centerx=w[h].left+w[h].width/2,w[h].centery=w[h].top+w[h].height/2),{o:w[h],s:B[h]})};this.init=function(){var a=function(a,b,c){t.Connectors[a][b]=function(){c.apply(this,arguments),t.ConnectorRenderers[a].apply(this,arguments)},jsPlumbUtil.extend(t.Connectors[a][b],[c,t.ConnectorRenderers[a]])};if(!t.connectorsInitialized){for(var b=0;b=4?[d[2],d[3]]:[0,0],offsets:d.length>=6?[d[4],d[5]]:[0,0],elementId:e,jsPlumbInstance:f,cssClass:7==d.length?d[6]:null};g=new t.Anchor(h),g.clone=function(){return new t.Anchor(h)}}return g.id||(g.id="anchor_"+H()),g},this.makeAnchors=function(b,c,d){for(var e=[],g=0,h=b.length;h>g;g++)"string"==typeof b[g]?e.push(t.Anchors[b[g]]({elementId:c,jsPlumbInstance:d})):a.isArray(b[g])&&e.push(f.makeAnchor(b[g],c,d));return e},this.makeDynamicAnchor=function(a,b){return new t.DynamicAnchor({anchors:a,selector:b,elementId:null,jsPlumbInstance:f})},this.targetEndpointDefinitions={};var wb=function(a,b,c){a.paintStyle=a.paintStyle||c.Defaults.EndpointStyles[b]||c.Defaults.EndpointStyle,a.hoverPaintStyle=a.hoverPaintStyle||c.Defaults.EndpointHoverStyles[b]||c.Defaults.EndpointHoverStyle,a.anchor=a.anchor||c.Defaults.Anchors[b]||c.Defaults.Anchor,a.endpoint=a.endpoint||c.Defaults.Endpoints[b]||c.Defaults.Endpoint};this.sourceEndpointDefinitions={};var xb=function(a,b,c,d,e){for(var f=a.target||a.srcElement,g=!1,h=d.getSelector(b,c),i=0;i0&&c>=p.maxConnections)return m&&m({element:d.el,connection:l},a),!1;if(o.anchor.locked=!1,k&&this.setDragScope(h,k),null==l.suspendedEndpoint&&!l.pending)return!1;var q=f.isDropAllowed(0===n?e:l.sourceId,0===n?l.targetId:e,l.scope,l,null,0===n?d.el:l.source,0===n?l.target:d.el);if(l.suspendedEndpoint){l[n?"targetId":"sourceId"]=l.suspendedEndpoint.elementId,l[n?"target":"source"]=l.suspendedEndpoint.element,l.endpoints[n]=l.suspendedEndpoint;var r=(l.suspendedEndpoint.getElement(),l.suspendedEndpoint.elementId);bb({index:n,originalSourceId:0===n?r:l.sourceId,newSourceId:0===n?e:l.sourceId,originalTargetId:1==n?r:l.targetId,newTargetId:1==n?e:l.targetId,connection:l},a)}if(q){var s=this.getElementObject(d.el),u=p.endpoint;if((null==u||null==u._jsPlumb)&&(u=this.addEndpoint(s,g)),g.uniqueEndpoint&&(p.endpoint=u),u._doNotDeleteOnDetach=!1,u._deleteOnDetach=!0,l.isDetachable()&&u.initDraggable(),null!=u.anchor.positionFinder){var v=this.getUIPosition(arguments,this.getZoom()),w=b(s,this),x=this.getSize(s),z=u.anchor.positionFinder(v,w,x,u.anchor.constructorParams);u.anchor.x=z[0],u.anchor.y=z[1]}l[n?"target":"source"]=u.element,l[n?"targetId":"sourceId"]=u.elementId,l.endpoints[n].detachFromConnection(l),l.endpoints[n]._deleteOnDetach&&(l.endpoints[n].deleteAfterDragStop=!0),u.addConnection(l),l.endpoints[n]=u,l.deleteEndpointsOnDetach=j,1==n?this.anchorManager.updateOtherEndpoint(l.sourceId,l.suspendedElementId,l.targetId,l):this.anchorManager.sourceChanged(l.suspendedEndpoint.elementId,l.sourceId,l),Q(l,null,a),l.pending=!1}else l.suspendedEndpoint&&(l.isReattach()?(l.setHover(!1),l.floatingAnchorIndex=null,l.suspendedEndpoint.addConnection(l),this.repaint(o.elementId)):l.deleteConnectionNow=!0)}}.bind(this),p=t.dragEvents.drop;n.scope=n.scope||h,n[p]=a.wrap(n[p],o),g.allowLoopback===!1&&(n.canDrop=function(a){var b=a.getDragElement()._jsPlumbRelatedElement;return b!=d.el}),this.initDroppable(this.getElementObject(d.el),n,!0)}.bind(this);c=J(c);for(var o=c.length&&c.constructor!=String?c:[c],p=0,q=o.length;q>p;p++)n(o[p]);return this},this.unmakeTarget=function(a,b){var c=l(a);return t.destroyDroppable(c.el),b||delete this.targetEndpointDefinitions[c.id],this},this.makeSource=function(c,d,e){var g=t.extend({},e);t.extend(g,d),wb(g,0,this);var h=g.maxConnections||1,i=g.onMaxConnections,j=function(c){var d=c.id,e=this.getElementObject(c.el),j=this.getDOMElement(e),l=function(){return null==g.parent?null:"parent"===g.parent?c.el.parentNode:f.getDOMElement(g.parent)},m=null!=g.parent?this.getId(l()):d;rb(m),this.sourceEndpointDefinitions[m]={def:g,uniqueEndpoint:g.uniqueEndpoint,maxConnections:h,enabled:!0};var o=t.dragEvents.stop,p=t.dragEvents.drag,q=t.extend({},g.dragOptions||{}),r=q.drag,s=q.stop,u=null,v=!1;q.scope=q.scope||g.scope,q[p]=a.wrap(q[p],function(){r&&r.apply(this,arguments),v=!1}),q[o]=a.wrap(q[o],function(){if(s&&s.apply(this,arguments),this.currentlyDragging=!1,null!=u._jsPlumb){var a=g.anchor||this.Defaults.Anchor,c=u.anchor,e=u.connections[0],f=this.makeAnchor(a,d,this),h=u.element;if(null!=f.positionFinder){var i=b(h,this),j=this.getSize(h),k={left:i.left+c.x*j[0],top:i.top+c.y*j[1]},m=f.positionFinder(k,i,j,f.constructorParams);f.x=m[0],f.y=m[1]}if(u.setAnchor(f,!0),g.parent){var o=l();if(o){var p=g.container||n;u.setElement(o,p)}}u.repaint(),this.repaint(u.elementId),this.repaint(e.targetId)}}.bind(this));var w=function(a){var b=this.getOriginalEvent(a),c=this.sourceEndpointDefinitions[m];if(d=this.getId(this.getDOMElement(e)),c.enabled){if(g.filter){var n=jsPlumbUtil.isString(g.filter)?xb(b,e,g.filter,this,g.filterExclude):g.filter(b,e);if(n===!1)return}var o=this.select({source:m}).length;if(c.maxConnections>=0&&c.uniqueEndpoint&&o>=c.maxConnections)return i&&i({element:e,maxConnections:h},a),!1;var p=jsPlumbAdapter.getPositionOnElement(b,j,k),r=p;g.parent&&(r=jsPlumbAdapter.getPositionOnElement(b,l(),k));var s={};t.extend(s,g),s.isTemporarySource=!0,s.anchor=[p[0],p[1],0,0],s.parentAnchor=[r[0],r[1],0,0],s.dragOptions=q,u=this.addEndpoint(d,s),v=!0,u.endpointWillMoveTo=g.parent?l():null,u._doNotDeleteOnDetach=!1,u._deleteOnDetach=!0;var w=function(){v&&(v=!1,f.deleteEndpoint(u))};f.registerListener(u.canvas,"mouseup",w),f.registerListener(e,"mouseup",w),f.trigger(u.canvas,"mousedown",a),jsPlumbUtil.consume(a)}}.bind(this);this.registerListener(e,"mousedown",w),this.sourceEndpointDefinitions[m].trigger=w,g.filter&&jsPlumbUtil.isString(g.filter)&&f.setDragFilter(e,g.filter)}.bind(this);c=J(c);for(var m=c.length&&c.constructor!=String?c:[c],o=0,p=m.length;p>o;o++)j(l(m[o]));return this},this.unmakeSource=function(a,b){var c=l(a),d=this.sourceEndpointDefinitions[c.id].trigger;return d&&f.unregisterListener(c.el,"mousedown",d),b||delete this.sourceEndpointDefinitions[c.id],this},this.unmakeEverySource=function(){for(var a in this.sourceEndpointDefinitions)f.unmakeSource(a,!0);return this.sourceEndpointDefinitions={},this},this.unmakeEveryTarget=function(){for(var a in this.targetEndpointDefinitions)f.unmakeTarget(a,!0);return this.targetEndpointDefinitions={},this};var yb=function(b,c,d,e){var f="source"==b?this.sourceEndpointDefinitions:this.targetEndpointDefinitions;if(c=J(c),a.isString(c))f[c].enabled=e?!f[c].enabled:d;else if(c.length)for(var g=0,h=c.length;h>g;g++){var i=l(c[g]);f[i.id]&&(f[i.id].enabled=e?!f[i.id].enabled:d)}else{var j=l(c).id;f[j].enabled=e?!f[j].enabled:d}return this}.bind(this),zb=function(b,c){return b=J(b),a.isString(b)||!b.length?c.apply(this,[b]):b.length?c.apply(this,[b[0]]):void 0}.bind(this);this.toggleSourceEnabled=function(a){return yb("source",a,null,!0),this.isSourceEnabled(a)},this.setSourceEnabled=function(a,b){return yb("source",a,b)},this.isSource=function(a){return zb(a,function(a){return null!=this.sourceEndpointDefinitions[l(a).id]})},this.isSourceEnabled=function(a){return zb(a,function(a){var b=this.sourceEndpointDefinitions[l(a).id];return b&&b.enabled===!0})},this.toggleTargetEnabled=function(a){return yb("target",a,null,!0),this.isTargetEnabled(a)},this.isTarget=function(a){return zb(a,function(a){return null!=this.targetEndpointDefinitions[l(a).id]})},this.isTargetEnabled=function(a){return zb(a,function(a){var b=this.targetEndpointDefinitions[l(a).id];return b&&b.enabled===!0})},this.setTargetEnabled=function(a,b){return yb("target",a,b)},this.ready=function(a){f.bind("ready",a)},this.repaint=function(a,b,c){if("object"==typeof a&&a.length)for(var d=0,e=a.length;e>d;d++)K(a[d],b,c);else K(a,b,c);return f},this.repaintEverything=function(a){var b=c();for(var d in s)K(d,null,b,a);return this},this.removeAllEndpoints=function(a,b){var c=function(a){var d,e,g=l(a),h=s[g.id];if(h)for(d=0,e=h.length;e>d;d++)f.deleteEndpoint(h[d]);if(delete s[g.id],b&&g.el&&3!=g.el.nodeType&&8!=g.el.nodeType)for(d=0,e=g.el.childNodes.length;e>d;d++)c(g.el.childNodes[d])};return c(a),this},this.remove=function(a,b){var c=l(a);return f.doWhileSuspended(function(){f.removeAllEndpoints(c.id,!0),f.dragManager.elementRemoved(c.id),delete y[c.id],f.anchorManager.clearFor(c.id),f.anchorManager.removeFloatingConnection(c.id)},b===!1),ub(c.id),c.el&&f.removeElement(c.el),f};var Ab={},Bb=function(){for(var a in Ab)for(var b=0,c=Ab[a].length;c>b;b++){var d=Ab[a][b];f.off(d.el,d.event,d.listener)}Ab={}};this.registerListener=function(a,b,c){f.on(a,b,c),jsPlumbUtil.addToList(Ab,b,{el:a,event:b,listener:c})},this.unregisterListener=function(a,b,c){f.off(a,b,c),jsPlumbUtil.removeWithFunction(Ab,function(a){return a.type==b&&a.listener==c})},this.reset=function(){f.deleteEveryEndpoint(),f.unbind(),this.targetEndpointDefinitions={},this.sourceEndpointDefinitions={},q.length=0,Bb(),f.anchorManager.reset(),jsPlumbAdapter.headless||f.dragManager.reset()};var Cb=function(a){a.canvas&&a.canvas.parentNode&&a.canvas.parentNode.removeChild(a.canvas),a.cleanup(),a.destroy()},Db=function(a){Cb(a)};this.clear=function(){f.select().each(Db),f.selectEndpoints().each(Db),s={},u={}},this.setDefaultScope=function(a){return E=a,f},this.setDraggable=U,this.setId=function(a,b,c){var d;jsPlumbUtil.isString(a)?d=a:(a=this.getDOMElement(a),d=this.getId(a));var e=this.getConnections({source:d,scope:"*"},!0),f=this.getConnections({target:d,scope:"*"},!0);b=""+b,c?a=this.getDOMElement(b):(a=this.getDOMElement(d),this.setAttribute(a,"id",b)),s[b]=s[d]||[];for(var g=0,h=s[b].length;h>g;g++)s[b][g].setElementId(b),s[b][g].setReferenceElement(a);delete s[d],this.anchorManager.changeId(d,b),this.dragManager&&this.dragManager.changeId(d,b),v[b]=v[d],delete v[d];var i=function(c,d,e){for(var f=0,g=c.length;g>f;f++)c[f].endpoints[d].setElementId(b),c[f].endpoints[d].setReferenceElement(a),c[f][e+"Id"]=b,c[f][e]=a};i(e,0,"source"),i(f,1,"target"),this.repaint(b)},this.setDebugLog=function(a){o=a},this.setSuspendDrawing=function(a,b){var c=C;return C=a,D=a?(new Date).getTime():null,b&&this.repaintEverything(),c},this.isSuspendDrawing=function(){return C},this.getSuspendedAt=function(){return D},this.doWhileSuspended=function(b,c){var d=this.isSuspendDrawing();d||this.setSuspendDrawing(!0);try{b()}catch(e){a.log("Function run while suspended failed",e)}d||this.setSuspendDrawing(!1,!c)},this.getOffset=function(a){return w[a]},this.getCachedData=Y,this.timestamp=c,this.setRenderMode=function(a){if(a!==t.SVG&&a!==t.VML)throw new TypeError("Render mode ["+a+"] not supported");return F=jsPlumbAdapter.setRenderMode(a)},this.getRenderMode=function(){return F},this.show=function(a,b){return V(a,"block",b),f},this.toggleVisible=X,this.toggleDraggable=W,this.addListener=this.bind,jsPlumbAdapter.headless||(f.dragManager=jsPlumbAdapter.getDragManager(f),f.recalculateOffsets=f.dragManager.updateOffsets)};jsPlumbUtil.extend(s,jsPlumbUtil.EventGenerator,{setAttribute:function(a,b,c){this.setAttribute(a,b,c)},getAttribute:function(a,b){return this.getAttribute(t.getDOMElement(a),b)},registerConnectionType:function(a,b){this._connectionTypes[a]=t.extend({},b)},registerConnectionTypes:function(a){for(var b in a)this._connectionTypes[b]=t.extend({},a[b])},registerEndpointType:function(a,b){this._endpointTypes[a]=t.extend({},b)},registerEndpointTypes:function(a){for(var b in a)this._endpointTypes[b]=t.extend({},a[b])},getType:function(a,b){return"connection"===b?this._connectionTypes[a]:this._endpointTypes[a]},setIdChanged:function(a,b){this.setId(a,b,!0)},setParent:function(a,b){var c=this.getElementObject(a),d=this.getDOMElement(c),e=this.getId(d),f=this.getElementObject(b),g=this.getDOMElement(f),h=this.getId(g);d.parentNode.removeChild(d),g.appendChild(d),this.dragManager.setParent(c,e,f,h)},getSize:function(a){return[a.offsetWidth,a.offsetHeight]},getWidth:function(a){return a.offsetWidth},getHeight:function(a){return a.offsetHeight},extend:function(a,b,c){var d;if(c)for(d=0;d0?this.connections[0].setHover(a,!1):this.setHover(a)}.bind(this);this.bind("mouseover",function(){s(!0)}),this.bind("mouseout",function(){s(!1)}),g._transient||this._jsPlumb.instance.anchorManager.add(this,this.elementId),this.setEndpoint=function(a){null!=this.endpoint&&(this.endpoint.cleanup(),this.endpoint.destroy());var b=function(a,b){var c=h.getRenderMode();if(jsPlumb.Endpoints[c][a])return new jsPlumb.Endpoints[c][a](b);if(!h.Defaults.DoNotThrowErrors)throw{msg:"jsPlumb: unknown endpoint type '"+a+"'"}},c={_jsPlumb:this._jsPlumb.instance,cssClass:g.cssClass,container:g.container,tooltip:g.tooltip,connectorTooltip:g.connectorTooltip,endpoint:this};j.isString(a)?this.endpoint=b(a,c):j.isArray(a)?(c=j.merge(a[1],c),this.endpoint=b(a[0],c)):this.endpoint=a.clone(),this.endpoint.clone=function(){return j.isString(a)?b(a,c):j.isArray(a)?(c=j.merge(a[1],c),b(a[0],c)):void 0}.bind(this),this.type=this.endpoint.type},this.setEndpoint(g.endpoint||h.Defaults.Endpoint||jsPlumb.Defaults.Endpoint||"Dot"),this.setPaintStyle(g.paintStyle||g.style||h.Defaults.EndpointStyle||jsPlumb.Defaults.EndpointStyle,!0),this.setHoverPaintStyle(g.hoverPaintStyle||h.Defaults.EndpointHoverStyle||jsPlumb.Defaults.EndpointHoverStyle,!0),this._jsPlumb.paintStyleInUse=this.getPaintStyle(),jsPlumb.extend(this,g,d),this.isSource=g.isSource||!1,this.isTemporarySource=g.isTemporarySource||!1,this.isTarget=g.isTarget||!1,this._jsPlumb.maxConnections=g.maxConnections||h.Defaults.MaxConnections,this.canvas=this.endpoint.canvas,this.canvas._jsPlumb=this,this.addClass(h.endpointAnchorClassPrefix+"_"+this._jsPlumb.currentAnchorClass),jsPlumbAdapter.addClass(this.element,h.endpointAnchorClassPrefix+"_"+this._jsPlumb.currentAnchorClass),this.connections=g.connections||[],this.connectorPointerEvents=g["connector-pointer-events"],this.scope=g.scope||h.getDefaultScope(),this.timestamp=null,this.reattachConnections=g.reattach||h.Defaults.ReattachConnections,this.connectionsDetachable=h.Defaults.ConnectionsDetachable,(g.connectionsDetachable===!1||g.detachable===!1)&&(this.connectionsDetachable=!1),this.dragAllowedWhenFull=g.dragAllowedWhenFull!==!1,g.onMaxConnections&&this.bind("maxConnections",g.onMaxConnections),this.addConnection=function(a){this.connections.push(a),this[(this.connections.length>0?"add":"remove")+"Class"](h.endpointConnectedClass),this[(this.isFull()?"add":"remove")+"Class"](h.endpointFullClass)},this.detachFromConnection=function(a,b,c){b=null==b?f(a,this):b,b>=0&&(this.connections.splice(b,1),this[(this.connections.length>0?"add":"remove")+"Class"](h.endpointConnectedClass),this[(this.isFull()?"add":"remove")+"Class"](h.endpointFullClass)),!c&&this._deleteOnDetach&&0===this.connections.length&&h.deleteObject({endpoint:this,fireEvent:!1,deleteAttachedObjects:!1})},this.detach=function(a,b,c,d,e,g,i){var j=null==i?f(a,this):i,k=!1;return d=d!==!1,j>=0&&(c||a._forceDetach||a.isDetachable()&&a.isDetachAllowed(a)&&this.isDetachAllowed(a)&&h.checkCondition("beforeDetach",a))&&(h.deleteObject({connection:a,fireEvent:!b&&d,originalEvent:e,deleteAttachedObjects:!1}),k=!0),k},this.detachAll=function(a,b){for(;this.connections.length>0;)this.detach(this.connections[0],!1,!0,a!==!1,b,this,0);return this},this.detachFrom=function(a,b,c){for(var d=[],e=0;e0){var l=e(this,a.elementWithPrecedence),m=l.endpoints[0]==this?1:0,n=0===m?l.sourceId:l.targetId,o=h.getCachedData(n),p=o.o,q=o.s;k.txy=[p.left,p.top],k.twh=q,k.tElement=l.endpoints[m]}g=this.anchor.compute(k)}this.endpoint.compute(g,this.anchor.getOrientation(this),this._jsPlumb.paintStyleInUse,i||this.paintStyleInUse),this.endpoint.paint(this._jsPlumb.paintStyleInUse,this.anchor),this.timestamp=b;for(var r=0;rb.dist?1:0});for(var o=k[0].source,p=k[0].target,q=0;qc[0][0],d===!1?-1:1}},q=function(a,b){var c=a[0][0]<0?-Math.PI-a[0][0]:Math.PI-a[0][0],d=b[0][0]<0?-Math.PI-b[0][0]:Math.PI-b[0][0];return c>d?1:a[0][1]>b[0][1]?1:-1},r={top:function(a,b){return a[0]>b[0]?1:-1},right:p(!0),bottom:p(!0),left:q},s=function(a,b){return a.sort(b)},t=function(a,b){var c=l.getCachedData(a),e=c.s,g=c.o,h=function(b,c,e,g,h,i,j){if(g.length>0)for(var k=s(g,r[b]),l="right"===b||"top"===b,m=o(b,c,e,k,h,i,l),n=function(a,b){d[a.id]=[b[0],b[1],b[2],b[3]],f[a.id]=j},p=0;p-1&&(i[b].splice(f,1),jsPlumbUtil.addToList(i,c,[d,d.endpoints[0],d.endpoints[0].anchor.constructor==jsPlumb.DynamicAnchor]))},this.sourceChanged=function(a,b,c){if(a!==b){jsPlumbUtil.removeWithFunction(i[a],function(a){return a[0].id===c.id});var d=jsPlumbUtil.findWithFunction(i[c.targetId],function(a){return a[0].id===c.id});d>-1&&(i[c.targetId][d][0]=c,i[c.targetId][d][1]=c.endpoints[0],i[c.targetId][d][2]=c.endpoints[0].anchor.constructor==jsPlumb.DynamicAnchor),jsPlumbUtil.addToList(i,b,[c,c.endpoints[1],c.endpoints[1].anchor.constructor==jsPlumb.DynamicAnchor])}},this.rehomeEndpoint=function(a,c,d){var e=b[c]||[],f=l.getId(d);if(f!==c){var g=jsPlumbUtil.indexOf(e,a);if(g>-1){var h=e.splice(g,1)[0];j.add(h,f)}}for(var i=0;i0?this.anchors[0]:null,e=(this.anchors.length>0?0:-1,d),f=this,g=function(a,b,c,d,e){var f=d[0]+a.x*e[0],g=d[1]+a.y*e[1],h=d[0]+e[0]/2,i=d[1]+e[1]/2;return Math.sqrt(Math.pow(b-f,2)+Math.pow(c-g,2))+Math.sqrt(Math.pow(h-f,2)+Math.pow(i-g,2))},h=b.selector||function(a,b,c,d,e){for(var f=c[0]+d[0]/2,h=c[1]+d[1]/2,i=-1,j=1/0,k=0;kl&&(i=k+0,j=l)}return e[i]};this.compute=function(a){var b=a.xy,c=a.wh,g=a.timestamp,i=a.txy,j=a.twh;this.timestamp=g;var k=f.getUserDefinedLocation();return null!=k?k:this.locked||null==i||null==j?d.compute(a):(a.timestamp=null,d=h(b,c,i,j,this.anchors),this.x=d.x,this.y=d.y,d!=e&&this.fire("anchorChanged",d),e=d,d.compute(a))},this.getCurrentLocation=function(a){return this.getUserDefinedLocation()||(null!=d?d.getCurrentLocation(a):null)},this.getOrientation=function(a){return null!=d?d.getOrientation(a):[0,0]},this.over=function(a,b){null!=d&&d.over(a,b)},this.out=function(){null!=d&&d.out()},this.getCssClass=function(){return d&&d.getCssClass()||""}},jsPlumbUtil.extend(jsPlumb.DynamicAnchor,jsPlumb.Anchor);var b=function(a,b,c,d,e,f){jsPlumb.Anchors[e]=function(g){var h=g.jsPlumbInstance.makeAnchor([a,b,c,d,0,0],g.elementId,g.jsPlumbInstance);return h.type=e,f&&f(h,g),h}};b(.5,0,0,-1,"TopCenter"),b(.5,1,0,1,"BottomCenter"),b(0,.5,-1,0,"LeftMiddle"),b(1,.5,1,0,"RightMiddle"),b(.5,0,0,-1,"Top"),b(.5,1,0,1,"Bottom"),b(0,.5,-1,0,"Left"),b(1,.5,1,0,"Right"),b(.5,.5,0,0,"Center"),b(1,0,0,-1,"TopRight"),b(1,1,0,1,"BottomRight"),b(0,0,0,-1,"TopLeft"),b(0,1,0,1,"BottomLeft"),jsPlumb.Defaults.DynamicAnchors=function(a){return a.jsPlumbInstance.makeAnchors(["TopCenter","RightMiddle","BottomCenter","LeftMiddle"],a.elementId,a.jsPlumbInstance)},jsPlumb.Anchors.AutoDefault=function(a){var b=a.jsPlumbInstance.makeDynamicAnchor(jsPlumb.Defaults.DynamicAnchors(a));return b.type="AutoDefault",b};var c=function(a,b){jsPlumb.Anchors[a]=function(c){var d=c.jsPlumbInstance.makeAnchor(["Continuous",{faces:b}],c.elementId,c.jsPlumbInstance);return d.type=a,d}};jsPlumb.Anchors.Continuous=function(a){return a.jsPlumbInstance.continuousAnchorFactory.get(a)},c("ContinuousLeft",["left"]),c("ContinuousTop",["top"]),c("ContinuousBottom",["bottom"]),c("ContinuousRight",["right"]),b(0,0,0,0,"Assign",function(a,b){var c=b.position||"Fixed";a.positionFinder=c.constructor==String?b.jsPlumbInstance.AnchorPositionFinders[c]:c,a.constructorParams=b}),jsPlumbInstance.prototype.AnchorPositionFinders={Fixed:function(a,b,c){return[(a.left-b.left)/c[0],(a.top-b.top)/c[1]]},Grid:function(a,b,c,d){var e=a.left-b.left,f=a.top-b.top,g=c[0]/d.grid[0],h=c[1]/d.grid[1],i=Math.floor(e/g),j=Math.floor(f/h);return[(i*g+g/2)/c[0],(j*h+h/2)/c[1]]}},jsPlumb.Anchors.Perimeter=function(a){a=a||{};var b=a.anchorCount||60,c=a.shape;if(!c)throw new Error("no shape supplied to Perimeter Anchor type");var d=function(){for(var a=.5,c=2*Math.PI/b,d=0,e=[],f=0;b>f;f++){var g=a+a*Math.sin(d),h=a+a*Math.cos(d);e.push([g,h,0,0]),d+=c}return e},e=function(a){for(var c=b/a.length,d=[],e=function(a,e,f,g,h){c=b*h;for(var i=(f-a)/c,j=(g-e)/c,k=0;c>k;k++)d.push([a+i*k,e+j*k,0,0])},f=0;f0?a:b+a:a*b;return Biltong.pointOnLine({x:e,y:g},{x:f,y:h},d)}return{x:f,y:h}}return{x:e,y:g}},this.gradientAtPoint=function(){return c},this.pointAlongPathFrom=function(a,b,c){var d=this.pointOnPath(a,c),i=0>=b?{x:e,y:g}:{x:f,y:h}; return 0>=b&&Math.abs(b)>1&&(b*=-1),Biltong.pointOnLine(d,i,b)};var j=function(a,b,c){return c>=Math.min(a,b)&&c<=Math.max(a,b)},k=function(a,b,c){return Math.abs(c-a)a-b?b:i>c-a?c:a};this.pointOnPath=function(b,d){if(0===b)return{x:this.x1,y:this.y1,theta:this.startAngle};if(1==b)return{x:this.x2,y:this.y2,theta:this.endAngle};d&&(b/=h);var e=c(this,b),f=a.cx+a.r*Math.cos(e),g=a.cy+a.r*Math.sin(e);return{x:j(f),y:j(g),theta:e}},this.gradientAtPoint=function(b,c){var d=this.pointOnPath(b,c),e=Biltong.normal([a.cx,a.cy],[d.x,d.y]);return this.anticlockwise||1/0!=e&&e!=-1/0||(e*=-1),e},this.pointAlongPathFrom=function(b,c,d){var e=this.pointOnPath(b,d),g=2*(c/f)*Math.PI,h=this.anticlockwise?-1:1,i=e.theta+h*g,j=a.cx+this.radius*Math.cos(i),k=a.cy+this.radius*Math.sin(i);return{x:j,y:k}}},Bezier:function(a){var b=(jsPlumb.Segments.AbstractSegment.apply(this,arguments),[{x:a.x1,y:a.y1},{x:a.cp1x,y:a.cp1y},{x:a.cp2x,y:a.cp2y},{x:a.x2,y:a.y2}]),c={minX:Math.min(a.x1,a.x2,a.cp1x,a.cp2x),minY:Math.min(a.y1,a.y2,a.cp1y,a.cp2y),maxX:Math.max(a.x1,a.x2,a.cp1x,a.cp2x),maxY:Math.max(a.y1,a.y2,a.cp1y,a.cp2y)};this.type="Bezier";var d=function(a,b,c){return c&&(b=jsBezier.locationAlongCurveFrom(a,b>0?0:1,b)),b};this.pointOnPath=function(a,c){return a=d(b,a,c),jsBezier.pointOnCurve(b,a)},this.gradientAtPoint=function(a,c){return a=d(b,a,c),jsBezier.gradientAtPoint(b,a)},this.pointAlongPathFrom=function(a,c,e){return a=d(b,a,e),jsBezier.pointAlongCurveFrom(b,a,c)},this.getLength=function(){return jsBezier.getLength(b)},this.getBounds=function(){return c}}};var a=function(){this.resetBounds=function(){this.bounds={minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0}},this.resetBounds()};jsPlumb.Connectors.AbstractConnector=function(b){a.apply(this,arguments);var c=[],d=0,e=[],f=[],g=b.stub||0,h=jsPlumbUtil.isArray(g)?g[0]:g,i=jsPlumbUtil.isArray(g)?g[1]:g,j=b.gap||0,k=jsPlumbUtil.isArray(j)?j[0]:j,l=jsPlumbUtil.isArray(j)?j[1]:j,m=null,n=!1,o=null;this.getPath=function(){},this.setPath=function(){},this.findSegmentForPoint=function(a,b){for(var d={d:1/0,s:null,x:null,y:null,l:null},e=0;e0?a/d:(d+a)/d);for(var g=e.length-1,h=1,i=0;i=a){g=i,h=1==a?1:0===a?0:(a-e[i][0])/f[i];break}return{segment:c[g],proportion:h,index:g}},r=function(a,b,e){if(e.x1!=e.x2||e.y1!=e.y2){var f=new jsPlumb.Segments[b](e);c.push(f),d+=f.getLength(),a.updateBounds(f)}},s=function(){d=c.length=e.length=f.length=0};this.setSegments=function(a){m=[],d=0;for(var b=0;bo?0:1,q=[1,0][p];f=[],g=[],f[p]=a.sourcePos[p]>a.targetPos[p]?-1:1,g[p]=a.sourcePos[p]>a.targetPos[p]?1:-1,f[q]=0,g[q]=0}var r=c?n+k*f[0]:k*f[0],s=d?o+k*f[1]:k*f[1],t=c?l*g[0]:n+l*g[0],u=d?l*g[1]:o+l*g[1],v=f[0]*g[0]+f[1]*g[1],w={sx:r,sy:s,tx:t,ty:u,lw:e,xSpan:Math.abs(t-r),ySpan:Math.abs(u-s),mx:(r+t)/2,my:(s+u)/2,so:f,to:g,x:j,y:m,w:n,h:o,segment:b,startStubX:r+f[0]*h,startStubY:s+f[1]*h,endStubX:t+g[0]*i,endStubY:u+g[1]*i,isXGreaterThanStubTimes2:Math.abs(r-t)>h+i,isYGreaterThanStubTimes2:Math.abs(s-u)>h+i,opposite:-1==v,perpendicular:0===v,orthogonal:1==v,sourceAxis:0===f[0]?"y":"x",points:[j,m,n,o,r,s,t,u]};return w.anchorOrientation=w.opposite?"opposite":w.orthogonal?"orthogonal":"perpendicular",w};return this.getSegments=function(){return c},this.updateBounds=function(a){var b=a.getBounds();this.bounds.minX=Math.min(this.bounds.minX,b.minX),this.bounds.maxX=Math.max(this.bounds.maxX,b.maxX),this.bounds.minY=Math.min(this.bounds.minY,b.minY),this.bounds.maxY=Math.max(this.bounds.maxY,b.maxY)},this.pointOnPath=function(a,b){var c=q(a,b);return c.segment&&c.segment.pointOnPath(c.proportion,!1)||[0,0]},this.gradientAtPoint=function(a,b){var c=q(a,b);return c.segment&&c.segment.gradientAtPoint(c.proportion,!1)||0},this.pointAlongPathFrom=function(a,b,c){var d=q(a,c);return d.segment&&d.segment.pointAlongPathFrom(d.proportion,b,!1)||[0,0]},this.compute=function(a){n||(o=t.call(this,a)),s(),this._compute(o,a),this.x=o.points[0],this.y=o.points[1],this.w=o.points[2],this.h=o.points[3],this.segment=o.segment,p()},{addSegment:r,prepareCompute:t,sourceStub:h,targetStub:i,maxStub:Math.max(h,i),sourceGap:k,targetGap:l,maxGap:Math.max(k,l)}},jsPlumbUtil.extend(jsPlumb.Connectors.AbstractConnector,a);var b=jsPlumb.Connectors.Straight=function(){this.type="Straight";var a=jsPlumb.Connectors.AbstractConnector.apply(this,arguments);this._compute=function(b){a.addSegment(this,"Straight",{x1:b.sx,y1:b.sy,x2:b.startStubX,y2:b.startStubY}),a.addSegment(this,"Straight",{x1:b.startStubX,y1:b.startStubY,x2:b.endStubX,y2:b.endStubY}),a.addSegment(this,"Straight",{x1:b.endStubX,y1:b.endStubY,x2:b.tx,y2:b.ty})}};jsPlumbUtil.extend(jsPlumb.Connectors.Straight,jsPlumb.Connectors.AbstractConnector),jsPlumb.registerConnectorType(b,"Straight"),jsPlumb.Endpoints.AbstractEndpoint=function(b){a.apply(this,arguments);var c=this.compute=function(){var a=this._compute.apply(this,arguments);return this.x=a[0],this.y=a[1],this.w=a[2],this.h=a[3],this.bounds.minX=this.x,this.bounds.minY=this.y,this.bounds.maxX=this.x+this.w,this.bounds.maxY=this.y+this.h,a};return{compute:c,cssClass:b.cssClass}},jsPlumbUtil.extend(jsPlumb.Endpoints.AbstractEndpoint,a),jsPlumb.Endpoints.Dot=function(a){this.type="Dot",jsPlumb.Endpoints.AbstractEndpoint.apply(this,arguments),a=a||{},this.radius=a.radius||10,this.defaultOffset=.5*this.radius,this.defaultInnerRadius=this.radius/3,this._compute=function(a,b,c){this.radius=c.radius||this.radius;var d=a[0]-this.radius,e=a[1]-this.radius,f=2*this.radius,g=2*this.radius;if(c.strokeStyle){var h=c.lineWidth||1;d-=h,e-=h,f+=2*h,g+=2*h}return[d,e,f,g,this.radius]}},jsPlumbUtil.extend(jsPlumb.Endpoints.Dot,jsPlumb.Endpoints.AbstractEndpoint),jsPlumb.Endpoints.Rectangle=function(a){this.type="Rectangle",jsPlumb.Endpoints.AbstractEndpoint.apply(this,arguments),a=a||{},this.width=a.width||20,this.height=a.height||20,this._compute=function(a,b,c){var d=c.width||this.width,e=c.height||this.height,f=a[0]-d/2,g=a[1]-e/2;return[f,g,d,e]}},jsPlumbUtil.extend(jsPlumb.Endpoints.Rectangle,jsPlumb.Endpoints.AbstractEndpoint);var c=function(){jsPlumb.DOMElementComponent.apply(this,arguments),this._jsPlumb.displayElements=[]};jsPlumbUtil.extend(c,jsPlumb.DOMElementComponent,{getDisplayElements:function(){return this._jsPlumb.displayElements},appendDisplayElement:function(a){this._jsPlumb.displayElements.push(a)}}),jsPlumb.Endpoints.Image=function(a){this.type="Image",c.apply(this,arguments),jsPlumb.Endpoints.AbstractEndpoint.apply(this,arguments);var b=a.onload,d=a.src||a.url,e=a.cssClass?" "+a.cssClass:"";this._jsPlumb.img=new Image,this._jsPlumb.ready=!1,this._jsPlumb.initialized=!1,this._jsPlumb.deleted=!1,this._jsPlumb.widthToUse=a.width,this._jsPlumb.heightToUse=a.height,this._jsPlumb.endpoint=a.endpoint,this._jsPlumb.img.onload=function(){null!=this._jsPlumb&&(this._jsPlumb.ready=!0,this._jsPlumb.widthToUse=this._jsPlumb.widthToUse||this._jsPlumb.img.width,this._jsPlumb.heightToUse=this._jsPlumb.heightToUse||this._jsPlumb.img.height,b&&b(this))}.bind(this),this._jsPlumb.endpoint.setImage=function(a,c){var d=a.constructor==String?a:a.src;b=c,this._jsPlumb.img.src=d,null!=this.canvas&&this.canvas.setAttribute("src",this._jsPlumb.img.src)}.bind(this),this._jsPlumb.endpoint.setImage(d,b),this._compute=function(a){return this.anchorPoint=a,this._jsPlumb.ready?[a[0]-this._jsPlumb.widthToUse/2,a[1]-this._jsPlumb.heightToUse/2,this._jsPlumb.widthToUse,this._jsPlumb.heightToUse]:[0,0,0,0]},this.canvas=document.createElement("img"),this.canvas.style.margin=0,this.canvas.style.padding=0,this.canvas.style.outline=0,this.canvas.style.position="absolute",this.canvas.className=this._jsPlumb.instance.endpointClass+e,this._jsPlumb.widthToUse&&this.canvas.setAttribute("width",this._jsPlumb.widthToUse),this._jsPlumb.heightToUse&&this.canvas.setAttribute("height",this._jsPlumb.heightToUse),this._jsPlumb.instance.appendElement(this.canvas),this.actuallyPaint=function(){if(!this._jsPlumb.deleted){this._jsPlumb.initialized||(this.canvas.setAttribute("src",this._jsPlumb.img.src),this.appendDisplayElement(this.canvas),this._jsPlumb.initialized=!0);var a=this.anchorPoint[0]-this._jsPlumb.widthToUse/2,b=this.anchorPoint[1]-this._jsPlumb.heightToUse/2;jsPlumbUtil.sizeElement(this.canvas,a,b,this._jsPlumb.widthToUse,this._jsPlumb.heightToUse)}},this.paint=function(a,b){null!=this._jsPlumb&&(this._jsPlumb.ready?this.actuallyPaint(a,b):window.setTimeout(function(){this.paint(a,b)}.bind(this),200))}},jsPlumbUtil.extend(jsPlumb.Endpoints.Image,[c,jsPlumb.Endpoints.AbstractEndpoint],{cleanup:function(){this._jsPlumb.deleted=!0,this.canvas&&this.canvas.parentNode.removeChild(this.canvas),this.canvas=null}}),jsPlumb.Endpoints.Blank=function(){jsPlumb.Endpoints.AbstractEndpoint.apply(this,arguments),this.type="Blank",c.apply(this,arguments),this._compute=function(a){return[a[0],a[1],10,0]},this.canvas=document.createElement("div"),this.canvas.style.display="block",this.canvas.style.width="1px",this.canvas.style.height="1px",this.canvas.style.background="transparent",this.canvas.style.position="absolute",this.canvas.className=this._jsPlumb.endpointClass,jsPlumb.appendElement(this.canvas),this.paint=function(){jsPlumbUtil.sizeElement(this.canvas,this.x,this.y,this.w,this.h)}},jsPlumbUtil.extend(jsPlumb.Endpoints.Blank,[jsPlumb.Endpoints.AbstractEndpoint,c],{cleanup:function(){this.canvas&&this.canvas.parentNode&&this.canvas.parentNode.removeChild(this.canvas)}}),jsPlumb.Endpoints.Triangle=function(a){this.type="Triangle",jsPlumb.Endpoints.AbstractEndpoint.apply(this,arguments),a=a||{},a.width=a.width||55,a.height=a.height||55,this.width=a.width,this.height=a.height,this._compute=function(a,b,c){var d=c.width||self.width,e=c.height||self.height,f=a[0]-d/2,g=a[1]-e/2;return[f,g,d,e]}};var d=jsPlumb.Overlays.AbstractOverlay=function(a){this.visible=!0,this.isAppendedAtTopLevel=!0,this.component=a.component,this.loc=null==a.location?.5:a.location,this.endpointLoc=null==a.endpointLocation?[.5,.5]:a.endpointLocation};d.prototype={cleanup:function(){this.component=null,this.canvas=null,this.endpointLoc=null},setVisible:function(a){this.visible=a,this.component.repaint()},isVisible:function(){return this.visible},hide:function(){this.setVisible(!1)},show:function(){this.setVisible(!0)},incrementLocation:function(a){this.loc+=a,this.component.repaint()},setLocation:function(a){this.loc=a,this.component.repaint()},getLocation:function(){return this.loc}},jsPlumb.Overlays.Arrow=function(a){this.type="Arrow",d.apply(this,arguments),this.isAppendedAtTopLevel=!1,a=a||{};var b=jsPlumbUtil,c=Biltong;this.length=a.length||20,this.width=a.width||20,this.id=a.id;var e=(a.direction||1)<0?-1:1,f=a.paintStyle||{lineWidth:1},g=a.foldback||.623;this.computeMaxSize=function(){return 1.5*self.width},this.draw=function(a,d){var h,i,j,k,l;if(a.pointAlongPathFrom){if(b.isString(this.loc)||this.loc>1||this.loc<0){var m=parseInt(this.loc,10),n=this.loc<0?1:0;h=a.pointAlongPathFrom(n,m,!1),i=a.pointAlongPathFrom(n,m-e*this.length/2,!1),j=c.pointOnLine(h,i,this.length)}else if(1==this.loc){if(h=a.pointOnPath(this.loc),i=a.pointAlongPathFrom(this.loc,-this.length),j=c.pointOnLine(h,i,this.length),-1==e){var o=j;j=h,h=o}}else if(0===this.loc){if(j=a.pointOnPath(this.loc),i=a.pointAlongPathFrom(this.loc,this.length),h=c.pointOnLine(j,i,this.length),-1==e){var p=j;j=h,h=p}}else h=a.pointAlongPathFrom(this.loc,e*this.length/2),i=a.pointOnPath(this.loc),j=c.pointOnLine(h,i,this.length);k=c.perpendicularLineTo(h,j,this.width),l=c.pointOnLine(h,j,g*this.length);var q={hxy:h,tail:k,cxy:l},r=f.strokeStyle||d.strokeStyle,s=f.fillStyle||d.strokeStyle,t=f.lineWidth||d.lineWidth,u={component:a,d:q,lineWidth:t,strokeStyle:r,fillStyle:s,minX:Math.min(h.x,k[0].x,k[1].x),maxX:Math.max(h.x,k[0].x,k[1].x),minY:Math.min(h.y,k[0].y,k[1].y),maxY:Math.max(h.y,k[0].y,k[1].y)};return u}return{component:a,minX:0,maxX:0,minY:0,maxY:0}}},jsPlumbUtil.extend(jsPlumb.Overlays.Arrow,d),jsPlumb.Overlays.PlainArrow=function(a){a=a||{};var b=jsPlumb.extend(a,{foldback:1});jsPlumb.Overlays.Arrow.call(this,b),this.type="PlainArrow"},jsPlumbUtil.extend(jsPlumb.Overlays.PlainArrow,jsPlumb.Overlays.Arrow),jsPlumb.Overlays.Diamond=function(a){a=a||{};var b=a.length||40,c=jsPlumb.extend(a,{length:b/2,foldback:2});jsPlumb.Overlays.Arrow.call(this,c),this.type="Diamond"},jsPlumbUtil.extend(jsPlumb.Overlays.Diamond,jsPlumb.Overlays.Arrow);var e=function(a,b){return(null==a._jsPlumb.cachedDimensions||b)&&(a._jsPlumb.cachedDimensions=a.getDimensions()),a._jsPlumb.cachedDimensions},f=function(a){jsPlumb.DOMElementComponent.apply(this,arguments),d.apply(this,arguments),this.id=a.id,this._jsPlumb.div=null,this._jsPlumb.initialised=!1,this._jsPlumb.component=a.component,this._jsPlumb.cachedDimensions=null,this._jsPlumb.create=a.create,this._jsPlumb.initiallyInvisible=a.visible===!1,this.getElement=function(){if(null==this._jsPlumb.div){var b=this._jsPlumb.div=jsPlumb.getDOMElement(this._jsPlumb.create(this._jsPlumb.component));b.style.position="absolute";var c=this._jsPlumb.instance.overlayClass+" "+(this.cssClass?this.cssClass:a.cssClass?a.cssClass:"");b.className=c,this._jsPlumb.instance.appendElement(b),this._jsPlumb.instance.getId(b),this.canvas=b;var d="translate(-50%, -50%)";b.style.webkitTransform=d,b.style.mozTransform=d,b.style.msTransform=d,b.style.oTransform=d,b.style.transform=d,b._jsPlumb=a.component,a.visible===!1&&(b.style.display="none")}return this._jsPlumb.div},this.draw=function(a,b,c){var d=e(this);if(null!=d&&2==d.length){var f={x:0,y:0};if(c)f={x:c[0],y:c[1]};else if(a.pointOnPath){var g=this.loc,h=!1;(jsPlumbUtil.isString(this.loc)||this.loc<0||this.loc>1)&&(g=parseInt(this.loc,10),h=!0),f=a.pointOnPath(g,h)}else{var i=this.loc.constructor==Array?this.loc:this.endpointLoc;f={x:i[0]*a.w,y:i[1]*a.h}}var j=f.x-d[0]/2,k=f.y-d[1]/2;return{component:a,d:{minx:j,miny:k,td:d,cxy:f},minX:j,maxX:j+d[0],minY:k,maxY:k+d[1]}}return{minX:0,maxX:0,minY:0,maxY:0}}};jsPlumbUtil.extend(f,[jsPlumb.DOMElementComponent,d],{getDimensions:function(){return jsPlumbUtil.oldIE?jsPlumb.getSize(this.getElement()):[1,1]},setVisible:function(a){this._jsPlumb.div.style.display=a?"block":"none",a&&this._jsPlumb.initiallyInvisible&&(e(this,!0),this.component.repaint(),this._jsPlumb.initiallyInvisible=!1)},clearCachedDimensions:function(){this._jsPlumb.cachedDimensions=null},cleanup:function(){null!=this._jsPlumb.div&&this._jsPlumb.instance.removeElement(this._jsPlumb.div)},computeMaxSize:function(){var a=e(this);return Math.max(a[0],a[1])},paint:function(a){this._jsPlumb.initialised||(this.getElement(),a.component.appendDisplayElement(this._jsPlumb.div),this._jsPlumb.initialised=!0),this._jsPlumb.div.style.left=a.component.x+a.d.minx+"px",this._jsPlumb.div.style.top=a.component.y+a.d.miny+"px"}}),jsPlumb.Overlays.Custom=function(){this.type="Custom",f.apply(this,arguments)},jsPlumbUtil.extend(jsPlumb.Overlays.Custom,f),jsPlumb.Overlays.GuideLines=function(){var a=this;a.length=50,a.lineWidth=5,this.type="GuideLines",d.apply(this,arguments),jsPlumb.jsPlumbUIComponent.apply(this,arguments),this.draw=function(b){var c=b.pointAlongPathFrom(a.loc,a.length/2),d=b.pointOnPath(a.loc),e=Biltong.pointOnLine(c,d,a.length),f=Biltong.perpendicularLineTo(c,e,40),g=Biltong.perpendicularLineTo(e,c,20);return{connector:b,head:c,tail:e,headLine:g,tailLine:f,minX:Math.min(c.x,e.x,g[0].x,g[1].x),minY:Math.min(c.y,e.y,g[0].y,g[1].y),maxX:Math.max(c.x,e.x,g[0].x,g[1].x),maxY:Math.max(c.y,e.y,g[0].y,g[1].y)}}},jsPlumb.Overlays.Label=function(a){this.labelStyle=a.labelStyle,this.cssClass=null!=this.labelStyle?this.labelStyle.cssClass:null;var b=jsPlumb.extend({create:function(){return document.createElement("div")}},a);if(jsPlumb.Overlays.Custom.call(this,b),this.type="Label",this.label=a.label||"",this.labelText=null,this.labelStyle){var c=this.getElement();if(this.labelStyle.font=this.labelStyle.font||"12px sans-serif",c.style.font=this.labelStyle.font,c.style.color=this.labelStyle.color||"black",this.labelStyle.fillStyle&&(c.style.background=this.labelStyle.fillStyle),this.labelStyle.borderWidth>0){var d=this.labelStyle.borderStyle?this.labelStyle.borderStyle:"black";c.style.border=this.labelStyle.borderWidth+"px solid "+d}this.labelStyle.padding&&(c.style.padding=this.labelStyle.padding)}},jsPlumbUtil.extend(jsPlumb.Overlays.Label,jsPlumb.Overlays.Custom,{cleanup:function(){this.div=null,this.label=null,this.labelText=null,this.cssClass=null,this.labelStyle=null},getLabel:function(){return this.label},setLabel:function(a){this.label=a,this.labelText=null,this.clearCachedDimensions(),this.update(),this.component.repaint()},getDimensions:function(){return this.update(),f.prototype.getDimensions.apply(this,arguments)},update:function(){if("function"==typeof this.label){var a=this.label(this);this.getElement().innerHTML=a.replace(/\r\n/g,"
")}else null==this.labelText&&(this.labelText=this.label,this.getElement().innerHTML=this.labelText.replace(/\r\n/g,"
"))}})}(),function(){"use strict";var a=function(a){this.type="Flowchart",a=a||{},a.stub=null==a.stub?30:a.stub;var b,c=jsPlumb.Connectors.AbstractConnector.apply(this,arguments),d=null==a.midpoint?.5:a.midpoint,e=[],f=(a.grid,a.alwaysRespectStubs),g=null,h=null,i=null,j=null!=a.cornerRadius?a.cornerRadius:0,k=function(a){return 0>a?-1:0===a?0:1},l=function(a,b,c,d){if(h!=b||i!=c){var e=null==h?d.sx:h,f=null==i?d.sy:i,g=e==b?"v":"h",j=k(b-e),l=k(c-f);h=b,i=c,a.push([e,f,b,c,g,j,l])}},m=function(a){return Math.sqrt(Math.pow(a[0]-a[2],2)+Math.pow(a[1]-a[3],2))},n=function(a){var b=[];return b.push.apply(b,a),b},o=function(a,b,d){for(var e,f,g=0;g0&&e[4]!=f[4]){var h=Math.min(j,m(e),m(f));e[2]-=e[5]*h,e[3]-=e[6]*h,f[0]+=f[5]*h,f[1]+=f[6]*h;var i=e[6]==f[5]&&1==f[5]||e[6]==f[5]&&0===f[5]&&e[5]!=f[6]||e[6]==f[5]&&-1==f[5],k=f[1]>e[3]?1:-1,l=f[0]>e[2]?1:-1,o=k==l,p=o&&i||!o&&!i?f[0]:e[2],q=o&&i||!o&&!i?e[3]:f[1];c.addSegment(a,"Straight",{x1:e[0],y1:e[1],x2:e[2],y2:e[3]}),c.addSegment(a,"Arc",{r:h,x1:e[2],y1:e[3],x2:f[0],y2:f[1],cx:p,cy:q,ac:i})}else{var r=e[2]==e[0]?0:e[2]>e[0]?d.lw/2:-(d.lw/2),s=e[3]==e[1]?0:e[3]>e[1]?d.lw/2:-(d.lw/2);c.addSegment(a,"Straight",{x1:e[0]-r,y1:e[1]-s,x2:e[2]+r,y2:e[3]+s})}e=f}null!=f&&c.addSegment(a,"Straight",{x1:f[0],y1:f[1],x2:f[2],y2:f[3]})};this.setSegments=function(a){g=a},this.isEditable=function(){return!0},this.getOriginalSegments=function(){return g||e},this._compute=function(a,j){if(j.clearEdits&&(g=null),null!=g)return o(this,g,a),void 0;e=[],h=null,i=null,b=null;var k=a.startStubX+(a.endStubX-a.startStubX)*d,m=a.startStubY+(a.endStubY-a.startStubY)*d,n={x:[0,1],y:[1,0]},p=function(){return[a.startStubX,a.startStubY,a.endStubX,a.endStubY]},q={perpendicular:p,orthogonal:p,opposite:function(b){var c=a,d="x"==b?0:1,e={x:function(){return 1==c.so[d]&&(c.startStubX>c.endStubX&&c.tx>c.startStubX||c.sx>c.endStubX&&c.tx>c.sx)||-1==c.so[d]&&(c.startStubXc.endStubY&&c.ty>c.startStubY||c.sy>c.endStubY&&c.ty>c.sy)||-1==c.so[d]&&(c.startStubYj[b][0],s=e[b][p][0],t=e[b][p][1],u=d[b][p][q];return c.segment==u[3]||c.segment==u[2]&&r?f[b]:c.segment==u[2]&&s>t?g[b]:c.segment==u[2]&&t>=s||c.segment==u[1]&&!r?i[b]:c.segment==u[0]||c.segment==u[1]&&r?h[b]:void 0},orthogonal:function(b,c,d,e,f){var g=a,h={x:-1==g.so[0]?Math.min(c,e):Math.max(c,e),y:-1==g.so[1]?Math.min(c,e):Math.max(c,e)}[b];return{x:[[h,d],[h,f],[e,f]],y:[[d,h],[f,h],[f,e]]}[b]},opposite:function(b,d,e,f){var g=a,h={x:"y",y:"x"}[b],i={x:"height",y:"width"}[b],l=g["is"+b.toUpperCase()+"GreaterThanStubTimes2"];if(j.sourceEndpoint.elementId==j.targetEndpoint.elementId){var n=e+(1-j.sourceEndpoint.anchor[h])*j.sourceInfo[i]+c.maxStub;return{x:[[d,n],[f,n]],y:[[n,d],[n,f]]}[b]}return!l||1==g.so[t]&&d>f||-1==g.so[t]&&f>d?{x:[[d,m],[f,m]],y:[[k,d],[k,f]]}[b]:1==g.so[t]&&f>d||-1==g.so[t]&&d>f?{x:[[k,g.sy],[k,g.ty]],y:[[g.sx,m],[g.tx,m]]}[b]:void 0}},s=q[a.anchorOrientation](a.sourceAxis),t="x"==a.sourceAxis?0:1,u="x"==a.sourceAxis?1:0,v=s[t],w=s[u],x=s[t+2],y=s[u+2];l(e,s[0],s[1],a);var z=r[a.anchorOrientation](a.sourceAxis,v,w,x,y);if(z)for(var A=0;A=a&&b>=d?1:c>=a&&d>=b?2:a>=c&&d>=b?3:4},b=function(a,b,c,d,e,f,g,h,i){return i>=h?[a,b]:1===c?d[3]<=0&&e[3]>=1?[a+(d[2]<.5?-1*f:f),b]:d[2]>=1&&e[2]<=0?[a,b+(d[3]<.5?-1*g:g)]:[a+-1*f,b+-1*g]:2===c?d[3]>=1&&e[3]<=0?[a+(d[2]<.5?-1*f:f),b]:d[2]>=1&&e[2]<=0?[a,b+(d[3]<.5?-1*g:g)]:[a+1*f,b+-1*g]:3===c?d[3]>=1&&e[3]<=0?[a+(d[2]<.5?-1*f:f),b]:d[2]<=0&&e[2]>=1?[a,b+(d[3]<.5?-1*g:g)]:[a+-1*f,b+-1*g]:4===c?d[3]<=0&&e[3]>=1?[a+(d[2]<.5?-1*f:f),b]:d[2]<=0&&e[2]>=1?[a,b+(d[3]<.5?-1*g:g)]:[a+1*f,b+-1*g]:void 0},c=function(c){c=c||{},this.type="StateMachine";var d=jsPlumb.Connectors.AbstractConnector.apply(this,arguments),e=c.curviness||10,f=c.margin||5,g=c.proximityLimit||80,h=c.orientation&&"clockwise"===c.orientation,i=c.loopbackRadius||25,j=c.showLoopback!==!1;this._compute=function(c,k){var l=Math.abs(k.sourcePos[0]-k.targetPos[0]),m=Math.abs(k.sourcePos[1]-k.targetPos[1]);if(Math.min(k.sourcePos[0],k.targetPos[0]),Math.min(k.sourcePos[1],k.targetPos[1]),j&&k.sourceEndpoint.elementId===k.targetEndpoint.elementId){var n=k.sourcePos[0],o=(k.sourcePos[0],k.sourcePos[1]-f),p=(k.sourcePos[1]-f,n),q=o-i,r=2*i,s=2*i,t=p-i,u=q-i;c.points[0]=t,c.points[1]=u,c.points[2]=r,c.points[3]=s,d.addSegment(this,"Arc",{loopback:!0,x1:n-t+4,y1:o-u,startAngle:0,endAngle:2*Math.PI,r:i,ac:!h,x2:n-t-4,y2:o-u,cx:p-t,cy:q-u})}else{var v=k.sourcePos[0]c?a.insertBefore(b,a.childNodes[c]):a.appendChild(b)};jsPlumbUtil.svg={node:q,attr:p,pos:r};var w=function(a){var b=a.pointerEventsSpec||"all",c={};jsPlumb.jsPlumbUIComponent.apply(this,a.originalArgs),this.canvas=null,this.path=null,this.svg=null,this.bgCanvas=null;var d=a.cssClass+" "+(a.originalArgs[0].cssClass||""),e={style:"",width:0,height:0,"pointer-events":b,position:"absolute"};this.svg=q("svg",e),a.useDivWrapper?(this.canvas=document.createElement("div"),this.canvas.style.position="absolute",jsPlumbUtil.sizeElement(this.canvas,0,0,1,1),this.canvas.className=d):(p(this.svg,{"class":d}),this.canvas=this.svg),a._jsPlumb.appendElement(this.canvas,a.originalArgs[0].parent),a.useDivWrapper&&this.canvas.appendChild(this.svg);var f=[this.canvas];return this.getDisplayElements=function(){return f},this.appendDisplayElement=function(a){f.push(a)},this.paint=function(b,d,e){if(null!=b){var f,g=[this.x,this.y],h=[this.w,this.h];null!=e&&(e.xmin<0&&(g[0]+=e.xmin),e.ymin<0&&(g[1]+=e.ymin),h[0]=e.xmax+(e.xmin<0?-e.xmin:0),h[1]=e.ymax+(e.ymin<0?-e.ymin:0)),a.useDivWrapper?(jsPlumbUtil.sizeElement(this.canvas,g[0],g[1],h[0],h[1]),g[0]=0,g[1]=0,f=r([0,0])):f=r([g[0],g[1]]),c.paint.apply(this,arguments),p(this.svg,{style:f,width:h[0],height:h[1]})}},{renderer:c}};jsPlumbUtil.extend(w,jsPlumb.jsPlumbUIComponent,{cleanup:function(){this.canvas&&this.canvas.parentNode&&this.canvas.parentNode.removeChild(this.canvas),this.svg=null,this.canvas=null,this.path=null,this.group=null},setVisible:function(a){this.canvas&&(this.canvas.style.display=a?"block":"none")}}),jsPlumb.ConnectorRenderers.svg=function(a){var b=this,c=w.apply(this,[{cssClass:a._jsPlumb.connectorClass,originalArgs:arguments,pointerEventsSpec:"none",_jsPlumb:a._jsPlumb}]);c.renderer.paint=function(c,d,e){var f=b.getSegments(),g="",h=[0,0];if(e.xmin<0&&(h[0]=-e.xmin),e.ymin<0&&(h[1]=-e.ymin),f.length>0){for(var i=0;iMath.PI?1:0,d=a.anticlockwise?0:1;return"M"+a.x1+" "+a.y1+" A "+a.radius+" "+b.r+" 0 "+c+","+d+" "+a.x2+" "+a.y2}}[a.type]()}}};var x=window.SvgEndpoint=function(a){var b=w.apply(this,[{cssClass:a._jsPlumb.endpointClass,originalArgs:arguments,pointerEventsSpec:"all",useDivWrapper:!1,_jsPlumb:a._jsPlumb}]);b.renderer.paint=function(a){var b=jsPlumb.extend({},a);b.outlineColor&&(b.strokeWidth=b.outlineWidth,b.strokeStyle=jsPlumbUtil.convertStyle(b.outlineColor,!0)),null==this.node?(this.node=this.makeNode(b),this.svg.appendChild(this.node)):null!=this.updateNode&&this.updateNode(this.node),u(this.svg,this.node,b,[this.x,this.y,this.w,this.h],this),r(this.node,[this.x,this.y])}.bind(this)};jsPlumbUtil.extend(x,w),jsPlumb.Endpoints.svg.Dot=function(){jsPlumb.Endpoints.Dot.apply(this,arguments),x.apply(this,arguments),this.makeNode=function(){return q("circle",{cx:this.w/2,cy:this.h/2,r:this.radius})},this.updateNode=function(a){p(a,{cx:this.w/2,cy:this.h/2,r:this.radius})}},jsPlumbUtil.extend(jsPlumb.Endpoints.svg.Dot,[jsPlumb.Endpoints.Dot,x]),jsPlumb.Endpoints.svg.Rectangle=function(){jsPlumb.Endpoints.Rectangle.apply(this,arguments),x.apply(this,arguments),this.makeNode=function(){return q("rect",{width:this.w,height:this.h})},this.updateNode=function(a){p(a,{width:this.w,height:this.h})}},jsPlumbUtil.extend(jsPlumb.Endpoints.svg.Rectangle,[jsPlumb.Endpoints.Rectangle,x]),jsPlumb.Endpoints.svg.Image=jsPlumb.Endpoints.Image,jsPlumb.Endpoints.svg.Blank=jsPlumb.Endpoints.Blank,jsPlumb.Overlays.svg.Label=jsPlumb.Overlays.Label,jsPlumb.Overlays.svg.Custom=jsPlumb.Overlays.Custom;var y=function(a,b){a.apply(this,b),jsPlumb.jsPlumbUIComponent.apply(this,b),this.isAppendedAtTopLevel=!1,this.path=null,this.paint=function(a,d){if(a.component.svg&&d){null==this.path&&(this.path=q("path",{"pointer-events":"all"}),a.component.svg.appendChild(this.path),this.canvas=a.component.svg);var e=b&&1==b.length?b[0].cssClass||"":"",f=[0,0];d.xmin<0&&(f[0]=-d.xmin),d.ymin<0&&(f[1]=-d.ymin),p(this.path,{d:c(a.d),"class":e,stroke:a.strokeStyle?a.strokeStyle:null,fill:a.fillStyle?a.fillStyle:null,transform:"translate("+f[0]+","+f[1]+")"})}};var c=function(a){return"M"+a.hxy.x+","+a.hxy.y+" L"+a.tail[0].x+","+a.tail[0].y+" L"+a.cxy.x+","+a.cxy.y+" L"+a.tail[1].x+","+a.tail[1].y+" L"+a.hxy.x+","+a.hxy.y}};jsPlumbUtil.extend(y,[jsPlumb.jsPlumbUIComponent,jsPlumb.Overlays.AbstractOverlay],{cleanup:function(){null!=this.path&&this._jsPlumb.instance.removeElement(this.path)},setVisible:function(a){null!=this.path&&(this.path.style.display=a?"block":"none")}}),jsPlumb.Overlays.svg.Arrow=function(){y.apply(this,[jsPlumb.Overlays.Arrow,arguments])},jsPlumbUtil.extend(jsPlumb.Overlays.svg.Arrow,[jsPlumb.Overlays.Arrow,y]),jsPlumb.Overlays.svg.PlainArrow=function(){y.apply(this,[jsPlumb.Overlays.PlainArrow,arguments])},jsPlumbUtil.extend(jsPlumb.Overlays.svg.PlainArrow,[jsPlumb.Overlays.PlainArrow,y]),jsPlumb.Overlays.svg.Diamond=function(){y.apply(this,[jsPlumb.Overlays.Diamond,arguments])},jsPlumbUtil.extend(jsPlumb.Overlays.svg.Diamond,[jsPlumb.Overlays.Diamond,y]),jsPlumb.Overlays.svg.GuideLines=function(){var a,b,c=null,d=this;jsPlumb.Overlays.GuideLines.apply(this,arguments),this.paint=function(f,g){null==c&&(c=q("path"),f.connector.svg.appendChild(c),d.attachListeners(c,f.connector),d.attachListeners(c,d),a=q("path"),f.connector.svg.appendChild(a),d.attachListeners(a,f.connector),d.attachListeners(a,d),b=q("path"),f.connector.svg.appendChild(b),d.attachListeners(b,f.connector),d.attachListeners(b,d));var h=[0,0];g.xmin<0&&(h[0]=-g.xmin),g.ymin<0&&(h[1]=-g.ymin),p(c,{d:e(f.head,f.tail),stroke:"red",fill:null,transform:"translate("+h[0]+","+h[1]+")"}),p(a,{d:e(f.tailLine[0],f.tailLine[1]),stroke:"blue",fill:null,transform:"translate("+h[0]+","+h[1]+")"}),p(b,{d:e(f.headLine[0],f.headLine[1]),stroke:"green",fill:null,transform:"translate("+h[0]+","+h[1]+")"})};var e=function(a,b){return"M "+a.x+","+a.y+" L"+b.x+","+b.y}},jsPlumbUtil.extend(jsPlumb.Overlays.svg.GuideLines,jsPlumb.Overlays.GuideLines)}(),function(){"use strict";var a={"stroke-linejoin":"joinstyle",joinstyle:"joinstyle",endcap:"endcap",miterlimit:"miterlimit"},b=null;if(document.createStyleSheet&&document.namespaces){var c=[".jsplumb_vml","jsplumb\\:textbox","jsplumb\\:oval","jsplumb\\:rect","jsplumb\\:stroke","jsplumb\\:shape","jsplumb\\:group"],d="behavior:url(#default#VML);position:absolute;";b=document.createStyleSheet();for(var e=0;e=k&&(window.clearInterval(o),null!=d.complete&&d.complete())},j)},getSelector:function(a,b){var c=null;return c=1==arguments.length?null!=a.nodeType?a:document.querySelectorAll(a):a.querySelectorAll(b)},destroyDraggable:function(b){a(this).destroyDraggable(b)},destroyDroppable:function(b){a(this).destroyDroppable(b)},initDraggable:function(b,c,d){a(this,d).draggable(b,c)},initDroppable:function(b,c,d){a(this,d).droppable(b,c)},isAlreadyDraggable:function(a){return null!=a._katavorioDrag},isDragSupported:function(){return!0},isDropSupported:function(){return!0},getDragObject:function(a){return a[0].drag.getDragElement()},getDragScope:function(a){return a._katavorioDrag&&a._katavorioDrag.scopes.join(" ")||""},getDropEvent:function(a){return a[0].e},getDropScope:function(a){return a._katavorioDrop&&a._katavorioDrop.scopes.join(" ")||""},getUIPosition:function(a){return{left:a[0].pos[0],top:a[0].pos[1]}},isDragFilterSupported:function(){return!0},setDragFilter:function(a,b){a._katavorioDrag&&a._katavorioDrag.setFilter(b)},setElementDraggable:function(a,b){a=jsPlumb.getDOMElement(a),a._katavorioDrag&&a._katavorioDrag.setEnabled(b)},setDragScope:function(a,b){a._katavorioDrag&&a._katavorioDrag.k.setDragScope(a,b)},dragEvents:{start:"start",stop:"stop",drag:"drag",step:"step",over:"over",out:"out",drop:"drop",complete:"complete"},animEvents:{step:"step",complete:"complete"},stopDrag:function(a){a._katavorioDrag&&a._katavorioDrag.abort()},addToDragSelection:function(b){a(this).select(b)},removeFromDragSelection:function(b){a(this).deselect(b)},clearDragSelection:function(){a(this).deselectAll()},trigger:function(a,c,d){b(this).trigger(a,c,d)},getOriginalEvent:function(a){return a},on:function(){b(this).on.apply(this,arguments)},off:function(){b(this).off.apply(this,arguments)}});var d=function(a){var b=function(){/complete|loaded|interactive/.test(document.readyState)&&"1.6.5"!=typeof document.body&&null!=document.body?a():setTimeout(b,9)};b()};d(jsPlumb.init)}.call(this); \ No newline at end of file +}}},jsPlumbUtil.extend(jsPlumb.ConnectorRenderers.svg,w),jsPlumb.Segments.svg={SegmentRenderer:{getPath:function(a){return{Straight:function(){var b=a.getCoordinates();return"M "+b.x1+" "+b.y1+" L "+b.x2+" "+b.y2},Bezier:function(){var b=a.params;return"M "+b.x1+" "+b.y1+" C "+b.cp1x+" "+b.cp1y+" "+b.cp2x+" "+b.cp2y+" "+b.x2+" "+b.y2},Arc:function(){var b=a.params,c=a.sweep>Math.PI?1:0,d=a.anticlockwise?0:1;return"M"+a.x1+" "+a.y1+" A "+a.radius+" "+b.r+" 0 "+c+","+d+" "+a.x2+" "+a.y2}}[a.type]()}}};var x=window.SvgEndpoint=function(a){var b=w.apply(this,[{cssClass:a._jsPlumb.endpointClass,originalArgs:arguments,pointerEventsSpec:"all",useDivWrapper:!1,_jsPlumb:a._jsPlumb}]);b.renderer.paint=function(a){var b=jsPlumb.extend({},a);b.outlineColor&&(b.strokeWidth=b.outlineWidth,b.strokeStyle=jsPlumbUtil.convertStyle(b.outlineColor,!0)),null==this.node?(this.node=this.makeNode(b),this.svg.appendChild(this.node)):null!=this.updateNode&&this.updateNode(this.node),u(this.svg,this.node,b,[this.x,this.y,this.w,this.h],this),r(this.node,[this.x,this.y])}.bind(this)};jsPlumbUtil.extend(x,w),jsPlumb.Endpoints.svg.Dot=function(){jsPlumb.Endpoints.Dot.apply(this,arguments),x.apply(this,arguments),this.makeNode=function(){return q("circle",{cx:this.w/2,cy:this.h/2,r:this.radius})},this.updateNode=function(a){p(a,{cx:this.w/2,cy:this.h/2,r:this.radius})}},jsPlumbUtil.extend(jsPlumb.Endpoints.svg.Dot,[jsPlumb.Endpoints.Dot,x]),jsPlumb.Endpoints.svg.Rectangle=function(){jsPlumb.Endpoints.Rectangle.apply(this,arguments),x.apply(this,arguments),this.makeNode=function(){return q("rect",{width:this.w,height:this.h})},this.updateNode=function(a){p(a,{width:this.w,height:this.h})}},jsPlumbUtil.extend(jsPlumb.Endpoints.svg.Rectangle,[jsPlumb.Endpoints.Rectangle,x]),jsPlumb.Endpoints.svg.Image=jsPlumb.Endpoints.Image,jsPlumb.Endpoints.svg.Blank=jsPlumb.Endpoints.Blank,jsPlumb.Overlays.svg.Label=jsPlumb.Overlays.Label,jsPlumb.Overlays.svg.Custom=jsPlumb.Overlays.Custom;var y=function(a,b){a.apply(this,b),jsPlumb.jsPlumbUIComponent.apply(this,b),this.isAppendedAtTopLevel=!1,this.path=null,this.paint=function(a,d){if(a.component.svg&&d){null==this.path&&(this.path=q("path",{"pointer-events":"all"}),a.component.svg.appendChild(this.path),this.canvas=a.component.svg);var e=b&&1==b.length?b[0].cssClass||"":"",f=[0,0];d.xmin<0&&(f[0]=-d.xmin),d.ymin<0&&(f[1]=-d.ymin),p(this.path,{d:c(a.d),"class":e,stroke:a.strokeStyle?a.strokeStyle:null,fill:a.fillStyle?a.fillStyle:null,transform:"translate("+f[0]+","+f[1]+")"})}};var c=function(a){return"M"+a.hxy.x+","+a.hxy.y+" L"+a.tail[0].x+","+a.tail[0].y+" L"+a.cxy.x+","+a.cxy.y+" L"+a.tail[1].x+","+a.tail[1].y+" L"+a.hxy.x+","+a.hxy.y}};jsPlumbUtil.extend(y,[jsPlumb.jsPlumbUIComponent,jsPlumb.Overlays.AbstractOverlay],{cleanup:function(){null!=this.path&&this._jsPlumb.instance.removeElement(this.path)},setVisible:function(a){null!=this.path&&(this.path.style.display=a?"block":"none")}}),jsPlumb.Overlays.svg.Arrow=function(){y.apply(this,[jsPlumb.Overlays.Arrow,arguments])},jsPlumbUtil.extend(jsPlumb.Overlays.svg.Arrow,[jsPlumb.Overlays.Arrow,y]),jsPlumb.Overlays.svg.PlainArrow=function(){y.apply(this,[jsPlumb.Overlays.PlainArrow,arguments])},jsPlumbUtil.extend(jsPlumb.Overlays.svg.PlainArrow,[jsPlumb.Overlays.PlainArrow,y]),jsPlumb.Overlays.svg.Diamond=function(){y.apply(this,[jsPlumb.Overlays.Diamond,arguments])},jsPlumbUtil.extend(jsPlumb.Overlays.svg.Diamond,[jsPlumb.Overlays.Diamond,y]),jsPlumb.Overlays.svg.GuideLines=function(){var a,b,c=null,d=this;jsPlumb.Overlays.GuideLines.apply(this,arguments),this.paint=function(f,g){null==c&&(c=q("path"),f.connector.svg.appendChild(c),d.attachListeners(c,f.connector),d.attachListeners(c,d),a=q("path"),f.connector.svg.appendChild(a),d.attachListeners(a,f.connector),d.attachListeners(a,d),b=q("path"),f.connector.svg.appendChild(b),d.attachListeners(b,f.connector),d.attachListeners(b,d));var h=[0,0];g.xmin<0&&(h[0]=-g.xmin),g.ymin<0&&(h[1]=-g.ymin),p(c,{d:e(f.head,f.tail),stroke:"red",fill:null,transform:"translate("+h[0]+","+h[1]+")"}),p(a,{d:e(f.tailLine[0],f.tailLine[1]),stroke:"blue",fill:null,transform:"translate("+h[0]+","+h[1]+")"}),p(b,{d:e(f.headLine[0],f.headLine[1]),stroke:"green",fill:null,transform:"translate("+h[0]+","+h[1]+")"})};var e=function(a,b){return"M "+a.x+","+a.y+" L"+b.x+","+b.y}},jsPlumbUtil.extend(jsPlumb.Overlays.svg.GuideLines,jsPlumb.Overlays.GuideLines)}(),function(){"use strict";var a={"stroke-linejoin":"joinstyle",joinstyle:"joinstyle",endcap:"endcap",miterlimit:"miterlimit"},b=null;if(document.createStyleSheet&&document.namespaces){var c=[".jsplumb_vml","jsplumb\\:textbox","jsplumb\\:oval","jsplumb\\:rect","jsplumb\\:stroke","jsplumb\\:shape","jsplumb\\:group"],d="behavior:url(#default#VML);position:absolute;";b=document.createStyleSheet();for(var e=0;e=k&&(window.clearInterval(o),null!=d.complete&&d.complete())},j)},getSelector:function(a,b){var c=null;return c=1==arguments.length?null!=a.nodeType?a:document.querySelectorAll(a):a.querySelectorAll(b)},destroyDraggable:function(b){a(this).destroyDraggable(b)},destroyDroppable:function(b){a(this).destroyDroppable(b)},initDraggable:function(b,c,d){a(this,d).draggable(b,c)},initDroppable:function(b,c,d){a(this,d).droppable(b,c)},isAlreadyDraggable:function(a){return null!=a._katavorioDrag},isDragSupported:function(){return!0},isDropSupported:function(){return!0},getDragObject:function(a){return a[0].drag.getDragElement()},getDragScope:function(a){return a._katavorioDrag&&a._katavorioDrag.scopes.join(" ")||""},getDropEvent:function(a){return a[0].e},getDropScope:function(a){return a._katavorioDrop&&a._katavorioDrop.scopes.join(" ")||""},getUIPosition:function(a){return{left:a[0].pos[0],top:a[0].pos[1]}},isDragFilterSupported:function(){return!0},setDragFilter:function(a,b){a._katavorioDrag&&a._katavorioDrag.setFilter(b)},setElementDraggable:function(a,b){a=jsPlumb.getDOMElement(a),a._katavorioDrag&&a._katavorioDrag.setEnabled(b)},setDragScope:function(a,b){a._katavorioDrag&&a._katavorioDrag.k.setDragScope(a,b)},dragEvents:{start:"start",stop:"stop",drag:"drag",step:"step",over:"over",out:"out",drop:"drop",complete:"complete"},animEvents:{step:"step",complete:"complete"},stopDrag:function(a){a._katavorioDrag&&a._katavorioDrag.abort()},addToDragSelection:function(b){a(this).select(b)},removeFromDragSelection:function(b){a(this).deselect(b)},clearDragSelection:function(){a(this).deselectAll()},trigger:function(a,c,d){b(this).trigger(a,c,d)},getOriginalEvent:function(a){return a},on:function(){b(this).on.apply(this,arguments)},off:function(){b(this).off.apply(this,arguments)}});var d=function(a){var b=function(){/complete|loaded|interactive/.test(document.readyState)&&"1.7.0"!=typeof document.body&&null!=document.body?a():setTimeout(b,9)};b()};d(jsPlumb.init)}.call(this); \ No newline at end of file diff --git a/dist/js/dom.jsPlumb-1.6.5.js b/dist/js/dom.jsPlumb-1.7.0.js similarity index 99% rename from dist/js/dom.jsPlumb-1.6.5.js rename to dist/js/dom.jsPlumb-1.7.0.js index 0a3142cd6..f5646749f 100644 --- a/dist/js/dom.jsPlumb-1.6.5.js +++ b/dist/js/dom.jsPlumb-1.7.0.js @@ -1762,7 +1762,7 @@ /* * jsPlumb * - * Title:jsPlumb 1.6.5 + * Title:jsPlumb 1.7.0 * * Provides a way to visually connect elements on an HTML page, using SVG or VML. * @@ -2217,7 +2217,7 @@ if (typeof console != "undefined") { /* * jsPlumb * - * Title:jsPlumb 1.6.5 + * Title:jsPlumb 1.7.0 * * Provides a way to visually connect elements on an HTML page, using SVG or VML. * @@ -2290,7 +2290,7 @@ if (typeof console != "undefined") { /* * jsPlumb * - * Title:jsPlumb 1.6.5 + * Title:jsPlumb 1.7.0 * * Provides a way to visually connect elements on an HTML page, using SVG or VML. * @@ -2811,7 +2811,7 @@ if (typeof console != "undefined") { /* * jsPlumb * - * Title:jsPlumb 1.6.5 + * Title:jsPlumb 1.7.0 * * Provides a way to visually connect elements on an HTML page, using SVG or VML. * @@ -5943,7 +5943,7 @@ if (typeof console != "undefined") { /* * jsPlumb * - * Title:jsPlumb 1.6.5 + * Title:jsPlumb 1.7.0 * * Provides a way to visually connect elements on an HTML page, using SVG or VML. * @@ -6346,9 +6346,8 @@ if (typeof console != "undefined") { params = params || {}; var timestamp = params.timestamp, recalc = !(params.recalc === false); if (!timestamp || this.timestamp !== timestamp) { - - // TODO check: is this is a safe performance enhancement? - var info = _jsPlumb.updateOffset({ elId:this.elementId, timestamp:timestamp/*, recalc:recalc*/ }); + + var info = _jsPlumb.updateOffset({ elId:this.elementId, timestamp:timestamp }); var xy = params.offset ? params.offset.o : info.o; if(xy != null) { @@ -6982,7 +6981,7 @@ if (typeof console != "undefined") { /* * jsPlumb * - * Title:jsPlumb 1.6.5 + * Title:jsPlumb 1.7.0 * * Provides a way to visually connect elements on an HTML page, using SVG or VML. * @@ -7433,7 +7432,7 @@ if (typeof console != "undefined") { /* * jsPlumb * - * Title:jsPlumb 1.6.5 + * Title:jsPlumb 1.7.0 * * Provides a way to visually connect elements on an HTML page, using SVG or VML. * @@ -8513,7 +8512,7 @@ if (typeof console != "undefined") { /* * jsPlumb * - * Title:jsPlumb 1.6.5 + * Title:jsPlumb 1.7.0 * * Provides a way to visually connect elements on an HTML page, using SVG or VML. * @@ -9918,7 +9917,7 @@ if (typeof console != "undefined") { /* * jsPlumb * - * Title:jsPlumb 1.6.5 + * Title:jsPlumb 1.7.0 * * Provides a way to visually connect elements on an HTML page, using SVG or VML. * @@ -10282,7 +10281,7 @@ if (typeof console != "undefined") { /* * jsPlumb * - * Title:jsPlumb 1.6.5 + * Title:jsPlumb 1.7.0 * * Provides a way to visually connect elements on an HTML page, using SVG or VML. * @@ -10547,7 +10546,7 @@ if (typeof console != "undefined") { /* * jsPlumb * - * Title:jsPlumb 1.6.5 + * Title:jsPlumb 1.7.0 * * Provides a way to visually connect elements on an HTML page, using SVG or VML. * @@ -10630,7 +10629,7 @@ if (typeof console != "undefined") { /* * jsPlumb * - * Title:jsPlumb 1.6.5 + * Title:jsPlumb 1.7.0 * * Provides a way to visually connect elements on an HTML page, using SVG or VML. * @@ -11227,7 +11226,7 @@ if (typeof console != "undefined") { /* * jsPlumb * - * Title:jsPlumb 1.6.5 + * Title:jsPlumb 1.7.0 * * Provides a way to visually connect elements on an HTML page, using SVG or VML. * @@ -11724,7 +11723,7 @@ if (typeof console != "undefined") { /* * jsPlumb * - * Title:jsPlumb 1.6.5 + * Title:jsPlumb 1.7.0 * * Provides a way to visually connect elements on an HTML page, using SVG or VML. * @@ -11951,7 +11950,7 @@ if (typeof console != "undefined") { var ready = function (f) { var _do = function() { - if (/complete|loaded|interactive/.test(document.readyState) && typeof(document.body) != "1.6.5" && document.body != null) + if (/complete|loaded|interactive/.test(document.readyState) && typeof(document.body) != "1.7.0" && document.body != null) f(); else setTimeout(_do, 9); diff --git a/dist/js/jquery.jsPlumb-1.6.5-min.js b/dist/js/jquery.jsPlumb-1.7.0-min.js similarity index 100% rename from dist/js/jquery.jsPlumb-1.6.5-min.js rename to dist/js/jquery.jsPlumb-1.7.0-min.js diff --git a/dist/js/jquery.jsPlumb-1.6.5.js b/dist/js/jquery.jsPlumb-1.7.0.js similarity index 99% rename from dist/js/jquery.jsPlumb-1.6.5.js rename to dist/js/jquery.jsPlumb-1.7.0.js index b21b61327..bfcf9bfdc 100644 --- a/dist/js/jquery.jsPlumb-1.6.5.js +++ b/dist/js/jquery.jsPlumb-1.7.0.js @@ -619,7 +619,7 @@ /* * jsPlumb * - * Title:jsPlumb 1.6.5 + * Title:jsPlumb 1.7.0 * * Provides a way to visually connect elements on an HTML page, using SVG or VML. * @@ -1074,7 +1074,7 @@ if (typeof console != "undefined") { /* * jsPlumb * - * Title:jsPlumb 1.6.5 + * Title:jsPlumb 1.7.0 * * Provides a way to visually connect elements on an HTML page, using SVG or VML. * @@ -1147,7 +1147,7 @@ if (typeof console != "undefined") { /* * jsPlumb * - * Title:jsPlumb 1.6.5 + * Title:jsPlumb 1.7.0 * * Provides a way to visually connect elements on an HTML page, using SVG or VML. * @@ -1668,7 +1668,7 @@ if (typeof console != "undefined") { /* * jsPlumb * - * Title:jsPlumb 1.6.5 + * Title:jsPlumb 1.7.0 * * Provides a way to visually connect elements on an HTML page, using SVG or VML. * @@ -4800,7 +4800,7 @@ if (typeof console != "undefined") { /* * jsPlumb * - * Title:jsPlumb 1.6.5 + * Title:jsPlumb 1.7.0 * * Provides a way to visually connect elements on an HTML page, using SVG or VML. * @@ -5203,9 +5203,8 @@ if (typeof console != "undefined") { params = params || {}; var timestamp = params.timestamp, recalc = !(params.recalc === false); if (!timestamp || this.timestamp !== timestamp) { - - // TODO check: is this is a safe performance enhancement? - var info = _jsPlumb.updateOffset({ elId:this.elementId, timestamp:timestamp/*, recalc:recalc*/ }); + + var info = _jsPlumb.updateOffset({ elId:this.elementId, timestamp:timestamp }); var xy = params.offset ? params.offset.o : info.o; if(xy != null) { @@ -5839,7 +5838,7 @@ if (typeof console != "undefined") { /* * jsPlumb * - * Title:jsPlumb 1.6.5 + * Title:jsPlumb 1.7.0 * * Provides a way to visually connect elements on an HTML page, using SVG or VML. * @@ -6290,7 +6289,7 @@ if (typeof console != "undefined") { /* * jsPlumb * - * Title:jsPlumb 1.6.5 + * Title:jsPlumb 1.7.0 * * Provides a way to visually connect elements on an HTML page, using SVG or VML. * @@ -7370,7 +7369,7 @@ if (typeof console != "undefined") { /* * jsPlumb * - * Title:jsPlumb 1.6.5 + * Title:jsPlumb 1.7.0 * * Provides a way to visually connect elements on an HTML page, using SVG or VML. * @@ -8775,7 +8774,7 @@ if (typeof console != "undefined") { /* * jsPlumb * - * Title:jsPlumb 1.6.5 + * Title:jsPlumb 1.7.0 * * Provides a way to visually connect elements on an HTML page, using SVG or VML. * @@ -9139,7 +9138,7 @@ if (typeof console != "undefined") { /* * jsPlumb * - * Title:jsPlumb 1.6.5 + * Title:jsPlumb 1.7.0 * * Provides a way to visually connect elements on an HTML page, using SVG or VML. * @@ -9404,7 +9403,7 @@ if (typeof console != "undefined") { /* * jsPlumb * - * Title:jsPlumb 1.6.5 + * Title:jsPlumb 1.7.0 * * Provides a way to visually connect elements on an HTML page, using SVG or VML. * @@ -9487,7 +9486,7 @@ if (typeof console != "undefined") { /* * jsPlumb * - * Title:jsPlumb 1.6.5 + * Title:jsPlumb 1.7.0 * * Provides a way to visually connect elements on an HTML page, using SVG or VML. * @@ -10084,7 +10083,7 @@ if (typeof console != "undefined") { /* * jsPlumb * - * Title:jsPlumb 1.6.5 + * Title:jsPlumb 1.7.0 * * Provides a way to visually connect elements on an HTML page, using SVG or VML. * @@ -10581,7 +10580,7 @@ if (typeof console != "undefined") { /* * jsPlumb * - * Title:jsPlumb 1.6.5 + * Title:jsPlumb 1.7.0 * * Provides a way to visually connect elements on an HTML page, using SVG or VML. * diff --git a/dist/js/mootools.jsPlumb-1.6.5-min.js b/dist/js/mootools.jsPlumb-1.7.0-min.js similarity index 100% rename from dist/js/mootools.jsPlumb-1.6.5-min.js rename to dist/js/mootools.jsPlumb-1.7.0-min.js diff --git a/dist/js/mootools.jsPlumb-1.6.5.js b/dist/js/mootools.jsPlumb-1.7.0.js similarity index 99% rename from dist/js/mootools.jsPlumb-1.6.5.js rename to dist/js/mootools.jsPlumb-1.7.0.js index 957b4ea22..9d77089f0 100644 --- a/dist/js/mootools.jsPlumb-1.6.5.js +++ b/dist/js/mootools.jsPlumb-1.7.0.js @@ -619,7 +619,7 @@ /* * jsPlumb * - * Title:jsPlumb 1.6.5 + * Title:jsPlumb 1.7.0 * * Provides a way to visually connect elements on an HTML page, using SVG or VML. * @@ -1074,7 +1074,7 @@ if (typeof console != "undefined") { /* * jsPlumb * - * Title:jsPlumb 1.6.5 + * Title:jsPlumb 1.7.0 * * Provides a way to visually connect elements on an HTML page, using SVG or VML. * @@ -1147,7 +1147,7 @@ if (typeof console != "undefined") { /* * jsPlumb * - * Title:jsPlumb 1.6.5 + * Title:jsPlumb 1.7.0 * * Provides a way to visually connect elements on an HTML page, using SVG or VML. * @@ -1668,7 +1668,7 @@ if (typeof console != "undefined") { /* * jsPlumb * - * Title:jsPlumb 1.6.5 + * Title:jsPlumb 1.7.0 * * Provides a way to visually connect elements on an HTML page, using SVG or VML. * @@ -4800,7 +4800,7 @@ if (typeof console != "undefined") { /* * jsPlumb * - * Title:jsPlumb 1.6.5 + * Title:jsPlumb 1.7.0 * * Provides a way to visually connect elements on an HTML page, using SVG or VML. * @@ -5203,9 +5203,8 @@ if (typeof console != "undefined") { params = params || {}; var timestamp = params.timestamp, recalc = !(params.recalc === false); if (!timestamp || this.timestamp !== timestamp) { - - // TODO check: is this is a safe performance enhancement? - var info = _jsPlumb.updateOffset({ elId:this.elementId, timestamp:timestamp/*, recalc:recalc*/ }); + + var info = _jsPlumb.updateOffset({ elId:this.elementId, timestamp:timestamp }); var xy = params.offset ? params.offset.o : info.o; if(xy != null) { @@ -5839,7 +5838,7 @@ if (typeof console != "undefined") { /* * jsPlumb * - * Title:jsPlumb 1.6.5 + * Title:jsPlumb 1.7.0 * * Provides a way to visually connect elements on an HTML page, using SVG or VML. * @@ -6290,7 +6289,7 @@ if (typeof console != "undefined") { /* * jsPlumb * - * Title:jsPlumb 1.6.5 + * Title:jsPlumb 1.7.0 * * Provides a way to visually connect elements on an HTML page, using SVG or VML. * @@ -7370,7 +7369,7 @@ if (typeof console != "undefined") { /* * jsPlumb * - * Title:jsPlumb 1.6.5 + * Title:jsPlumb 1.7.0 * * Provides a way to visually connect elements on an HTML page, using SVG or VML. * @@ -8775,7 +8774,7 @@ if (typeof console != "undefined") { /* * jsPlumb * - * Title:jsPlumb 1.6.5 + * Title:jsPlumb 1.7.0 * * Provides a way to visually connect elements on an HTML page, using SVG or VML. * @@ -9139,7 +9138,7 @@ if (typeof console != "undefined") { /* * jsPlumb * - * Title:jsPlumb 1.6.5 + * Title:jsPlumb 1.7.0 * * Provides a way to visually connect elements on an HTML page, using SVG or VML. * @@ -9404,7 +9403,7 @@ if (typeof console != "undefined") { /* * jsPlumb * - * Title:jsPlumb 1.6.5 + * Title:jsPlumb 1.7.0 * * Provides a way to visually connect elements on an HTML page, using SVG or VML. * @@ -9487,7 +9486,7 @@ if (typeof console != "undefined") { /* * jsPlumb * - * Title:jsPlumb 1.6.5 + * Title:jsPlumb 1.7.0 * * Provides a way to visually connect elements on an HTML page, using SVG or VML. * @@ -10084,7 +10083,7 @@ if (typeof console != "undefined") { /* * jsPlumb * - * Title:jsPlumb 1.6.5 + * Title:jsPlumb 1.7.0 * * Provides a way to visually connect elements on an HTML page, using SVG or VML. * @@ -10581,7 +10580,7 @@ if (typeof console != "undefined") { /* * jsPlumb * - * Title:jsPlumb 1.6.5 + * Title:jsPlumb 1.7.0 * * Provides a way to visually connect elements on an HTML page, using SVG or VML. * diff --git a/dist/js/yui.jsPlumb-1.6.5-min.js b/dist/js/yui.jsPlumb-1.7.0-min.js similarity index 99% rename from dist/js/yui.jsPlumb-1.6.5-min.js rename to dist/js/yui.jsPlumb-1.7.0-min.js index edab0b440..02e889e82 100644 --- a/dist/js/yui.jsPlumb-1.6.5-min.js +++ b/dist/js/yui.jsPlumb-1.7.0-min.js @@ -3,4 +3,4 @@ },d=["connectorStyle","connectorHoverStyle","connectorOverlays","connector","connectionType","connectorClass","connectorHoverClass"],e=function(a,b){var c=0;if(null!=b)for(var d=0;d0?this.connections[0].setHover(a,!1):this.setHover(a)}.bind(this);this.bind("mouseover",function(){s(!0)}),this.bind("mouseout",function(){s(!1)}),g._transient||this._jsPlumb.instance.anchorManager.add(this,this.elementId),this.setEndpoint=function(a){null!=this.endpoint&&(this.endpoint.cleanup(),this.endpoint.destroy());var b=function(a,b){var c=h.getRenderMode();if(jsPlumb.Endpoints[c][a])return new jsPlumb.Endpoints[c][a](b);if(!h.Defaults.DoNotThrowErrors)throw{msg:"jsPlumb: unknown endpoint type '"+a+"'"}},c={_jsPlumb:this._jsPlumb.instance,cssClass:g.cssClass,container:g.container,tooltip:g.tooltip,connectorTooltip:g.connectorTooltip,endpoint:this};j.isString(a)?this.endpoint=b(a,c):j.isArray(a)?(c=j.merge(a[1],c),this.endpoint=b(a[0],c)):this.endpoint=a.clone(),this.endpoint.clone=function(){return j.isString(a)?b(a,c):j.isArray(a)?(c=j.merge(a[1],c),b(a[0],c)):void 0}.bind(this),this.type=this.endpoint.type},this.setEndpoint(g.endpoint||h.Defaults.Endpoint||jsPlumb.Defaults.Endpoint||"Dot"),this.setPaintStyle(g.paintStyle||g.style||h.Defaults.EndpointStyle||jsPlumb.Defaults.EndpointStyle,!0),this.setHoverPaintStyle(g.hoverPaintStyle||h.Defaults.EndpointHoverStyle||jsPlumb.Defaults.EndpointHoverStyle,!0),this._jsPlumb.paintStyleInUse=this.getPaintStyle(),jsPlumb.extend(this,g,d),this.isSource=g.isSource||!1,this.isTemporarySource=g.isTemporarySource||!1,this.isTarget=g.isTarget||!1,this._jsPlumb.maxConnections=g.maxConnections||h.Defaults.MaxConnections,this.canvas=this.endpoint.canvas,this.canvas._jsPlumb=this,this.addClass(h.endpointAnchorClassPrefix+"_"+this._jsPlumb.currentAnchorClass),jsPlumbAdapter.addClass(this.element,h.endpointAnchorClassPrefix+"_"+this._jsPlumb.currentAnchorClass),this.connections=g.connections||[],this.connectorPointerEvents=g["connector-pointer-events"],this.scope=g.scope||h.getDefaultScope(),this.timestamp=null,this.reattachConnections=g.reattach||h.Defaults.ReattachConnections,this.connectionsDetachable=h.Defaults.ConnectionsDetachable,(g.connectionsDetachable===!1||g.detachable===!1)&&(this.connectionsDetachable=!1),this.dragAllowedWhenFull=g.dragAllowedWhenFull!==!1,g.onMaxConnections&&this.bind("maxConnections",g.onMaxConnections),this.addConnection=function(a){this.connections.push(a),this[(this.connections.length>0?"add":"remove")+"Class"](h.endpointConnectedClass),this[(this.isFull()?"add":"remove")+"Class"](h.endpointFullClass)},this.detachFromConnection=function(a,b,c){b=null==b?f(a,this):b,b>=0&&(this.connections.splice(b,1),this[(this.connections.length>0?"add":"remove")+"Class"](h.endpointConnectedClass),this[(this.isFull()?"add":"remove")+"Class"](h.endpointFullClass)),!c&&this._deleteOnDetach&&0===this.connections.length&&h.deleteObject({endpoint:this,fireEvent:!1,deleteAttachedObjects:!1})},this.detach=function(a,b,c,d,e,g,i){var j=null==i?f(a,this):i,k=!1;return d=d!==!1,j>=0&&(c||a._forceDetach||a.isDetachable()&&a.isDetachAllowed(a)&&this.isDetachAllowed(a)&&h.checkCondition("beforeDetach",a))&&(h.deleteObject({connection:a,fireEvent:!b&&d,originalEvent:e,deleteAttachedObjects:!1}),k=!0),k},this.detachAll=function(a,b){for(;this.connections.length>0;)this.detach(this.connections[0],!1,!0,a!==!1,b,this,0);return this},this.detachFrom=function(a,b,c){for(var d=[],e=0;e0){var l=e(this,a.elementWithPrecedence),m=l.endpoints[0]==this?1:0,n=0===m?l.sourceId:l.targetId,o=h.getCachedData(n),p=o.o,q=o.s;k.txy=[p.left,p.top],k.twh=q,k.tElement=l.endpoints[m]}g=this.anchor.compute(k)}this.endpoint.compute(g,this.anchor.getOrientation(this),this._jsPlumb.paintStyleInUse,i||this.paintStyleInUse),this.endpoint.paint(this._jsPlumb.paintStyleInUse,this.anchor),this.timestamp=b;for(var r=0;rb.dist?1:0});for(var o=k[0].source,p=k[0].target,q=0;qc[0][0],d===!1?-1:1}},q=function(a,b){var c=a[0][0]<0?-Math.PI-a[0][0]:Math.PI-a[0][0],d=b[0][0]<0?-Math.PI-b[0][0]:Math.PI-b[0][0];return c>d?1:a[0][1]>b[0][1]?1:-1},r={top:function(a,b){return a[0]>b[0]?1:-1},right:p(!0),bottom:p(!0),left:q},s=function(a,b){return a.sort(b)},t=function(a,b){var c=l.getCachedData(a),e=c.s,g=c.o,h=function(b,c,e,g,h,i,j){if(g.length>0)for(var k=s(g,r[b]),l="right"===b||"top"===b,m=o(b,c,e,k,h,i,l),n=function(a,b){d[a.id]=[b[0],b[1],b[2],b[3]],f[a.id]=j},p=0;p-1&&(i[b].splice(f,1),jsPlumbUtil.addToList(i,c,[d,d.endpoints[0],d.endpoints[0].anchor.constructor==jsPlumb.DynamicAnchor]))},this.sourceChanged=function(a,b,c){if(a!==b){jsPlumbUtil.removeWithFunction(i[a],function(a){return a[0].id===c.id});var d=jsPlumbUtil.findWithFunction(i[c.targetId],function(a){return a[0].id===c.id});d>-1&&(i[c.targetId][d][0]=c,i[c.targetId][d][1]=c.endpoints[0],i[c.targetId][d][2]=c.endpoints[0].anchor.constructor==jsPlumb.DynamicAnchor),jsPlumbUtil.addToList(i,b,[c,c.endpoints[1],c.endpoints[1].anchor.constructor==jsPlumb.DynamicAnchor])}},this.rehomeEndpoint=function(a,c,d){var e=b[c]||[],f=l.getId(d);if(f!==c){var g=jsPlumbUtil.indexOf(e,a);if(g>-1){var h=e.splice(g,1)[0];j.add(h,f)}}for(var i=0;i0?this.anchors[0]:null,e=(this.anchors.length>0?0:-1,d),f=this,g=function(a,b,c,d,e){var f=d[0]+a.x*e[0],g=d[1]+a.y*e[1],h=d[0]+e[0]/2,i=d[1]+e[1]/2;return Math.sqrt(Math.pow(b-f,2)+Math.pow(c-g,2))+Math.sqrt(Math.pow(h-f,2)+Math.pow(i-g,2))},h=b.selector||function(a,b,c,d,e){for(var f=c[0]+d[0]/2,h=c[1]+d[1]/2,i=-1,j=1/0,k=0;kl&&(i=k+0,j=l)}return e[i]};this.compute=function(a){var b=a.xy,c=a.wh,g=a.timestamp,i=a.txy,j=a.twh;this.timestamp=g;var k=f.getUserDefinedLocation();return null!=k?k:this.locked||null==i||null==j?d.compute(a):(a.timestamp=null,d=h(b,c,i,j,this.anchors),this.x=d.x,this.y=d.y,d!=e&&this.fire("anchorChanged",d),e=d,d.compute(a))},this.getCurrentLocation=function(a){return this.getUserDefinedLocation()||(null!=d?d.getCurrentLocation(a):null)},this.getOrientation=function(a){return null!=d?d.getOrientation(a):[0,0]},this.over=function(a,b){null!=d&&d.over(a,b)},this.out=function(){null!=d&&d.out()},this.getCssClass=function(){return d&&d.getCssClass()||""}},jsPlumbUtil.extend(jsPlumb.DynamicAnchor,jsPlumb.Anchor);var b=function(a,b,c,d,e,f){jsPlumb.Anchors[e]=function(g){var h=g.jsPlumbInstance.makeAnchor([a,b,c,d,0,0],g.elementId,g.jsPlumbInstance);return h.type=e,f&&f(h,g),h}};b(.5,0,0,-1,"TopCenter"),b(.5,1,0,1,"BottomCenter"),b(0,.5,-1,0,"LeftMiddle"),b(1,.5,1,0,"RightMiddle"),b(.5,0,0,-1,"Top"),b(.5,1,0,1,"Bottom"),b(0,.5,-1,0,"Left"),b(1,.5,1,0,"Right"),b(.5,.5,0,0,"Center"),b(1,0,0,-1,"TopRight"),b(1,1,0,1,"BottomRight"),b(0,0,0,-1,"TopLeft"),b(0,1,0,1,"BottomLeft"),jsPlumb.Defaults.DynamicAnchors=function(a){return a.jsPlumbInstance.makeAnchors(["TopCenter","RightMiddle","BottomCenter","LeftMiddle"],a.elementId,a.jsPlumbInstance)},jsPlumb.Anchors.AutoDefault=function(a){var b=a.jsPlumbInstance.makeDynamicAnchor(jsPlumb.Defaults.DynamicAnchors(a));return b.type="AutoDefault",b};var c=function(a,b){jsPlumb.Anchors[a]=function(c){var d=c.jsPlumbInstance.makeAnchor(["Continuous",{faces:b}],c.elementId,c.jsPlumbInstance);return d.type=a,d}};jsPlumb.Anchors.Continuous=function(a){return a.jsPlumbInstance.continuousAnchorFactory.get(a)},c("ContinuousLeft",["left"]),c("ContinuousTop",["top"]),c("ContinuousBottom",["bottom"]),c("ContinuousRight",["right"]),b(0,0,0,0,"Assign",function(a,b){var c=b.position||"Fixed";a.positionFinder=c.constructor==String?b.jsPlumbInstance.AnchorPositionFinders[c]:c,a.constructorParams=b}),jsPlumbInstance.prototype.AnchorPositionFinders={Fixed:function(a,b,c){return[(a.left-b.left)/c[0],(a.top-b.top)/c[1]]},Grid:function(a,b,c,d){var e=a.left-b.left,f=a.top-b.top,g=c[0]/d.grid[0],h=c[1]/d.grid[1],i=Math.floor(e/g),j=Math.floor(f/h);return[(i*g+g/2)/c[0],(j*h+h/2)/c[1]]}},jsPlumb.Anchors.Perimeter=function(a){a=a||{};var b=a.anchorCount||60,c=a.shape;if(!c)throw new Error("no shape supplied to Perimeter Anchor type");var d=function(){for(var a=.5,c=2*Math.PI/b,d=0,e=[],f=0;b>f;f++){var g=a+a*Math.sin(d),h=a+a*Math.cos(d);e.push([g,h,0,0]),d+=c}return e},e=function(a){for(var c=b/a.length,d=[],e=function(a,e,f,g,h){c=b*h;for(var i=(f-a)/c,j=(g-e)/c,k=0;c>k;k++)d.push([a+i*k,e+j*k,0,0])},f=0;f0?a:b+a:a*b;return Biltong.pointOnLine({x:e,y:g},{x:f,y:h},d)}return{x:f,y:h}}return{x:e,y:g}},this.gradientAtPoint=function(){return c},this.pointAlongPathFrom=function(a,b,c){var d=this.pointOnPath(a,c),i=0>=b?{x:e,y:g}:{x:f,y:h};return 0>=b&&Math.abs(b)>1&&(b*=-1),Biltong.pointOnLine(d,i,b)};var j=function(a,b,c){return c>=Math.min(a,b)&&c<=Math.max(a,b)},k=function(a,b,c){return Math.abs(c-a)a-b?b:i>c-a?c:a};this.pointOnPath=function(b,d){if(0===b)return{x:this.x1,y:this.y1,theta:this.startAngle};if(1==b)return{x:this.x2,y:this.y2,theta:this.endAngle};d&&(b/=h);var e=c(this,b),f=a.cx+a.r*Math.cos(e),g=a.cy+a.r*Math.sin(e);return{x:j(f),y:j(g),theta:e}},this.gradientAtPoint=function(b,c){var d=this.pointOnPath(b,c),e=Biltong.normal([a.cx,a.cy],[d.x,d.y]);return this.anticlockwise||1/0!=e&&e!=-1/0||(e*=-1),e},this.pointAlongPathFrom=function(b,c,d){var e=this.pointOnPath(b,d),g=2*(c/f)*Math.PI,h=this.anticlockwise?-1:1,i=e.theta+h*g,j=a.cx+this.radius*Math.cos(i),k=a.cy+this.radius*Math.sin(i);return{x:j,y:k}}},Bezier:function(a){var b=(jsPlumb.Segments.AbstractSegment.apply(this,arguments),[{x:a.x1,y:a.y1},{x:a.cp1x,y:a.cp1y},{x:a.cp2x,y:a.cp2y},{x:a.x2,y:a.y2}]),c={minX:Math.min(a.x1,a.x2,a.cp1x,a.cp2x),minY:Math.min(a.y1,a.y2,a.cp1y,a.cp2y),maxX:Math.max(a.x1,a.x2,a.cp1x,a.cp2x),maxY:Math.max(a.y1,a.y2,a.cp1y,a.cp2y)};this.type="Bezier";var d=function(a,b,c){return c&&(b=jsBezier.locationAlongCurveFrom(a,b>0?0:1,b)),b};this.pointOnPath=function(a,c){return a=d(b,a,c),jsBezier.pointOnCurve(b,a)},this.gradientAtPoint=function(a,c){return a=d(b,a,c),jsBezier.gradientAtPoint(b,a)},this.pointAlongPathFrom=function(a,c,e){return a=d(b,a,e),jsBezier.pointAlongCurveFrom(b,a,c)},this.getLength=function(){return jsBezier.getLength(b)},this.getBounds=function(){return c}}};var a=function(){this.resetBounds=function(){this.bounds={minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0}},this.resetBounds()};jsPlumb.Connectors.AbstractConnector=function(b){a.apply(this,arguments);var c=[],d=0,e=[],f=[],g=b.stub||0,h=jsPlumbUtil.isArray(g)?g[0]:g,i=jsPlumbUtil.isArray(g)?g[1]:g,j=b.gap||0,k=jsPlumbUtil.isArray(j)?j[0]:j,l=jsPlumbUtil.isArray(j)?j[1]:j,m=null,n=!1,o=null;this.getPath=function(){},this.setPath=function(){},this.findSegmentForPoint=function(a,b){for(var d={d:1/0,s:null,x:null,y:null,l:null},e=0;e0?a/d:(d+a)/d);for(var g=e.length-1,h=1,i=0;i=a){g=i,h=1==a?1:0===a?0:(a-e[i][0])/f[i];break}return{segment:c[g],proportion:h,index:g}},r=function(a,b,e){if(e.x1!=e.x2||e.y1!=e.y2){var f=new jsPlumb.Segments[b](e);c.push(f),d+=f.getLength(),a.updateBounds(f)}},s=function(){d=c.length=e.length=f.length=0};this.setSegments=function(a){m=[],d=0;for(var b=0;bo?0:1,q=[1,0][p];f=[],g=[],f[p]=a.sourcePos[p]>a.targetPos[p]?-1:1,g[p]=a.sourcePos[p]>a.targetPos[p]?1:-1,f[q]=0,g[q]=0}var r=c?n+k*f[0]:k*f[0],s=d?o+k*f[1]:k*f[1],t=c?l*g[0]:n+l*g[0],u=d?l*g[1]:o+l*g[1],v=f[0]*g[0]+f[1]*g[1],w={sx:r,sy:s,tx:t,ty:u,lw:e,xSpan:Math.abs(t-r),ySpan:Math.abs(u-s),mx:(r+t)/2,my:(s+u)/2,so:f,to:g,x:j,y:m,w:n,h:o,segment:b,startStubX:r+f[0]*h,startStubY:s+f[1]*h,endStubX:t+g[0]*i,endStubY:u+g[1]*i,isXGreaterThanStubTimes2:Math.abs(r-t)>h+i,isYGreaterThanStubTimes2:Math.abs(s-u)>h+i,opposite:-1==v,perpendicular:0===v,orthogonal:1==v,sourceAxis:0===f[0]?"y":"x",points:[j,m,n,o,r,s,t,u]};return w.anchorOrientation=w.opposite?"opposite":w.orthogonal?"orthogonal":"perpendicular",w};return this.getSegments=function(){return c},this.updateBounds=function(a){var b=a.getBounds();this.bounds.minX=Math.min(this.bounds.minX,b.minX),this.bounds.maxX=Math.max(this.bounds.maxX,b.maxX),this.bounds.minY=Math.min(this.bounds.minY,b.minY),this.bounds.maxY=Math.max(this.bounds.maxY,b.maxY)},this.pointOnPath=function(a,b){var c=q(a,b);return c.segment&&c.segment.pointOnPath(c.proportion,!1)||[0,0]},this.gradientAtPoint=function(a,b){var c=q(a,b);return c.segment&&c.segment.gradientAtPoint(c.proportion,!1)||0},this.pointAlongPathFrom=function(a,b,c){var d=q(a,c);return d.segment&&d.segment.pointAlongPathFrom(d.proportion,b,!1)||[0,0]},this.compute=function(a){n||(o=t.call(this,a)),s(),this._compute(o,a),this.x=o.points[0],this.y=o.points[1],this.w=o.points[2],this.h=o.points[3],this.segment=o.segment,p()},{addSegment:r,prepareCompute:t,sourceStub:h,targetStub:i,maxStub:Math.max(h,i),sourceGap:k,targetGap:l,maxGap:Math.max(k,l)}},jsPlumbUtil.extend(jsPlumb.Connectors.AbstractConnector,a);var b=jsPlumb.Connectors.Straight=function(){this.type="Straight";var a=jsPlumb.Connectors.AbstractConnector.apply(this,arguments);this._compute=function(b){a.addSegment(this,"Straight",{x1:b.sx,y1:b.sy,x2:b.startStubX,y2:b.startStubY}),a.addSegment(this,"Straight",{x1:b.startStubX,y1:b.startStubY,x2:b.endStubX,y2:b.endStubY}),a.addSegment(this,"Straight",{x1:b.endStubX,y1:b.endStubY,x2:b.tx,y2:b.ty})}};jsPlumbUtil.extend(jsPlumb.Connectors.Straight,jsPlumb.Connectors.AbstractConnector),jsPlumb.registerConnectorType(b,"Straight"),jsPlumb.Endpoints.AbstractEndpoint=function(b){a.apply(this,arguments);var c=this.compute=function(){var a=this._compute.apply(this,arguments);return this.x=a[0],this.y=a[1],this.w=a[2],this.h=a[3],this.bounds.minX=this.x,this.bounds.minY=this.y,this.bounds.maxX=this.x+this.w,this.bounds.maxY=this.y+this.h,a};return{compute:c,cssClass:b.cssClass}},jsPlumbUtil.extend(jsPlumb.Endpoints.AbstractEndpoint,a),jsPlumb.Endpoints.Dot=function(a){this.type="Dot",jsPlumb.Endpoints.AbstractEndpoint.apply(this,arguments),a=a||{},this.radius=a.radius||10,this.defaultOffset=.5*this.radius,this.defaultInnerRadius=this.radius/3,this._compute=function(a,b,c){this.radius=c.radius||this.radius;var d=a[0]-this.radius,e=a[1]-this.radius,f=2*this.radius,g=2*this.radius;if(c.strokeStyle){var h=c.lineWidth||1;d-=h,e-=h,f+=2*h,g+=2*h}return[d,e,f,g,this.radius]}},jsPlumbUtil.extend(jsPlumb.Endpoints.Dot,jsPlumb.Endpoints.AbstractEndpoint),jsPlumb.Endpoints.Rectangle=function(a){this.type="Rectangle",jsPlumb.Endpoints.AbstractEndpoint.apply(this,arguments),a=a||{},this.width=a.width||20,this.height=a.height||20,this._compute=function(a,b,c){var d=c.width||this.width,e=c.height||this.height,f=a[0]-d/2,g=a[1]-e/2;return[f,g,d,e]}},jsPlumbUtil.extend(jsPlumb.Endpoints.Rectangle,jsPlumb.Endpoints.AbstractEndpoint);var c=function(){jsPlumb.DOMElementComponent.apply(this,arguments),this._jsPlumb.displayElements=[]};jsPlumbUtil.extend(c,jsPlumb.DOMElementComponent,{getDisplayElements:function(){return this._jsPlumb.displayElements},appendDisplayElement:function(a){this._jsPlumb.displayElements.push(a)}}),jsPlumb.Endpoints.Image=function(a){this.type="Image",c.apply(this,arguments),jsPlumb.Endpoints.AbstractEndpoint.apply(this,arguments);var b=a.onload,d=a.src||a.url,e=a.cssClass?" "+a.cssClass:"";this._jsPlumb.img=new Image,this._jsPlumb.ready=!1,this._jsPlumb.initialized=!1,this._jsPlumb.deleted=!1,this._jsPlumb.widthToUse=a.width,this._jsPlumb.heightToUse=a.height,this._jsPlumb.endpoint=a.endpoint,this._jsPlumb.img.onload=function(){null!=this._jsPlumb&&(this._jsPlumb.ready=!0,this._jsPlumb.widthToUse=this._jsPlumb.widthToUse||this._jsPlumb.img.width,this._jsPlumb.heightToUse=this._jsPlumb.heightToUse||this._jsPlumb.img.height,b&&b(this))}.bind(this),this._jsPlumb.endpoint.setImage=function(a,c){var d=a.constructor==String?a:a.src;b=c,this._jsPlumb.img.src=d,null!=this.canvas&&this.canvas.setAttribute("src",this._jsPlumb.img.src)}.bind(this),this._jsPlumb.endpoint.setImage(d,b),this._compute=function(a){return this.anchorPoint=a,this._jsPlumb.ready?[a[0]-this._jsPlumb.widthToUse/2,a[1]-this._jsPlumb.heightToUse/2,this._jsPlumb.widthToUse,this._jsPlumb.heightToUse]:[0,0,0,0]},this.canvas=document.createElement("img"),this.canvas.style.margin=0,this.canvas.style.padding=0,this.canvas.style.outline=0,this.canvas.style.position="absolute",this.canvas.className=this._jsPlumb.instance.endpointClass+e,this._jsPlumb.widthToUse&&this.canvas.setAttribute("width",this._jsPlumb.widthToUse),this._jsPlumb.heightToUse&&this.canvas.setAttribute("height",this._jsPlumb.heightToUse),this._jsPlumb.instance.appendElement(this.canvas),this.actuallyPaint=function(){if(!this._jsPlumb.deleted){this._jsPlumb.initialized||(this.canvas.setAttribute("src",this._jsPlumb.img.src),this.appendDisplayElement(this.canvas),this._jsPlumb.initialized=!0);var a=this.anchorPoint[0]-this._jsPlumb.widthToUse/2,b=this.anchorPoint[1]-this._jsPlumb.heightToUse/2;jsPlumbUtil.sizeElement(this.canvas,a,b,this._jsPlumb.widthToUse,this._jsPlumb.heightToUse)}},this.paint=function(a,b){null!=this._jsPlumb&&(this._jsPlumb.ready?this.actuallyPaint(a,b):window.setTimeout(function(){this.paint(a,b)}.bind(this),200))}},jsPlumbUtil.extend(jsPlumb.Endpoints.Image,[c,jsPlumb.Endpoints.AbstractEndpoint],{cleanup:function(){this._jsPlumb.deleted=!0,this.canvas&&this.canvas.parentNode.removeChild(this.canvas),this.canvas=null}}),jsPlumb.Endpoints.Blank=function(){jsPlumb.Endpoints.AbstractEndpoint.apply(this,arguments),this.type="Blank",c.apply(this,arguments),this._compute=function(a){return[a[0],a[1],10,0]},this.canvas=document.createElement("div"),this.canvas.style.display="block",this.canvas.style.width="1px",this.canvas.style.height="1px",this.canvas.style.background="transparent",this.canvas.style.position="absolute",this.canvas.className=this._jsPlumb.endpointClass,jsPlumb.appendElement(this.canvas),this.paint=function(){jsPlumbUtil.sizeElement(this.canvas,this.x,this.y,this.w,this.h)}},jsPlumbUtil.extend(jsPlumb.Endpoints.Blank,[jsPlumb.Endpoints.AbstractEndpoint,c],{cleanup:function(){this.canvas&&this.canvas.parentNode&&this.canvas.parentNode.removeChild(this.canvas)}}),jsPlumb.Endpoints.Triangle=function(a){this.type="Triangle",jsPlumb.Endpoints.AbstractEndpoint.apply(this,arguments),a=a||{},a.width=a.width||55,a.height=a.height||55,this.width=a.width,this.height=a.height,this._compute=function(a,b,c){var d=c.width||self.width,e=c.height||self.height,f=a[0]-d/2,g=a[1]-e/2;return[f,g,d,e]}};var d=jsPlumb.Overlays.AbstractOverlay=function(a){this.visible=!0,this.isAppendedAtTopLevel=!0,this.component=a.component,this.loc=null==a.location?.5:a.location,this.endpointLoc=null==a.endpointLocation?[.5,.5]:a.endpointLocation};d.prototype={cleanup:function(){this.component=null,this.canvas=null,this.endpointLoc=null},setVisible:function(a){this.visible=a,this.component.repaint()},isVisible:function(){return this.visible},hide:function(){this.setVisible(!1)},show:function(){this.setVisible(!0)},incrementLocation:function(a){this.loc+=a,this.component.repaint()},setLocation:function(a){this.loc=a,this.component.repaint()},getLocation:function(){return this.loc}},jsPlumb.Overlays.Arrow=function(a){this.type="Arrow",d.apply(this,arguments),this.isAppendedAtTopLevel=!1,a=a||{};var b=jsPlumbUtil,c=Biltong;this.length=a.length||20,this.width=a.width||20,this.id=a.id;var e=(a.direction||1)<0?-1:1,f=a.paintStyle||{lineWidth:1},g=a.foldback||.623;this.computeMaxSize=function(){return 1.5*self.width},this.draw=function(a,d){var h,i,j,k,l;if(a.pointAlongPathFrom){if(b.isString(this.loc)||this.loc>1||this.loc<0){var m=parseInt(this.loc,10),n=this.loc<0?1:0;h=a.pointAlongPathFrom(n,m,!1),i=a.pointAlongPathFrom(n,m-e*this.length/2,!1),j=c.pointOnLine(h,i,this.length)}else if(1==this.loc){if(h=a.pointOnPath(this.loc),i=a.pointAlongPathFrom(this.loc,-this.length),j=c.pointOnLine(h,i,this.length),-1==e){var o=j;j=h,h=o}}else if(0===this.loc){if(j=a.pointOnPath(this.loc),i=a.pointAlongPathFrom(this.loc,this.length),h=c.pointOnLine(j,i,this.length),-1==e){var p=j;j=h,h=p}}else h=a.pointAlongPathFrom(this.loc,e*this.length/2),i=a.pointOnPath(this.loc),j=c.pointOnLine(h,i,this.length);k=c.perpendicularLineTo(h,j,this.width),l=c.pointOnLine(h,j,g*this.length);var q={hxy:h,tail:k,cxy:l},r=f.strokeStyle||d.strokeStyle,s=f.fillStyle||d.strokeStyle,t=f.lineWidth||d.lineWidth,u={component:a,d:q,lineWidth:t,strokeStyle:r,fillStyle:s,minX:Math.min(h.x,k[0].x,k[1].x),maxX:Math.max(h.x,k[0].x,k[1].x),minY:Math.min(h.y,k[0].y,k[1].y),maxY:Math.max(h.y,k[0].y,k[1].y)};return u}return{component:a,minX:0,maxX:0,minY:0,maxY:0}}},jsPlumbUtil.extend(jsPlumb.Overlays.Arrow,d),jsPlumb.Overlays.PlainArrow=function(a){a=a||{};var b=jsPlumb.extend(a,{foldback:1});jsPlumb.Overlays.Arrow.call(this,b),this.type="PlainArrow"},jsPlumbUtil.extend(jsPlumb.Overlays.PlainArrow,jsPlumb.Overlays.Arrow),jsPlumb.Overlays.Diamond=function(a){a=a||{};var b=a.length||40,c=jsPlumb.extend(a,{length:b/2,foldback:2});jsPlumb.Overlays.Arrow.call(this,c),this.type="Diamond"},jsPlumbUtil.extend(jsPlumb.Overlays.Diamond,jsPlumb.Overlays.Arrow);var e=function(a,b){return(null==a._jsPlumb.cachedDimensions||b)&&(a._jsPlumb.cachedDimensions=a.getDimensions()),a._jsPlumb.cachedDimensions},f=function(a){jsPlumb.DOMElementComponent.apply(this,arguments),d.apply(this,arguments),this.id=a.id,this._jsPlumb.div=null,this._jsPlumb.initialised=!1,this._jsPlumb.component=a.component,this._jsPlumb.cachedDimensions=null,this._jsPlumb.create=a.create,this._jsPlumb.initiallyInvisible=a.visible===!1,this.getElement=function(){if(null==this._jsPlumb.div){var b=this._jsPlumb.div=jsPlumb.getDOMElement(this._jsPlumb.create(this._jsPlumb.component)); b.style.position="absolute";var c=this._jsPlumb.instance.overlayClass+" "+(this.cssClass?this.cssClass:a.cssClass?a.cssClass:"");b.className=c,this._jsPlumb.instance.appendElement(b),this._jsPlumb.instance.getId(b),this.canvas=b;var d="translate(-50%, -50%)";b.style.webkitTransform=d,b.style.mozTransform=d,b.style.msTransform=d,b.style.oTransform=d,b.style.transform=d,b._jsPlumb=a.component,a.visible===!1&&(b.style.display="none")}return this._jsPlumb.div},this.draw=function(a,b,c){var d=e(this);if(null!=d&&2==d.length){var f={x:0,y:0};if(c)f={x:c[0],y:c[1]};else if(a.pointOnPath){var g=this.loc,h=!1;(jsPlumbUtil.isString(this.loc)||this.loc<0||this.loc>1)&&(g=parseInt(this.loc,10),h=!0),f=a.pointOnPath(g,h)}else{var i=this.loc.constructor==Array?this.loc:this.endpointLoc;f={x:i[0]*a.w,y:i[1]*a.h}}var j=f.x-d[0]/2,k=f.y-d[1]/2;return{component:a,d:{minx:j,miny:k,td:d,cxy:f},minX:j,maxX:j+d[0],minY:k,maxY:k+d[1]}}return{minX:0,maxX:0,minY:0,maxY:0}}};jsPlumbUtil.extend(f,[jsPlumb.DOMElementComponent,d],{getDimensions:function(){return jsPlumbUtil.oldIE?jsPlumb.getSize(this.getElement()):[1,1]},setVisible:function(a){this._jsPlumb.div.style.display=a?"block":"none",a&&this._jsPlumb.initiallyInvisible&&(e(this,!0),this.component.repaint(),this._jsPlumb.initiallyInvisible=!1)},clearCachedDimensions:function(){this._jsPlumb.cachedDimensions=null},cleanup:function(){null!=this._jsPlumb.div&&this._jsPlumb.instance.removeElement(this._jsPlumb.div)},computeMaxSize:function(){var a=e(this);return Math.max(a[0],a[1])},paint:function(a){this._jsPlumb.initialised||(this.getElement(),a.component.appendDisplayElement(this._jsPlumb.div),this._jsPlumb.initialised=!0),this._jsPlumb.div.style.left=a.component.x+a.d.minx+"px",this._jsPlumb.div.style.top=a.component.y+a.d.miny+"px"}}),jsPlumb.Overlays.Custom=function(){this.type="Custom",f.apply(this,arguments)},jsPlumbUtil.extend(jsPlumb.Overlays.Custom,f),jsPlumb.Overlays.GuideLines=function(){var a=this;a.length=50,a.lineWidth=5,this.type="GuideLines",d.apply(this,arguments),jsPlumb.jsPlumbUIComponent.apply(this,arguments),this.draw=function(b){var c=b.pointAlongPathFrom(a.loc,a.length/2),d=b.pointOnPath(a.loc),e=Biltong.pointOnLine(c,d,a.length),f=Biltong.perpendicularLineTo(c,e,40),g=Biltong.perpendicularLineTo(e,c,20);return{connector:b,head:c,tail:e,headLine:g,tailLine:f,minX:Math.min(c.x,e.x,g[0].x,g[1].x),minY:Math.min(c.y,e.y,g[0].y,g[1].y),maxX:Math.max(c.x,e.x,g[0].x,g[1].x),maxY:Math.max(c.y,e.y,g[0].y,g[1].y)}}},jsPlumb.Overlays.Label=function(a){this.labelStyle=a.labelStyle,this.cssClass=null!=this.labelStyle?this.labelStyle.cssClass:null;var b=jsPlumb.extend({create:function(){return document.createElement("div")}},a);if(jsPlumb.Overlays.Custom.call(this,b),this.type="Label",this.label=a.label||"",this.labelText=null,this.labelStyle){var c=this.getElement();if(this.labelStyle.font=this.labelStyle.font||"12px sans-serif",c.style.font=this.labelStyle.font,c.style.color=this.labelStyle.color||"black",this.labelStyle.fillStyle&&(c.style.background=this.labelStyle.fillStyle),this.labelStyle.borderWidth>0){var d=this.labelStyle.borderStyle?this.labelStyle.borderStyle:"black";c.style.border=this.labelStyle.borderWidth+"px solid "+d}this.labelStyle.padding&&(c.style.padding=this.labelStyle.padding)}},jsPlumbUtil.extend(jsPlumb.Overlays.Label,jsPlumb.Overlays.Custom,{cleanup:function(){this.div=null,this.label=null,this.labelText=null,this.cssClass=null,this.labelStyle=null},getLabel:function(){return this.label},setLabel:function(a){this.label=a,this.labelText=null,this.clearCachedDimensions(),this.update(),this.component.repaint()},getDimensions:function(){return this.update(),f.prototype.getDimensions.apply(this,arguments)},update:function(){if("function"==typeof this.label){var a=this.label(this);this.getElement().innerHTML=a.replace(/\r\n/g,"
")}else null==this.labelText&&(this.labelText=this.label,this.getElement().innerHTML=this.labelText.replace(/\r\n/g,"
"))}})}(),function(){"use strict";var a=function(a){this.type="Flowchart",a=a||{},a.stub=null==a.stub?30:a.stub;var b,c=jsPlumb.Connectors.AbstractConnector.apply(this,arguments),d=null==a.midpoint?.5:a.midpoint,e=[],f=(a.grid,a.alwaysRespectStubs),g=null,h=null,i=null,j=null!=a.cornerRadius?a.cornerRadius:0,k=function(a){return 0>a?-1:0===a?0:1},l=function(a,b,c,d){if(h!=b||i!=c){var e=null==h?d.sx:h,f=null==i?d.sy:i,g=e==b?"v":"h",j=k(b-e),l=k(c-f);h=b,i=c,a.push([e,f,b,c,g,j,l])}},m=function(a){return Math.sqrt(Math.pow(a[0]-a[2],2)+Math.pow(a[1]-a[3],2))},n=function(a){var b=[];return b.push.apply(b,a),b},o=function(a,b,d){for(var e,f,g=0;g0&&e[4]!=f[4]){var h=Math.min(j,m(e),m(f));e[2]-=e[5]*h,e[3]-=e[6]*h,f[0]+=f[5]*h,f[1]+=f[6]*h;var i=e[6]==f[5]&&1==f[5]||e[6]==f[5]&&0===f[5]&&e[5]!=f[6]||e[6]==f[5]&&-1==f[5],k=f[1]>e[3]?1:-1,l=f[0]>e[2]?1:-1,o=k==l,p=o&&i||!o&&!i?f[0]:e[2],q=o&&i||!o&&!i?e[3]:f[1];c.addSegment(a,"Straight",{x1:e[0],y1:e[1],x2:e[2],y2:e[3]}),c.addSegment(a,"Arc",{r:h,x1:e[2],y1:e[3],x2:f[0],y2:f[1],cx:p,cy:q,ac:i})}else{var r=e[2]==e[0]?0:e[2]>e[0]?d.lw/2:-(d.lw/2),s=e[3]==e[1]?0:e[3]>e[1]?d.lw/2:-(d.lw/2);c.addSegment(a,"Straight",{x1:e[0]-r,y1:e[1]-s,x2:e[2]+r,y2:e[3]+s})}e=f}null!=f&&c.addSegment(a,"Straight",{x1:f[0],y1:f[1],x2:f[2],y2:f[3]})};this.setSegments=function(a){g=a},this.isEditable=function(){return!0},this.getOriginalSegments=function(){return g||e},this._compute=function(a,j){if(j.clearEdits&&(g=null),null!=g)return o(this,g,a),void 0;e=[],h=null,i=null,b=null;var k=a.startStubX+(a.endStubX-a.startStubX)*d,m=a.startStubY+(a.endStubY-a.startStubY)*d,n={x:[0,1],y:[1,0]},p=function(){return[a.startStubX,a.startStubY,a.endStubX,a.endStubY]},q={perpendicular:p,orthogonal:p,opposite:function(b){var c=a,d="x"==b?0:1,e={x:function(){return 1==c.so[d]&&(c.startStubX>c.endStubX&&c.tx>c.startStubX||c.sx>c.endStubX&&c.tx>c.sx)||-1==c.so[d]&&(c.startStubXc.endStubY&&c.ty>c.startStubY||c.sy>c.endStubY&&c.ty>c.sy)||-1==c.so[d]&&(c.startStubYj[b][0],s=e[b][p][0],t=e[b][p][1],u=d[b][p][q];return c.segment==u[3]||c.segment==u[2]&&r?f[b]:c.segment==u[2]&&s>t?g[b]:c.segment==u[2]&&t>=s||c.segment==u[1]&&!r?i[b]:c.segment==u[0]||c.segment==u[1]&&r?h[b]:void 0},orthogonal:function(b,c,d,e,f){var g=a,h={x:-1==g.so[0]?Math.min(c,e):Math.max(c,e),y:-1==g.so[1]?Math.min(c,e):Math.max(c,e)}[b];return{x:[[h,d],[h,f],[e,f]],y:[[d,h],[f,h],[f,e]]}[b]},opposite:function(b,d,e,f){var g=a,h={x:"y",y:"x"}[b],i={x:"height",y:"width"}[b],l=g["is"+b.toUpperCase()+"GreaterThanStubTimes2"];if(j.sourceEndpoint.elementId==j.targetEndpoint.elementId){var n=e+(1-j.sourceEndpoint.anchor[h])*j.sourceInfo[i]+c.maxStub;return{x:[[d,n],[f,n]],y:[[n,d],[n,f]]}[b]}return!l||1==g.so[t]&&d>f||-1==g.so[t]&&f>d?{x:[[d,m],[f,m]],y:[[k,d],[k,f]]}[b]:1==g.so[t]&&f>d||-1==g.so[t]&&d>f?{x:[[k,g.sy],[k,g.ty]],y:[[g.sx,m],[g.tx,m]]}[b]:void 0}},s=q[a.anchorOrientation](a.sourceAxis),t="x"==a.sourceAxis?0:1,u="x"==a.sourceAxis?1:0,v=s[t],w=s[u],x=s[t+2],y=s[u+2];l(e,s[0],s[1],a);var z=r[a.anchorOrientation](a.sourceAxis,v,w,x,y);if(z)for(var A=0;A=a&&b>=d?1:c>=a&&d>=b?2:a>=c&&d>=b?3:4},b=function(a,b,c,d,e,f,g,h,i){return i>=h?[a,b]:1===c?d[3]<=0&&e[3]>=1?[a+(d[2]<.5?-1*f:f),b]:d[2]>=1&&e[2]<=0?[a,b+(d[3]<.5?-1*g:g)]:[a+-1*f,b+-1*g]:2===c?d[3]>=1&&e[3]<=0?[a+(d[2]<.5?-1*f:f),b]:d[2]>=1&&e[2]<=0?[a,b+(d[3]<.5?-1*g:g)]:[a+1*f,b+-1*g]:3===c?d[3]>=1&&e[3]<=0?[a+(d[2]<.5?-1*f:f),b]:d[2]<=0&&e[2]>=1?[a,b+(d[3]<.5?-1*g:g)]:[a+-1*f,b+-1*g]:4===c?d[3]<=0&&e[3]>=1?[a+(d[2]<.5?-1*f:f),b]:d[2]<=0&&e[2]>=1?[a,b+(d[3]<.5?-1*g:g)]:[a+1*f,b+-1*g]:void 0},c=function(c){c=c||{},this.type="StateMachine";var d=jsPlumb.Connectors.AbstractConnector.apply(this,arguments),e=c.curviness||10,f=c.margin||5,g=c.proximityLimit||80,h=c.orientation&&"clockwise"===c.orientation,i=c.loopbackRadius||25,j=c.showLoopback!==!1;this._compute=function(c,k){var l=Math.abs(k.sourcePos[0]-k.targetPos[0]),m=Math.abs(k.sourcePos[1]-k.targetPos[1]);if(Math.min(k.sourcePos[0],k.targetPos[0]),Math.min(k.sourcePos[1],k.targetPos[1]),j&&k.sourceEndpoint.elementId===k.targetEndpoint.elementId){var n=k.sourcePos[0],o=(k.sourcePos[0],k.sourcePos[1]-f),p=(k.sourcePos[1]-f,n),q=o-i,r=2*i,s=2*i,t=p-i,u=q-i;c.points[0]=t,c.points[1]=u,c.points[2]=r,c.points[3]=s,d.addSegment(this,"Arc",{loopback:!0,x1:n-t+4,y1:o-u,startAngle:0,endAngle:2*Math.PI,r:i,ac:!h,x2:n-t-4,y2:o-u,cx:p-t,cy:q-u})}else{var v=k.sourcePos[0]c?a.insertBefore(b,a.childNodes[c]):a.appendChild(b)};jsPlumbUtil.svg={node:q,attr:p,pos:r};var w=function(a){var b=a.pointerEventsSpec||"all",c={};jsPlumb.jsPlumbUIComponent.apply(this,a.originalArgs),this.canvas=null,this.path=null,this.svg=null,this.bgCanvas=null;var d=a.cssClass+" "+(a.originalArgs[0].cssClass||""),e={style:"",width:0,height:0,"pointer-events":b,position:"absolute"};this.svg=q("svg",e),a.useDivWrapper?(this.canvas=document.createElement("div"),this.canvas.style.position="absolute",jsPlumbUtil.sizeElement(this.canvas,0,0,1,1),this.canvas.className=d):(p(this.svg,{"class":d}),this.canvas=this.svg),a._jsPlumb.appendElement(this.canvas,a.originalArgs[0].parent),a.useDivWrapper&&this.canvas.appendChild(this.svg);var f=[this.canvas];return this.getDisplayElements=function(){return f},this.appendDisplayElement=function(a){f.push(a)},this.paint=function(b,d,e){if(null!=b){var f,g=[this.x,this.y],h=[this.w,this.h];null!=e&&(e.xmin<0&&(g[0]+=e.xmin),e.ymin<0&&(g[1]+=e.ymin),h[0]=e.xmax+(e.xmin<0?-e.xmin:0),h[1]=e.ymax+(e.ymin<0?-e.ymin:0)),a.useDivWrapper?(jsPlumbUtil.sizeElement(this.canvas,g[0],g[1],h[0],h[1]),g[0]=0,g[1]=0,f=r([0,0])):f=r([g[0],g[1]]),c.paint.apply(this,arguments),p(this.svg,{style:f,width:h[0],height:h[1]})}},{renderer:c}};jsPlumbUtil.extend(w,jsPlumb.jsPlumbUIComponent,{cleanup:function(){this.canvas&&this.canvas.parentNode&&this.canvas.parentNode.removeChild(this.canvas),this.svg=null,this.canvas=null,this.path=null,this.group=null},setVisible:function(a){this.canvas&&(this.canvas.style.display=a?"block":"none")}}),jsPlumb.ConnectorRenderers.svg=function(a){var b=this,c=w.apply(this,[{cssClass:a._jsPlumb.connectorClass,originalArgs:arguments,pointerEventsSpec:"none",_jsPlumb:a._jsPlumb}]);c.renderer.paint=function(c,d,e){var f=b.getSegments(),g="",h=[0,0];if(e.xmin<0&&(h[0]=-e.xmin),e.ymin<0&&(h[1]=-e.ymin),f.length>0){for(var i=0;iMath.PI?1:0,d=a.anticlockwise?0:1;return"M"+a.x1+" "+a.y1+" A "+a.radius+" "+b.r+" 0 "+c+","+d+" "+a.x2+" "+a.y2}}[a.type]()}}};var x=window.SvgEndpoint=function(a){var b=w.apply(this,[{cssClass:a._jsPlumb.endpointClass,originalArgs:arguments,pointerEventsSpec:"all",useDivWrapper:!1,_jsPlumb:a._jsPlumb}]);b.renderer.paint=function(a){var b=jsPlumb.extend({},a);b.outlineColor&&(b.strokeWidth=b.outlineWidth,b.strokeStyle=jsPlumbUtil.convertStyle(b.outlineColor,!0)),null==this.node?(this.node=this.makeNode(b),this.svg.appendChild(this.node)):null!=this.updateNode&&this.updateNode(this.node),u(this.svg,this.node,b,[this.x,this.y,this.w,this.h],this),r(this.node,[this.x,this.y])}.bind(this)};jsPlumbUtil.extend(x,w),jsPlumb.Endpoints.svg.Dot=function(){jsPlumb.Endpoints.Dot.apply(this,arguments),x.apply(this,arguments),this.makeNode=function(){return q("circle",{cx:this.w/2,cy:this.h/2,r:this.radius})},this.updateNode=function(a){p(a,{cx:this.w/2,cy:this.h/2,r:this.radius})}},jsPlumbUtil.extend(jsPlumb.Endpoints.svg.Dot,[jsPlumb.Endpoints.Dot,x]),jsPlumb.Endpoints.svg.Rectangle=function(){jsPlumb.Endpoints.Rectangle.apply(this,arguments),x.apply(this,arguments),this.makeNode=function(){return q("rect",{width:this.w,height:this.h})},this.updateNode=function(a){p(a,{width:this.w,height:this.h})}},jsPlumbUtil.extend(jsPlumb.Endpoints.svg.Rectangle,[jsPlumb.Endpoints.Rectangle,x]),jsPlumb.Endpoints.svg.Image=jsPlumb.Endpoints.Image,jsPlumb.Endpoints.svg.Blank=jsPlumb.Endpoints.Blank,jsPlumb.Overlays.svg.Label=jsPlumb.Overlays.Label,jsPlumb.Overlays.svg.Custom=jsPlumb.Overlays.Custom;var y=function(a,b){a.apply(this,b),jsPlumb.jsPlumbUIComponent.apply(this,b),this.isAppendedAtTopLevel=!1,this.path=null,this.paint=function(a,d){if(a.component.svg&&d){null==this.path&&(this.path=q("path",{"pointer-events":"all"}),a.component.svg.appendChild(this.path),this.canvas=a.component.svg);var e=b&&1==b.length?b[0].cssClass||"":"",f=[0,0];d.xmin<0&&(f[0]=-d.xmin),d.ymin<0&&(f[1]=-d.ymin),p(this.path,{d:c(a.d),"class":e,stroke:a.strokeStyle?a.strokeStyle:null,fill:a.fillStyle?a.fillStyle:null,transform:"translate("+f[0]+","+f[1]+")"})}};var c=function(a){return"M"+a.hxy.x+","+a.hxy.y+" L"+a.tail[0].x+","+a.tail[0].y+" L"+a.cxy.x+","+a.cxy.y+" L"+a.tail[1].x+","+a.tail[1].y+" L"+a.hxy.x+","+a.hxy.y}};jsPlumbUtil.extend(y,[jsPlumb.jsPlumbUIComponent,jsPlumb.Overlays.AbstractOverlay],{cleanup:function(){null!=this.path&&this._jsPlumb.instance.removeElement(this.path)},setVisible:function(a){null!=this.path&&(this.path.style.display=a?"block":"none")}}),jsPlumb.Overlays.svg.Arrow=function(){y.apply(this,[jsPlumb.Overlays.Arrow,arguments])},jsPlumbUtil.extend(jsPlumb.Overlays.svg.Arrow,[jsPlumb.Overlays.Arrow,y]),jsPlumb.Overlays.svg.PlainArrow=function(){y.apply(this,[jsPlumb.Overlays.PlainArrow,arguments])},jsPlumbUtil.extend(jsPlumb.Overlays.svg.PlainArrow,[jsPlumb.Overlays.PlainArrow,y]),jsPlumb.Overlays.svg.Diamond=function(){y.apply(this,[jsPlumb.Overlays.Diamond,arguments])},jsPlumbUtil.extend(jsPlumb.Overlays.svg.Diamond,[jsPlumb.Overlays.Diamond,y]),jsPlumb.Overlays.svg.GuideLines=function(){var a,b,c=null,d=this;jsPlumb.Overlays.GuideLines.apply(this,arguments),this.paint=function(f,g){null==c&&(c=q("path"),f.connector.svg.appendChild(c),d.attachListeners(c,f.connector),d.attachListeners(c,d),a=q("path"),f.connector.svg.appendChild(a),d.attachListeners(a,f.connector),d.attachListeners(a,d),b=q("path"),f.connector.svg.appendChild(b),d.attachListeners(b,f.connector),d.attachListeners(b,d));var h=[0,0];g.xmin<0&&(h[0]=-g.xmin),g.ymin<0&&(h[1]=-g.ymin),p(c,{d:e(f.head,f.tail),stroke:"red",fill:null,transform:"translate("+h[0]+","+h[1]+")"}),p(a,{d:e(f.tailLine[0],f.tailLine[1]),stroke:"blue",fill:null,transform:"translate("+h[0]+","+h[1]+")"}),p(b,{d:e(f.headLine[0],f.headLine[1]),stroke:"green",fill:null,transform:"translate("+h[0]+","+h[1]+")"})};var e=function(a,b){return"M "+a.x+","+a.y+" L"+b.x+","+b.y}},jsPlumbUtil.extend(jsPlumb.Overlays.svg.GuideLines,jsPlumb.Overlays.GuideLines)}(),function(){"use strict";var a={"stroke-linejoin":"joinstyle",joinstyle:"joinstyle",endcap:"endcap",miterlimit:"miterlimit"},b=null;if(document.createStyleSheet&&document.namespaces){var c=[".jsplumb_vml","jsplumb\\:textbox","jsplumb\\:oval","jsplumb\\:rect","jsplumb\\:stroke","jsplumb\\:shape","jsplumb\\:group"],d="behavior:url(#default#VML);position:absolute;";b=document.createStyleSheet();for(var e=0;ed;d++)if(this[d]===a||c&&this[d]==a)return d;return-1});var a;YUI({base:"https://yui-s.yahooapis.com/"+YUI.version+"/build/"}).use("node","dd","dd-constrain","anim","node-event-simulate",function(b){a=b,a.on("domready",function(){jsPlumb.init()})});var b=function(a,b,c){var d=a[b];d||(d=[],a[b]=d),d.push(c)},c=["drag:mouseDown","drag:afterMouseDown","drag:mouseup","drag:align","drag:removeHandle","drag:addHandle","drag:removeInvalid","drag:addInvalid","drag:start","drag:end","drag:drag","drag:over","drag:enter","drag:exit","drag:drophit","drag:dropmiss","drop:over","drop:enter","drop:exit","drop:hit"],d=["tween"],e=function(a){return function(){try{return a.apply(this,arguments)}catch(b){}}},f=function(a){var b={};for(var d in a)-1==c.indexOf(d)&&(b[d]=a[d]);return b},g=function(a,b,c){for(var d in b)if(-1!=c.indexOf(d)){var f=e(b[d]);a.on(d,f)}},h={},i={},j={},k={},l=function(a,b){if(a){var c=a.get("id");if(c){var d=h[c];d&&d.hoverClass&&a[b?"addClass":"removeClass"](d.hoverClass)}}},m=null,n=function(a,b){return a.getAttribute(b)},o=function(b){if(null==b)return null;var c=null;return c="string"==typeof b?a.one("#"+b):b._node?b:a.one(b)};jsPlumb.extend(jsPlumbInstance.prototype,{doAnimate:function(b,c,e){var f=jsPlumb.extend({node:b,to:c},e),h=n(b,"id");f.duration&&jsPlumbUtil.isNumber(f.duration)&&(f.duration/=1e3),f.easing&&jsPlumbUtil.isString(f.easing)&&(a.Easing[f.easing]?f.easing=a.Easing[f.easing]:delete f.easing),f.tween=jsPlumbUtil.wrap(c.tween,function(){this.repaint(h)}.bind(this));var i=new a.Anim(f);g(i,f,d),i.run()},getSelector:function(b,c){var d=function(a){return a&&a._nodes?a._nodes:[]};return 2==arguments.length?d(o(b).all(c)):d(a.all(b))},getElementObject:o,removeElement:function(a){o(a).remove()},destroyDraggable:function(a){var b=this.getId(a),c=j[b];c&&(c.destroy(),delete j[b])},destroyDroppable:function(){},initDraggable:function(d,e,h){var k=f(e),l=this.getId(d);k.node="#"+l,e["drag:start"]=jsPlumbUtil.wrap(e["drag:start"],function(){a.one(document.body).addClass(this.dragSelectClass)}.bind(this),!1),e["drag:end"]=jsPlumbUtil.wrap(e["drag:end"],function(){a.one(document.body).removeClass(this.dragSelectClass)}.bind(this));var m=new a.DD.Drag(k),n=e.constrain2node||e.containment;if(m.el=d,n&&m.plug(a.Plugin.DDConstrained,{constrain2node:n}),h){var o=e.scope||this.Defaults.Scope;m.scope=o,b(i,o,m)}j[l]=m,g(m,e,c)},initDroppable:function(b,d){var e=f(d),i=this.getId(b);e.node="#"+i;var j=new a.DD.Drop(e);h[i]=d,d=jsPlumb.extend({},d);var m=d.scope||jsPlumb.Defaults.Scope;k[i]=m,d["drop:enter"]=jsPlumbUtil.wrap(d["drop:enter"],function(a){return a.drag.scope!==m?!0:(l(b,!0),void 0)},!0),d["drop:exit"]=jsPlumbUtil.wrap(d["drop:exit"],function(){l(b,!1)}),d["drop:hit"]=jsPlumbUtil.wrap(d["drop:hit"],function(a){return a.drag.scope!==m?!0:(l(b,!1),void 0) -},!0),g(j,d,c)},isAlreadyDraggable:function(a){return a=o(a),a.hasClass("yui3-dd-draggable")},isDragSupported:function(){return!0},isDropSupported:function(){return!0},getDragObject:function(a){return a[0].drag&&(m=a[0].drag.el),m},getDragScope:function(a){var b=this.getId(a),c=j[b];return c.scope},getDropEvent:function(a){return a[0]},getDropScope:function(a){var b=this.getId(a);return k[b]},getUIPosition:function(a,b){b=b||1;var c=a[0].currentTarget.el._node||a[0].currentTarget.el,d=jsPlumbAdapter.getOffset(c,this);return{left:d.left/b,top:d.top/b}},isDragFilterSupported:function(){return!1},setDragFilter:function(){jsPlumbUtil.log("NOT IMPLEMENTED: setDragFilter")},setElementDraggable:function(a,b){var c=this.getId(a),d=j[c];d&&d.set("lock",!b)},setDragScope:function(a,b){var c=this.getId(a),d=j[c];d&&(d.scope=b)},trigger:function(a,b,c){c.stopPropagation(),o(a).simulate(b,{pageX:c.pageX,pageY:c.pageY,clientX:c.clientX,clientY:c.clientY})},dragEvents:{start:"drag:start",stop:"drag:end",drag:"drag:drag",step:"step",over:"drop:enter",out:"drop:exit",drop:"drop:hit"},animEvents:{step:"tween",complete:"end"},stopDrag:function(){a.DD.DDM.stopDrag()},getDOMElement:function(a){return null==a?null:"string"==typeof a?document.getElementById(a):a._node?a._node:a.length?a[0]:a},getOriginalEvent:function(a){return a._event},on:function(b,c,d){for(var e=jsPlumbUtil.isString(b)||"1.6.5"==typeof b.length?[o(b)]:a.all(b)._nodes,f=0;fUnit Tests

Load Tests

+
Connections
+
Endpoints
+ diff --git a/dist/tests/loadtest-dom.html b/dist/tests/loadtest-dom.html index cc667d497..6bb4f45d1 100644 --- a/dist/tests/loadtest-dom.html +++ b/dist/tests/loadtest-dom.html @@ -2,7 +2,7 @@ - jsPlumb 1.6.5 load test harness - Vanilla + jsPlumb 1.7.0 load test harness - Vanilla @@ -11,7 +11,7 @@ - +
diff --git a/dist/tests/loadtest-jquery.html b/dist/tests/loadtest-jquery.html index 89f5d161a..fa12ea532 100644 --- a/dist/tests/loadtest-jquery.html +++ b/dist/tests/loadtest-jquery.html @@ -2,7 +2,7 @@ - jsPlumb 1.6.5 load test harness - jQuery + jsPlumb 1.7.0 load test harness - jQuery @@ -15,7 +15,7 @@ - +
diff --git a/dist/tests/loadtest-mootools.html b/dist/tests/loadtest-mootools.html index fb212f856..a47ebb0a7 100644 --- a/dist/tests/loadtest-mootools.html +++ b/dist/tests/loadtest-mootools.html @@ -2,7 +2,7 @@ - jsPlumb 1.6.5 load test harness - MooTools + jsPlumb 1.7.0 load test harness - MooTools @@ -14,7 +14,7 @@ - +
diff --git a/dist/tests/loadtest-yui.html b/dist/tests/loadtest-yui.html index 3bad7811c..95a2f4e0c 100644 --- a/dist/tests/loadtest-yui.html +++ b/dist/tests/loadtest-yui.html @@ -2,7 +2,7 @@ - jsPlumb 1.6.5 load test harness - YUI3 + jsPlumb 1.7.0 load test harness - YUI3 @@ -13,7 +13,7 @@ - +
diff --git a/dist/tests/qunit-svg-dom-instance.html b/dist/tests/qunit-svg-dom-instance.html index d13f91e80..42e9b38c6 100644 --- a/dist/tests/qunit-svg-dom-instance.html +++ b/dist/tests/qunit-svg-dom-instance.html @@ -12,7 +12,7 @@ - + diff --git a/dist/tests/qunit-svg-jquery-instance.html b/dist/tests/qunit-svg-jquery-instance.html index 355f369b2..0f8b2ef4f 100644 --- a/dist/tests/qunit-svg-jquery-instance.html +++ b/dist/tests/qunit-svg-jquery-instance.html @@ -16,7 +16,7 @@ - + diff --git a/dist/tests/qunit-svg-mootools-instance.html b/dist/tests/qunit-svg-mootools-instance.html index bde4b74f3..d63ace22f 100644 --- a/dist/tests/qunit-svg-mootools-instance.html +++ b/dist/tests/qunit-svg-mootools-instance.html @@ -15,7 +15,7 @@ - + diff --git a/dist/tests/qunit-svg-yui-instance.html b/dist/tests/qunit-svg-yui-instance.html index f01999374..5c0f33d19 100644 --- a/dist/tests/qunit-svg-yui-instance.html +++ b/dist/tests/qunit-svg-yui-instance.html @@ -14,7 +14,7 @@ - + diff --git a/dist/tests/qunit-vml-dom-instance.html b/dist/tests/qunit-vml-dom-instance.html index 632fc696c..b37d8e363 100644 --- a/dist/tests/qunit-vml-dom-instance.html +++ b/dist/tests/qunit-vml-dom-instance.html @@ -12,7 +12,7 @@ - + diff --git a/dist/tests/qunit-vml-jquery-instance.html b/dist/tests/qunit-vml-jquery-instance.html index aa8e83aea..c414fd9b6 100644 --- a/dist/tests/qunit-vml-jquery-instance.html +++ b/dist/tests/qunit-vml-jquery-instance.html @@ -16,7 +16,7 @@ - + diff --git a/dist/tests/qunit-vml-mootools-instance.html b/dist/tests/qunit-vml-mootools-instance.html index 2d3453488..9716a936d 100644 --- a/dist/tests/qunit-vml-mootools-instance.html +++ b/dist/tests/qunit-vml-mootools-instance.html @@ -15,7 +15,7 @@ - + diff --git a/dist/tests/qunit-vml-yui-instance.html b/dist/tests/qunit-vml-yui-instance.html index ea13e5701..75c00555d 100644 --- a/dist/tests/qunit-vml-yui-instance.html +++ b/dist/tests/qunit-vml-yui-instance.html @@ -14,7 +14,7 @@ - + diff --git a/jekyll/_config.yml b/jekyll/_config.yml index ec974c848..fb58e9dd2 100644 --- a/jekyll/_config.yml +++ b/jekyll/_config.yml @@ -4,4 +4,4 @@ pygments: true permalink: :categories/:title.html exclude: [ "yuitheme" ] demos: [ [ "home", "Kitchen Sink" ], [ "flowchart", "Flowchart" ], [ "statemachine", "State Machine" ], [ "draggableConnectors", "Drag and Drop"], [ "perimeterAnchors", "Perimeter Anchors"], [ "chart", "Hierarchical Chart" ], [ "sourcesAndTargets", "Sources and Targets" ], [ "dynamicAnchors", "Dynamic Anchors" ], [ "animation", "Animation" ] ] -jsplumb: "1.6.5" \ No newline at end of file +jsplumb: "1.7.0" \ No newline at end of file diff --git a/lib/katavorio-0.4.js b/lib/katavorio-0.4.js index d3a9aa159..630e207b6 100644 --- a/lib/katavorio-0.4.js +++ b/lib/katavorio-0.4.js @@ -477,6 +477,7 @@ //console.cTimeEnd("new k drag"); _reg(_el._katavorioDrag, _dragsByScope); o.push(_el._katavorioDrag); + katavorioParams.addClass(_el, _css.draggable); } }); //console.cTimeEnd("kat draggable"); @@ -491,6 +492,7 @@ _el._katavorioDrop = new Drop(_el, _prepareParams(params), _css, _scope); _reg(_el._katavorioDrop, _dropsByScope); o.push(_el._katavorioDrop); + katavorioParams.addClass(_el, _css.droppable); } }); return o; diff --git a/package.json b/package.json index bdb10a0f0..d2d3b9110 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "jsPlumb", - "version": "1.6.5", + "version": "1.7.0", "description": "pipe up your life", "main": "index.js", "jsPlumbWiki": "../wiki/jsPlumb.wiki", diff --git a/src/anchors.js b/src/anchors.js index a26b9518d..1d82cf527 100644 --- a/src/anchors.js +++ b/src/anchors.js @@ -1,7 +1,7 @@ /* * jsPlumb * - * Title:jsPlumb 1.6.5 + * Title:jsPlumb 1.7.0 * * Provides a way to visually connect elements on an HTML page, using SVG or VML. * diff --git a/src/browser-util.js b/src/browser-util.js index dcafa2c1e..e05266fd8 100644 --- a/src/browser-util.js +++ b/src/browser-util.js @@ -1,7 +1,7 @@ /* * jsPlumb * - * Title:jsPlumb 1.6.5 + * Title:jsPlumb 1.7.0 * * Provides a way to visually connect elements on an HTML page, using SVG or VML. * diff --git a/src/connection.js b/src/connection.js index 286ea0f51..c944813a1 100644 --- a/src/connection.js +++ b/src/connection.js @@ -1,7 +1,7 @@ /* * jsPlumb * - * Title:jsPlumb 1.6.5 + * Title:jsPlumb 1.7.0 * * Provides a way to visually connect elements on an HTML page, using SVG or VML. * diff --git a/src/connector-editors.js b/src/connector-editors.js index bfb6b77d6..ff25be04e 100644 --- a/src/connector-editors.js +++ b/src/connector-editors.js @@ -1,7 +1,7 @@ /* * jsPlumb * - * Title:jsPlumb 1.6.5 + * Title:jsPlumb 1.7.0 * * Provides a way to visually connect elements on an HTML page, using SVG or VML. * diff --git a/src/connectors-bezier.js b/src/connectors-bezier.js index ca09b2495..562c296c7 100644 --- a/src/connectors-bezier.js +++ b/src/connectors-bezier.js @@ -1,7 +1,7 @@ /* * jsPlumb * - * Title:jsPlumb 1.6.5 + * Title:jsPlumb 1.7.0 * * Provides a way to visually connect elements on an HTML page, using SVG or VML. * diff --git a/src/connectors-flowchart.js b/src/connectors-flowchart.js index a2bd47f5c..81288585b 100644 --- a/src/connectors-flowchart.js +++ b/src/connectors-flowchart.js @@ -1,7 +1,7 @@ /* * jsPlumb * - * Title:jsPlumb 1.6.5 + * Title:jsPlumb 1.7.0 * * Provides a way to visually connect elements on an HTML page, using SVG or VML. * diff --git a/src/connectors-statemachine.js b/src/connectors-statemachine.js index 37b3ed258..a06c46578 100644 --- a/src/connectors-statemachine.js +++ b/src/connectors-statemachine.js @@ -1,7 +1,7 @@ /* * jsPlumb * - * Title:jsPlumb 1.6.5 + * Title:jsPlumb 1.7.0 * * Provides a way to visually connect elements on an HTML page, using SVG or VML. * diff --git a/src/defaults.js b/src/defaults.js index 282456f33..29cbc4c90 100644 --- a/src/defaults.js +++ b/src/defaults.js @@ -1,7 +1,7 @@ /* * jsPlumb * - * Title:jsPlumb 1.6.5 + * Title:jsPlumb 1.7.0 * * Provides a way to visually connect elements on an HTML page, using SVG or VML. * diff --git a/src/dom-adapter.js b/src/dom-adapter.js index bdb5c3847..66bcb186c 100644 --- a/src/dom-adapter.js +++ b/src/dom-adapter.js @@ -1,7 +1,7 @@ /* * jsPlumb * - * Title:jsPlumb 1.6.5 + * Title:jsPlumb 1.7.0 * * Provides a way to visually connect elements on an HTML page, using SVG or VML. * diff --git a/src/dom.jsPlumb.js b/src/dom.jsPlumb.js index 75dc6fd63..f0bd8e9dc 100644 --- a/src/dom.jsPlumb.js +++ b/src/dom.jsPlumb.js @@ -1,7 +1,7 @@ /* * jsPlumb * - * Title:jsPlumb 1.6.5 + * Title:jsPlumb 1.7.0 * * Provides a way to visually connect elements on an HTML page, using SVG or VML. * @@ -228,7 +228,7 @@ var ready = function (f) { var _do = function() { - if (/complete|loaded|interactive/.test(document.readyState) && typeof(document.body) != "1.6.5" && document.body != null) + if (/complete|loaded|interactive/.test(document.readyState) && typeof(document.body) != "1.7.0" && document.body != null) f(); else setTimeout(_do, 9); diff --git a/src/endpoint.js b/src/endpoint.js index 5b169d999..da84ed18e 100644 --- a/src/endpoint.js +++ b/src/endpoint.js @@ -1,7 +1,7 @@ /* * jsPlumb * - * Title:jsPlumb 1.6.5 + * Title:jsPlumb 1.7.0 * * Provides a way to visually connect elements on an HTML page, using SVG or VML. * diff --git a/src/jquery.jsPlumb.js b/src/jquery.jsPlumb.js index e188556d6..63b7672d6 100644 --- a/src/jquery.jsPlumb.js +++ b/src/jquery.jsPlumb.js @@ -1,7 +1,7 @@ /* * jsPlumb * - * Title:jsPlumb 1.6.5 + * Title:jsPlumb 1.7.0 * * Provides a way to visually connect elements on an HTML page, using SVG or VML. * diff --git a/src/jsPlumb.js b/src/jsPlumb.js index fd3dd7101..f9ec00580 100644 --- a/src/jsPlumb.js +++ b/src/jsPlumb.js @@ -1,7 +1,7 @@ /* * jsPlumb * - * Title:jsPlumb 1.6.5 + * Title:jsPlumb 1.7.0 * * Provides a way to visually connect elements on an HTML page, using SVG or VML. * @@ -2084,7 +2084,7 @@ // get the current size and offset, and store them //s = document.getElementById(elId); - s = managedElements[elId].el; + s = managedElements[elId] ? managedElements[elId].el : null; if (s != null) { sizes[elId] = _currentInstance.getSize(s); offsets[elId] = _getOffset(s, _currentInstance); diff --git a/src/mootools.jsPlumb.js b/src/mootools.jsPlumb.js index 794c6e7d0..191b943cb 100644 --- a/src/mootools.jsPlumb.js +++ b/src/mootools.jsPlumb.js @@ -1,7 +1,7 @@ /* * jsPlumb * - * Title:jsPlumb 1.6.5 + * Title:jsPlumb 1.7.0 * * Provides a way to visually connect elements on an HTML page, using SVG or VML. * diff --git a/src/renderers-svg.js b/src/renderers-svg.js index 3539ece0a..4d859463e 100644 --- a/src/renderers-svg.js +++ b/src/renderers-svg.js @@ -1,7 +1,7 @@ /* * jsPlumb * - * Title:jsPlumb 1.6.5 + * Title:jsPlumb 1.7.0 * * Provides a way to visually connect elements on an HTML page, using SVG or VML. * diff --git a/src/renderers-vml.js b/src/renderers-vml.js index 70cc802d7..da6056fb3 100644 --- a/src/renderers-vml.js +++ b/src/renderers-vml.js @@ -1,7 +1,7 @@ /* * jsPlumb * - * Title:jsPlumb 1.6.5 + * Title:jsPlumb 1.7.0 * * Provides a way to visually connect elements on an HTML page, using SVG or VML. * diff --git a/src/util.js b/src/util.js index 098d84bbd..7b7b53680 100644 --- a/src/util.js +++ b/src/util.js @@ -1,7 +1,7 @@ /* * jsPlumb * - * Title:jsPlumb 1.6.5 + * Title:jsPlumb 1.7.0 * * Provides a way to visually connect elements on an HTML page, using SVG or VML. * diff --git a/src/yui.jsPlumb.js b/src/yui.jsPlumb.js index cbaab4b32..f2a8c39ca 100644 --- a/src/yui.jsPlumb.js +++ b/src/yui.jsPlumb.js @@ -1,7 +1,7 @@ /* * jsPlumb * - * Title:jsPlumb 1.6.5 + * Title:jsPlumb 1.7.0 * * Provides a way to visually connect elements on an HTML page, using SVG or VML. * @@ -324,7 +324,7 @@ * event binding wrapper. */ on : function(el, event, callback) { - var els = jsPlumbUtil.isString(el) || typeof el.length == "1.6.5" ? [ _getElementObject(el) ] : Y.all(el)._nodes; + var els = jsPlumbUtil.isString(el) || typeof el.length == "1.7.0" ? [ _getElementObject(el) ] : Y.all(el)._nodes; for (var i = 0; i < els.length; i++) Y.one(els[i]).on(event, callback); }, diff --git a/tests/index.html b/tests/index.html index dab078ea7..ea2a15700 100644 --- a/tests/index.html +++ b/tests/index.html @@ -37,12 +37,17 @@

Unit Tests

Load Tests

+
Connections
+
Endpoints
+
diff --git a/tests/jsPlumb-tests.js b/tests/jsPlumb-tests.js index c63d2931a..08fa2a457 100644 --- a/tests/jsPlumb-tests.js +++ b/tests/jsPlumb-tests.js @@ -195,8 +195,7 @@ var testSuite = function(renderMode, _jsPlumb) { // but you can tell jsPlumb about it after the fact _jsPlumb.remove("output"); - _jsPlumb.recalculateOffsets(container); - _jsPlumb.repaint(container); + equal(_jsPlumb.selectEndpoints({element:"output"}).length, 0, "no endpoints registered for in1"); }); @@ -6091,86 +6090,6 @@ test(" jsPlumbUtil.extend, multiple parents", function() { expect(0); }); -// ******************** flowchart get segments *************** - test(" get segments from flowchart connector", function() { - var d1 = _addDiv("d1"), d2 = _addDiv("d2"); - d1.style.position="absolute"; - d2.style.position="absolute"; - d1.style.left = "0px"; - d2.style.left = "100px"; - d1.style.top = "0px"; - d2.style.top = "100px"; - d1.style.width = "10px";d1.style.height = "10px"; - d2.style.width = "10px";d2.style.height = "10px"; - - var c = _jsPlumb.connect({ - source:d1, - target:d2, - connector:"Flowchart", - anchors:["Right", "Top"] - }), - s = c.getConnector().getPath(); - //equal(s[0].start[0], 0); - equal(s[0].start[1], 0); - equal(s[0].end[0], 30); - equal(s[0].end[1], 0); - equal(s[1].start[0], 95); - equal(s[1].start[1], 0); - equal(s[1].end[0], 95); - equal(s[1].end[1], 65); - - var c2 = _jsPlumb.connect({ - source:d1, - target:d2, - connector:"Flowchart", - anchors:["Bottom", "Top"] - }), - s2 = c2.getConnector().getPath(); - equal(s2.length, 3, "3 segments"); - - equal(s2[0].start[0], 0); - equal(s2[0].start[1], 0); - equal(s2[0].end[0], 0); - equal(s2[0].end[1], 30); - - equal(s2[1].start[0], 0); - equal(s2[1].start[1], 45); - equal(s2[1].end[0], 100); - equal(s2[1].end[1], 45); - - equal(s2[2].start[0], 100); - equal(s2[2].start[1], 45); - equal(s2[2].end[0], 100); - equal(s2[2].end[1], 60); - - - // now set the segments on the connection. - var c3 = _jsPlumb.connect({ - source:d1, - target:d2, - connector:"Flowchart", - anchors:["Right", "Top"], - path:[ - { start:[5,5], end:[5,55] }, - { start:[5,55], end:[105,55] }, - { start:[105,55], end:[105,105] } - ] - }), - s3 = c3.getConnector().getPath(); - equal(s3[0].start[0], 5); - equal(s3[0].start[1], 5); - equal(s3[0].end[0], 5); - equal(s3[0].end[1], 55); - equal(s3[1].start[0], 5); - equal(s3[1].start[1], 55); - equal(s3[1].end[0], 105); - equal(s3[1].end[1],55); - equal(s3[2].start[0], 105); - equal(s3[2].start[1], 55); - equal(s3[2].end[0], 105); - equal(s3[2].end[1],105); - }); - test(": jsPlumbUtil.isEmpty", function() { var e = {}; equal(jsPlumbUtil.isEmpty(e), true, "e is empty"); @@ -6327,7 +6246,7 @@ test(" jsPlumbUtil.extend, multiple parents", function() { endpointStyle:{ fillStyle:"blue" } }); - equal(c.endpoints[0].canvas.childNodes[0].childNodes[0].getAttribute("fill"), "blue", "endpoint style passed through by connect method"); + equal(c.endpoints[0].canvas.childNodes[0].getAttribute("fill"), "blue", "endpoint style passed through by connect method"); }); @@ -6341,7 +6260,7 @@ test(" jsPlumbUtil.extend, multiple parents", function() { endpointStyle:{ fillStyle:"blue" } }); - equal(c.endpoints[0].canvas.childNodes[0].childNodes[0].getAttribute("fill"), "blue", "endpoint style passed through by connect method"); + equal(c.endpoints[0].canvas.childNodes[0].getAttribute("fill"), "blue", "endpoint style passed through by connect method"); }); };