UNPKG

hy-checkbox

Version:

checkbox & radio ui components for react

325 lines (277 loc) 12.8 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }; var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _classnames2 = require('classnames'); var _classnames3 = _interopRequireDefault(_classnames2); var _sliderBg = require('./sliderBg'); var _sliderBg2 = _interopRequireDefault(_sliderBg); var _slidermarks = require('./slidermarks'); var _slidermarks2 = _interopRequireDefault(_slidermarks); var _until = require('./until'); var utils = _interopRequireWildcard(_until); require('./slider.less'); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } var SliderCon = function (_React$Component) { _inherits(SliderCon, _React$Component); function SliderCon(props) { _classCallCheck(this, SliderCon); var _this = _possibleConstructorReturn(this, (SliderCon.__proto__ || Object.getPrototypeOf(SliderCon)).call(this, props)); _this.onMouseDown = function (e) { if (e.button !== 0) { return; } var isVertical = _this.props.vertical; var position = utils.getMousePosition(isVertical, e); if (!utils.isEventFromHandle(e, _this.handlesRefs)) { _this.dragOffset = 0; } else { var handlePosition = utils.getHandleCenterPosition(isVertical, e.target); _this.dragOffset = position - handlePosition; position = handlePosition; } _this.onStart.bind(me, position); _this.onMouseMove.bind(me); utils.pauseEvent(e); }; _this.onTouchStart = function (e) { // if (utils.isNotTouchEvent(e)) return; var isVertical = _this.props.vertical; var position = utils.getTouchPosition(isVertical, e); if (!utils.isEventFromHandle(e, _this.handlesRefs)) { _this.dragOffset = 0; } else { var handlePosition = utils.getHandleCenterPosition(isVertical, e.target); _this.dragOffset = position - handlePosition; position = handlePosition; } _this.onStart(position); _this.addDocumentTouchEvents(); utils.pauseEvent(e); }; _this.onMouseMove = function (e) { if (!_this.sliderRef) { _this.onEnd(); return; } var position = utils.getMousePosition(_this.props.vertical, e); _this.onMove(e, position - _this.dragOffset); }; _this.onTouchMove = function (e) { if (utils.isNotTouchEvent(e) || !_this.sliderRef) { _this.onEnd(); return; } var position = utils.getTouchPosition(_this.props.vertical, e); _this.onMove(e, position - _this.dragOffset); }; _this.saveSlider = function (slider) { _this.sliderRef = slider; }; _this.handlesRefs = {}; var defaultValue = props.defaultValue !== undefined ? props.defaultValue : props.min; var value = props.value !== undefined ? props.value : defaultValue; _this.state = { value: _this.trimAlignValue(value), dragging: false }; return _this; } _createClass(SliderCon, [{ key: 'addDocumentTouchEvents', value: function addDocumentTouchEvents() { // just work for Chrome iOS Safari and Android Browser this.onTouchMoveListener = addEventListener(document, 'touchmove', this.onTouchMove); this.onTouchUpListener = addEventListener(document, 'touchend', this.onEnd); } }, { key: 'addDocumentMouseEvents', value: function addDocumentMouseEvents() { this.onMouseMoveListener = addEventListener(document, 'mousemove', this.onMouseMove); this.onMouseUpListener = addEventListener(document, 'mouseup', this.onEnd); } }, { key: 'removeDocumentEvents', value: function removeDocumentEvents() { /* eslint-disable no-unused-expressions */ this.onTouchMoveListener && this.onTouchMoveListener.remove(); this.onTouchUpListener && this.onTouchUpListener.remove(); this.onMouseMoveListener && this.onMouseMoveListener.remove(); this.onMouseUpListener && this.onMouseUpListener.remove(); /* eslint-enable no-unused-expressions */ } }, { key: 'getSliderStart', value: function getSliderStart() { var slider = this.sliderRef; var rect = slider.getBoundingClientRect(); return this.props.vertical ? rect.top : rect.left; } }, { key: 'getSliderLength', value: function getSliderLength() { var slider = this.sliderRef; if (!slider) { return 0; } return this.props.vertical ? slider.clientHeight : slider.clientWidth; } }, { key: 'calcValue', value: function calcValue(offset) { var _props = this.props, vertical = _props.vertical, min = _props.min, max = _props.max; var ratio = Math.abs(Math.max(offset, 0) / this.getSliderLength()); var value = vertical ? (1 - ratio) * (max - min) + min : ratio * (max - min) + min; return value; } }, { key: 'calcValueByPos', value: function calcValueByPos(position) { var pixelOffset = position - this.getSliderStart(); var nextValue = this.trimAlignValue(this.calcValue(pixelOffset)); return nextValue; } }, { key: 'calcOffset', value: function calcOffset(value) { var _props2 = this.props, min = _props2.min, max = _props2.max; var ratio = (value - min) / (max - min); return ratio * 100; } }, { key: 'saveHandle', value: function saveHandle(index, handle) { this.handlesRefs[index] = handle; } }, { key: 'trimAlignValue', value: function trimAlignValue(v) { var nextProps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var mergedProps = _extends({}, this.props, nextProps); var val = utils.ensureValueInRange(v, mergedProps); return utils.ensureValuePrecision(val, mergedProps); } }, { key: 'render', value: function render() { var me = this; var _props3 = this.props, vertical = _props3.vertical, maximumTrackStyle = _props3.maximumTrackStyle, min = _props3.min, max = _props3.max, step = _props3.step, marks = _props3.marks, included = _props3.included, children = _props3.children, prefixCls = _props3.prefixCls, railStyle = _props3.railStyle, trackStyle = _props3.trackStyle; var _get$call = _get(SliderCon.prototype.__proto__ || Object.getPrototypeOf(SliderCon.prototype), 'render', this).call(this), tracks = _get$call.tracks, handles = _get$call.handles; var _trackStyle = trackStyle[0] || trackStyle; var _state = this.state, value = _state.value, dragging = _state.dragging; var offset = this.calcOffset(value); return _react2.default.createElement( 'div', { className: (0, _classnames3.default)(prefixCls + '-container', _defineProperty({}, prefixCls + '-vertical', vertical)), onTouchStart: me.onTouchStart.bind(me), onMouseDown: me.onMouseDown.bind(me) }, _react2.default.createElement('div', { className: prefixCls + '-rail', style: _extends({}, maximumTrackStyle, railStyle) }), tracks, _react2.default.createElement(_sliderBg2.default, { prefixCls: prefixCls, vertical: vertical, marks: marks, dots: dots, step: step, included: included, lowerBound: this.getLowerBound(), upperBound: this.getUpperBound(), max: max, min: min }), handles, _react2.default.createElement(_slidermarks2.default, { className: prefixCls + '-mark', vertical: vertical, marks: marks, included: included, lowerBound: this.getLowerBound(), upperBound: this.getUpperBound(), max: max, min: min }), children ); } }]); return SliderCon; }(_react2.default.Component); SliderCon.propTypes = { prefixCls: _react2.default.PropTypes.string, vertical: _react2.default.PropTypes.bool, style: _react2.default.PropTypes.object, minimumTrackStyle: _react2.default.PropTypes.object, // just for compatibility, will be deperecate maximumTrackStyle: _react2.default.PropTypes.object, // just for compatibility, will be deperecate handleStyle: _react2.default.PropTypes.oneOfType([_react2.default.PropTypes.object, _react2.default.PropTypes.arrayOf(_react2.default.PropTypes.object)]), trackStyle: _react2.default.PropTypes.oneOfType([_react2.default.PropTypes.object, _react2.default.PropTypes.arrayOf(_react2.default.PropTypes.object)]), railStyle: _react2.default.PropTypes.object, dots: _react2.default.PropTypes.bool, min: _react2.default.PropTypes.number, max: _react2.default.PropTypes.number, step: _react2.default.PropTypes.number, marks: _react2.default.PropTypes.object, included: _react2.default.PropTypes.bool, className: _react2.default.PropTypes.string, disabled: _react2.default.PropTypes.bool, children: _react2.default.PropTypes.any }; SliderCon.defaultProps = { prefixCls: 'ult-slider', className: '', min: 0, max: 100, step: 1, marks: {}, handle: function handle(_ref) { var index = _ref.index, restProps = _objectWithoutProperties(_ref, ['index']); delete restProps.dragging; return _react2.default.createElement(Handle, _extends({}, restProps, { key: index })); }, // onBeforeChange: noop, // onChange: noop, // onAfterChange: noop, included: true, disabled: false, dots: false, vertical: false, trackStyle: [{}], handleStyle: [{}], railStyle: {} }; exports.default = SliderCon;