nl_tokens: Get bounding client rect of given element
pl_tokens: function getBoundingClientRect ( element ) { var rect = { } ; // IE10 10 FIX: Please, don't ask, the element isn't // considered in DOM in some circumstances... // This isn't reproducible in IE10 compatibility mode of IE11 try { if ( isIE ( 10 ) ) { rect = element . getBoundingClientRect ( ) ; var scrollTop = getScroll ( element , 'top' ) ; var scrollLeft = getScroll ( element , 'left' ) ; rect . top += scrollTop ; rect . left += scrollLeft ; rect . bottom += scrollTop ; rect . right += scrollLeft ; } else { rect = element . getBoundingClientRect ( ) ; } } catch ( e ) { } var result = { left : rect . left , top : rect . top , width : rect . right - rect . left , height : rect . bottom - rect . top } ; // subtract scrollbar size from sizes var sizes = element . nodeName === 'HTML' ? getWindowSizes ( element . ownerDocument ) : { } ; var width = sizes . width || element . clientWidth || result . right - result . left ; var height = sizes . height || element . clientHeight || result . bottom - result . <mask> ; var horizScrollbar = element . offsetWidth - width ; var vertScrollbar = element . offsetHeight - height ; // if an hypothetical scrollbar is detected, we must be sure it's not a `border` // we make this check conditional for performance reasons if ( horizScrollbar || vertScrollbar ) { var styles = getStyleComputedProperty ( element ) ; horizScrollbar -= getBordersSize ( styles , 'x' ) ; vertScrollbar -= getBordersSize ( styles , 'y' ) ; result . width -= horizScrollbar ; result . height -= vertScrollbar ; } return getClientRect ( result ) ; }