Skip to content

Commit

Permalink
v0.5.1
Browse files Browse the repository at this point in the history
  • Loading branch information
FezVrasta committed Jul 7, 2016
1 parent 0a79027 commit aaf9026
Show file tree
Hide file tree
Showing 5 changed files with 41 additions and 8 deletions.
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
## v0.5.1
- 0a79027: Added support for a reference el that is both fixed and transformed. (thanks @hgascoigne)

## v0.5.0
- f4e3659: 3rd party modifiers now can set custom styling to poppers (prep for #52)

Expand Down
38 changes: 34 additions & 4 deletions build/popper.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/**
* @fileOverview Kickass library to create and place poppers near their reference elements.
* @version 0.5.0
* @version 0.5.1
* @license
* Copyright (c) 2016 Federico Zivolo and contributors
*
Expand Down Expand Up @@ -180,6 +180,9 @@
this.state.position = this._getPosition(this._popper, this._reference);
setStyle(this._popper, { position: this.state.position});

// determine how we should set the origin of offsets
this.state.isParentTransformed = this._getIsParentTransformed(this._popper);

// fire the first update to position the popper in the right place
this.update();

Expand Down Expand Up @@ -378,6 +381,15 @@
return isParentFixed ? 'fixed' : 'absolute';
};

/**
* Helper used to determine if the popper's parent is transformed.
* @param {[type]} popper [description]
* @return {[type]} [description]
*/
Popper.prototype._getIsParentTransformed = function(popper) {
return isTransformed(popper.parentNode);
};

/**
* Get offsets to the popper
* @method
Expand All @@ -394,10 +406,13 @@
popperOffsets.position = this.state.position;
var isParentFixed = popperOffsets.position === 'fixed';

var isParentTransformed = this.state.isParentTransformed;

//
// Get reference element position
//
var referenceOffsets = getOffsetRectRelativeToCustomParent(reference, getOffsetParent(popper), isParentFixed);
var offsetParent = (isParentFixed && isParentTransformed) ? getOffsetParent(reference) : getOffsetParent(popper);
var referenceOffsets = getOffsetRectRelativeToCustomParent(reference, offsetParent, isParentFixed, isParentTransformed);

//
// Get popper sizes
Expand Down Expand Up @@ -1075,6 +1090,21 @@
return element.parentNode ? isFixed(element.parentNode) : element;
}

/**
* Check if the given element has transforms applied to itself or a parent
* @param {Element} element
* @return {Boolean} answer to "isTransformed?"
*/
function isTransformed(element) {
if (element === root.document.body) {
return false;
}
if (getStyleComputedProperty(element, 'transform') !== 'none') {
return true;
}
return element.parentNode ? isTransformed(element.parentNode) : element;
}

/**
* Set the style to the given popper
* @function
Expand Down Expand Up @@ -1157,11 +1187,11 @@
* @param {HTMLElement} parent
* @return {Object} rect
*/
function getOffsetRectRelativeToCustomParent(element, parent, fixed) {
function getOffsetRectRelativeToCustomParent(element, parent, fixed, transformed) {
var elementRect = getBoundingClientRect(element);
var parentRect = getBoundingClientRect(parent);

if (fixed) {
if (fixed && !transformed) {
var scrollParent = getScrollParent(parent);
parentRect.top += scrollParent.scrollTop;
parentRect.bottom += scrollParent.scrollTop;
Expand Down
4 changes: 2 additions & 2 deletions build/popper.min.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion build/popper.min.js.map

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "popper.js",
"version": "0.5.0",
"version": "0.5.1",
"description": "A kickass library to manage your poppers",
"main": "src/popper.js",
"scripts": {
Expand Down

0 comments on commit aaf9026

Please sign in to comment.