Treant.js
function(startPoint) {
            var orient = this.Tree().CONFIG.rootOrientation, point = {};

            if ( this.stackParentId ) { // return different end point if node is a stacked child
                if ( orient === 'NORTH' || orient === 'SOUTH' ) {
                    orient = 'WEST';
                }
                else if ( orient === 'EAST' || orient === 'WEST' ) {
                    orient = 'NORTH';
                }
            }

            // if pseudo, a virtual center is used
            if ( orient === 'NORTH' ) {
                point.x = (this.pseudo) ? this.X - this.Tree().CONFIG.subTeeSeparation/2 : this.X + this.width/2;
                point.y = (startPoint) ? this.Y + this.height : this.Y;
            }
            else if (orient === 'SOUTH') {
                point.x = (this.pseudo) ? this.X - this.Tree().CONFIG.subTeeSeparation/2 : this.X + this.width/2;
                point.y = (startPoint) ? this.Y : this.Y + this.height;
            }
            else if (orient === 'EAST') {
                point.x = (startPoint) ? this.X : this.X + this.width;
                point.y = (this.pseudo) ? this.Y - this.Tree().CONFIG.subTeeSeparation/2 : this.Y + this.height/2;
            }
            else if (orient === 'WEST') {
                point.x = (startPoint) ? this.X + this.width : this.X;
                point.y =  (this.pseudo) ? this.Y - this.Tree().CONFIG.subTeeSeparation/2 : this.Y + this.height/2;
            }
            return point;
        }
function(startPoint) {
            var orient = this.Tree().CONFIG.rootOrientation, point = {};

            if ( this.stackParentId ) { // return different end point if node is a stacked child
                if ( orient === 'NORTH' || orient === 'SOUTH' ) {
                    orient = 'WEST';
                }
                else if ( orient === 'EAST' || orient === 'WEST' ) {
                    orient = 'NORTH';
                }
            }

            // if pseudo, a virtual center is used
            if ( orient === 'NORTH' ) {
                point.x = (this.pseudo) ? this.X - this.Tree().CONFIG.subTeeSeparation/2 : this.X + this.width/2;
                point.y = (startPoint) ? this.Y + this.height : this.Y;
            }
            else if (orient === 'SOUTH') {
                point.x = (this.pseudo) ? this.X - this.Tree().CONFIG.subTeeSeparation/2 : this.X + this.width/2;
                point.y = (startPoint) ? this.Y : this.Y + this.height;
            }
            else if (orient === 'EAST') {
                point.x = (startPoint) ? this.X : this.X + this.width;
                point.y = (this.pseudo) ? this.Y - this.Tree().CONFIG.subTeeSeparation/2 : this.Y + this.height/2;
            }
            else if (orient === 'WEST') {
                point.x = (startPoint) ? this.X + this.width : this.X;
                point.y =  (this.pseudo) ? this.Y - this.Tree().CONFIG.subTeeSeparation/2 : this.Y + this.height/2;
            }
            return point;
        }
function ( startPoint ) { var orient = this . Tree ( ) . CONFIG . rootOrientation , point = { } ; if ( this . stackParentId ) { // return different end point if node is a stacked child
 if ( orient === 'NORTH' || orient === 'SOUTH' ) { orient = 'WEST' ; } else if ( orient === 'EAST' || orient === 'WEST' ) { orient = 'NORTH' ; } } // if pseudo, a virtual center is used
 if ( orient === 'NORTH' ) { point . x = ( this . pseudo ) ? this . X - this . Tree ( ) . CONFIG . subTeeSeparation / 2 : this . X + this . width / 2 ; point . y = ( startPoint ) ? this . Y + this . height : this . Y ; } else if ( orient === 'SOUTH' ) { point . x = ( this . pseudo ) ? this . X - this . Tree ( ) . CONFIG . subTeeSeparation / 2 : this . X + this . width / 2 ; point . y = ( startPoint ) ? this . Y : this . Y + this . height ; } else if ( orient === 'EAST' ) { point . x = ( startPoint ) ? this . X : this . X + this . width ; point . y = ( this . pseudo ) ? this . Y - this . Tree ( ) . CONFIG . subTeeSeparation / 2 : this . Y + this . height / 2 ; } else if ( orient === 'WEST' ) { point . x = ( startPoint ) ? this . X + this . width : this . X ; point . y = ( this . pseudo ) ? this . Y - this . Tree ( ) . CONFIG . subTeeSeparation / 2 : this . Y + this . height / 2 ; } return point ; }
returns start or the end point of the connector line, origin is upper-left
returns start or the end point of the connector line origin is upper - left