MCPcopy
hub / github.com/helloxz/onenav / preventOverflow

Function preventOverflow

static/bootstrap4/js/bootstrap.bundle.js:3365–3427  ·  view source on GitHub ↗

* @function * @memberof Modifiers * @argument {Object} data - The data object generated by `update` method * @argument {Object} options - Modifiers configuration and options * @returns {Object} The data object, properly modified

(data, options)

Source from the content-addressed store, hash-verified

3363 * @returns {Object} The data object, properly modified
3364 */
3365 function preventOverflow(data, options) {
3366 var boundariesElement = options.boundariesElement || getOffsetParent(data.instance.popper);
3367
3368 // If offsetParent is the reference element, we really want to
3369 // go one step up and use the next offsetParent as reference to
3370 // avoid to make this modifier completely useless and look like broken
3371 if (data.instance.reference === boundariesElement) {
3372 boundariesElement = getOffsetParent(boundariesElement);
3373 }
3374
3375 // NOTE: DOM access here
3376 // resets the popper's position so that the document size can be calculated excluding
3377 // the size of the popper element itself
3378 var transformProp = getSupportedPropertyName('transform');
3379 var popperStyles = data.instance.popper.style; // assignment to help minification
3380 var top = popperStyles.top,
3381 left = popperStyles.left,
3382 transform = popperStyles[transformProp];
3383
3384 popperStyles.top = '';
3385 popperStyles.left = '';
3386 popperStyles[transformProp] = '';
3387
3388 var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed);
3389
3390 // NOTE: DOM access here
3391 // restores the original style properties after the offsets have been computed
3392 popperStyles.top = top;
3393 popperStyles.left = left;
3394 popperStyles[transformProp] = transform;
3395
3396 options.boundaries = boundaries;
3397
3398 var order = options.priority;
3399 var popper = data.offsets.popper;
3400
3401 var check = {
3402 primary: function primary(placement) {
3403 var value = popper[placement];
3404 if (popper[placement] < boundaries[placement] && !options.escapeWithReference) {
3405 value = Math.max(popper[placement], boundaries[placement]);
3406 }
3407 return defineProperty({}, placement, value);
3408 },
3409 secondary: function secondary(placement) {
3410 var mainSide = placement === 'right' ? 'left' : 'top';
3411 var value = popper[mainSide];
3412 if (popper[placement] > boundaries[placement] && !options.escapeWithReference) {
3413 value = Math.min(popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height));
3414 }
3415 return defineProperty({}, mainSide, value);
3416 }
3417 };
3418
3419 order.forEach(function (placement) {
3420 var side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary';
3421 popper = _extends({}, popper, check[side](placement));
3422 });

Callers

nothing calls this directly

Calls 6

getOffsetParentFunction · 0.85
getSupportedPropertyNameFunction · 0.85
getBoundariesFunction · 0.85
_extendsFunction · 0.85
definePropertyFunction · 0.70
forEachMethod · 0.45

Tested by

no test coverage detected