js/theme.js
function getBoundaries(popper, reference, padding, boundariesElement) {
    var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false; // NOTE: 1 DOM access here

    var boundaries = {
      top: 0,
      left: 0
    };
    var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference); // Handle viewport case

    if (boundariesElement === 'viewport') {
      boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);
    } else {
      // Handle other cases based on DOM element used as boundaries
      var boundariesNode = void 0;

      if (boundariesElement === 'scrollParent') {
        boundariesNode = getScrollParent(getParentNode(reference));

        if (boundariesNode.nodeName === 'BODY') {
          boundariesNode = popper.ownerDocument.documentElement;
        }
      } else if (boundariesElement === 'window') {
        boundariesNode = popper.ownerDocument.documentElement;
      } else {
        boundariesNode = boundariesElement;
      }

      var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition); // In case of HTML, we need a different computation

      if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {
        var _getWindowSizes = getWindowSizes(popper.ownerDocument),
            height = _getWindowSizes.height,
            width = _getWindowSizes.width;

        boundaries.top += offsets.top - offsets.marginTop;
        boundaries.bottom = height + offsets.top;
        boundaries.left += offsets.left - offsets.marginLeft;
        boundaries.right = width + offsets.left;
      } else {
        // for all the other DOM elements, this one is good
        boundaries = offsets;
      }
    } // Add paddings


    padding = padding || 0;
    var isPaddingNumber = typeof padding === 'number';
    boundaries.left += isPaddingNumber ? padding : padding.left || 0;
    boundaries.top += isPaddingNumber ? padding : padding.top || 0;
    boundaries.right -= isPaddingNumber ? padding : padding.right || 0;
    boundaries.bottom -= isPaddingNumber ? padding : padding.bottom || 0;
    return boundaries;
  }
function getBoundaries(popper, reference, padding, boundariesElement) {
    var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false; // NOTE: 1 DOM access here

    var boundaries = {
      top: 0,
      left: 0
    };
    var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference); // Handle viewport case

    if (boundariesElement === 'viewport') {
      boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);
    } else {
      // Handle other cases based on DOM element used as boundaries
      var boundariesNode = void 0;

      if (boundariesElement === 'scrollParent') {
        boundariesNode = getScrollParent(getParentNode(reference));

        if (boundariesNode.nodeName === 'BODY') {
          boundariesNode = popper.ownerDocument.documentElement;
        }
      } else if (boundariesElement === 'window') {
        boundariesNode = popper.ownerDocument.documentElement;
      } else {
        boundariesNode = boundariesElement;
      }

      var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition); // In case of HTML, we need a different computation

      if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {
        var _getWindowSizes = getWindowSizes(popper.ownerDocument),
            height = _getWindowSizes.height,
            width = _getWindowSizes.width;

        boundaries.top += offsets.top - offsets.marginTop;
        boundaries.bottom = height + offsets.top;
        boundaries.left += offsets.left - offsets.marginLeft;
        boundaries.right = width + offsets.left;
      } else {
        // for all the other DOM elements, this one is good
        boundaries = offsets;
      }
    } // Add paddings


    padding = padding || 0;
    var isPaddingNumber = typeof padding === 'number';
    boundaries.left += isPaddingNumber ? padding : padding.left || 0;
    boundaries.top += isPaddingNumber ? padding : padding.top || 0;
    boundaries.right -= isPaddingNumber ? padding : padding.right || 0;
    boundaries.bottom -= isPaddingNumber ? padding : padding.bottom || 0;
    return boundaries;
  }
function getBoundaries ( popper , reference , padding , boundariesElement ) { var fixedPosition = arguments . length > 4 && arguments [ 4 ] !== undefined ? arguments [ 4 ] : false ; // NOTE: 1 DOM access here var boundaries = { top : 0 , left : 0 } ; var offsetParent = fixedPosition ? getFixedPositionOffsetParent ( popper ) : findCommonOffsetParent ( popper , reference ) ; // Handle viewport case if ( boundariesElement === 'viewport' ) { boundaries = getViewportOffsetRectRelativeToArtbitraryNode ( offsetParent , fixedPosition ) ; } else { // Handle other cases based on DOM element used as boundaries var boundariesNode = void 0 ; if ( boundariesElement === 'scrollParent' ) { boundariesNode = getScrollParent ( getParentNode ( reference ) ) ; if ( boundariesNode . nodeName === 'BODY' ) { boundariesNode = popper . ownerDocument . documentElement ; } } else if ( boundariesElement === 'window' ) { boundariesNode = popper . ownerDocument . documentElement ; } else { boundariesNode = boundariesElement ; } var offsets = getOffsetRectRelativeToArbitraryNode ( boundariesNode , offsetParent , fixedPosition ) ; // In case of HTML, we need a different computation if ( boundariesNode . nodeName === 'HTML' && ! isFixed ( offsetParent ) ) { var _getWindowSizes = getWindowSizes ( popper . ownerDocument ) , height = _getWindowSizes . height , width = _getWindowSizes . width ; boundaries . top += offsets . top - offsets . marginTop ; boundaries . bottom = height + offsets . top ; boundaries . left += offsets . left - offsets . marginLeft ; boundaries . right = width + offsets . left ; } else { // for all the other DOM elements, this one is good boundaries = offsets ; } } // Add paddings padding = padding || 0 ; var isPaddingNumber = typeof padding === 'number' ; boundaries . left += isPaddingNumber ? padding : padding . left || 0 ; boundaries . top += isPaddingNumber ? padding : padding . top || 0 ; boundaries . right -= isPaddingNumber ? padding : padding . right || 0 ; boundaries . bottom -= isPaddingNumber ? padding : padding . bottom || 0 ; return boundaries ; }
Computed the boundaries limits and return them
@method
@memberof Popper.Utils
@param {HTMLElement} popper
@param {HTMLElement} reference
@param {number} padding
@param {HTMLElement} boundariesElement - Element used to define the boundaries
@param {Boolean} fixedPosition - Is in fixed position mode
@returns {Object} Coordinates of the boundaries
Computed the boundaries limits and return them