* @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)
| 4815 | |
| 4816 | |
| 4817 | function preventOverflow(data, options) { |
| 4818 | var boundariesElement = options.boundariesElement || getOffsetParent(data.instance.popper); // If offsetParent is the reference element, we really want to |
| 4819 | // go one step up and use the next offsetParent as reference to |
| 4820 | // avoid to make this modifier completely useless and look like broken |
| 4821 | |
| 4822 | if (data.instance.reference === boundariesElement) { |
| 4823 | boundariesElement = getOffsetParent(boundariesElement); |
| 4824 | } // NOTE: DOM access here |
| 4825 | // resets the popper's position so that the document size can be calculated excluding |
| 4826 | // the size of the popper element itself |
| 4827 | |
| 4828 | |
| 4829 | var transformProp = getSupportedPropertyName('transform'); |
| 4830 | var popperStyles = data.instance.popper.style; // assignment to help minification |
| 4831 | |
| 4832 | var top = popperStyles.top, |
| 4833 | left = popperStyles.left, |
| 4834 | transform = popperStyles[transformProp]; |
| 4835 | popperStyles.top = ''; |
| 4836 | popperStyles.left = ''; |
| 4837 | popperStyles[transformProp] = ''; |
| 4838 | var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed); // NOTE: DOM access here |
| 4839 | // restores the original style properties after the offsets have been computed |
| 4840 | |
| 4841 | popperStyles.top = top; |
| 4842 | popperStyles.left = left; |
| 4843 | popperStyles[transformProp] = transform; |
| 4844 | options.boundaries = boundaries; |
| 4845 | var order = options.priority; |
| 4846 | var popper = data.offsets.popper; |
| 4847 | var check = { |
| 4848 | primary: function primary(placement) { |
| 4849 | var value = popper[placement]; |
| 4850 | |
| 4851 | if (popper[placement] < boundaries[placement] && !options.escapeWithReference) { |
| 4852 | value = Math.max(popper[placement], boundaries[placement]); |
| 4853 | } |
| 4854 | |
| 4855 | return defineProperty({}, placement, value); |
| 4856 | }, |
| 4857 | secondary: function secondary(placement) { |
| 4858 | var mainSide = placement === 'right' ? 'left' : 'top'; |
| 4859 | var value = popper[mainSide]; |
| 4860 | |
| 4861 | if (popper[placement] > boundaries[placement] && !options.escapeWithReference) { |
| 4862 | value = Math.min(popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height)); |
| 4863 | } |
| 4864 | |
| 4865 | return defineProperty({}, mainSide, value); |
| 4866 | } |
| 4867 | }; |
| 4868 | order.forEach(function (placement) { |
| 4869 | var side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary'; |
| 4870 | popper = _extends({}, popper, check[side](placement)); |
| 4871 | }); |
| 4872 | data.offsets.popper = popper; |
| 4873 | return data; |
| 4874 | } |
nothing calls this directly
no test coverage detected
searching dependent graphs…