nl_tokens: Gets the x y coordinates to align this element with another element .
pl_tokens: function ( el , position , offsets , local ) { //<debug warn> Ext . Logger . deprecate ( "getAlignToXY() is no longer available for Ext.Element. Please see Ext.Component#showBy() " + "to do anchoring at Component level instead" , this ) ; //</debug> local = ! ! local ; el = Ext . get ( el ) ; //<debug> if ( ! el || ! el . dom ) { throw new Error ( "Element.alignToXY with an element that doesn't exist" ) ; } //</debug> offsets = offsets || [ 0 , 0 ] ; if ( ! position || position == '?' ) { position = 'tl-bl?' ; } else if ( ! ( / - / ) . test ( <mask> ) && position !== "" ) { position = 'tl-' + position ; } position = position . toLowerCase ( ) ; var me = this , matches = position . match ( this . alignToRe ) , dw = window . innerWidth , dh = window . innerHeight , p1 = "" , p2 = "" , a1 , a2 , x , y , swapX , swapY , p1x , p1y , p2x , p2y , width , height , region , constrain ; if ( ! matches ) { throw "Element.alignTo with an invalid alignment " + position ; } p1 = matches [ 1 ] ; p2 = matches [ 2 ] ; constrain = ! ! matches [ 3 ] ; //Subtract the aligned el's internal xy from the target's offset xy //plus custom offset to get the aligned el's new offset xy a1 = me . getAnchorXY ( p1 , true ) ; a2 = el . getAnchorXY ( p2 , local ) ; x = a2 [ 0 ] - a1 [ 0 ] + offsets [ 0 ] ; y = a2 [ 1 ] - a1 [ 1 ] + offsets [ 1 ] ; if ( constrain ) { width = me . getWidth ( ) ; height = me . getHeight ( ) ; region = el . getPageBox ( ) ; //If we are at a viewport boundary and the aligned el is anchored on a target border that is //perpendicular to the vp border, allow the aligned el to slide on that border, //otherwise swap the aligned el to the opposite border of the target. p1y = p1 . charAt ( 0 ) ; p1x = p1 . charAt ( p1 . length - 1 ) ; p2y = p2 . charAt ( 0 ) ; p2x = p2 . charAt ( p2 . length - 1 ) ; swapY = ( ( p1y == "t" && p2y == "b" ) || ( p1y == "b" && p2y == "t" ) ) ; swapX = ( ( p1x == "r" && p2x == "l" ) || ( p1x == "l" && p2x == "r" ) ) ; if ( x + width > dw ) { x = swapX ? region . left - width : dw - width ; } if ( x < 0 ) { x = swapX ? region . right : 0 ; } if ( y + height > dh ) { y = swapY ? region . top - height : dh - height ; } if ( y < 0 ) { y = swapY ? region . bottom : 0 ; } } return [ x , y ] ; }