diff --git a/packages/popper/package.json b/packages/popper/package.json index 56a432e5c2..015e9f1042 100644 --- a/packages/popper/package.json +++ b/packages/popper/package.json @@ -35,7 +35,7 @@ "build": "node bundle.js", "lint": "eslint .", "test": "popper-karma", - "test:dev": "NODE_ENV=development npm run test", + "test:dev": "BROWSERS=Chrome NODE_ENV=development npm run test", "coverage": "NODE_ENV=coverage npm run test" }, "devDependencies": { diff --git a/packages/popper/src/utils/getOffsetParent.js b/packages/popper/src/utils/getOffsetParent.js index 9003818b29..eeefc5675a 100644 --- a/packages/popper/src/utils/getOffsetParent.js +++ b/packages/popper/src/utils/getOffsetParent.js @@ -1,3 +1,4 @@ +import getStyleComputedProperty from './getStyleComputedProperty'; /** * Returns the offset parent of the given element * @method @@ -14,5 +15,14 @@ export default function getOffsetParent(element) { return window.document.documentElement; } + // .offsetParent will return the closest TD or TABLE in case + // no offsetParent is present, I hate this job... + if ( + ['TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 && + getStyleComputedProperty(offsetParent, 'position') === 'static' + ) { + return getOffsetParent(offsetParent); + } + return offsetParent; } diff --git a/packages/popper/src/utils/isOffsetContainer.js b/packages/popper/src/utils/isOffsetContainer.js index a570900ba9..ff0532c96d 100644 --- a/packages/popper/src/utils/isOffsetContainer.js +++ b/packages/popper/src/utils/isOffsetContainer.js @@ -1,9 +1,11 @@ +import getOffsetParent from './getOffsetParent'; + export default function isOffsetContainer(element) { const { nodeName } = element; if (nodeName === 'BODY') { return false; } return ( - nodeName === 'HTML' || element.firstElementChild.offsetParent === element + nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element ); } diff --git a/packages/popper/tests/functional/core.js b/packages/popper/tests/functional/core.js index 446ee48c6b..e67dec7dc5 100644 --- a/packages/popper/tests/functional/core.js +++ b/packages/popper/tests/functional/core.js @@ -1549,4 +1549,52 @@ describe('[core]', () => { }); } ); + + // test for #276 + it('works inside tables', done => { + jasmineWrapper.innerHTML = ` + +
+
+ ref
+
+
+ pop
+
+ |
+