You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

154 lines
5.4 KiB

  1. 'use strict';
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. var _objectWithoutProperties2 = require('babel-runtime/helpers/objectWithoutProperties');
  6. var _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);
  7. var _getPrototypeOf = require('babel-runtime/core-js/object/get-prototype-of');
  8. var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);
  9. var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
  10. var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
  11. var _createClass2 = require('babel-runtime/helpers/createClass');
  12. var _createClass3 = _interopRequireDefault(_createClass2);
  13. var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn');
  14. var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
  15. var _inherits2 = require('babel-runtime/helpers/inherits');
  16. var _inherits3 = _interopRequireDefault(_inherits2);
  17. var _simpleAssign = require('simple-assign');
  18. var _simpleAssign2 = _interopRequireDefault(_simpleAssign);
  19. var _react = require('react');
  20. var _react2 = _interopRequireDefault(_react);
  21. var _propTypes = require('prop-types');
  22. var _propTypes2 = _interopRequireDefault(_propTypes);
  23. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  24. /**
  25. * BeforeAfterWrapper
  26. * An alternative for the ::before and ::after css pseudo-elements for
  27. * components whose styles are defined in javascript instead of css.
  28. *
  29. * Usage: For the element that we want to apply before and after elements to,
  30. * wrap its children with BeforeAfterWrapper. For example:
  31. *
  32. * <Paper>
  33. * <Paper> <div> // See notice
  34. * <BeforeAfterWrapper> renders <div/> // before element
  35. * [children of paper] ------> [children of paper]
  36. * </BeforeAfterWrapper> <div/> // after element
  37. * </Paper> </div>
  38. * </Paper>
  39. *
  40. * Notice: Notice that this div bundles together our elements. If the element
  41. * that we want to apply before and after elements is a HTML tag (i.e. a
  42. * div, p, or button tag), we can avoid this extra nesting by passing using
  43. * the BeforeAfterWrapper in place of said tag like so:
  44. *
  45. * <p>
  46. * <BeforeAfterWrapper> do this instead <BeforeAfterWrapper elementType='p'>
  47. * [children of p] ------> [children of p]
  48. * </BeforeAfterWrapper> </BeforeAfterWrapper>
  49. * </p>
  50. *
  51. * BeforeAfterWrapper features spread functionality. This means that we can
  52. * pass HTML tag properties directly into the BeforeAfterWrapper tag.
  53. *
  54. * When using BeforeAfterWrapper, ensure that the parent of the beforeElement
  55. * and afterElement have a defined style position.
  56. */
  57. var styles = {
  58. box: {
  59. boxSizing: 'border-box'
  60. }
  61. };
  62. var BeforeAfterWrapper = function (_Component) {
  63. (0, _inherits3.default)(BeforeAfterWrapper, _Component);
  64. function BeforeAfterWrapper() {
  65. (0, _classCallCheck3.default)(this, BeforeAfterWrapper);
  66. return (0, _possibleConstructorReturn3.default)(this, (BeforeAfterWrapper.__proto__ || (0, _getPrototypeOf2.default)(BeforeAfterWrapper)).apply(this, arguments));
  67. }
  68. (0, _createClass3.default)(BeforeAfterWrapper, [{
  69. key: 'render',
  70. value: function render() {
  71. var _props = this.props,
  72. beforeStyle = _props.beforeStyle,
  73. afterStyle = _props.afterStyle,
  74. beforeElementType = _props.beforeElementType,
  75. afterElementType = _props.afterElementType,
  76. elementType = _props.elementType,
  77. other = (0, _objectWithoutProperties3.default)(_props, ['beforeStyle', 'afterStyle', 'beforeElementType', 'afterElementType', 'elementType']);
  78. var prepareStyles = this.context.muiTheme.prepareStyles;
  79. var beforeElement = void 0;
  80. var afterElement = void 0;
  81. if (beforeStyle) {
  82. beforeElement = _react2.default.createElement(this.props.beforeElementType, {
  83. style: prepareStyles((0, _simpleAssign2.default)({}, styles.box, beforeStyle)),
  84. key: '::before'
  85. });
  86. }
  87. if (afterStyle) {
  88. afterElement = _react2.default.createElement(this.props.afterElementType, {
  89. style: prepareStyles((0, _simpleAssign2.default)({}, styles.box, afterStyle)),
  90. key: '::after'
  91. });
  92. }
  93. var children = [beforeElement, this.props.children, afterElement];
  94. var props = other;
  95. props.style = prepareStyles((0, _simpleAssign2.default)({}, this.props.style));
  96. return _react2.default.createElement(this.props.elementType, props, children);
  97. }
  98. }]);
  99. return BeforeAfterWrapper;
  100. }(_react.Component);
  101. BeforeAfterWrapper.defaultProps = {
  102. beforeElementType: 'div',
  103. afterElementType: 'div',
  104. elementType: 'div'
  105. };
  106. BeforeAfterWrapper.contextTypes = {
  107. muiTheme: _propTypes2.default.object.isRequired
  108. };
  109. BeforeAfterWrapper.propTypes = process.env.NODE_ENV !== "production" ? {
  110. afterElementType: _propTypes2.default.string,
  111. afterStyle: _propTypes2.default.object,
  112. beforeElementType: _propTypes2.default.string,
  113. beforeStyle: _propTypes2.default.object,
  114. children: _propTypes2.default.node,
  115. elementType: _propTypes2.default.string,
  116. /**
  117. * Override the inline-styles of the root element.
  118. */
  119. style: _propTypes2.default.object
  120. } : {};
  121. exports.default = BeforeAfterWrapper;