diff --git a/lib/components/ModalPortal.js b/lib/components/ModalPortal.js index 5faec109..298db952 100644 --- a/lib/components/ModalPortal.js +++ b/lib/components/ModalPortal.js @@ -1,4 +1,5 @@ var React = require('react'); +var HTMLDOMPropertyConfig = require('react/lib/HTMLDOMPropertyConfig'); var div = React.DOM.div; var focusManager = require('../helpers/focusManager'); var scopeTab = require('../helpers/scopeTab'); @@ -18,6 +19,18 @@ var CLASS_NAMES = { } }; +function getCustomProps(props) { + var customProps = {}; + + Object.keys(props).forEach(function (key) { + if (HTMLDOMPropertyConfig.isCustomAttribute(key)) { + customProps[key] = props[key]; + } + }); + + return customProps; +} + var ModalPortal = module.exports = React.createClass({ displayName: 'ModalPortal', @@ -194,7 +207,7 @@ var ModalPortal = module.exports = React.createClass({ onMouseDown: this.handleOverlayMouseDown, onMouseUp: this.handleOverlayMouseUp }, - div({ + div(Assign(getCustomProps(this.props), { ref: "content", style: Assign({}, contentStyles, this.props.style.content || {}), className: this.buildClassName('content', this.props.className), @@ -203,7 +216,7 @@ var ModalPortal = module.exports = React.createClass({ onMouseDown: this.handleContentMouseDown, onMouseUp: this.handleContentMouseUp, role: "dialog" - }, + }), this.props.children ) ) diff --git a/specs/Modal.spec.js b/specs/Modal.spec.js index 66453bd7..dae9364e 100644 --- a/specs/Modal.spec.js +++ b/specs/Modal.spec.js @@ -140,6 +140,18 @@ describe('Modal', function () { unmountModal(); }); + it('supports custom aria-attributes', function () { + var modal = renderModal({isOpen: true, 'aria-foo': 'bar'}); + equal(modal.portal.refs.content.getAttribute('aria-foo'), 'bar'); + unmountModal(); + }); + + it('supports custom data-attributes', function () { + var modal = renderModal({isOpen: true, 'data-foo': 'bar'}); + equal(modal.portal.refs.content.getAttribute('data-foo'), 'bar'); + unmountModal(); + }); + it('overrides the default styles when a custom classname is used', function () { var modal = renderModal({isOpen: true, className: 'myClass'}); equal(modal.portal.refs.content.style.top, '');