You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					46 lines
				
				1.6 KiB
			
		
		
			
		
	
	
					46 lines
				
				1.6 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								import _extends from "@babel/runtime/helpers/esm/extends";
							 | 
						||
| 
								 | 
							
								import css from './css';
							 | 
						||
| 
								 | 
							
								import getOffset from './offset';
							 | 
						||
| 
								 | 
							
								import getOffsetParent from './offsetParent';
							 | 
						||
| 
								 | 
							
								import scrollLeft from './scrollLeft';
							 | 
						||
| 
								 | 
							
								import scrollTop from './scrollTop';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var nodeName = function nodeName(node) {
							 | 
						||
| 
								 | 
							
								  return node.nodeName && node.nodeName.toLowerCase();
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Returns the relative position of a given element.
							 | 
						||
| 
								 | 
							
								 * 
							 | 
						||
| 
								 | 
							
								 * @param node the element
							 | 
						||
| 
								 | 
							
								 * @param offsetParent the offset parent
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export default function position(node, offsetParent) {
							 | 
						||
| 
								 | 
							
								  var parentOffset = {
							 | 
						||
| 
								 | 
							
								    top: 0,
							 | 
						||
| 
								 | 
							
								    left: 0
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								  var offset; // Fixed elements are offset from window (parentOffset = {top:0, left: 0},
							 | 
						||
| 
								 | 
							
								  // because it is its only offset parent
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  if (css(node, 'position') === 'fixed') {
							 | 
						||
| 
								 | 
							
								    offset = node.getBoundingClientRect();
							 | 
						||
| 
								 | 
							
								  } else {
							 | 
						||
| 
								 | 
							
								    var parent = offsetParent || getOffsetParent(node);
							 | 
						||
| 
								 | 
							
								    offset = getOffset(node);
							 | 
						||
| 
								 | 
							
								    if (nodeName(parent) !== 'html') parentOffset = getOffset(parent);
							 | 
						||
| 
								 | 
							
								    var borderTop = String(css(parent, 'borderTopWidth') || 0);
							 | 
						||
| 
								 | 
							
								    parentOffset.top += parseInt(borderTop, 10) - scrollTop(parent) || 0;
							 | 
						||
| 
								 | 
							
								    var borderLeft = String(css(parent, 'borderLeftWidth') || 0);
							 | 
						||
| 
								 | 
							
								    parentOffset.left += parseInt(borderLeft, 10) - scrollLeft(parent) || 0;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  var marginTop = String(css(node, 'marginTop') || 0);
							 | 
						||
| 
								 | 
							
								  var marginLeft = String(css(node, 'marginLeft') || 0); // Subtract parent offsets and node margins
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  return _extends({}, offset, {
							 | 
						||
| 
								 | 
							
								    top: offset.top - parentOffset.top - (parseInt(marginTop, 10) || 0),
							 | 
						||
| 
								 | 
							
								    left: offset.left - parentOffset.left - (parseInt(marginLeft, 10) || 0)
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								}
							 |