Skip to content

Commit c13fed9

Browse files
author
evoyy
committed
Restore Modal.setAppElement() functionality
1 parent 1a0a069 commit c13fed9

File tree

3 files changed

+12
-3
lines changed

3 files changed

+12
-3
lines changed

Diff for: lib/components/Modal.js

+6-3
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,15 @@ var elementClass = require('element-class');
77
var renderSubtreeIntoContainer = require("react-dom").unstable_renderSubtreeIntoContainer;
88

99
var SafeHTMLElement = ExecutionEnvironment.canUseDOM ? window.HTMLElement : {};
10+
var AppElement = ExecutionEnvironment.canUseDOM ? document.body : {appendChild: function() {}};
1011

1112
var Modal = module.exports = React.createClass({
1213

1314
displayName: 'Modal',
1415
statics: {
15-
setAppElement: ariaAppHider.setElement,
16+
setAppElement: function(element) {
17+
AppElement = ariaAppHider.setElement(element);
18+
},
1619
injectCSS: function() {
1720
"production" !== process.env.NODE_ENV
1821
&& console.warn('React-Modal: injectCSS has been deprecated ' +
@@ -43,7 +46,7 @@ var Modal = module.exports = React.createClass({
4346
componentDidMount: function() {
4447
this.node = document.createElement('div');
4548
this.node.className = 'ReactModalPortal';
46-
document.body.appendChild(this.node);
49+
AppElement.appendChild(this.node);
4750
this.renderPortal(this.props);
4851
},
4952

@@ -53,7 +56,7 @@ var Modal = module.exports = React.createClass({
5356

5457
componentWillUnmount: function() {
5558
ReactDOM.unmountComponentAtNode(this.node);
56-
document.body.removeChild(this.node);
59+
AppElement.removeChild(this.node);
5760
},
5861

5962
renderPortal: function(props) {

Diff for: lib/helpers/ariaAppHider.js

+1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ function setElement(element) {
66
element = 'length' in el ? el[0] : el;
77
}
88
_element = element || _element;
9+
return _element;
910
}
1011

1112
function hide(appElement) {

Diff for: specs/Modal.spec.js

+5
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,9 @@ describe('Modal', function () {
3030
var node = document.createElement('div');
3131
Modal.setAppElement(app);
3232
ReactDOM.render(React.createElement(Modal, {isOpen: true}), node);
33+
var modalParent = app.querySelector('.ReactModalPortal').parentNode;
34+
assert.notEqual(modalParent, document.body);
35+
assert.equal(modalParent, app);
3336
equal(app.getAttribute('aria-hidden'), 'true');
3437
ariaAppHider.resetForTesting();
3538
ReactDOM.unmountComponentAtNode(node);
@@ -53,6 +56,7 @@ describe('Modal', function () {
5356
return React.DOM.div({}, React.createElement(Modal, {isOpen: true, ariaHideApp: false}, 'hello'));
5457
}
5558
});
59+
Modal.setAppElement(document.body);
5660
ReactDOM.render(React.createElement(App), node);
5761
var modalParent = document.body.querySelector('.ReactModalPortal').parentNode;
5862
equal(modalParent, document.body);
@@ -76,6 +80,7 @@ describe('Modal', function () {
7680
equal(props.closeTimeoutMS, 0);
7781
ReactDOM.unmountComponentAtNode(node);
7882
ariaAppHider.resetForTesting();
83+
Modal.setAppElement(document.body); // restore default
7984
});
8085

8186
it('removes the portal node', function() {

0 commit comments

Comments
 (0)