No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.

hace 3 años
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. 'use strict';
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. var _getPrototypeOf = require('babel-runtime/core-js/object/get-prototype-of');
  6. var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);
  7. var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
  8. var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
  9. var _createClass2 = require('babel-runtime/helpers/createClass');
  10. var _createClass3 = _interopRequireDefault(_createClass2);
  11. var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn');
  12. var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
  13. var _inherits2 = require('babel-runtime/helpers/inherits');
  14. var _inherits3 = _interopRequireDefault(_inherits2);
  15. var _simpleAssign = require('simple-assign');
  16. var _simpleAssign2 = _interopRequireDefault(_simpleAssign);
  17. var _react = require('react');
  18. var _react2 = _interopRequireDefault(_react);
  19. var _propTypes = require('prop-types');
  20. var _propTypes2 = _interopRequireDefault(_propTypes);
  21. var _reactDom = require('react-dom');
  22. var _reactDom2 = _interopRequireDefault(_reactDom);
  23. var _shallowEqual = require('recompose/shallowEqual');
  24. var _shallowEqual2 = _interopRequireDefault(_shallowEqual);
  25. var _autoPrefix = require('../utils/autoPrefix');
  26. var _autoPrefix2 = _interopRequireDefault(_autoPrefix);
  27. var _transitions = require('../styles/transitions');
  28. var _transitions2 = _interopRequireDefault(_transitions);
  29. var _ScaleIn = require('./ScaleIn');
  30. var _ScaleIn2 = _interopRequireDefault(_ScaleIn);
  31. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  32. var pulsateDuration = 750;
  33. var FocusRipple = function (_Component) {
  34. (0, _inherits3.default)(FocusRipple, _Component);
  35. function FocusRipple() {
  36. var _ref;
  37. var _temp, _this, _ret;
  38. (0, _classCallCheck3.default)(this, FocusRipple);
  39. for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
  40. args[_key] = arguments[_key];
  41. }
  42. return _ret = (_temp = (_this = (0, _possibleConstructorReturn3.default)(this, (_ref = FocusRipple.__proto__ || (0, _getPrototypeOf2.default)(FocusRipple)).call.apply(_ref, [this].concat(args))), _this), _this.pulsate = function () {
  43. var innerCircle = _reactDom2.default.findDOMNode(_this.refs.innerCircle);
  44. if (!innerCircle) return;
  45. var startScale = 'scale(1)';
  46. var endScale = 'scale(0.85)';
  47. var currentScale = innerCircle.style.transform || startScale;
  48. var nextScale = currentScale === startScale ? endScale : startScale;
  49. _autoPrefix2.default.set(innerCircle.style, 'transform', nextScale);
  50. _this.timeout = setTimeout(_this.pulsate, pulsateDuration);
  51. }, _temp), (0, _possibleConstructorReturn3.default)(_this, _ret);
  52. }
  53. (0, _createClass3.default)(FocusRipple, [{
  54. key: 'componentDidMount',
  55. value: function componentDidMount() {
  56. if (this.props.show) {
  57. this.setRippleSize();
  58. this.pulsate();
  59. }
  60. }
  61. }, {
  62. key: 'shouldComponentUpdate',
  63. value: function shouldComponentUpdate(nextProps, nextState) {
  64. return !(0, _shallowEqual2.default)(this.props, nextProps) || !(0, _shallowEqual2.default)(this.state, nextState);
  65. }
  66. }, {
  67. key: 'componentDidUpdate',
  68. value: function componentDidUpdate() {
  69. if (this.props.show) {
  70. this.setRippleSize();
  71. this.pulsate();
  72. } else {
  73. if (this.timeout) clearTimeout(this.timeout);
  74. }
  75. }
  76. }, {
  77. key: 'componentWillUnmount',
  78. value: function componentWillUnmount() {
  79. clearTimeout(this.timeout);
  80. }
  81. }, {
  82. key: 'getRippleElement',
  83. value: function getRippleElement(props) {
  84. var color = props.color,
  85. innerStyle = props.innerStyle,
  86. opacity = props.opacity;
  87. var _context$muiTheme = this.context.muiTheme,
  88. prepareStyles = _context$muiTheme.prepareStyles,
  89. ripple = _context$muiTheme.ripple;
  90. var innerStyles = (0, _simpleAssign2.default)({
  91. position: 'absolute',
  92. height: '100%',
  93. width: '100%',
  94. borderRadius: '50%',
  95. opacity: opacity ? opacity : 0.16,
  96. backgroundColor: color || ripple.color,
  97. transition: _transitions2.default.easeOut(pulsateDuration + 'ms', 'transform', null, _transitions2.default.easeInOutFunction)
  98. }, innerStyle);
  99. return _react2.default.createElement('div', { ref: 'innerCircle', style: prepareStyles((0, _simpleAssign2.default)({}, innerStyles)) });
  100. }
  101. }, {
  102. key: 'setRippleSize',
  103. value: function setRippleSize() {
  104. var el = _reactDom2.default.findDOMNode(this.refs.innerCircle);
  105. var height = el.offsetHeight;
  106. var width = el.offsetWidth;
  107. var size = Math.max(height, width);
  108. var oldTop = 0;
  109. // For browsers that don't support endsWith()
  110. if (el.style.top.indexOf('px', el.style.top.length - 2) !== -1) {
  111. oldTop = parseInt(el.style.top);
  112. }
  113. el.style.height = size + 'px';
  114. el.style.top = height / 2 - size / 2 + oldTop + 'px';
  115. }
  116. }, {
  117. key: 'render',
  118. value: function render() {
  119. var _props = this.props,
  120. show = _props.show,
  121. style = _props.style;
  122. var mergedRootStyles = (0, _simpleAssign2.default)({
  123. height: '100%',
  124. width: '100%',
  125. position: 'absolute',
  126. top: 0,
  127. left: 0
  128. }, style);
  129. var ripple = show ? this.getRippleElement(this.props) : null;
  130. return _react2.default.createElement(
  131. _ScaleIn2.default,
  132. {
  133. maxScale: 0.85,
  134. style: mergedRootStyles
  135. },
  136. ripple
  137. );
  138. }
  139. }]);
  140. return FocusRipple;
  141. }(_react.Component);
  142. FocusRipple.contextTypes = {
  143. muiTheme: _propTypes2.default.object.isRequired
  144. };
  145. FocusRipple.propTypes = process.env.NODE_ENV !== "production" ? {
  146. color: _propTypes2.default.string,
  147. innerStyle: _propTypes2.default.object,
  148. opacity: _propTypes2.default.number,
  149. show: _propTypes2.default.bool,
  150. style: _propTypes2.default.object
  151. } : {};
  152. exports.default = FocusRipple;