react-modal = function (props, context, updater) { // This constructor gets overridden by mocks. The argument is used // by mocks to assert on what gets mounted. if (process.env.NODE_ENV !== 'production') { process.env.NODE_ENV !== 'production' ? warning(this instanceof Constructor, 'Something is calling a React component directly . Use a factory or ' + 'JSX instead. See: https://fb.me/react-legacyfactory') : void 0; } // Wire up auto-binding if (this.__reactAutoBindPairs.length) { bindAutoBindMethods(this); } this.props = props; this.context = context; this.refs = emptyObject; this.updater = updater || ReactNoopUpdateQueue; this.state = null; // ReactClasses doesn't have constructors. Instead, they use the // getInitialState and componentWillMount methods for initialization. var initialState = this.getInitialState ? this.getInitialState() : null; if (process.env.NODE_ENV !== 'production') { // We allow auto-mocks to proceed as if they're returning null. if (initialState === undefined && this.getInitialState._isMockFunction) { // This is probably bad practice. Consider warning here and // deprecating this convenience. initialState = null; } } _invariant(typeof initialState === 'object' && !Array.isArray(initialState), '%s.getInitialState(): must return an object or null ', Constructor.displayName || 'ReactCompositeComponent'); this.state = initialState; }
n/a
Modal = function (props, context, updater) { // This constructor gets overridden by mocks. The argument is used // by mocks to assert on what gets mounted. if (process.env.NODE_ENV !== 'production') { process.env.NODE_ENV !== 'production' ? warning(this instanceof Constructor, 'Something is calling a React component directly . Use a factory or ' + 'JSX instead. See: https://fb.me/react-legacyfactory') : void 0; } // Wire up auto-binding if (this.__reactAutoBindPairs.length) { bindAutoBindMethods(this); } this.props = props; this.context = context; this.refs = emptyObject; this.updater = updater || ReactNoopUpdateQueue; this.state = null; // ReactClasses doesn't have constructors. Instead, they use the // getInitialState and componentWillMount methods for initialization. var initialState = this.getInitialState ? this.getInitialState() : null; if (process.env.NODE_ENV !== 'production') { // We allow auto-mocks to proceed as if they're returning null. if (initialState === undefined && this.getInitialState._isMockFunction) { // This is probably bad practice. Consider warning here and // deprecating this convenience. initialState = null; } } _invariant(typeof initialState === 'object' && !Array.isArray(initialState), '%s.getInitialState(): must return an object or null ', Constructor.displayName || 'ReactCompositeComponent'); this.state = initialState; }
n/a
ModalPortal = function (props, context, updater) { // This constructor gets overridden by mocks. The argument is used // by mocks to assert on what gets mounted. if (process.env.NODE_ENV !== 'production') { process.env.NODE_ENV !== 'production' ? warning(this instanceof Constructor, 'Something is calling a React component directly . Use a factory or ' + 'JSX instead. See: https://fb.me/react-legacyfactory') : void 0; } // Wire up auto-binding if (this.__reactAutoBindPairs.length) { bindAutoBindMethods(this); } this.props = props; this.context = context; this.refs = emptyObject; this.updater = updater || ReactNoopUpdateQueue; this.state = null; // ReactClasses doesn't have constructors. Instead, they use the // getInitialState and componentWillMount methods for initialization. var initialState = this.getInitialState ? this.getInitialState() : null; if (process.env.NODE_ENV !== 'production') { // We allow auto-mocks to proceed as if they're returning null. if (initialState === undefined && this.getInitialState._isMockFunction) { // This is probably bad practice. Consider warning here and // deprecating this convenience. initialState = null; } } _invariant(typeof initialState === 'object' && !Array.isArray(initialState), '%s.getInitialState(): must return an object or null ', Constructor.displayName || 'ReactCompositeComponent'); this.state = initialState; }
n/a
getDefaultProps = function () { return { isOpen: false, portalClassName: 'ReactModalPortal', ariaHideApp: true, closeTimeoutMS: 0, shouldCloseOnOverlayClick: true, parentSelector: function () { return document.body; } }; }
n/a
injectCSS = function () { "production" !== process.env.NODE_ENV && console.warn('React-Modal: injectCSS has been deprecated ' + 'and no longer has any effect. It will be removed in a later version'); }
n/a
propTypes.appElement = function () { [native code] }
n/a
propTypes.ariaHideApp = function () { [native code] }
n/a
propTypes.closeTimeoutMS = function () { [native code] }
n/a
propTypes.onAfterOpen = function () { [native code] }
n/a
propTypes.portalClassName = function () { [native code] }
n/a
propTypes.style = function () { [native code] }
n/a
setAppElement = function (element) { AppElement = ariaAppHider.setElement(element); }
...
/*
The app element allows you to specify the portion of your app that should be hidden (via aria-hidden)
to prevent assistive technologies such as screenreaders from reading content outside of the content of
your modal. It can be specified in the following ways:
* element
Modal.setAppElement(appElement);
* query selector - uses the first element found if you pass in a class.
Modal.setAppElement('#your-app-element');
*/
var appElement = document.getElementById('your-app-element');
...
Modal = function (props, context, updater) { // This constructor gets overridden by mocks. The argument is used // by mocks to assert on what gets mounted. if (process.env.NODE_ENV !== 'production') { process.env.NODE_ENV !== 'production' ? warning(this instanceof Constructor, 'Something is calling a React component directly . Use a factory or ' + 'JSX instead. See: https://fb.me/react-legacyfactory') : void 0; } // Wire up auto-binding if (this.__reactAutoBindPairs.length) { bindAutoBindMethods(this); } this.props = props; this.context = context; this.refs = emptyObject; this.updater = updater || ReactNoopUpdateQueue; this.state = null; // ReactClasses doesn't have constructors. Instead, they use the // getInitialState and componentWillMount methods for initialization. var initialState = this.getInitialState ? this.getInitialState() : null; if (process.env.NODE_ENV !== 'production') { // We allow auto-mocks to proceed as if they're returning null. if (initialState === undefined && this.getInitialState._isMockFunction) { // This is probably bad practice. Consider warning here and // deprecating this convenience. initialState = null; } } _invariant(typeof initialState === 'object' && !Array.isArray(initialState), '%s.getInitialState(): must return an object or null ', Constructor.displayName || 'ReactCompositeComponent'); this.state = initialState; }
n/a
getDefaultProps = function () { return { isOpen: false, portalClassName: 'ReactModalPortal', ariaHideApp: true, closeTimeoutMS: 0, shouldCloseOnOverlayClick: true, parentSelector: function () { return document.body; } }; }
n/a
injectCSS = function () { "production" !== process.env.NODE_ENV && console.warn('React-Modal: injectCSS has been deprecated ' + 'and no longer has any effect. It will be removed in a later version'); }
n/a
setAppElement = function (element) { AppElement = ariaAppHider.setElement(element); }
...
/*
The app element allows you to specify the portion of your app that should be hidden (via aria-hidden)
to prevent assistive technologies such as screenreaders from reading content outside of the content of
your modal. It can be specified in the following ways:
* element
Modal.setAppElement(appElement);
* query selector - uses the first element found if you pass in a class.
Modal.setAppElement('#your-app-element');
*/
var appElement = document.getElementById('your-app-element');
...
function chainedFunction() { one.apply(this, arguments); two.apply(this, arguments); }
n/a
componentWillReceiveProps = function (newProps) { if (newProps.isOpen) refCount.add(this); if (!newProps.isOpen) refCount.remove(this); var currentParent = getParentElement(this.props.parentSelector); var newParent = getParentElement(newProps.parentSelector); if(newParent !== currentParent) { currentParent.removeChild(this.node); newParent.appendChild(this.node); } this.renderPortal(newProps); }
n/a
function chainedFunction() { one.apply(this, arguments); two.apply(this, arguments); }
n/a
constructor = function (props, context, updater) { // This constructor gets overridden by mocks. The argument is used // by mocks to assert on what gets mounted. if (process.env.NODE_ENV !== 'production') { process.env.NODE_ENV !== 'production' ? warning(this instanceof Constructor, 'Something is calling a React component directly . Use a factory or ' + 'JSX instead. See: https://fb.me/react-legacyfactory') : void 0; } // Wire up auto-binding if (this.__reactAutoBindPairs.length) { bindAutoBindMethods(this); } this.props = props; this.context = context; this.refs = emptyObject; this.updater = updater || ReactNoopUpdateQueue; this.state = null; // ReactClasses doesn't have constructors. Instead, they use the // getInitialState and componentWillMount methods for initialization. var initialState = this.getInitialState ? this.getInitialState() : null; if (process.env.NODE_ENV !== 'production') { // We allow auto-mocks to proceed as if they're returning null. if (initialState === undefined && this.getInitialState._isMockFunction) { // This is probably bad practice. Consider warning here and // deprecating this convenience. initialState = null; } } _invariant(typeof initialState === 'object' && !Array.isArray(initialState), '%s.getInitialState(): must return an object or null ', Constructor.displayName || 'ReactCompositeComponent'); this.state = initialState; }
n/a
removePortal = function () { ReactDOM.unmountComponentAtNode(this.node); var parent = getParentElement(this.props.parentSelector); parent.removeChild(this.node); if (refCount.count() === 0) { elementClass(document.body).remove('ReactModal__Body--open'); } }
n/a
render = function () { return React.DOM.noscript(); }
...
</form>
</Modal>
</div>
);
}
});
ReactDOM.render(<App/>, appElement);
```
# Testing
When using React Test Utils with this library, here are some things to keep in mind:
- You need to set isOpen={true} on the modal component for it to render its children.
- You need to use the `.portal` property, as in `ReactDOM.findDOMNode(renderedModal.portal)` or `TestUtils.scryRenderedDOMComponentsWithClass
(Modal.portal, 'my-modal-class')` to acquire a handle to the inner contents of your modal.
...
renderPortal = function (props) { if (props.isOpen || refCount.count() > 0) { elementClass(document.body).add('ReactModal__Body--open'); } else { elementClass(document.body).remove('ReactModal__Body--open'); } if (props.ariaHideApp) { ariaAppHider.toggle(props.isOpen, props.appElement); } this.portal = renderSubtreeIntoContainer(this, ModalPortal(Assign({}, props, {defaultStyles: Modal.defaultStyles})), this.node ); }
n/a
1 = function () { ReactDOM.unmountComponentAtNode(this.node); var parent = getParentElement(this.props.parentSelector); parent.removeChild(this.node); if (refCount.count() === 0) { elementClass(document.body).remove('ReactModal__Body--open'); } }
n/a
3 = function (props) { if (props.isOpen || refCount.count() > 0) { elementClass(document.body).add('ReactModal__Body--open'); } else { elementClass(document.body).remove('ReactModal__Body--open'); } if (props.ariaHideApp) { ariaAppHider.toggle(props.isOpen, props.appElement); } this.portal = renderSubtreeIntoContainer(this, ModalPortal(Assign({}, props, {defaultStyles: Modal.defaultStyles})), this.node ); }
n/a
ModalPortal = function (props, context, updater) { // This constructor gets overridden by mocks. The argument is used // by mocks to assert on what gets mounted. if (process.env.NODE_ENV !== 'production') { process.env.NODE_ENV !== 'production' ? warning(this instanceof Constructor, 'Something is calling a React component directly . Use a factory or ' + 'JSX instead. See: https://fb.me/react-legacyfactory') : void 0; } // Wire up auto-binding if (this.__reactAutoBindPairs.length) { bindAutoBindMethods(this); } this.props = props; this.context = context; this.refs = emptyObject; this.updater = updater || ReactNoopUpdateQueue; this.state = null; // ReactClasses doesn't have constructors. Instead, they use the // getInitialState and componentWillMount methods for initialization. var initialState = this.getInitialState ? this.getInitialState() : null; if (process.env.NODE_ENV !== 'production') { // We allow auto-mocks to proceed as if they're returning null. if (initialState === undefined && this.getInitialState._isMockFunction) { // This is probably bad practice. Consider warning here and // deprecating this convenience. initialState = null; } } _invariant(typeof initialState === 'object' && !Array.isArray(initialState), '%s.getInitialState(): must return an object or null ', Constructor.displayName || 'ReactCompositeComponent'); this.state = initialState; }
n/a
getDefaultProps = function () { return { style: { overlay: {}, content: {} } }; }
n/a
afterClose = function () { focusManager.returnFocus(); focusManager.teardownScopedFocus(); }
n/a
buildClassName = function (which, additional) { var className = CLASS_NAMES[which].base; if (this.state.afterOpen) className += ' '+CLASS_NAMES[which].afterOpen; if (this.state.beforeClose) className += ' '+CLASS_NAMES[which].beforeClose; return additional ? className + ' ' + additional : className; }
...
render: function() {
var contentStyles = (this.props.className) ? {} : this.props.defaultStyles.content;
var overlayStyles = (this.props.overlayClassName) ? {} : this.props.defaultStyles.overlay;
return this.shouldBeClosed() ? div() : (
div({
ref: "overlay",
className: this.buildClassName('overlay', this.props.overlayClassName),
style: Assign({}, overlayStyles, this.props.style.overlay || {}),
onClick: this.handleOverlayOnClick
},
div({
ref: "content",
style: Assign({}, contentStyles, this.props.style.content || {}),
className: this.buildClassName('content', this.props.className),
...
close = function () { if (this.props.closeTimeoutMS > 0) this.closeWithTimeout(); else this.closeWithoutTimeout(); }
...
componentWillReceiveProps: function(newProps) {
// Focus only needs to be set once when the modal is being opened
if (!this.props.isOpen && newProps.isOpen) {
this.setFocusAfterRender(true);
this.open();
} else if (this.props.isOpen && !newProps.isOpen) {
this.close();
}
},
componentDidUpdate: function () {
if (this.focusAfterRender) {
this.focusContent();
this.setFocusAfterRender(false);
...
closeWithTimeout = function () { var closesAt = Date.now() + this.props.closeTimeoutMS; this.setState({beforeClose: true, closesAt: closesAt}, function() { this.closeTimer = setTimeout(this.closeWithoutTimeout, this.state.closesAt - Date.now()); }.bind(this)); }
...
}
}.bind(this));
}
},
close: function() {
if (this.props.closeTimeoutMS > 0)
this.closeWithTimeout();
else
this.closeWithoutTimeout();
},
focusContent: function() {
// Don't steal focus from inner elements
if (!this.contentHasFocus()) {
...
closeWithoutTimeout = function () { this.setState({ beforeClose: false, isOpen: false, afterOpen: false, closesAt: null }, this.afterClose); }
...
}
},
close: function() {
if (this.props.closeTimeoutMS > 0)
this.closeWithTimeout();
else
this.closeWithoutTimeout();
},
focusContent: function() {
// Don't steal focus from inner elements
if (!this.contentHasFocus()) {
this.refs.content.focus();
}
...
function chainedFunction() { one.apply(this, arguments); two.apply(this, arguments); }
n/a
componentDidUpdate = function () { if (this.focusAfterRender) { this.focusContent(); this.setFocusAfterRender(false); } }
n/a
componentWillReceiveProps = function (newProps) { // Focus only needs to be set once when the modal is being opened if (!this.props.isOpen && newProps.isOpen) { this.setFocusAfterRender(true); this.open(); } else if (this.props.isOpen && !newProps.isOpen) { this.close(); } }
n/a
function chainedFunction() { one.apply(this, arguments); two.apply(this, arguments); }
n/a
constructor = function (props, context, updater) { // This constructor gets overridden by mocks. The argument is used // by mocks to assert on what gets mounted. if (process.env.NODE_ENV !== 'production') { process.env.NODE_ENV !== 'production' ? warning(this instanceof Constructor, 'Something is calling a React component directly . Use a factory or ' + 'JSX instead. See: https://fb.me/react-legacyfactory') : void 0; } // Wire up auto-binding if (this.__reactAutoBindPairs.length) { bindAutoBindMethods(this); } this.props = props; this.context = context; this.refs = emptyObject; this.updater = updater || ReactNoopUpdateQueue; this.state = null; // ReactClasses doesn't have constructors. Instead, they use the // getInitialState and componentWillMount methods for initialization. var initialState = this.getInitialState ? this.getInitialState() : null; if (process.env.NODE_ENV !== 'production') { // We allow auto-mocks to proceed as if they're returning null. if (initialState === undefined && this.getInitialState._isMockFunction) { // This is probably bad practice. Consider warning here and // deprecating this convenience. initialState = null; } } _invariant(typeof initialState === 'object' && !Array.isArray(initialState), '%s.getInitialState(): must return an object or null ', Constructor.displayName || 'ReactCompositeComponent'); this.state = initialState; }
n/a
contentHasFocus = function () { return document.activeElement === this.refs.content || this.refs.content.contains(document.activeElement); }
...
this.closeWithTimeout();
else
this.closeWithoutTimeout();
},
focusContent: function() {
// Don't steal focus from inner elements
if (!this.contentHasFocus()) {
this.refs.content.focus();
}
},
closeWithTimeout: function() {
var closesAt = Date.now() + this.props.closeTimeoutMS;
this.setState({beforeClose: true, closesAt: closesAt}, function() {
...
focusContent = function () { // Don't steal focus from inner elements if (!this.contentHasFocus()) { this.refs.content.focus(); } }
...
} else if (this.props.isOpen && !newProps.isOpen) {
this.close();
}
},
componentDidUpdate: function () {
if (this.focusAfterRender) {
this.focusContent();
this.setFocusAfterRender(false);
}
},
setFocusAfterRender: function (focus) {
this.focusAfterRender = focus;
},
...
getInitialState = function () { return { afterOpen: false, beforeClose: false }; }
n/a
handleContentOnClick = function () { this.shouldClose = false; }
n/a
handleKeyDown = function (event) { if (event.keyCode == 9 /*tab*/) scopeTab(this.refs.content, event); if (event.keyCode == 27 /*esc*/) { event.preventDefault(); this.requestClose(event); } }
n/a
handleOverlayOnClick = function (event) { if (this.shouldClose === null) { this.shouldClose = true; } if (this.shouldClose && this.props.shouldCloseOnOverlayClick) { if (this.ownerHandlesClose()) this.requestClose(event); else this.focusContent(); } this.shouldClose = null; }
n/a
open = function () { if (this.state.afterOpen && this.state.beforeClose) { clearTimeout(this.closeTimer); this.setState({ beforeClose: false }); } else { focusManager.setupScopedFocus(this.node); focusManager.markForFocusLater(); this.setState({isOpen: true}, function() { this.setState({afterOpen: true}); if (this.props.isOpen && this.props.onAfterOpen) { this.props.onAfterOpen(); } }.bind(this)); } }
...
};
},
componentDidMount: function() {
// Focus needs to be set when mounting and already open
if (this.props.isOpen) {
this.setFocusAfterRender(true);
this.open();
}
},
componentWillUnmount: function() {
clearTimeout(this.closeTimer);
},
...
ownerHandlesClose = function () { return this.props.onRequestClose; }
...
handleOverlayOnClick: function (event) {
if (this.shouldClose === null) {
this.shouldClose = true;
}
if (this.shouldClose && this.props.shouldCloseOnOverlayClick) {
if (this.ownerHandlesClose())
this.requestClose(event);
else
this.focusContent();
}
this.shouldClose = null;
},
...
render = function () { var contentStyles = (this.props.className) ? {} : this.props.defaultStyles.content; var overlayStyles = (this.props.overlayClassName) ? {} : this.props.defaultStyles.overlay; return this.shouldBeClosed() ? div() : ( div({ ref: "overlay", className: this.buildClassName('overlay', this.props.overlayClassName), style: Assign({}, overlayStyles, this.props.style.overlay || {}), onClick: this.handleOverlayOnClick }, div({ ref: "content", style: Assign({}, contentStyles, this.props.style.content || {}), className: this.buildClassName('content', this.props.className), tabIndex: "-1", onKeyDown: this.handleKeyDown, onClick: this.handleContentOnClick, role: this.props.role, "aria-label": this.props.contentLabel }, this.props.children ) ) ); }
...
</form>
</Modal>
</div>
);
}
});
ReactDOM.render(<App/>, appElement);
```
# Testing
When using React Test Utils with this library, here are some things to keep in mind:
- You need to set isOpen={true} on the modal component for it to render its children.
- You need to use the `.portal` property, as in `ReactDOM.findDOMNode(renderedModal.portal)` or `TestUtils.scryRenderedDOMComponentsWithClass
(Modal.portal, 'my-modal-class')` to acquire a handle to the inner contents of your modal.
...
requestClose = function (event) { if (this.ownerHandlesClose()) this.props.onRequestClose(event); }
...
}, this.afterClose);
},
handleKeyDown: function(event) {
if (event.keyCode == 9 /*tab*/) scopeTab(this.refs.content, event);
if (event.keyCode == 27 /*esc*/) {
event.preventDefault();
this.requestClose(event);
}
},
handleOverlayOnClick: function (event) {
if (this.shouldClose === null) {
this.shouldClose = true;
}
...
setFocusAfterRender = function (focus) { this.focusAfterRender = focus; }
...
beforeClose: false
};
},
componentDidMount: function() {
// Focus needs to be set when mounting and already open
if (this.props.isOpen) {
this.setFocusAfterRender(true);
this.open();
}
},
componentWillUnmount: function() {
clearTimeout(this.closeTimer);
},
...
shouldBeClosed = function () { return !this.state.isOpen && !this.state.beforeClose; }
...
return additional ? className + ' ' + additional : className;
},
render: function() {
var contentStyles = (this.props.className) ? {} : this.props.defaultStyles.content;
var overlayStyles = (this.props.overlayClassName) ? {} : this.props.defaultStyles.overlay;
return this.shouldBeClosed() ? div() : (
div({
ref: "overlay",
className: this.buildClassName('overlay', this.props.overlayClassName),
style: Assign({}, overlayStyles, this.props.style.overlay || {}),
onClick: this.handleOverlayOnClick
},
div({
...
function hide(appElement) { validateElement(appElement); (appElement || _element).setAttribute('aria-hidden', 'true'); }
n/a
function resetForTesting() { _element = document.body; }
n/a
function setElement(element) { if (typeof element === 'string') { var el = document.querySelectorAll(element); element = 'length' in el ? el[0] : el; } _element = element || _element; return _element; }
n/a
function show(appElement) { validateElement(appElement); (appElement || _element).removeAttribute('aria-hidden'); }
n/a
function toggle(shouldHide, appElement) { if (shouldHide) hide(appElement); else show(appElement); }
n/a
parentSelector = function () { return document.body; }
n/a
markForFocusLater = function () { focusLaterElements.push(document.activeElement); }
...
open: function () {
if (this.state.afterOpen && this.state.beforeClose) {
clearTimeout(this.closeTimer);
this.setState({ beforeClose: false });
} else {
focusManager.setupScopedFocus(this.node);
focusManager.markForFocusLater();
this.setState({isOpen: true}, function() {
this.setState({afterOpen: true});
if (this.props.isOpen && this.props.onAfterOpen) {
this.props.onAfterOpen();
}
}.bind(this));
...
returnFocus = function () { var toFocus = null; try { toFocus = focusLaterElements.pop(); toFocus.focus(); return; } catch (e) { console.warn('You tried to return focus to '+toFocus+' but it is not in the DOM anymore'); } }
...
},
setFocusAfterRender: function (focus) {
this.focusAfterRender = focus;
},
afterClose: function () {
focusManager.returnFocus();
focusManager.teardownScopedFocus();
},
open: function () {
if (this.state.afterOpen && this.state.beforeClose) {
clearTimeout(this.closeTimer);
this.setState({ beforeClose: false });
...
setupScopedFocus = function (element) { modalElement = element; if (window.addEventListener) { window.addEventListener('blur', handleBlur, false); document.addEventListener('focus', handleFocus, true); } else { window.attachEvent('onBlur', handleBlur); document.attachEvent('onFocus', handleFocus); } }
...
},
open: function () {
if (this.state.afterOpen && this.state.beforeClose) {
clearTimeout(this.closeTimer);
this.setState({ beforeClose: false });
} else {
focusManager.setupScopedFocus(this.node);
focusManager.markForFocusLater();
this.setState({isOpen: true}, function() {
this.setState({afterOpen: true});
if (this.props.isOpen && this.props.onAfterOpen) {
this.props.onAfterOpen();
}
...
teardownScopedFocus = function () { modalElement = null; if (window.addEventListener) { window.removeEventListener('blur', handleBlur); document.removeEventListener('focus', handleFocus); } else { window.detachEvent('onBlur', handleBlur); document.detachEvent('onFocus', handleFocus); } }
...
setFocusAfterRender: function (focus) {
this.focusAfterRender = focus;
},
afterClose: function () {
focusManager.returnFocus();
focusManager.teardownScopedFocus();
},
open: function () {
if (this.state.afterOpen && this.state.beforeClose) {
clearTimeout(this.closeTimer);
this.setState({ beforeClose: false });
} else {
...
appElement = function () { [native code] }
n/a
ariaHideApp = function () { [native code] }
n/a
closeTimeoutMS = function () { [native code] }
n/a
contentLabel = function () { [native code] }
n/a
isOpen = function () { [native code] }
n/a
onAfterOpen = function () { [native code] }
...
} else {
focusManager.setupScopedFocus(this.node);
focusManager.markForFocusLater();
this.setState({isOpen: true}, function() {
this.setState({afterOpen: true});
if (this.props.isOpen && this.props.onAfterOpen) {
this.props.onAfterOpen();
}
}.bind(this));
}
},
close: function() {
if (this.props.closeTimeoutMS > 0)
...
onRequestClose = function () { [native code] }
...
handleContentOnClick: function () {
this.shouldClose = false;
},
requestClose: function(event) {
if (this.ownerHandlesClose())
this.props.onRequestClose(event);
},
ownerHandlesClose: function() {
return this.props.onRequestClose;
},
shouldBeClosed: function() {
...
parentSelector = function () { [native code] }
n/a
portalClassName = function () { [native code] }
n/a
role = function () { [native code] }
n/a
shouldCloseOnOverlayClick = function () { [native code] }
n/a
style = function () { [native code] }
n/a
appElement = function () { [native code] }
n/a
isRequired = function () { [native code] }
n/a
ariaHideApp = function () { [native code] }
n/a
isRequired = function () { [native code] }
n/a
closeTimeoutMS = function () { [native code] }
n/a
isRequired = function () { [native code] }
n/a
onAfterOpen = function () { [native code] }
...
} else {
focusManager.setupScopedFocus(this.node);
focusManager.markForFocusLater();
this.setState({isOpen: true}, function() {
this.setState({afterOpen: true});
if (this.props.isOpen && this.props.onAfterOpen) {
this.props.onAfterOpen();
}
}.bind(this));
}
},
close: function() {
if (this.props.closeTimeoutMS > 0)
...
isRequired = function () { [native code] }
n/a
portalClassName = function () { [native code] }
n/a
isRequired = function () { [native code] }
n/a
style = function () { [native code] }
n/a
isRequired = function () { [native code] }
n/a
add = function (element) { if (modals.indexOf(element) === -1) { modals.push(element); } }
n/a
count = function () { return modals.length; }
n/a
remove = function (element) { var index = modals.indexOf(element); if (index === -1) { return; } modals.splice(index, 1); }
n/a