Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
 
 
 
 

242 строки
6.7 KiB

  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 _react = require('react');
  16. var _react2 = _interopRequireDefault(_react);
  17. var _propTypes = require('prop-types');
  18. var _propTypes2 = _interopRequireDefault(_propTypes);
  19. var _reactDom = require('react-dom');
  20. var _reactDom2 = _interopRequireDefault(_reactDom);
  21. var _ClockNumber = require('./ClockNumber');
  22. var _ClockNumber2 = _interopRequireDefault(_ClockNumber);
  23. var _ClockPointer = require('./ClockPointer');
  24. var _ClockPointer2 = _interopRequireDefault(_ClockPointer);
  25. var _timeUtils = require('./timeUtils');
  26. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  27. var ClockHours = function (_Component) {
  28. (0, _inherits3.default)(ClockHours, _Component);
  29. function ClockHours() {
  30. var _ref;
  31. var _temp, _this, _ret;
  32. (0, _classCallCheck3.default)(this, ClockHours);
  33. for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
  34. args[_key] = arguments[_key];
  35. }
  36. return _ret = (_temp = (_this = (0, _possibleConstructorReturn3.default)(this, (_ref = ClockHours.__proto__ || (0, _getPrototypeOf2.default)(ClockHours)).call.apply(_ref, [this].concat(args))), _this), _this.handleUp = function (event) {
  37. event.preventDefault();
  38. _this.setClock(event.nativeEvent, true);
  39. }, _this.handleMove = function (event) {
  40. event.preventDefault();
  41. if (_this.isMousePressed(event) !== 1) return;
  42. _this.setClock(event.nativeEvent, false);
  43. }, _this.handleTouchMove = function (event) {
  44. event.preventDefault();
  45. _this.setClock(event.changedTouches[0], false);
  46. }, _this.handleTouchEnd = function (event) {
  47. event.preventDefault();
  48. _this.setClock(event.changedTouches[0], true);
  49. }, _temp), (0, _possibleConstructorReturn3.default)(_this, _ret);
  50. }
  51. (0, _createClass3.default)(ClockHours, [{
  52. key: 'componentDidMount',
  53. value: function componentDidMount() {
  54. var clockElement = _reactDom2.default.findDOMNode(this.refs.mask);
  55. this.center = {
  56. x: clockElement.offsetWidth / 2,
  57. y: clockElement.offsetHeight / 2
  58. };
  59. this.basePoint = {
  60. x: this.center.x,
  61. y: 0
  62. };
  63. }
  64. }, {
  65. key: 'isMousePressed',
  66. value: function isMousePressed(event) {
  67. if (typeof event.buttons === 'undefined') {
  68. return event.nativeEvent.which;
  69. }
  70. return event.buttons;
  71. }
  72. }, {
  73. key: 'setClock',
  74. value: function setClock(event, finish) {
  75. if (typeof event.offsetX === 'undefined') {
  76. var offset = (0, _timeUtils.getTouchEventOffsetValues)(event);
  77. event.offsetX = offset.offsetX;
  78. event.offsetY = offset.offsetY;
  79. }
  80. var hours = this.getHours(event.offsetX, event.offsetY);
  81. this.props.onChange(hours, finish);
  82. }
  83. }, {
  84. key: 'getHours',
  85. value: function getHours(offsetX, offsetY) {
  86. var step = 30;
  87. var x = offsetX - this.center.x;
  88. var y = offsetY - this.center.y;
  89. var cx = this.basePoint.x - this.center.x;
  90. var cy = this.basePoint.y - this.center.y;
  91. var atan = Math.atan2(cx, cy) - Math.atan2(x, y);
  92. var deg = (0, _timeUtils.rad2deg)(atan);
  93. deg = Math.round(deg / step) * step;
  94. deg %= 360;
  95. var value = Math.floor(deg / step) || 0;
  96. var delta = Math.pow(x, 2) + Math.pow(y, 2);
  97. var distance = Math.sqrt(delta);
  98. value = value || 12;
  99. if (this.props.format === '24hr') {
  100. if (distance < 90) {
  101. value += 12;
  102. value %= 24;
  103. }
  104. } else {
  105. value %= 12;
  106. }
  107. return value;
  108. }
  109. }, {
  110. key: 'getSelected',
  111. value: function getSelected() {
  112. var hour = this.props.initialHours;
  113. if (this.props.format === 'ampm') {
  114. hour %= 12;
  115. hour = hour || 12;
  116. }
  117. return hour;
  118. }
  119. }, {
  120. key: 'getHourNumbers',
  121. value: function getHourNumbers() {
  122. var _this2 = this;
  123. var style = {
  124. pointerEvents: 'none'
  125. };
  126. var hourSize = this.props.format === 'ampm' ? 12 : 24;
  127. var hours = [];
  128. for (var i = 1; i <= hourSize; i++) {
  129. hours.push(i % 24);
  130. }
  131. return hours.map(function (hour) {
  132. var isSelected = _this2.getSelected() === hour;
  133. return _react2.default.createElement(_ClockNumber2.default, {
  134. key: hour,
  135. style: style,
  136. isSelected: isSelected,
  137. type: 'hour',
  138. value: hour
  139. });
  140. });
  141. }
  142. }, {
  143. key: 'render',
  144. value: function render() {
  145. var styles = {
  146. root: {
  147. height: '100%',
  148. width: '100%',
  149. borderRadius: '100%',
  150. position: 'relative',
  151. pointerEvents: 'none',
  152. boxSizing: 'border-box'
  153. },
  154. hitMask: {
  155. height: '100%',
  156. width: '100%',
  157. pointerEvents: 'auto'
  158. }
  159. };
  160. var prepareStyles = this.context.muiTheme.prepareStyles;
  161. var hours = this.getSelected();
  162. var numbers = this.getHourNumbers();
  163. return _react2.default.createElement(
  164. 'div',
  165. { ref: 'clock', style: prepareStyles(styles.root) },
  166. _react2.default.createElement(_ClockPointer2.default, { hasSelected: true, value: hours, type: 'hour' }),
  167. numbers,
  168. _react2.default.createElement('div', {
  169. ref: 'mask', style: prepareStyles(styles.hitMask), onTouchMove: this.handleTouchMove,
  170. onTouchEnd: this.handleTouchEnd, onMouseUp: this.handleUp, onMouseMove: this.handleMove
  171. })
  172. );
  173. }
  174. }]);
  175. return ClockHours;
  176. }(_react.Component);
  177. ClockHours.defaultProps = {
  178. initialHours: new Date().getHours(),
  179. onChange: function onChange() {},
  180. format: 'ampm'
  181. };
  182. ClockHours.contextTypes = {
  183. muiTheme: _propTypes2.default.object.isRequired
  184. };
  185. ClockHours.propTypes = process.env.NODE_ENV !== "production" ? {
  186. format: _propTypes2.default.oneOf(['ampm', '24hr']),
  187. initialHours: _propTypes2.default.number,
  188. onChange: _propTypes2.default.func
  189. } : {};
  190. exports.default = ClockHours;