reservation plugin - unbound request (unclean
[unfold.git] / portal / static / unbound_reservation_static / src / connectors-bezier.js
diff --git a/portal/static/unbound_reservation_static/src/connectors-bezier.js b/portal/static/unbound_reservation_static/src/connectors-bezier.js
new file mode 100644 (file)
index 0000000..5c5f307
--- /dev/null
@@ -0,0 +1,67 @@
+
+;(function() {
+
+       var Bezier = function(params) {
+        params = params || {};
+
+       var self = this,
+                       _super =  jsPlumb.Connectors.AbstractConnector.apply(this, arguments),
+            stub = params.stub || 50,
+            majorAnchor = params.curviness || 150,
+            minorAnchor = 10;            
+
+        this.type = "Bezier";  
+        this.getCurviness = function() { return majorAnchor; };        
+        
+        this._findControlPoint = function(point, sourceAnchorPosition, targetAnchorPosition, sourceEndpoint, targetEndpoint) {
+               // determine if the two anchors are perpendicular to each other in their orientation.  we swap the control 
+               // points around if so (code could be tightened up)
+               var soo = sourceEndpoint.anchor.getOrientation(sourceEndpoint), 
+                       too = targetEndpoint.anchor.getOrientation(targetEndpoint),
+                       perpendicular = soo[0] != too[0] || soo[1] == too[1],
+               p = [];                
+               
+            if (!perpendicular) {
+                if (soo[0] === 0) // X
+                    p.push(sourceAnchorPosition[0] < targetAnchorPosition[0] ? point[0] + minorAnchor : point[0] - minorAnchor);
+                else p.push(point[0] - (majorAnchor * soo[0]));
+                                 
+                if (soo[1] === 0) // Y
+                       p.push(sourceAnchorPosition[1] < targetAnchorPosition[1] ? point[1] + minorAnchor : point[1] - minorAnchor);
+                else p.push(point[1] + (majorAnchor * too[1]));
+            }
+             else {
+                if (too[0] === 0) // X
+                       p.push(targetAnchorPosition[0] < sourceAnchorPosition[0] ? point[0] + minorAnchor : point[0] - minorAnchor);
+                else p.push(point[0] + (majorAnchor * too[0]));
+                
+                if (too[1] === 0) // Y
+                       p.push(targetAnchorPosition[1] < sourceAnchorPosition[1] ? point[1] + minorAnchor : point[1] - minorAnchor);
+                else p.push(point[1] + (majorAnchor * soo[1]));
+             }
+
+            return p;                
+        };        
+
+        this._compute = function(paintInfo, p) {                                
+                       var sp = p.sourcePos,
+                               tp = p.targetPos,                               
+                _w = Math.abs(sp[0] - tp[0]),
+                _h = Math.abs(sp[1] - tp[1]),            
+                _sx = sp[0] < tp[0] ? _w : 0,
+                _sy = sp[1] < tp[1] ? _h : 0,
+                _tx = sp[0] < tp[0] ? 0 : _w,
+                _ty = sp[1] < tp[1] ? 0 : _h,
+                _CP = self._findControlPoint([_sx, _sy], sp, tp, p.sourceEndpoint, p.targetEndpoint),
+                _CP2 = self._findControlPoint([_tx, _ty], tp, sp, p.targetEndpoint, p.sourceEndpoint);
+
+                       _super.addSegment(this, "Bezier", {
+                               x1:_sx, y1:_sy, x2:_tx, y2:_ty,
+                               cp1x:_CP[0], cp1y:_CP[1], cp2x:_CP2[0], cp2y:_CP2[1]
+                       });                    
+        }; 
+       };
+
+       jsPlumb.registerConnectorType(Bezier, "Bezier");
+
+})();
\ No newline at end of file